BAB I PENDAHULUAN

1.1 Latar Belakang Masalah

Perkembangan teknologi informasi menyebabkan jumlah data yang tersedia semakin meningkat, sehingga diperlukan metode yang mampu mengolah data dan menghasilkan prediksi secara tepat. Salah satu pendekatan yang dapat digunakan adalah machine learning, yaitu metode yang memungkinkan komputer mempelajari pola dari data untuk melakukan klasifikasi maupun prediksi. Salah satu algoritma yang banyak digunakan dalam machine learning adalah Random Forest. Menurut Darwanto, Viarindita, dan Widyaningsih (2021), Random Forest dapat digunakan untuk melakukan klasifikasi dan membandingkan ketepatan hasil prediksi berdasarkan karakteristik data yang digunakan. Metode ini termasuk dalam teknik ensemble learning yang menggabungkan beberapa pohon keputusan (decision tree) untuk menghasilkan keputusan akhir.

Random Forest bekerja dengan membentuk sejumlah pohon keputusan melalui pengambilan sampel secara acak (bootstrap sampling) dan pemilihan variabel prediktor secara acak pada setiap proses pemisahan. Hasil prediksi dari seluruh pohon kemudian digabungkan menggunakan mekanisme voting untuk klasifikasi atau rata-rata untuk regresi. Penggabungan beberapa pohon keputusan tersebut bertujuan untuk meningkatkan kestabilan model dan mengurangi risiko overfitting. Meskipun demikian, metode Random Forest masih memiliki keterbatasan, salah satunya adalah kemungkinan terjadinya underfitting ketika pohon keputusan yang terbentuk memiliki ukuran terlalu kecil. Oleh karena itu, dikembangkan metode Double Random Forest sebagai salah satu pengembangan dari Random Forest untuk mengatasi permasalahan tersebut (Zikri, Riana, dan Laxmi,2024).

Metode Double Random Forest merupakan pengembangan dari Random Forest yang menggunakan pengacakan pada proses pembentukan pohon keputusan untuk menghasilkan model dengan kemampuan menangkap pola data yang lebih baik. Menurut Zikri, Riana, dan Laxmi (2024), Double Random Forest merupakan metode ensemble yang dapat digunakan untuk menangkap pola kompleks melalui pembentukan pohon keputusan. Penerapan kedua metode tersebut dalam praktikum ini bertujuan untuk memahami tahapan pembentukan model serta membandingkan kemampuan Random Forest dan Double Random Forest berdasarkan hasil evaluasi model. Dengan demikian, praktikum ini diharapkan dapat memberikan pemahaman mengenai perbedaan kedua metode dan mengetahui metode yang memberikan hasil pemodelan lebih baik pada data yang digunakan.

1.2 Rumusan Masalah

Berdasarkan latar belakang tersebut, rumusan masalah dalam praktikum ini adalah sebagai berikut:

  1. Bagaimana cara Random Forest dan Double Random Forest sebagai metode ensemble berbasis decision tree?
  2. Bagaimana cara mengimplementasikan Random Forest untuk klasifikasi dan regresi, serta Double Random Forest untuk klasifikasi dan regresi?
  3. Bagaimana cara mengevaluasi performa model, memahami Out-of-Bag (OOB) error, dan membandingkan Random Forest dengan Double Random Forest?

1.3 Tujuan

Tujuan yang ingin dicapai dalam praktikum ini adalah sebagai berikut:

  1. Mahasiswa dapat memahami Random Forest dan Double Random Forest sebagai metode ensemble berbasis decision tree.
  2. Mahasiswa dapat mengimplementasikan Random Forest untuk klasifikasi dan regresi, serta Double Random Forest untuk klasifikasi dan regresi.
  3. Mahasiswa dapat mengevaluasi performa model, memahami Out-of-Bag (OOB) error, dan membandingkan Random Forest dengan Double Random Forest.

BAB II TINJAUAN PUSTAKA

2.1 Random Forest

Random Forest merupakan algoritma ensemble learning yang menggabungkan sejumlah Decision Tree untuk menghasilkan prediksi akhir. Metode ini dikembangkan oleh Breiman (2001) dengan memanfaatkan pengambilan sampel secara acak (bootstrap sampling) dan pemilihan variabel prediktor secara acak pada setiap pembentukan pohon. Setiap pohon dibangun menggunakan sampel yang berbeda sehingga menghasilkan beberapa model dengan karakteristik yang beragam. Menurut Arum dkk., (2025), algoritma Random Forest dapat diterapkan untuk menyelesaikan permasalahan klasifikasi dan dibandingkan dengan algoritma pembelajaran mesin lainnya berdasarkan kinerja prediksinya.

Misalkan tersedia data latih 𝐷 = (𝑥𝑖,𝑦𝑖), 𝑖 = 1,2,…,𝑛 dan akan dibentuk 𝐵 pohon. Secara sederhana, proses Random Forest dilakukan sebagai berikut (Fransiska, 2026):

  1. Mengambil sampel bootstrap dari data latih untuk membentuk data bagi tree ke-𝑏.
  2. Pada setiap node, memilih mtry prediktor secara acak dari seluruh 𝑝 prediktor.
  3. Menentukan split terbaik hanya dari mtry prediktor yang terpilih.
  4. Menumbuhkan decision tree hingga memenuhi aturan penghentian, misalnya minimum node size.
  5. Mengulangi proses sampai diperoleh 𝐵 tree, kemudian menggabungkan prediksi seluruh tree.

Untuk klasifikasi, hasil akhir diperoleh melalui majority voting: \[\hat{G}_{RF}(x) = \operatorname{mode}\{G_1(x), G_2(x), \ldots, G_B(x)\}\]

2.2 Double Random Forest

Double Random Forest merupakan pengembangan dari metode Random Forest yang diperkenalkan oleh Han, Kim, dan Lee (2020). Metode ini termasuk dalam teknik ensemble learning yang menggunakan kumpulan pohon keputusan untuk menghasilkan prediksi. Menurut Zikri, Riana, dan Laxmi (2024), Double Random Forest mampu menangkap pola kompleks dalam data dengan memanfaatkan pohon keputusan yang dibentuk menggunakan keseluruhan data pelatihan. Metode ini dikembangkan untuk mengatasi kemungkinan underfitting pada Random Forest, yaitu kondisi ketika model belum mampu menangkap pola data secara optimal.

Perbedaan utama Double Random Forest dengan Random Forest terletak pada proses pengambilan sampel (bootstrap sampling). Pada Random Forest, pengambilan sampel bootstrap dilakukan pada awal pembentukan setiap pohon, sedangkan pada Double Random Forest, pengambilan sampel dilakukan pada setiap simpul untuk menentukan aturan pemisahan data. Setelah aturan pemisahan diperoleh, data asli pada simpul tersebut digunakan kembali untuk melanjutkan pembentukan pohon. Dengan demikian, Double Random Forest dapat membentuk pohon yang lebih besar dan beragam sehingga berpotensi meningkatkan kemampuan model dalam menangkap pola data.

Secara sederhana, proses Double Random Forest dilakukan sebagai berikut (Fransiska, 2026):

  1. Memulai setiap tree dengan seluruh data training, bukan satu bootstrap sample untuk seluruh tree.
  2. Pada node yang sedang diproses, mengambil bootstrap sample dari observasi yang mencapai node tersebut.
  3. Memilih mtry prediktor secara acak dan mencari split terbaik menggunakan bootstrap sample pada node.
  4. Setelah split terbaik ditemukan, bootstrap sample tidak diteruskan. Split tersebut diterapkan kembali pada data asli yang mencapai node, kemudian observasi asli dikirim ke child nodes.
  5. Mengulangi proses pada node berikutnya sampai aturan penghentian tercapai, lalu mengulangi untuk seluruh tree.
  6. Menggabungkan prediksi seluruh tree. Pada klasifikasi, hasil akhir diperoleh melalui majority voting, sedangkan pada regresi prediksi akhir diperoleh dengan merataratakan prediksi seluruh tree.

2.3 Out-of-Bag (OOB) Error

Pada bootstrap berukuran 𝑛 yang diambil dengan pengembalian dari 𝑛 observasi, sebagian observasi dapat terambil lebih dari sekali dan sebagian lainnya tidak terambil. Secara rata-rata, proporsi observasi unik yang masuk ke satu bootstrap sampel mendekati 1 − 𝑒⁻¹ ≈ 0,632. Artinya, sekitar 36,8% observasi tidak digunakan untuk membentuk tree tertentu dan disebut Out-of-Bag (OOB) observations.

Untuk setiap observasi, prediksi OOB diperoleh hanya dari tree-tree yang tidak menggunakan observasi tersebut ketika dibentuk. Prediksi ini dapat digunakan untuk menghitung OOB prediction error sebagai ukuran evaluasi internal Random Forest. Pada ranger, OOB error dihitung secara otomatis secara default. Untuk klasifikasi, prediction.error menyatakan proporsi salah klasifikasi OOB, sedangkan untuk regresi menyatakan OOB Mean Squared Error (MSE) (Fransiska, 2026).

BAB III METODE PENELITIAN

3.1 Sumber Data

Jenis data yang digunakan dalam praktikum ini adalah data kategorik. Data kategorik adalah tipe data yang merepresentasikan karakteristik atau atribut dari objek yang diklasifikasikan ke dalam kategori tertentu. Sumber data yang digunakan merupakan data sekunder, yaitu data yang telah tersedia dan diperoleh melalui sumber yang sudah ada. Data yang digunakan adalah dataset BreastCancer dari package mlbench pada program R.

3.2 Variabel Penelitian

Variabel penelitian adalah segala sesuatu yang menjadi objek pengamatan dalam suatu penelitian. Variabel penelitian yang digunakan berasal dari dataset BreastCancer dengan jumlah 699 observasi dan 11 variabel. Variabel Class digunakan sebagai variabel respons dengan kategori benign dan malignant, sedangkan sembilan variabel prediktor yang digunakan adalah Clump Thickness, Uniformity of Cell Size, Uniformity of Cell Shape, Marginal Adhesion, Single Epithelial Cell Size, Bare Nuclei, Bland Chromatin, Normal Nucleoli dan Mitoses. Variabel Sample code number tidak digunakan dalam pemodelan karena hany berfungsi sebagai identitas sampel.

3.3 Langkah-langkah Analisis

Berikut langkah-langkah analisis data pada penelitian ini:

  1. Menyiapkan dataset BreastCancer dan melakukan pembersihan data.
  2. Membagi data menjadi 70% data training dan 30% data testing.
  3. Menentukan kombinasi parameter mtry (2, 3, 5) dan num.trees (200, 500, 1000).
  4. Membangun model Random Forest berdasarkan kombinasi parameter.
  5. Melakukan evaluasi model menggunakan OOB Error dan confusion matrix pada data training.
  6. Melakukan prediksi terhadap data testing menggunakan seluruh model.
  7. Mengevaluasi hasil prediksi berdasarkan nilai accuracy, sensitivity, specificity, precision, dan F1-score.
  8. Menganalisis variable importance untuk mengetahui variabel yang paling berpengaruh dalam klasifikasi.
  9. Membandingkan hasil evaluasi untuk menentukan model Random Forest terbaik dan menarik kesimpulan.

BAB IV HASIL DAN PEMBAHASAN

4.1 Library

Library yang digunakan pada praktikum ini adalah ranger, mlbench, dan caret. package mlbench menyediakan dataset BreastCancer yang digunakan dalam analisis klasifikasi.

library(ranger)
library(mlbench)
library(caret)
## Loading required package: ggplot2
## Loading required package: lattice
data(BreastCancer, package = "mlbench")
bc <- BreastCancer
str(bc)
## 'data.frame':    699 obs. of  11 variables:
##  $ Id             : chr  "1000025" "1002945" "1015425" "1016277" ...
##  $ Cl.thickness   : Ord.factor w/ 10 levels "1"<"2"<"3"<"4"<..: 5 5 3 6 4 8 1 2 2 4 ...
##  $ Cell.size      : Ord.factor w/ 10 levels "1"<"2"<"3"<"4"<..: 1 4 1 8 1 10 1 1 1 2 ...
##  $ Cell.shape     : Ord.factor w/ 10 levels "1"<"2"<"3"<"4"<..: 1 4 1 8 1 10 1 2 1 1 ...
##  $ Marg.adhesion  : Ord.factor w/ 10 levels "1"<"2"<"3"<"4"<..: 1 5 1 1 3 8 1 1 1 1 ...
##  $ Epith.c.size   : Ord.factor w/ 10 levels "1"<"2"<"3"<"4"<..: 2 7 2 3 2 7 2 2 2 2 ...
##  $ Bare.nuclei    : Factor w/ 10 levels "1","2","3","4",..: 1 10 2 4 1 10 10 1 1 1 ...
##  $ Bl.cromatin    : Factor w/ 10 levels "1","2","3","4",..: 3 3 3 3 3 9 3 3 1 2 ...
##  $ Normal.nucleoli: Factor w/ 10 levels "1","2","3","4",..: 1 2 1 7 1 7 1 1 1 1 ...
##  $ Mitoses        : Factor w/ 9 levels "1","2","3","4",..: 1 1 1 1 1 1 1 1 5 1 ...
##  $ Class          : Factor w/ 2 levels "benign","malignant": 1 1 1 1 1 2 1 1 1 1 ...
summary(bc)
##          Id       Cl.thickness   Cell.size     Cell.shape  Marg.adhesion
##  Length   :699   1      :145   1      :384   1      :353   1      :407  
##  N.unique :645   5      :130   10     : 67   2      : 59   2      : 58  
##  N.blank  :  0   3      :108   3      : 52   10     : 58   3      : 58  
##  Min.nchar:  5   4      : 80   2      : 45   3      : 56   10     : 55  
##  Max.nchar:  8   10     : 69   4      : 40   4      : 44   4      : 33  
##                  2      : 50   5      : 30   5      : 34   8      : 25  
##                  (Other):117   (Other): 81   (Other): 95   (Other): 63  
##   Epith.c.size  Bare.nuclei   Bl.cromatin  Normal.nucleoli    Mitoses   
##  2      :386   1      :402   2      :166   1      :443     1      :579  
##  3      : 72   10     :132   3      :165   10     : 61     2      : 35  
##  4      : 48   2      : 30   1      :152   3      : 44     3      : 33  
##  1      : 47   5      : 30   7      : 73   2      : 36     10     : 14  
##  6      : 41   3      : 28   4      : 40   8      : 24     4      : 12  
##  5      : 39   (Other): 61   5      : 34   6      : 22     7      :  9  
##  (Other): 66   NAs    : 16   (Other): 69   (Other): 69     (Other): 17  
##        Class    
##  benign   :458  
##  malignant:241  
##                 
##                 
##                 
##                 
## 

Berdasarkan output str() dan summary(), dataset BreastCancer terdiri atas 699 observasi dan 11 variabel. Variabel Id berfungsi sebagai identitas, sembilan variabel lainnya merupakan prediktor yang menggambarkan karakteristik sel, sedangkan Class merupakan variabel target dengan dua kategori, yaitu benign dan malignant. Berdasarkan ringkasan data, terdapat 16 missing value pada variabel Bare.nuclei yang perlu ditangani sebelum pemodelan. Variabel Class terdiri atas 458 observasi benign (65,52%) dan 241 observasi malignant (34,48%).

4.2 Persiapan data

#Persiapan data
bc$Id <- NULL
bc <- na.omit(bc)
bc$Class <- droplevels(as.factor(bc$Class))

# Membagi data training dan testing
set.seed(234)

idx.cls <- createDataPartition(
  bc$Class,
  p = 0.70,
  list = FALSE
)

bc.train <- bc[idx.cls, ]
bc.test  <- bc[-idx.cls, ]

# Melihat jumlah data
dim(bc.train)
## [1] 479  10
dim(bc.test)
## [1] 204  10
table(bc.train$Class)
## 
##    benign malignant 
##       311       168
table(bc.test$Class)
## 
##    benign malignant 
##       133        71

Berdasarkan hasil pembagian data, diperoleh 479 data training (70%) dan 204 data testing (30%). Data training terdiri atas 311 kelas benign dan 168 kelas malignant, sedangkan data testing terdiri atas 133 kelas benign dan 71 kelas malignant. Hasil tersebut menunjukkan bahwa kedua kelompok data memiliki distribusi kelas yang cenderung serupa dan selanjutnya digunakan untuk pembentukan serta evaluasi model Random Forest Classification.

4.3 Model Random Forest

# Menentukan kombinasi parameter
kombinasi <- expand.grid(
  mtry = c(2, 3, 5),
  num.trees = c(200, 500, 1000)
)
kombinasi
##   mtry num.trees
## 1    2       200
## 2    3       200
## 3    5       200
## 4    2       500
## 5    3       500
## 6    5       500
## 7    2      1000
## 8    3      1000
## 9    5      1000
# Menyiapkan penyimpanan model
hasil.model <- list()

# Perulangan untuk 9 kombinasi model
for (i in 1:nrow(kombinasi)) {

  set.seed(234)

  rf <- ranger(
    Class ~ .,
    data = bc.train,
    num.trees = kombinasi$num.trees[i],
    mtry = kombinasi$mtry[i],
    min.node.size = 1,
    replace = TRUE,
    sample.fraction = 1,
    importance = "permutation",
    seed = 234
  )

  # Menyimpan model
  nama.model <- paste0(
    "mtry_", kombinasi$mtry[i],
    "_trees_", kombinasi$num.trees[i]
  )

  hasil.model[[nama.model]] <- rf

  # Menampilkan hasil pembentukan model
  cat("\n===============================================\n")
  cat("MODEL:", nama.model, "\n")
  cat("===============================================\n")

  print(rf)
}
## 
## ===============================================
## MODEL: mtry_2_trees_200 
## ===============================================
## Ranger result
## 
## Call:
##  ranger(Class ~ ., data = bc.train, num.trees = kombinasi$num.trees[i],      mtry = kombinasi$mtry[i], min.node.size = 1, replace = TRUE,      sample.fraction = 1, importance = "permutation", seed = 234) 
## 
## Type:                             Classification 
## Number of trees:                  200 
## Sample size:                      479 
## Number of independent variables:  9 
## Mtry:                             2 
## Target node size:                 1 
## Variable importance mode:         permutation 
## Splitrule:                        gini 
## OOB prediction error:             2.92 % 
## 
## ===============================================
## MODEL: mtry_3_trees_200 
## ===============================================
## Ranger result
## 
## Call:
##  ranger(Class ~ ., data = bc.train, num.trees = kombinasi$num.trees[i],      mtry = kombinasi$mtry[i], min.node.size = 1, replace = TRUE,      sample.fraction = 1, importance = "permutation", seed = 234) 
## 
## Type:                             Classification 
## Number of trees:                  200 
## Sample size:                      479 
## Number of independent variables:  9 
## Mtry:                             3 
## Target node size:                 1 
## Variable importance mode:         permutation 
## Splitrule:                        gini 
## OOB prediction error:             2.71 % 
## 
## ===============================================
## MODEL: mtry_5_trees_200 
## ===============================================
## Ranger result
## 
## Call:
##  ranger(Class ~ ., data = bc.train, num.trees = kombinasi$num.trees[i],      mtry = kombinasi$mtry[i], min.node.size = 1, replace = TRUE,      sample.fraction = 1, importance = "permutation", seed = 234) 
## 
## Type:                             Classification 
## Number of trees:                  200 
## Sample size:                      479 
## Number of independent variables:  9 
## Mtry:                             5 
## Target node size:                 1 
## Variable importance mode:         permutation 
## Splitrule:                        gini 
## OOB prediction error:             2.92 % 
## 
## ===============================================
## MODEL: mtry_2_trees_500 
## ===============================================
## Ranger result
## 
## Call:
##  ranger(Class ~ ., data = bc.train, num.trees = kombinasi$num.trees[i],      mtry = kombinasi$mtry[i], min.node.size = 1, replace = TRUE,      sample.fraction = 1, importance = "permutation", seed = 234) 
## 
## Type:                             Classification 
## Number of trees:                  500 
## Sample size:                      479 
## Number of independent variables:  9 
## Mtry:                             2 
## Target node size:                 1 
## Variable importance mode:         permutation 
## Splitrule:                        gini 
## OOB prediction error:             2.92 % 
## 
## ===============================================
## MODEL: mtry_3_trees_500 
## ===============================================
## Ranger result
## 
## Call:
##  ranger(Class ~ ., data = bc.train, num.trees = kombinasi$num.trees[i],      mtry = kombinasi$mtry[i], min.node.size = 1, replace = TRUE,      sample.fraction = 1, importance = "permutation", seed = 234) 
## 
## Type:                             Classification 
## Number of trees:                  500 
## Sample size:                      479 
## Number of independent variables:  9 
## Mtry:                             3 
## Target node size:                 1 
## Variable importance mode:         permutation 
## Splitrule:                        gini 
## OOB prediction error:             2.92 % 
## 
## ===============================================
## MODEL: mtry_5_trees_500 
## ===============================================
## Ranger result
## 
## Call:
##  ranger(Class ~ ., data = bc.train, num.trees = kombinasi$num.trees[i],      mtry = kombinasi$mtry[i], min.node.size = 1, replace = TRUE,      sample.fraction = 1, importance = "permutation", seed = 234) 
## 
## Type:                             Classification 
## Number of trees:                  500 
## Sample size:                      479 
## Number of independent variables:  9 
## Mtry:                             5 
## Target node size:                 1 
## Variable importance mode:         permutation 
## Splitrule:                        gini 
## OOB prediction error:             2.92 % 
## 
## ===============================================
## MODEL: mtry_2_trees_1000 
## ===============================================
## Ranger result
## 
## Call:
##  ranger(Class ~ ., data = bc.train, num.trees = kombinasi$num.trees[i],      mtry = kombinasi$mtry[i], min.node.size = 1, replace = TRUE,      sample.fraction = 1, importance = "permutation", seed = 234) 
## 
## Type:                             Classification 
## Number of trees:                  1000 
## Sample size:                      479 
## Number of independent variables:  9 
## Mtry:                             2 
## Target node size:                 1 
## Variable importance mode:         permutation 
## Splitrule:                        gini 
## OOB prediction error:             2.92 % 
## 
## ===============================================
## MODEL: mtry_3_trees_1000 
## ===============================================
## Ranger result
## 
## Call:
##  ranger(Class ~ ., data = bc.train, num.trees = kombinasi$num.trees[i],      mtry = kombinasi$mtry[i], min.node.size = 1, replace = TRUE,      sample.fraction = 1, importance = "permutation", seed = 234) 
## 
## Type:                             Classification 
## Number of trees:                  1000 
## Sample size:                      479 
## Number of independent variables:  9 
## Mtry:                             3 
## Target node size:                 1 
## Variable importance mode:         permutation 
## Splitrule:                        gini 
## OOB prediction error:             2.71 % 
## 
## ===============================================
## MODEL: mtry_5_trees_1000 
## ===============================================
## Ranger result
## 
## Call:
##  ranger(Class ~ ., data = bc.train, num.trees = kombinasi$num.trees[i],      mtry = kombinasi$mtry[i], min.node.size = 1, replace = TRUE,      sample.fraction = 1, importance = "permutation", seed = 234) 
## 
## Type:                             Classification 
## Number of trees:                  1000 
## Sample size:                      479 
## Number of independent variables:  9 
## Mtry:                             5 
## Target node size:                 1 
## Variable importance mode:         permutation 
## Splitrule:                        gini 
## OOB prediction error:             2.71 %

4.4 Evaluasi OOB

oob <- rf$prediction.error
oob
## [1] 0.02713987
rf$confusion.matrix
##            predicted
## true        benign malignant
##   benign       303         8
##   malignant      5       163
head(rf$predictions)
## [1] benign    benign    malignant malignant benign    benign   
## Levels: benign malignant

Berdasarkan hasil evaluasi OOB, diperoleh nilai OOB Error sebesar 2,71%, yang menunjukkan tingkat kesalahan prediksi model cenderung rendah. Berdasarkan confusion matrix, sebanyak 303 data benign dan 163 data malignant berhasil diklasifikasikan dengan benar, sedangkan 8 data benign dan 5 data malignant mengalami kesalahan klasifikasi. Dengan demikian, model menghasilkan 466 prediksi benar dari 479 data training, sehingga menunjukkan kemampuan klasifikasi yang baik.

4.5 Prediksi data testing

hasil.prediksi <- data.frame(
  Aktual = bc.test$Class
)

# Melakukan prediksi menggunakan seluruh model
for (nama.model in names(hasil.model)) {

  rf <- hasil.model[[nama.model]]

  # Prediksi data testing
  prediksi <- predict(rf, data = bc.test)$predictions

  # Menyamakan level faktor
  prediksi <- factor(
    prediksi,
    levels = levels(bc.test$Class)
  )

  # Menyimpan hasil prediksi
  hasil.prediksi[[nama.model]] <- prediksi
}

# Menampilkan hasil prediksi
head(hasil.prediksi, 10)
##       Aktual mtry_2_trees_200 mtry_3_trees_200 mtry_5_trees_200
## 1     benign        malignant        malignant        malignant
## 2     benign           benign           benign           benign
## 3     benign           benign           benign        malignant
## 4     benign           benign           benign           benign
## 5     benign           benign           benign           benign
## 6  malignant        malignant        malignant        malignant
## 7     benign           benign           benign           benign
## 8     benign           benign           benign           benign
## 9     benign           benign           benign           benign
## 10 malignant        malignant        malignant        malignant
##    mtry_2_trees_500 mtry_3_trees_500 mtry_5_trees_500 mtry_2_trees_1000
## 1         malignant        malignant        malignant         malignant
## 2            benign           benign           benign            benign
## 3            benign           benign        malignant            benign
## 4            benign           benign           benign            benign
## 5            benign           benign           benign            benign
## 6         malignant        malignant        malignant         malignant
## 7            benign           benign           benign            benign
## 8            benign           benign           benign            benign
## 9            benign           benign           benign            benign
## 10        malignant        malignant        malignant         malignant
##    mtry_3_trees_1000 mtry_5_trees_1000
## 1          malignant         malignant
## 2             benign            benign
## 3             benign         malignant
## 4             benign            benign
## 5             benign            benign
## 6          malignant         malignant
## 7             benign            benign
## 8             benign            benign
## 9             benign            benign
## 10         malignant         malignant

Berdasarkan hasil prediksi data testing, dapat dilihat bahwa hasil prediksi dari sembilan model Random Forest pada 10 data testing pertama sebagian besar telah sesuai dengan kelas aktual. Meskipun demikian, masih terdapat beberapa pengamatan yang mengalami kesalahan klasifikasi, yaitu ketika hasil prediksi berbeda dari kelas sebenarnya. Perbedaan tersebut menunjukkan bahwa setiap kombinasi parameter mtry dan num.trees dapat menghasilkan hasil prediksi yang berbeda. Selanjutnya, kinerja masing-masing model dievaluasi menggunakan confusion matrix untuk mengetahui tingkat ketepatan klasifikasi pada seluruh data testing.

4.6 Confusion Matrix

hasil.confusion <- list()

# Menghitung Confusion Matrix setiap model
for (nama.model in names(hasil.model)) {

  # Mengambil hasil prediksi
  prediksi <- hasil.prediksi[[nama.model]]

  # Menghitung Confusion Matrix
  cm <- confusionMatrix(
    data = prediksi,
    reference = bc.test$Class,
    positive = "malignant"
  )

  # Menyimpan hasil
  hasil.confusion[[nama.model]] <- cm

  # Menampilkan hasil Confusion Matrix
  cat("\n====================================\n")
  cat("Model:", nama.model, "\n")
  cat("====================================\n")
  print(cm)
}
## 
## ====================================
## Model: mtry_2_trees_200 
## ====================================
## Confusion Matrix and Statistics
## 
##            Reference
## Prediction  benign malignant
##   benign       130         1
##   malignant      3        70
##                                           
##                Accuracy : 0.9804          
##                  95% CI : (0.9506, 0.9946)
##     No Information Rate : 0.652           
##     P-Value [Acc > NIR] : <2e-16          
##                                           
##                   Kappa : 0.9571          
##                                           
##  Mcnemar's Test P-Value : 0.6171          
##                                           
##             Sensitivity : 0.9859          
##             Specificity : 0.9774          
##          Pos Pred Value : 0.9589          
##          Neg Pred Value : 0.9924          
##              Prevalence : 0.3480          
##          Detection Rate : 0.3431          
##    Detection Prevalence : 0.3578          
##       Balanced Accuracy : 0.9817          
##                                           
##        'Positive' Class : malignant       
##                                           
## 
## ====================================
## Model: mtry_3_trees_200 
## ====================================
## Confusion Matrix and Statistics
## 
##            Reference
## Prediction  benign malignant
##   benign       130         3
##   malignant      3        68
##                                           
##                Accuracy : 0.9706          
##                  95% CI : (0.9371, 0.9891)
##     No Information Rate : 0.652           
##     P-Value [Acc > NIR] : <2e-16          
##                                           
##                   Kappa : 0.9352          
##                                           
##  Mcnemar's Test P-Value : 1               
##                                           
##             Sensitivity : 0.9577          
##             Specificity : 0.9774          
##          Pos Pred Value : 0.9577          
##          Neg Pred Value : 0.9774          
##              Prevalence : 0.3480          
##          Detection Rate : 0.3333          
##    Detection Prevalence : 0.3480          
##       Balanced Accuracy : 0.9676          
##                                           
##        'Positive' Class : malignant       
##                                           
## 
## ====================================
## Model: mtry_5_trees_200 
## ====================================
## Confusion Matrix and Statistics
## 
##            Reference
## Prediction  benign malignant
##   benign       129         4
##   malignant      4        67
##                                           
##                Accuracy : 0.9608          
##                  95% CI : (0.9242, 0.9829)
##     No Information Rate : 0.652           
##     P-Value [Acc > NIR] : <2e-16          
##                                           
##                   Kappa : 0.9136          
##                                           
##  Mcnemar's Test P-Value : 1               
##                                           
##             Sensitivity : 0.9437          
##             Specificity : 0.9699          
##          Pos Pred Value : 0.9437          
##          Neg Pred Value : 0.9699          
##              Prevalence : 0.3480          
##          Detection Rate : 0.3284          
##    Detection Prevalence : 0.3480          
##       Balanced Accuracy : 0.9568          
##                                           
##        'Positive' Class : malignant       
##                                           
## 
## ====================================
## Model: mtry_2_trees_500 
## ====================================
## Confusion Matrix and Statistics
## 
##            Reference
## Prediction  benign malignant
##   benign       129         1
##   malignant      4        70
##                                          
##                Accuracy : 0.9755         
##                  95% CI : (0.9437, 0.992)
##     No Information Rate : 0.652          
##     P-Value [Acc > NIR] : <2e-16         
##                                          
##                   Kappa : 0.9465         
##                                          
##  Mcnemar's Test P-Value : 0.3711         
##                                          
##             Sensitivity : 0.9859         
##             Specificity : 0.9699         
##          Pos Pred Value : 0.9459         
##          Neg Pred Value : 0.9923         
##              Prevalence : 0.3480         
##          Detection Rate : 0.3431         
##    Detection Prevalence : 0.3627         
##       Balanced Accuracy : 0.9779         
##                                          
##        'Positive' Class : malignant      
##                                          
## 
## ====================================
## Model: mtry_3_trees_500 
## ====================================
## Confusion Matrix and Statistics
## 
##            Reference
## Prediction  benign malignant
##   benign       130         3
##   malignant      3        68
##                                           
##                Accuracy : 0.9706          
##                  95% CI : (0.9371, 0.9891)
##     No Information Rate : 0.652           
##     P-Value [Acc > NIR] : <2e-16          
##                                           
##                   Kappa : 0.9352          
##                                           
##  Mcnemar's Test P-Value : 1               
##                                           
##             Sensitivity : 0.9577          
##             Specificity : 0.9774          
##          Pos Pred Value : 0.9577          
##          Neg Pred Value : 0.9774          
##              Prevalence : 0.3480          
##          Detection Rate : 0.3333          
##    Detection Prevalence : 0.3480          
##       Balanced Accuracy : 0.9676          
##                                           
##        'Positive' Class : malignant       
##                                           
## 
## ====================================
## Model: mtry_5_trees_500 
## ====================================
## Confusion Matrix and Statistics
## 
##            Reference
## Prediction  benign malignant
##   benign       129         4
##   malignant      4        67
##                                           
##                Accuracy : 0.9608          
##                  95% CI : (0.9242, 0.9829)
##     No Information Rate : 0.652           
##     P-Value [Acc > NIR] : <2e-16          
##                                           
##                   Kappa : 0.9136          
##                                           
##  Mcnemar's Test P-Value : 1               
##                                           
##             Sensitivity : 0.9437          
##             Specificity : 0.9699          
##          Pos Pred Value : 0.9437          
##          Neg Pred Value : 0.9699          
##              Prevalence : 0.3480          
##          Detection Rate : 0.3284          
##    Detection Prevalence : 0.3480          
##       Balanced Accuracy : 0.9568          
##                                           
##        'Positive' Class : malignant       
##                                           
## 
## ====================================
## Model: mtry_2_trees_1000 
## ====================================
## Confusion Matrix and Statistics
## 
##            Reference
## Prediction  benign malignant
##   benign       129         2
##   malignant      4        69
##                                           
##                Accuracy : 0.9706          
##                  95% CI : (0.9371, 0.9891)
##     No Information Rate : 0.652           
##     P-Value [Acc > NIR] : <2e-16          
##                                           
##                   Kappa : 0.9356          
##                                           
##  Mcnemar's Test P-Value : 0.6831          
##                                           
##             Sensitivity : 0.9718          
##             Specificity : 0.9699          
##          Pos Pred Value : 0.9452          
##          Neg Pred Value : 0.9847          
##              Prevalence : 0.3480          
##          Detection Rate : 0.3382          
##    Detection Prevalence : 0.3578          
##       Balanced Accuracy : 0.9709          
##                                           
##        'Positive' Class : malignant       
##                                           
## 
## ====================================
## Model: mtry_3_trees_1000 
## ====================================
## Confusion Matrix and Statistics
## 
##            Reference
## Prediction  benign malignant
##   benign       129         3
##   malignant      4        68
##                                           
##                Accuracy : 0.9657          
##                  95% CI : (0.9306, 0.9861)
##     No Information Rate : 0.652           
##     P-Value [Acc > NIR] : <2e-16          
##                                           
##                   Kappa : 0.9246          
##                                           
##  Mcnemar's Test P-Value : 1               
##                                           
##             Sensitivity : 0.9577          
##             Specificity : 0.9699          
##          Pos Pred Value : 0.9444          
##          Neg Pred Value : 0.9773          
##              Prevalence : 0.3480          
##          Detection Rate : 0.3333          
##    Detection Prevalence : 0.3529          
##       Balanced Accuracy : 0.9638          
##                                           
##        'Positive' Class : malignant       
##                                           
## 
## ====================================
## Model: mtry_5_trees_1000 
## ====================================
## Confusion Matrix and Statistics
## 
##            Reference
## Prediction  benign malignant
##   benign       129         5
##   malignant      4        66
##                                           
##                Accuracy : 0.9559          
##                  95% CI : (0.9179, 0.9796)
##     No Information Rate : 0.652           
##     P-Value [Acc > NIR] : <2e-16          
##                                           
##                   Kappa : 0.9025          
##                                           
##  Mcnemar's Test P-Value : 1               
##                                           
##             Sensitivity : 0.9296          
##             Specificity : 0.9699          
##          Pos Pred Value : 0.9429          
##          Neg Pred Value : 0.9627          
##              Prevalence : 0.3480          
##          Detection Rate : 0.3235          
##    Detection Prevalence : 0.3431          
##       Balanced Accuracy : 0.9498          
##                                           
##        'Positive' Class : malignant       
## 
  1. Model mtry = 2 dan num.trees = 200

Model menghasilkan nilai accuracy sebesar 98,04%, sensitivity sebesar 98,59%, dan specificity sebesar 97,74%. Dari 204 data testing, sebanyak 130 data benign dan 70 data malignant berhasil diklasifikasikan dengan benar. Sementara itu, terdapat 3 data benign yang salah diklasifikasikan sebagai malignant dan 1 data malignant yang salah diklasifikasikan sebagai benign. Model ini menunjukkan hasil klasifikasi terbaik dibandingkan kombinasi lainnya.

  1. Model mtry = 3 dan num.trees = 200

Model menghasilkan accuracy sebesar 97,55%, sensitivity sebesar 97,18%, dan specificity sebesar 97,74%. Sebanyak 130 data benign dan 69 data malignant berhasil diklasifikasikan dengan benar. Terdapat 3 data benign yang salah diklasifikasikan sebagai malignant dan 2 data malignant yang salah diklasifikasikan sebagai benign. Hasil tersebut menunjukkan bahwa model memiliki kemampuan klasifikasi yang sangat baik.

  1. Model mtry = 5 dan num.trees = 200

Model menghasilkan accuracy sebesar 96,08%, sensitivity sebesar 94,37%, dan specificity sebesar 96,99%. Sebanyak 129 data benign dan 67 data malignant berhasil diklasifikasikan dengan benar. Sementara itu, terdapat 4 kesalahan klasifikasi pada masing-masing kelas, yaitu 4 data benign diprediksi sebagai malignant dan 4 data malignant diprediksi sebagai benign. Hasil ini menunjukkan bahwa kemampuan klasifikasi model lebih rendah dibandingkan dua kombinasi sebelumnya.

  1. Model mtry = 2 dan num.trees = 500

Model menghasilkan accuracy sebesar 97,55%, sensitivity sebesar 98,59%, dan specificity sebesar 96,99%. Sebanyak 129 data benign dan 70 data malignant berhasil diklasifikasikan dengan benar. Terdapat 4 data benign yang salah diklasifikasikan sebagai malignant dan 1 data malignant yang salah diklasifikasikan sebagai benign. Model ini memiliki kemampuan yang sangat baik dalam mendeteksi kelas malignant.

  1. Model mtry = 3 dan num.trees = 500

Model menghasilkan accuracy sebesar 97,06%, sensitivity sebesar 95,77%, dan specificity sebesar 97,74%. Sebanyak 130 data benign dan 68 data malignant berhasil diklasifikasikan dengan benar. Sementara itu, terdapat 3 data benign yang salah diklasifikasikan sebagai malignant dan 3 data malignant yang salah diklasifikasikan sebagai benign. Hasil tersebut menunjukkan bahwa model memiliki kemampuan klasifikasi yang baik, meskipun masih terdapat enam kesalahan prediksi.

  1. Model mtry = 5 dan num.trees = 500

Model menghasilkan accuracy sebesar 96,08%, sensitivity sebesar 94,37%, dan specificity sebesar 96,99%. Sebanyak 129 data benign dan 67 data malignant berhasil diklasifikasikan dengan benar. Terdapat 4 data benign yang salah diklasifikasikan sebagai malignant dan 4 data malignant yang salah diklasifikasikan sebagai benign. Hasil ini sama dengan model kombinasi mtry = 5 dan num.trees = 200, sehingga peningkatan jumlah pohon dari 200 menjadi 500 belum memberikan perubahan hasil klasifikasi.

  1. Model mtry = 2 dan num.trees = 1000

Model menghasilkan accuracy sebesar 97,06%, sensitivity sebesar 97,18%, dan specificity sebesar 96,99%. Sebanyak 129 data benign dan 69 data malignant berhasil diklasifikasikan dengan benar. Sementara itu, terdapat 4 data benign yang salah diklasifikasikan sebagai malignant dan 2 data malignant yang salah diklasifikasikan sebagai benign. Hasil tersebut menunjukkan bahwa model memiliki kemampuan klasifikasi yang baik, tetapi belum melampaui performa kombinasi mtry = 2 dan num.trees = 200.

  1. Model mtry = 3 dan num.trees = 1000

Model menghasilkan accuracy sebesar 96,57%, sensitivity sebesar 95,77%, dan specificity sebesar 96,99%. Sebanyak 129 data benign dan 68 data malignant berhasil diklasifikasikan dengan benar. Terdapat 4 data benign yang salah diklasifikasikan sebagai malignant dan 3 data malignant yang salah diklasifikasikan sebagai benign. Hasil ini menunjukkan bahwa model memiliki kemampuan klasifikasi yang baik, tetapi performanya lebih rendah dibandingkan kombinasi mtry = 3 dan num.trees = 200.

  1. Model mtry = 5 dan num.trees = 1000

Model menghasilkan accuracy sebesar 95,59%, sensitivity sebesarv92,96%, dan specificity sebesar 96,99%. Sebanyak 129 data benign dan 66 data malignant berhasil diklasifikasikan dengan benar. Sementara itu, terdapat 4 data benign yang salah diklasifikasikan sebagaivmalignant dan 5 data malignant yang salah diklasifikasikan sebagaivbenign. Model ini menghasilkan accuracy terendah dibandingkan delapan kombinasi lainnya.

Berdasarkan hasil evaluasi dari sembilan kombinasi model Random Forest, model terbaik adalah model dengan mtry = 2 dan num.trees = 200. Model tersebut menghasilkan nilai accuracy tertinggi sebesar 98,04%, sensitivity sebesar 98,59%, dan specificity sebesar 97,74%. Dari 204 data testing, sebanyak 200 data berhasil diklasifikasikan dengan benar, sedangkan hanya 4 data yang mengalami kesalahan klasifikasi, terdiri atas 3 data benign yang diprediksi sebagai malignant dan 1 data malignant yang diprediksi sebagai benign. Selain itu, model ini juga memiliki kemampuan yang sangat baik dalam mendeteksi kelas malignant, sebagaimana ditunjukkan oleh nilai sensitivity sebesar 98,59%. Dengan demikian, kombinasi parameter mtry = 2 dan num.trees = 200 dipilih sebagai model terbaik karena menghasilkan tingkat ketepatan klasifikasi tertinggi dibandingkan delapan kombinasi model lainnya pada data testing.

4.7 Variable Importance

importance.semua <- data.frame()
for (nama.model in names(hasil.model)) {

  rf <- hasil.model[[nama.model]]

  imp <- sort(
    rf$variable.importance,
    decreasing = TRUE
  )

  temp <- data.frame(
    Variabel = names(imp),
    Importance = as.numeric(imp),
    Model = nama.model
  )

  importance.semua <- rbind(
    importance.semua,
    temp
  )
}
importance.semua
##           Variabel  Importance             Model
## 1      Bare.nuclei 0.083924522  mtry_2_trees_200
## 2        Cell.size 0.078718154  mtry_2_trees_200
## 3       Cell.shape 0.060967868  mtry_2_trees_200
## 4     Cl.thickness 0.024489152  mtry_2_trees_200
## 5      Bl.cromatin 0.021478062  mtry_2_trees_200
## 6  Normal.nucleoli 0.020446839  mtry_2_trees_200
## 7    Marg.adhesion 0.019251533  mtry_2_trees_200
## 8     Epith.c.size 0.011737675  mtry_2_trees_200
## 9          Mitoses 0.003751688  mtry_2_trees_200
## 10     Bare.nuclei 0.097215967  mtry_3_trees_200
## 11       Cell.size 0.091653406  mtry_3_trees_200
## 12      Cell.shape 0.062810795  mtry_3_trees_200
## 13    Cl.thickness 0.027788431  mtry_3_trees_200
## 14   Marg.adhesion 0.019128466  mtry_3_trees_200
## 15     Bl.cromatin 0.017950453  mtry_3_trees_200
## 16 Normal.nucleoli 0.015967442  mtry_3_trees_200
## 17    Epith.c.size 0.009877622  mtry_3_trees_200
## 18         Mitoses 0.003686372  mtry_3_trees_200
## 19     Bare.nuclei 0.125936890  mtry_5_trees_200
## 20       Cell.size 0.089778781  mtry_5_trees_200
## 21      Cell.shape 0.042713777  mtry_5_trees_200
## 22    Cl.thickness 0.023260225  mtry_5_trees_200
## 23 Normal.nucleoli 0.021657685  mtry_5_trees_200
## 24   Marg.adhesion 0.020899801  mtry_5_trees_200
## 25     Bl.cromatin 0.014237292  mtry_5_trees_200
## 26    Epith.c.size 0.008615232  mtry_5_trees_200
## 27         Mitoses 0.002635523  mtry_5_trees_200
## 28     Bare.nuclei 0.080504597  mtry_2_trees_500
## 29       Cell.size 0.077257729  mtry_2_trees_500
## 30      Cell.shape 0.062974113  mtry_2_trees_500
## 31    Cl.thickness 0.026747140  mtry_2_trees_500
## 32     Bl.cromatin 0.021877891  mtry_2_trees_500
## 33 Normal.nucleoli 0.021841450  mtry_2_trees_500
## 34   Marg.adhesion 0.019112201  mtry_2_trees_500
## 35    Epith.c.size 0.013222617  mtry_2_trees_500
## 36         Mitoses 0.003090966  mtry_2_trees_500
## 37     Bare.nuclei 0.099119249  mtry_3_trees_500
## 38       Cell.size 0.085328389  mtry_3_trees_500
## 39      Cell.shape 0.065123301  mtry_3_trees_500
## 40    Cl.thickness 0.026031551  mtry_3_trees_500
## 41   Marg.adhesion 0.019338940  mtry_3_trees_500
## 42     Bl.cromatin 0.018814782  mtry_3_trees_500
## 43 Normal.nucleoli 0.014788223  mtry_3_trees_500
## 44    Epith.c.size 0.010949414  mtry_3_trees_500
## 45         Mitoses 0.003211898  mtry_3_trees_500
## 46     Bare.nuclei 0.124282812  mtry_5_trees_500
## 47       Cell.size 0.090904474  mtry_5_trees_500
## 48      Cell.shape 0.045966760  mtry_5_trees_500
## 49    Cl.thickness 0.021676702  mtry_5_trees_500
## 50 Normal.nucleoli 0.020300877  mtry_5_trees_500
## 51   Marg.adhesion 0.019536614  mtry_5_trees_500
## 52     Bl.cromatin 0.015268145  mtry_5_trees_500
## 53    Epith.c.size 0.009305183  mtry_5_trees_500
## 54         Mitoses 0.003024808  mtry_5_trees_500
## 55     Bare.nuclei 0.081727341 mtry_2_trees_1000
## 56       Cell.size 0.077885328 mtry_2_trees_1000
## 57      Cell.shape 0.062585865 mtry_2_trees_1000
## 58    Cl.thickness 0.026309142 mtry_2_trees_1000
## 59     Bl.cromatin 0.020503315 mtry_2_trees_1000
## 60 Normal.nucleoli 0.019947983 mtry_2_trees_1000
## 61   Marg.adhesion 0.018885437 mtry_2_trees_1000
## 62    Epith.c.size 0.014006791 mtry_2_trees_1000
## 63         Mitoses 0.003346598 mtry_2_trees_1000
## 64     Bare.nuclei 0.100283344 mtry_3_trees_1000
## 65       Cell.size 0.085535688 mtry_3_trees_1000
## 66      Cell.shape 0.059257703 mtry_3_trees_1000
## 67    Cl.thickness 0.024814485 mtry_3_trees_1000
## 68   Marg.adhesion 0.019528413 mtry_3_trees_1000
## 69     Bl.cromatin 0.019201313 mtry_3_trees_1000
## 70 Normal.nucleoli 0.016485996 mtry_3_trees_1000
## 71    Epith.c.size 0.011860487 mtry_3_trees_1000
## 72         Mitoses 0.003185340 mtry_3_trees_1000
## 73     Bare.nuclei 0.121396617 mtry_5_trees_1000
## 74       Cell.size 0.091093145 mtry_5_trees_1000
## 75      Cell.shape 0.043806238 mtry_5_trees_1000
## 76    Cl.thickness 0.022686356 mtry_5_trees_1000
## 77 Normal.nucleoli 0.020778434 mtry_5_trees_1000
## 78   Marg.adhesion 0.018867468 mtry_5_trees_1000
## 79     Bl.cromatin 0.016189366 mtry_5_trees_1000
## 80    Epith.c.size 0.009737954 mtry_5_trees_1000
## 81         Mitoses 0.003221466 mtry_5_trees_1000
#Visualisasi Variable Importance
par(mfrow = c(3, 3), mar = c(8, 4, 3, 1))

for (nama.model in names(hasil.model)) {

  imp <- sort(
    hasil.model[[nama.model]]$variable.importance,
    decreasing = TRUE
  )

  barplot(
    imp,
    las = 2,
    cex.names = 0.7,
    main = nama.model,
    ylab = "Permutation Importance"
  )
}

par(mfrow = c(1, 1))

Berdasarkan hasil Variable Importance pada sembilan kombinasi model Random Forest, yaitu mtry sebesar 2, 3, dan 5 serta jumlah pohon (num.trees) sebanyak 200, 500, dan 1000, terlihat bahwa variabel Bare.nuclei secara konsisten memiliki nilai Permutation Importance tertinggi pada seluruh model, dengan nilai berkisar antara 0,0805 hingga 0,1259. Variabel berikutnya yang memiliki tingkat kepentingan tinggi adalah Cell.size dengan nilai berkisar antara 0,0773 hingga 0,0917, serta Cell.shape dengan nilai berkisar antara 0,0427 hingga 0,0651. Hal ini menunjukkan bahwa ketiga variabel tersebut memberikan kontribusi paling besar dalam membantu model membedakan kelas benign dan malignant. Sementara itu, variabel Cl.thickness, Bl.cromatin, Normal.nucleoli, Marg.adhesion, dan Epith.c.size memiliki tingkat kepentingan yang lebih rendah, sedangkan Mitoses secara konsisten memiliki nilai Permutation Importance paling kecil, yaitu berkisar antara 0,0026 hingga 0,0038. Meskipun terdapat perbedaan nilai kepentingan pada setiap kombinasi parameter, urutan variabel yang paling berpengaruh cenderung konsisten. Dengan demikian, dapat disimpulkan bahwa Bare.nuclei, Cell.size, dan Cell.shape merupakan variabel yang paling berkontribusi terhadap hasil klasifikasi Random Forest pada data Breast Cancer.

BAB V KESIMPULAN

5.1 Kesimpulan

Random Forest merupakan metode ensemble learning yang menggabungkan sejumlah Decision Tree melalui proses bootstrap sampling dan pemilihan variabel prediktor secara acak (mtry) pada setiap simpul. Setiap pohon dibentuk menggunakan sampel yang berbeda, kemudian seluruh hasil prediksi digabungkan untuk memperoleh prediksi akhir. Pada kasus klasifikasi, penggabungan prediksi dilakukan menggunakan majority voting.

Double Random Forest merupakan pengembangan dari Random Forest yang menggunakan seluruh data pelatihan sebagai dasar pembentukan setiap pohon. Perbedaannya terletak pada proses bootstrap sampling yang dilakukan pada setiap simpul untuk menentukan pemisahan data (split), bukan pada awal pembentukan pohon. Setelah aturan pemisahan diperoleh, data asli pada simpul digunakan kembali untuk melanjutkan pembentukan pohon. Proses ini memungkinkan terbentuknya pohon yang lebih besar dan beragam sehingga diharapkan dapat mengurangi risiko underfitting.

Evaluasi kinerja model Random Forest dan Double Random Forest dapat dilakukan menggunakan Out-of-Bag (OOB) Error. OOB merupakan observasi yang tidak terpilih dalam sampel bootstrap pada pembentukan suatu pohon, dengan proporsi rata-rata sekitar 36,8% dari seluruh data. Observasi tersebut digunakan untuk menguji prediksi pohon yang tidak melibatkan observasi bersangkutan dalam proses pelatihan. Pada klasifikasi, OOB Error menunjukkan proporsi kesalahan klasifikasi, sedangkan pada regresi menunjukkan nilai Mean Squared Error (MSE).

Berdasarkan hasil, algoritma Random Forest berhasil melakukan klasifikasi data BreastCancer dengan baik menggunakan sembilan kombinasi parameter mtry dan num.trees. Hasil Variable Importance menunjukkan bahwa variabel Bare.nuclei, Cell.size, dan Cell.shape merupakan variabel yang paling berkontribusi dalam proses klasifikasi, sedangkan Mitoses memiliki tingkat kepentingan paling rendah. Berdasarkan evaluasi OOB, diperoleh nilai kesalahan sebesar 2,71%, yang menunjukkan bahwa model memiliki kemampuan prediksi yang baik pada data training. Sementara itu, berdasarkan evaluasi data testing, model dengan kombinasi mtry = 2 dan num.trees = 200 menghasilkan kinerja terbaik dengan accuracy sebesar 98,04%, sensitivity sebesar 98,59%, dan specificity sebesar 97,74%. Dengan demikian, kombinasi tersebut dipilih sebagai model Random Forest terbaik karena memiliki tingkat ketepatan klasifikasi tertinggi dibandingkan delapan kombinasi parameter lainnya.

DAFTAR PUSTAKA

Arum, D. M. P., Santoso, K. I., Triyono, A., Supriyadi, E., Nugroho, A. S., & Widodo, E. (2025). Algoritma Random Forest, Decision Tree, dan XGBoost untuk klasifikasi stunting pada balita. Jurnal Transformatika, 23(1), 67–76.

Breiman, L. (2001). Random forests. Machine Learning, 45, 5–32.

Darwanto, A. R. S., Viarindita, T. L., & Widyaningsih, Y. (2021). Analisis regresi logistik binomial dan algoritma Random Forest pada proses pengklasifikasian penyakit ginjal kronis. Jurnal Statistika dan Aplikasinya, 5(1), 1–14.

Fransiska, H. (2026). Modul Praktikum Machine Learning and Modern Prediction. Laboratorium Matematika Universitas Bengkulu.

Han, S., Kim, H., & Lee, Y. S. (2020). Double random forest. Machine Learning, 109, 1569–1586.

Zikri, M., Riana, F., & Laxmi, G. F. (2024). Perbandingan metode Long Short-Term Memory dan Double Random Forest dalam prediksi harga penutupan saham. Jurnal Teknik Informatika, 12(1), 44–54.