BAB I PENDAHULUAN

1.1 Latar Belakang Masalah

Random Forest (RF) merupakan metode ensemble learning berbasis decision tree yang menggabungkan banyak pohon keputusan yang dibangun dari sampel bootstrap (Anisha dkk., 2023; Syarip dkk., 2025). RF memungkinkan terbentuknya model CART yang lebih baik, tetapi sering mengalami underfitting, terutama pada ukuran node yang kecil. Double Random Forest (DRF) dikembangkan untuk mengatasi underfitting tersebut dengan melakukan bootstrap pada setiap node, bukan hanya sekali di node akar seperti pada RF, sehingga menghasilkan pohon yang lebih beragam dan prediksi yang lebih akurat (Purwanto dkk., 2025).

RF dapat digunakan untuk tugas klasifikasi dan regresi (Ramelan & Hakim, 2025; Syarip dkk., 2025), sedangkan DRF telah diterapkan pada klasifikasi multikelas (Aldania dkk., 2023) dan dibandingkan dengan RF pada data putus sekolah madrasah (Purwanto dkk., 2025). Performa RF dievaluasi menggunakan Out-of-Bag (OOB) error, yaitu proporsi kesalahan prediksi pada data OOB yang tidak terpilih dalam sampel bootstrap, dan semakin kecil OOB error maka prediksi semakin akurat (Anisha dkk., 2023; Syarip dkk., 2025). Namun, kajian tentang DRF masih terbatas, karena Zaenal dkk. (2024) mencatat DRF hanya ditemukan dalam 10 publikasi, sedangkan RF dalam 20.900 publikasi.

Berdasarkan uraian tersebut, diperlukan kajian yang menjelaskan RF dan DRF sebagai metode ensemble learning berbasis decision tree. Kajian ini perlu menunjukkan cara mengimplementasikan RF dan DRF pada kasus klasifikasi dan regresi. Kajian ini juga perlu mengevaluasi performa model menggunakan OOB error untuk membandingkan RF dengan DRF. Oleh karena itu, penelitian ini membahas konsep, implementasi, dan evaluasi RF dan DRF berdasarkan OOB error.

1.2 Rumusan Masalah

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

1.3 Tujuan

  1. Mahasiswa dapat memahami Random Forest dan Double Random Forest sebagai metode ensemble learning berbasis decision tree.
  2. Mahasiswa dapat mengimplementasikan metode Random Forest dan Double Random Forest untuk kasus 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 adalah algoritma ensemble learning berbasis tree yang membangun banyak decision tree dan menggabungkan prediksinya untuk meningkatkan akurasi dan mengurangi overfitting. Menurut James, Witten, Hastie, dan Tibshirani dalam An Introduction to Statistical Learning (ISL), Random Forest merupakan pengembangan dari metode bagging (Bootstrap Aggregating) yang menggunakan kumpulan pohon keputusan (decision trees) sebagai model dasar. Metode ini dirancang untuk mengurangi variansi model dan meningkatkan kemampuan generalisasi (Fransiska, 2026).

Seperti Bagging, RF membentuk banyak pohon dari proses resampling dan kemudian menggabungkan hasil prediksinya. Perbedaannya, RF menambahkan pengacakan pada pemilihan prediktor di setiap node. Dengan demikian, pohon-pohon dalam forest tidak hanya dibangun dari sampel yang berbeda, tetapi juga tidak selalu mempertimbangkan prediktor yang sama ketika mencari split terbaik (Fransiska, 2026).

Tujuan pengacakan prediktor adalah mengurangi korelasi antar-pohon. Apabila semua pohon terlalu mirip, manfaat agregasi menjadi terbatas. Dengan membuat pohon yang kuat tetapi tidak terlalu berkorelasi, Random Forest dapat mengurangi variance tanpa harus memangkas setiap pohon secara agresif. Misalkan tersedia data latih \(𝐷 = (x_𝑖,𝑦_𝑖), 𝑖 = 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.

2.2 Double Random Forest

Double Random Forest (DRF) adalah metode yang diperkenalkan oleh Han, Kim, dan Lee pada tahun 2020. DRF dikembangkan untuk situasi ketika Random Forest masih mengalami underfitting karena tree yang dihasilkan belum cukup besar. Pada Random Forest standar, setiap tree dibentuk menggunakan satu bootstrap sample pada awal tree. Karena satu bootstrap sample hanya mengandung sekitar 63,2% observasi unik, jumlah observasi unik yang tersedia untuk membentuk tree lebih sedikit daripada seluruh data training. Setiap tree DRF dibangun menggunakan seluruh data training, sedangkan bootstrap digunakan sementara pada setiap node untuk mencari aturan split. 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.

BAB III METODE PENELITIAN

3.1 Sumber Data

Jenis data yang digunakan pada penelitian ini adalah data kategorik dan numerik. Data kategorik adalah data yang menunjukkan kategori atau kelompok tertentu dan digunakan untuk membedakan karakteristik suatu objek sedangkan data numerik adalah data berbentuk angka yang menunjukkan nilai atau jumlah dan dapat digunakan dalam perhitungan matematis. Sumber data yang diperoleh dalam penelitian ini adalah data sekunder. Data sekunder adalah sekumpulan informasi yang telah ada sebelumnya dan digunakan sebagai pelengkap kebutuhan data penelitian, di mana pada praktikum ini data sekundernya adalah data yang berasal dari program RStudio.

3.2 Variabel Penelitian

Variabel penelitian adalah segala sesuatu yang akan menjadi objek pengamatan penelitian. Pada laporan ini terdapat 10 variabel yang digunakan pada data. Variabel tersebut, yaitu Cl.thickness, Cell.size, Cell.shape, Marg.adhesion, Epith.c.size, Bare.nuclei, Bl,cromatin, Normal.nucleoli, Mitoses, dan Class.

3.3 Langkah-langkah Analisis

  1. Menginput data.
  2. Melakukan preprocessing data.
  3. Membangun model Random Forest Classification.
  4. Melakukan prediksi pada data uji.
  5. Membentuk confusion matrix untuk setiap model.
  6. Menghitung metrik evaluasi.
  7. Memvisualisasikan hasil evaluasi dan variable importance.
  8. Membandingkan hasil evaluasi dan menginterpretasikan performa model terbaik.

BAB IV HASIL DAN PEMBAHASAN

4.1 Library

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  
##  Class :character   5      :130   10     : 67   2      : 59   2      : 58  
##  Mode  :character   3      :108   3      : 52   10     : 58   3      : 58  
##                     4      : 80   2      : 45   3      : 56   10     : 55  
##                     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   NA's   : 16   (Other): 69   (Other): 69     (Other): 17  
##        Class    
##  benign   :458  
##  malignant:241  
##                 
##                 
##                 
##                 
## 

Dataset BreastCancer dari package mlbench diperoleh sebanyak 699 pengamatan dengan 11 variabel. Variabel tersebut terdiri atas satu variabel identitas (Id), sembilan variabel prediktor, yaitu Cl.thickness, Cell.size, Cell.shape, Marg.adhesion, Epith.c.size, Bare.nuclei, Bl.cromatin, Normal.nucleoli, dan Mitoses, serta satu variabel target yaitu Class. Variabel Class memiliki dua kategori, yaitu benign dan malignant. Berdasarkan hasil ringkasan data, terdapat 458 pengamatan berkategori benign dan 241 pengamatan berkategori malignant. Selain itu, ditemukan 16 nilai hilang pada variabel Bare.nuclei. Dengan demikian, data tersebut dapat digunakan untuk membangun model klasifikasi setelah dilakukan tahap persiapan data.

4.2 Preprocessing Data

bc$Id <- NULL
bc <- na.omit(bc)
bc$Class <- droplevels(as.factor(bc$Class))
levels(bc$Class)
## [1] "benign"    "malignant"
table(bc$Class)
## 
##    benign malignant 
##       444       239
prop.table(table(bc$Class))
## 
##    benign malignant 
## 0.6500732 0.3499268
#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, ]

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

Pada tahap persiapan data, variabel Id dihapus karena hanya berfungsi sebagai identitas pengamatan dan tidak digunakan sebagai variabel prediktor. Selanjutnya, dilakukan penghapusan pengamatan yang memiliki nilai hilang menggunakan fungsi na.omit(), sehingga jumlah data berkurang dari 699 menjadi 683 pengamatan. Variabel Class kemudian diubah menjadi faktor dan level kategorinya disesuaikan. Berdasarkan hasil pengolahan, diperoleh 444 pengamatan berkategori benign (65,01%) dan 239 pengamatan berkategori malignant (34,99%). Setelah itu, data dibagi menjadi data training dan testing menggunakan fungsi createDataPartition() dengan proporsi 70:30 serta set.seed(234). Hasil pembagian menunjukkan bahwa data training terdiri atas 479 pengamatan dengan 311 benign dan 168 malignant, sedangkan data testing terdiri atas 204 pengamatan dengan 133 benign dan 71 malignant. Pembagian ini mempertahankan proporsi kategori pada kedua kelompok data, sehingga data training digunakan untuk membangun model Random Forest, sementara data testing digunakan untuk mengevaluasi kemampuan model dalam mengklasifikasikan pengamatan baru.

4.3 Random Forest

set.seed(234)

mtry.cls <- c(2, 3, 5)
trees.cls <- c(200, 500, 1000)

hasil.model <- list()

for (m in mtry.cls) {
  for (n in trees.cls) {
    
    set.seed(234)
    
    rf.cls <- ranger(Class ~ ., data = bc.train,
                     num.trees = n,
                     mtry = m,
                     min.node.size = 1,
                     replace = TRUE,
                     sample.fraction = 1,
                     importance = "permutation",
                     seed = 234)
    
    nama <- paste0("mtry_", m, "_trees_", n)
    
    hasil.model[[nama]] <- rf.cls
    
    cat("\nModel:", nama, "\n")
    print(rf.cls)}}
## 
## Model: mtry_2_trees_200 
## Ranger result
## 
## Call:
##  ranger(Class ~ ., data = bc.train, num.trees = n, mtry = m, 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_2_trees_500 
## Ranger result
## 
## Call:
##  ranger(Class ~ ., data = bc.train, num.trees = n, mtry = m, 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_2_trees_1000 
## Ranger result
## 
## Call:
##  ranger(Class ~ ., data = bc.train, num.trees = n, mtry = m, 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_200 
## Ranger result
## 
## Call:
##  ranger(Class ~ ., data = bc.train, num.trees = n, mtry = m, 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_3_trees_500 
## Ranger result
## 
## Call:
##  ranger(Class ~ ., data = bc.train, num.trees = n, mtry = m, 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_3_trees_1000 
## Ranger result
## 
## Call:
##  ranger(Class ~ ., data = bc.train, num.trees = n, mtry = m, 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_200 
## Ranger result
## 
## Call:
##  ranger(Class ~ ., data = bc.train, num.trees = n, mtry = m, 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_5_trees_500 
## Ranger result
## 
## Call:
##  ranger(Class ~ ., data = bc.train, num.trees = n, mtry = m, 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_5_trees_1000 
## Ranger result
## 
## Call:
##  ranger(Class ~ ., data = bc.train, num.trees = n, mtry = m, 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 %

Pada tahap pembentukan model, dilakukan pengujian terhadap sembilan kombinasi parameter, yaitu mtry = 2, 3, 5 dan num.trees = 200, 500, 1000. Nilai mtry menunjukkan jumlah variabel prediktor yang dipertimbangkan pada setiap pemisahan simpul, sedangkan num.trees menunjukkan jumlah pohon keputusan yang dibentuk dalam model Random Forest. Berdasarkan hasil pengolahan, seluruh model berhasil dibentuk dengan menggunakan 479 data training dan sembilan variabel prediktor. Hasil awal menunjukkan bahwa nilai OOB prediction error berada pada rentang 2,71% hingga 2,92%. Model dengan mtry = 3 dan num.trees = 200 serta model dengan mtry = 3 dan num.trees = 1000 menghasilkan OOB error sebesar 2,71%, yang merupakan nilai kesalahan terkecil pada tahap pembentukan model. Sementara itu, kombinasi parameter lainnya menghasilkan OOB error sebesar 2,92% atau 2,71%.

4.4 Evaluasi OOB

hasil.oob <- data.frame()

for (nama in names(hasil.model)) {
  
  rf.cls <- hasil.model[[nama]]
  
  hasil.oob <- rbind(hasil.oob,
                     data.frame(
                       Model = nama,
                       OOB_Error = rf.cls$prediction.error,
                       OOB_Accuracy = 1 - rf.cls$prediction.error
                     ))}
hasil.oob
##               Model  OOB_Error OOB_Accuracy
## 1  mtry_2_trees_200 0.02922756    0.9707724
## 2  mtry_2_trees_500 0.02922756    0.9707724
## 3 mtry_2_trees_1000 0.02922756    0.9707724
## 4  mtry_3_trees_200 0.02713987    0.9728601
## 5  mtry_3_trees_500 0.02922756    0.9707724
## 6 mtry_3_trees_1000 0.02713987    0.9728601
## 7  mtry_5_trees_200 0.02922756    0.9707724
## 8  mtry_5_trees_500 0.02922756    0.9707724
## 9 mtry_5_trees_1000 0.02713987    0.9728601

Pada tahap ini, dilakukan evaluasi internal model menggunakan nilai Out-of-Bag (OOB) Error dan OOB Accuracy. Berdasarkan hasil pengolahan, diperoleh nilai OOB Error berkisar antara 0,0271 hingga 0,0292 atau sekitar 2,71% hingga 2,92%. Nilai OOB Error terendah sebesar 2,71% diperoleh pada model mtry_3_trees_200, mtry_3_trees_1000, dan mtry_5_trees_1000. Ketiga model tersebut memiliki OOB Accuracy sebesar 97,29%. Sementara itu, model lainnya memiliki OOB Error sebesar 2,92% dengan OOB Accuracy sebesar 97,08%. Hasil tersebut menunjukkan bahwa seluruh model memiliki tingkat kesalahan prediksi internal yang relatif rendah. Meskipun demikian, nilai OOB yang rendah belum tentu menunjukkan bahwa model tersebut memiliki performa terbaik pada data testing, sehingga tetap diperlukan evaluasi lanjutan menggunakan Confusion Matrix dan ukuran evaluasi klasifikasi.

4.5 Prediksi Data Testing

hasil.evaluasi <- data.frame()
hasil.cm <- list()
hasil.importance <- list()

for (nama in names(hasil.model)) {
  
  rf.cls <- hasil.model[[nama]]
  
  pred.rf.cls <- predict(rf.cls, data = bc.test)$predictions
  pred.rf.cls <- factor(pred.rf.cls,
                        levels = levels(bc.test$Class))
  
  hasil.rf.cls <- data.frame(
    Aktual = bc.test$Class,
    Prediksi = pred.rf.cls
  )
  
  hasil.cm[[nama]] <- hasil.rf.cls
  
  cat("\nModel:", nama, "\n")
  print(head(hasil.rf.cls, 10))}
## 
## Model: mtry_2_trees_200 
##       Aktual  Prediksi
## 1     benign malignant
## 2     benign    benign
## 3     benign    benign
## 4     benign    benign
## 5     benign    benign
## 6  malignant malignant
## 7     benign    benign
## 8     benign    benign
## 9     benign    benign
## 10 malignant malignant
## 
## Model: mtry_2_trees_500 
##       Aktual  Prediksi
## 1     benign malignant
## 2     benign    benign
## 3     benign    benign
## 4     benign    benign
## 5     benign    benign
## 6  malignant malignant
## 7     benign    benign
## 8     benign    benign
## 9     benign    benign
## 10 malignant malignant
## 
## Model: mtry_2_trees_1000 
##       Aktual  Prediksi
## 1     benign malignant
## 2     benign    benign
## 3     benign    benign
## 4     benign    benign
## 5     benign    benign
## 6  malignant malignant
## 7     benign    benign
## 8     benign    benign
## 9     benign    benign
## 10 malignant malignant
## 
## Model: mtry_3_trees_200 
##       Aktual  Prediksi
## 1     benign malignant
## 2     benign    benign
## 3     benign    benign
## 4     benign    benign
## 5     benign    benign
## 6  malignant malignant
## 7     benign    benign
## 8     benign    benign
## 9     benign    benign
## 10 malignant malignant
## 
## Model: mtry_3_trees_500 
##       Aktual  Prediksi
## 1     benign malignant
## 2     benign    benign
## 3     benign    benign
## 4     benign    benign
## 5     benign    benign
## 6  malignant malignant
## 7     benign    benign
## 8     benign    benign
## 9     benign    benign
## 10 malignant malignant
## 
## Model: mtry_3_trees_1000 
##       Aktual  Prediksi
## 1     benign malignant
## 2     benign    benign
## 3     benign    benign
## 4     benign    benign
## 5     benign    benign
## 6  malignant malignant
## 7     benign    benign
## 8     benign    benign
## 9     benign    benign
## 10 malignant malignant
## 
## Model: mtry_5_trees_200 
##       Aktual  Prediksi
## 1     benign 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
## 
## Model: mtry_5_trees_500 
##       Aktual  Prediksi
## 1     benign 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
## 
## Model: mtry_5_trees_1000 
##       Aktual  Prediksi
## 1     benign 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

Pada tahap prediksi, masing-masing model Random Forest digunakan untuk mengklasifikasikan 204 pengamatan pada data testing ke dalam kategori benign atau malignant. Hasil prediksi kemudian dibandingkan dengan kategori aktual untuk mengetahui kesesuaian hasil klasifikasi. Berdasarkan sepuluh hasil pengamatan pertama yang ditampilkan, sebagian besar prediksi telah sesuai dengan kategori aktual, meskipun masih ditemukan beberapa kesalahan klasifikasi. Sebagai contoh, pada model mtry_2_trees_200, pengamatan pertama yang sebenarnya termasuk kategori benign diprediksi sebagai malignant. Hasil prediksi tersebut selanjutnya digunakan sebagai dasar dalam pembentukan Confusion Matrix dan perhitungan ukuran evaluasi untuk masing-masing kombinasi parameter.

4.6 Confusion Matrix dan Evaluasi

for (nama in names(hasil.model)) {
  
  hasil.rf.cls <- hasil.cm[[nama]]
  
  pred.rf.cls <- hasil.rf.cls$Prediksi
  
  cm.rf <- confusionMatrix(
    data = pred.rf.cls,
    reference = hasil.rf.cls$Aktual,
    positive = "malignant"
  )
  
  cat("\nConfusion Matrix:", nama, "\n")
  print(cm.rf)
  
  tab.rf <- table(
    Aktual = hasil.rf.cls$Aktual,
    Prediksi = pred.rf.cls
  )
  
  TN <- tab.rf["benign", "benign"]
  FP <- tab.rf["benign", "malignant"]
  FN <- tab.rf["malignant", "benign"]
  TP <- tab.rf["malignant", "malignant"]
  
  Accuracy <- (TP + TN) / (TP + TN + FP + FN)
  Precision <- TP / (TP + FP)
  Recall <- TP / (TP + FN)
  Specificity <- TN / (TN + FP)
  F1 <- 2 * (Precision * Recall) / (Precision + Recall)
  
  evaluasi.rf <- data.frame(
    Model = nama,
    Accuracy = Accuracy,
    Precision = Precision,
    Recall = Recall,
    Specificity = Specificity,
    F1_Score = F1
  )
  
  hasil.evaluasi <- rbind(hasil.evaluasi, evaluasi.rf)}
## 
## Confusion Matrix: 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       
##                                           
## 
## Confusion Matrix: 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      
##                                          
## 
## Confusion Matrix: 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       
##                                           
## 
## Confusion Matrix: 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       
##                                           
## 
## Confusion Matrix: 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       
##                                           
## 
## Confusion Matrix: 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       
##                                           
## 
## Confusion Matrix: 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       
##                                           
## 
## Confusion Matrix: 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       
##                                           
## 
## Confusion Matrix: 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       
## 

Berdasarkan hasil evaluasi, model mtry = 2 dan num.trees = 200 menghasilkan performa terbaik dengan Accuracy sebesar 98,04%, Precision sebesar 95,89%, Recall sebesar 98,59%, Specificity sebesar 97,74%, dan F1-score sebesar 97,22%. Hasil Confusion Matrix pada model tersebut menunjukkan bahwa terdapat 130 pengamatan benign yang diklasifikasikan dengan benar dan 70 pengamatan malignant yang diklasifikasikan dengan benar. Selain itu, terdapat 3 pengamatan benign yang salah diklasifikasikan sebagai malignant dan 1 pengamatan malignant yang salah diklasifikasikan sebagai benign. Nilai Recall sebesar 98,59% menunjukkan bahwa model mampu mengenali sebagian besar pengamatan yang benar-benar termasuk kategori malignant. Sementara itu, Specificity sebesar 97,74% menunjukkan bahwa model juga mampu mengidentifikasi kategori benign dengan baik. Dengan demikian, model tersebut memiliki kemampuan klasifikasi yang sangat baik berdasarkan data testing.

4.7 Variable Importance

for (nama in names(hasil.model)) {
  
  rf.cls <- hasil.model[[nama]]
  
  importance.rf <- sort(
    rf.cls$variable.importance,
    decreasing = TRUE
  )
  
  hasil.importance[[nama]] <- importance.rf
  
  cat("\nVariable Importance:", nama, "\n")
  print(importance.rf)
  
  barplot(
    importance.rf,
    las = 2,
    main = paste("Variable Importance -", nama),
    ylab = "Permutation Importance")}
## 
## Variable Importance: mtry_2_trees_200 
##     Bare.nuclei       Cell.size      Cell.shape    Cl.thickness     Bl.cromatin 
##     0.083924522     0.078718154     0.060967868     0.024489152     0.021478062 
## Normal.nucleoli   Marg.adhesion    Epith.c.size         Mitoses 
##     0.020446839     0.019251533     0.011737675     0.003751688

## 
## Variable Importance: mtry_2_trees_500 
##     Bare.nuclei       Cell.size      Cell.shape    Cl.thickness     Bl.cromatin 
##     0.080504597     0.077257729     0.062974113     0.026747140     0.021877891 
## Normal.nucleoli   Marg.adhesion    Epith.c.size         Mitoses 
##     0.021841450     0.019112201     0.013222617     0.003090966

## 
## Variable Importance: mtry_2_trees_1000 
##     Bare.nuclei       Cell.size      Cell.shape    Cl.thickness     Bl.cromatin 
##     0.081727341     0.077885328     0.062585865     0.026309142     0.020503315 
## Normal.nucleoli   Marg.adhesion    Epith.c.size         Mitoses 
##     0.019947983     0.018885437     0.014006791     0.003346598

## 
## Variable Importance: mtry_3_trees_200 
##     Bare.nuclei       Cell.size      Cell.shape    Cl.thickness   Marg.adhesion 
##     0.097215967     0.091653406     0.062810795     0.027788431     0.019128466 
##     Bl.cromatin Normal.nucleoli    Epith.c.size         Mitoses 
##     0.017950453     0.015967442     0.009877622     0.003686372

## 
## Variable Importance: mtry_3_trees_500 
##     Bare.nuclei       Cell.size      Cell.shape    Cl.thickness   Marg.adhesion 
##     0.099119249     0.085328389     0.065123301     0.026031551     0.019338940 
##     Bl.cromatin Normal.nucleoli    Epith.c.size         Mitoses 
##     0.018814782     0.014788223     0.010949414     0.003211898

## 
## Variable Importance: mtry_3_trees_1000 
##     Bare.nuclei       Cell.size      Cell.shape    Cl.thickness   Marg.adhesion 
##      0.10028334      0.08553569      0.05925770      0.02481448      0.01952841 
##     Bl.cromatin Normal.nucleoli    Epith.c.size         Mitoses 
##      0.01920131      0.01648600      0.01186049      0.00318534

## 
## Variable Importance: mtry_5_trees_200 
##     Bare.nuclei       Cell.size      Cell.shape    Cl.thickness Normal.nucleoli 
##     0.125936890     0.089778781     0.042713777     0.023260225     0.021657685 
##   Marg.adhesion     Bl.cromatin    Epith.c.size         Mitoses 
##     0.020899801     0.014237292     0.008615232     0.002635523

## 
## Variable Importance: mtry_5_trees_500 
##     Bare.nuclei       Cell.size      Cell.shape    Cl.thickness Normal.nucleoli 
##     0.124282812     0.090904474     0.045966760     0.021676702     0.020300877 
##   Marg.adhesion     Bl.cromatin    Epith.c.size         Mitoses 
##     0.019536614     0.015268145     0.009305183     0.003024808

## 
## Variable Importance: mtry_5_trees_1000 
##     Bare.nuclei       Cell.size      Cell.shape    Cl.thickness Normal.nucleoli 
##     0.121396617     0.091093145     0.043806238     0.022686356     0.020778434 
##   Marg.adhesion     Bl.cromatin    Epith.c.size         Mitoses 
##     0.018867468     0.016189366     0.009737954     0.003221466

Berdasarkan hasil, variabel Bare.nuclei memiliki nilai Variable Importance tertinggi sebesar 0,0839, diikuti oleh Cell.size sebesar 0,0787 dan Cell.shape sebesar 0,0610. Hal ini menunjukkan bahwa ketiga variabel tersebut memiliki kontribusi relatif paling besar dalam proses klasifikasi pada model yang ditampilkan. Sementara itu, variabel Mitoses memiliki nilai kepentingan paling rendah sebesar 0,0038. Dengan demikian, Bare.nuclei, Cell.size, dan Cell.shape merupakan variabel yang paling berpengaruh terhadap hasil klasifikasi pada model mtry_2_trees_200.

4.8 Visualisasi Perbandingan Model

par(mfrow = c(2, 2))

barplot(
  hasil.evaluasi$Accuracy,
  names.arg = hasil.evaluasi$Model,
  las = 2,
  main = "Perbandingan Accuracy",
  ylab = "Accuracy")

barplot(
  hasil.evaluasi$Precision,
  names.arg = hasil.evaluasi$Model,
  las = 2,
  main = "Perbandingan Precision",
  ylab = "Precision")

barplot(
  hasil.evaluasi$Recall,
  names.arg = hasil.evaluasi$Model,
  las = 2,
  main = "Perbandingan Recall",
  ylab = "Recall")

barplot(
  hasil.evaluasi$F1_Score,
  names.arg = hasil.evaluasi$Model,
  las = 2,
  main = "Perbandingan F1-Score",
  ylab = "F1-Score")

par(mfrow = c(1, 1))

Pada tahap visualisasi, dibuat diagram batang untuk membandingkan performa sembilan model Random Forest berdasarkan nilai Accuracy, Precision, Recall, dan F1-score. Visualisasi ini bertujuan untuk mempermudah pengamatan terhadap perbedaan kinerja setiap kombinasi parameter mtry dan num.trees. Berdasarkan hasil perhitungan evaluasi, model mtry = 2 dan num.trees = 200 menunjukkan nilai Accuracy, Precision, Recall, dan F1-score tertinggi dibandingkan model lainnya. Sementara itu, model dengan mtry = 5 dan num.trees = 1000 menghasilkan nilai terendah pada keempat ukuran evaluasi tersebut. Hasil visualisasi memperlihatkan bahwa penambahan jumlah pohon keputusan tidak selalu meningkatkan performa model. Oleh karena itu, pemilihan model perlu mempertimbangkan keseluruhan ukuran evaluasi, bukan hanya jumlah pohon yang digunakan.

4.9 Menetukan Model Terbaik

hasil.evaluasi[order(-hasil.evaluasi$Accuracy), ]
##               Model  Accuracy Precision    Recall Specificity  F1_Score
## 1  mtry_2_trees_200 0.9803922 0.9589041 0.9859155   0.9774436 0.9722222
## 2  mtry_2_trees_500 0.9754902 0.9459459 0.9859155   0.9699248 0.9655172
## 3 mtry_2_trees_1000 0.9705882 0.9452055 0.9718310   0.9699248 0.9583333
## 4  mtry_3_trees_200 0.9705882 0.9577465 0.9577465   0.9774436 0.9577465
## 5  mtry_3_trees_500 0.9705882 0.9577465 0.9577465   0.9774436 0.9577465
## 6 mtry_3_trees_1000 0.9656863 0.9444444 0.9577465   0.9699248 0.9510490
## 7  mtry_5_trees_200 0.9607843 0.9436620 0.9436620   0.9699248 0.9436620
## 8  mtry_5_trees_500 0.9607843 0.9436620 0.9436620   0.9699248 0.9436620
## 9 mtry_5_trees_1000 0.9558824 0.9428571 0.9295775   0.9699248 0.9361702
model.terbaik <- hasil.evaluasi[
  which.max(hasil.evaluasi$F1_Score), ]

model.terbaik
##              Model  Accuracy Precision    Recall Specificity  F1_Score
## 1 mtry_2_trees_200 0.9803922 0.9589041 0.9859155   0.9774436 0.9722222

Pada tahap terakhir, dilakukan perbandingan seluruh model berdasarkan nilai Accuracy dan F1-score untuk menentukan model dengan performa klasifikasi terbaik. Berdasarkan hasil pengurutan nilai Accuracy, model mtry = 2 dan num.trees = 200 menempati urutan pertama dengan Accuracy sebesar 98,04%. Model tersebut juga menghasilkan Precision sebesar 95,89%, Recall sebesar 98,59%, Specificity sebesar 97,74%, dan F1-score sebesar 97,22%. Selain itu, berdasarkan pemilihan model menggunakan nilai F1-score tertinggi, diperoleh model yang sama, yaitu mtry = 2 dan num.trees = 200. Hal ini menunjukkan bahwa model tersebut memiliki keseimbangan yang baik antara Precision dan Recall dalam mengklasifikasikan kategori malignant. Dengan demikian, kombinasi parameter mtry = 2 dan num.trees = 200 dipilih sebagai model Random Forest terbaik karena menghasilkan performa paling tinggi berdasarkan seluruh ukuran evaluasi data testing yang digunakan.

BAB V KESIMPULAN

5.1 Kesimpulan

Random Forest merupakan metode ensemble learning berbasis decision tree yang membangun banyak pohon melalui proses bootstrap sampling dan pemilihan prediktor secara acak pada setiap node untuk mengurangi korelasi antar-pohon serta meningkatkan akurasi prediksi. Sementara itu, Double Random Forest merupakan pengembangan dari Random Forest yang menggunakan seluruh data training untuk membangun setiap pohon, sedangkan proses bootstrap dilakukan pada setiap node untuk menentukan aturan split terbaik. Kedua metode menggabungkan prediksi dari seluruh pohon, yaitu melalui majority voting pada klasifikasi, sehingga dapat meningkatkan kemampuan model dalam melakukan prediksi.

Implementasi metode Random Forest dan Double Random Forest untuk kasus klasifikasi dilakukan dengan menggunakan variabel respons berbentuk kategori, sedangkan pada kasus regresi menggunakan variabel respons berbentuk numerik. Kedua metode diterapkan dengan membangun sejumlah decision tree melalui proses pengacakan sampel dan prediktor, kemudian menggabungkan hasil prediksi seluruh pohon menggunakan majority voting untuk klasifikasi dan rata-rata prediksi untuk regresi. Hasil pemodelan selanjutnya dievaluasi menggunakan metrik yang sesuai, seperti Accuracy, Precision, Recall, dan F1-score untuk klasifikasi, serta RMSE dan \(R^2\) untuk regresi.

Evaluasi performa model Random Forest dan Double Random Forest dilakukan dengan menggunakan nilai Out-of-Bag (OOB) error serta metrik evaluasi yang sesuai dengan jenis pemodelan. OOB error digunakan untuk mengukur tingkat kesalahan prediksi berdasarkan pengamatan yang tidak digunakan dalam pembentukan pohon tertentu, sehingga semakin kecil nilai OOB error, semakin baik kemampuan prediksi model. Perbandingan kedua metode dilakukan berdasarkan hasil evaluasi, seperti Accuracy, Precision, Recall, dan F1-score untuk klasifikasi serta RMSE dan \(R^2\) untuk regresi, sehingga dapat diketahui metode yang memberikan performa lebih baik.

Berdasarkan hasil analisis Random Forest Classification pada data BreastCancer, dilakukan pengujian terhadap sembilan kombinasi parameter mtry dan num.trees. Hasil evaluasi menunjukkan bahwa model terbaik diperoleh pada kombinasi mtry = 2 dan num.trees = 200, dengan Accuracy sebesar 98,04%, Precision sebesar 95,89%, Recall sebesar 98,59%, Specificity sebesar 97,74%, dan F1-score sebesar 97,22%. Model tersebut juga mampu menghasilkan klasifikasi yang tepat terhadap 200 dari 204 pengamatan data testing. Berdasarkan evaluasi internal, nilai OOB Error model tersebut sebesar 2,92%, sedangkan variabel yang memiliki kontribusi terbesar dalam proses klasifikasi adalah Bare.nuclei, diikuti Cell.size dan Cell.shape. Dengan demikian, Random Forest mampu memberikan hasil klasifikasi yang sangat baik pada data BreastCancer, dengan kombinasi mtry = 2 dan num.trees = 200 sebagai model terbaik berdasarkan hasil pengujian.

DAFTAR PUSTAKA

Aldania, A. N. A., Soleh, A. M., & Notodiputro, K. A. (2023). A comparative study of CatBoost and double random forest for multi-class classification. Jurnal RESTI (Rekayasa Sistem dan Teknologi Informasi), 7(1), 129–137. https://doi.org/10.29207/resti.v7i1.4766

Anisha, F., Vionanda, D., Amalita, N., & Zilrahmi. (2023). Application of random forest for the classification diabetes mellitus disease in RSUP Dr. M. Jamil Padang. UNP Journal of Statistics and Data Science, 1(2), 45–52. https://doi.org/10.24036/ujsds/vol1-iss2/30

Fransiska, H. (2026). Modul Praktikum Machine Learning dan Modern Prediction. Bengkulu: Universitas Bengkulu.

Purwanto, A., Sartono, B., & Notodiputro, K. A. (2025). A comparison of random forest and double random forest: Dropout rates of madrasah students in Indonesia. BAREKENG: Jurnal Ilmu Matematika dan Terapan, 19(1), 227–236. https://doi.org/10.30598/barekengvol19iss1pp227-236

Ramelan, F. A., & Hakim, L. (2025). Perbandingan prediksi terhadap peningkatan jumlah pelanggan Iconnet dengan algoritma regresi linear dan random forest pada wilayah Jabodetabek dan Banten. Jurnal JTIK (Jurnal Teknologi Informasi dan Komunikasi), 9(3), 790–801. https://doi.org/10.35870/jtik.v9i3.3490

Syarip, D. I., Notodiputro, K. A., & Sartono, B. (2025). Comparison of random forest and support vector machine classification methods for predicting the accuracy level of madrasah data. Media Statistika, 18(1), 37–48. https://doi.org/10.14710/medstat.18.1.37-48

Zaenal, M. S., Fitrianto, A., & Wijayanto, H. (2024). Comparison of extremely randomized survival trees and random survival forests: A simulation study. Scientific Journal of Informatics, 11(3). https://journal.unnes.ac.id/journals/sji/article/view/8464