BAB I PENDAHULUAN

1.1 Latar Belakang Masalah

Random Forest adalah metode ensemble learning yang membangun banyak pohon keputusan secara acak, lalu menggabungkan hasilnya agar prediksi lebih akurat dan risiko overfitting berkurang (Nugroho & Hendry, 2025). Secara konsep, Random Forest dikembangkan dari metode CART dengan menerapkan bootstrap aggregating (bagging) dan pemilihan fitur secara acak. Prediksi akhirnya ditentukan lewat majority voting untuk klasifikasi atau rata-rata untuk regresi (Aprilia dkk., 2026). Random Forest masih memiliki keterbatasan, salah satunya adalah kemungkinan terjadinya underfitting ketika pohon keputusan yang terbentuk belum cukup besar untuk menangkap pola data secara optimal (Purwanto dkk., 2025).

Salah satu metode yang dikembangkan untuk mengatasi keterbatasan tersebut adalah Double Random Forest (DRF). Metode ini memiliki perbedaan dalam proses pembentukan pohon keputusan, yaitu menggunakan seluruh data pelatihan untuk membangun pohon, sedangkan proses bootstrap digunakan pada setiap simpul untuk menentukan aturan pemisahan. Pendekatan tersebut memungkinkan terbentuknya pohon yang lebih besar sehingga dapat mengurangi masalah underfitting pada model Random Forest (Han dkk., 2020).

1.2 Rumusan Masalah

  1. Bagaimana cara memahami 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

  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.

1.4 Batasan Masalah

lakukan Random Forest Classification pada data BreastCancer. Bandingkan mtry = 2, 3, dan 5 dengan num.trees = 200, 500, dan 1000. Bandingkan performa data testing berdasarkan confusion matrix, Accuracy, Precision, Recall, Specificity, F1-score, dan variable importance. Tampilkan pula OOB error sebagai evaluasi internal model.

BAB II TINJAUAN PUSTAKA

2.1 Random Forest

Random Forest (RF) pertama kali diperkenalkan oleh Leo Breiman (2001). RF merupakan salah satu metode yang dapat meningkatkan hasil akurasi dalam membangkitkan atribut untuk setiap node yang dilakukan secara acak. RF terdiri dari sekumpulan decision tree, dimana kumpulan pohon keputusan ini digunakan untuk mengklasifikasi data ke suatu kelas. Pohon keputusan dibuat dengan menentukan node akar dan berakhir dengan beberapa node daun untuk mendapatkan hasil akhir. Dalam prosesnya, metode ini menggunakan teknik bootstrap sampling untuk mengambil sampel data secara acak dengan pengembalian (Amliah dkk., 2022).

Pada metode Random Forest, proses bootstrap sampling memungkinkan sebagian data tidak terpilih sebagai sampel untuk membentuk pohon keputusan tertentu. Data yang tidak terpilih tersebut disebut sebagai Out-of-Bag (OOB). Data OOB dapat digunakan untuk mengukur kesalahan prediksi model tanpa memerlukan data validasi tambahan. Setiap pengamatan akan memperoleh prediksi dari pohon-pohon yang tidak menggunakan pengamatan tersebut dalam proses pembentukannya. Estimasi kesalahan OOB dihitung dengan membandingkan nilai aktual dan hasil prediksi OOB. Pada klasifikasi, kesalahan OOB diperoleh dari proporsi pengamatan yang salah diklasifikasikan, sedangkan pada regresi dapat dihitung menggunakan rata-rata kuadrat selisih antara nilai aktual dan prediksi OOB (Breiman, 2001)

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. Setiap tree DRF dibangun menggunakan seluruh data training, sedangkan bootstrap digunakan sementara pada setiap node untuk mencari aturan split. Hasil akhir pada klasifikasi diperoleh melalui majority voting, sedangkan pada regresi prediksi akhir diperoleh dengan merata-ratakan prediksi seluruh tree (Fransiska, 2026).

Perbedaan RF dan DRF dapat dilihat dari empat aspek. Pertama, RF membangun setiap pohon terutama dari sampel bootstrap, sedangkan DRF menggunakan seluruh data pelatihan pada mekanisme pembentukan pohonnya. Kedua, pohon DRF berpotensi berukuran lebih besar karena memiliki lebih banyak observasi unik. Ketiga, DRF mempertahankan pengacakan variabel dan pengacakan aturan pemisahan untuk menjaga keragaman antarpohon. Keempat, DRF diarahkan untuk meningkatkan kinerja pada data yang mengalami underfitting dalam RF (Khairunnisa dkk., 2024).

BAB III METODE PENELITIAN

3.1 Jenis dan Sumber Data

Jenis data yang digunakan dalam penelitian ini terdiri atas data kuantitatif dan data kualitatif. Sumber data yang digunakan dalam penelitian ini adalah data sekunder, yaitu data yang diperoleh melalui sumber yang telah tersedia atau perantara, bukan dikumpulkan secara langsung oleh penulis. Data yang digunakan dalam praktikum ini adalah dataset BreastCancer yang tersedia dalam program R melalui paket mlbench.

3.2 Variabel Penelitian

Variabel penelitian yang digunakan berasal dari dataset BreastCancer dengan jumlah 699 observasi dan 11 variabel.Variabel prediktor meliputi Cl.thickness, Cell.size, Cell.shape, Marg.adhesion, Epith.c.size, Bare.nuclei, Bl.cromatin, Normal.nucleoli, dan Mitoses, yang menggambarkan karakteristik sel. Sementara itu, variabel respons adalah Class, yang menunjukkan kategori tumor, yaitu benign (jinak) dan malignant (ganas).

3.3 Langkah-langkah Analisis

Langkah-langkah yang digunakan pada penelitian adalah sebagai berikut:

  1. Input data berupa dataset BreastCancer yang digunakan dalam analisis klasifikasi.

  2. Membagi data menjadi data training sebesar 70% dan data testing sebesar 30% menggunakan stratified sampling berdasarkan variabel target Class.

  3. Membandingkan sembilan kombinasi parameter Random Forest, yaitu mtry = 2, 3, 5 dan ntree = 200, 500, 1000.

  4. Membentuk sembilan model Random Forest Regression menggunakan data training dengan parameter lain yang dibuat tetap.

  5. Mengevaluasi setiap model berdasarkan nilai Out-of-Bag (OOB) error untuk mengetahui tingkat kesalahan klasifikasi internal.

  6. Melakukan prediksi terhadap data testing, kemudian menghitung metrik evaluasi yang meliputi accuracy, precision, recall, specificity dan F1-score.

  7. Membandingkan kinerja sembilan model berdasarkan metrik evaluasi dan OOB error untuk menentukan model dengan kinerja terbaik.

  8. Menganalisis variable importance untuk mengidentifikasi variabel yang paling berpengaruh dalam proses klasifikasi.

  9. Membuat dan menginterpretasikan grafik perkembangan OOB error untuk mengamati perubahan tingkat kesalahan seiring bertambahnya jumlah pohon.

  10. Menarik kesimpulan berdasarkan hasil evaluasi model, variabel yang paling berpengaruh, dan kestabilan kinerja Random Forest.

BAB IV HASIL DAN PEMBAHASAN

4.1 Input Package dan Dataset

library(ranger)
## Warning: package 'ranger' was built under R version 4.6.1
library(mlbench)
## Warning: package 'mlbench' was built under R version 4.6.1
library(caret)
## Warning: package 'caret' was built under R version 4.6.1
## Loading required package: ggplot2
## Warning: package 'ggplot2' was built under R version 4.6.1
## Loading required package: lattice
library(knitr)
## Warning: package 'knitr' was built under R version 4.6.1
# A1. Memuat data
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  
##                 
##                 
##                 
##                 
## 
# A2. Persiapan data
# Menghapus Id karena hanya merupakan identifier
bc$Id <- NULL

# Menghapus observasi yang mengandung missing value
bc <- na.omit(bc)

# Memastikan respons berupa factor
bc$Class <- droplevels(as.factor(bc$Class))

# Melihat kategori respons
levels(bc$Class)
## [1] "benign"    "malignant"
# Distribusi kelas
table(bc$Class)
## 
##    benign malignant 
##       444       239
prop.table( table(bc$Class))
## 
##    benign malignant 
## 0.6500732 0.3499268

Dataset BreastCancer memiliki 699 observasi dan 11 variabel, yang terdiri atas satu variabel identitas, sembilan variabel prediktor, dan satu variabel respons, yaitu Class. Pada variabel Bare.nuclei terdapat 16 data yang hilang sehingga dilakukan penghapusan data tersebut dan variabel identitas Id yang tidak digunakan dalam pemodelan. Setelah proses pembersihan, jumlah data menjadi 683 observasi, dengan 444 data kategori benign dan 239 data kategori malignant.Proporsi data menunjukkan bahwa kategori benign sebesar 65,01%, sedangkan kategori malignant sebesar 34,99%. Variabel Class diubah menjadi faktor agar dapat digunakan dalam proses klasifikasi menggunakan metode Random Forest.

4.2 Pembagian Data Training dan Testing

# A3. 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, ]

knitr::kable(
  data.frame(
    Data = c("Training", "Testing"),
    Jumlah = c(nrow(bc.train), nrow(bc.test)),
    Benign = c(sum(bc.train$Class == "benign"), sum(bc.test$Class == "benign")),
    Malignant = c(sum(bc.train$Class == "malignant"), sum(bc.test$Class == "malignant"))
  ),
  caption = "Hasil Pembagian Data Training dan Testing"
)
Hasil Pembagian Data Training dan Testing
Data Jumlah Benign Malignant
Training 479 311 168
Testing 204 133 71

Berdasarkan hasil pembagian data, diperoleh sebanyak 479 pengamatan dengan 10 variabel sebagai data training dan 204 pengamatan dengan 10 variabel sebagai data testing. Pembagian tersebut menghasilkan proporsi sekitar 70% untuk data training dan 30% untuk data testing. Pada data training, terdapat 311 pengamatan kategori benign dan 168 pengamatan kategori malignant. Sementara itu, data testing terdiri dari 133 pengamatan kategori benign dan 71 pengamatan kategori malignant. Dengan demikian, data telah terbagi menjadi data pelatihan dan pengujian dengan proporsi kelas yang tetap terjaga untuk proses pembentukan dan evaluasi model.

4.3 Membentuk Random Forest

# A4. Membentuk Random Forest
parameter.rf <- expand.grid(
  mtry = c(2, 3, 5),
  num.trees = c(200, 500, 1000)
)

set.seed(234)
model.rf <- list()

for (i in 1:nrow(parameter.rf)) {
  model.rf[[i]] <- ranger(
    Class ~ ., data = bc.train,
    num.trees = parameter.rf$num.trees[i],
    mtry = parameter.rf$mtry[i],
    min.node.size = 1,
    replace = TRUE,
    sample.fraction = 1,
    importance = "permutation",
    seed = 234
  )
}

# Menampilkan ringkasan model pertama
model.rf[[1]]
## Ranger result
## 
## Call:
##  ranger(Class ~ ., data = bc.train, num.trees = parameter.rf$num.trees[i],      mtry = parameter.rf$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 %

Pembentukan model Random Forest Classification dilakukan dengan menggunakan kombinasi nilai mtry sebesar 2, 3, dan 5 serta jumlah pohon keputusan (num.trees) sebanyak 200, 500, dan 1000. Kombinasi kedua parameter tersebut menghasilkan 9 model Random Forest. Berdasarkan output model pertama dengan mtry = 2 dan num.trees = 200, diperoleh nilai OOB prediction error sebesar 2,92%. Nilai tersebut menunjukkan bahwa tingkat kesalahan prediksi model terhadap data out-of-bag tergolong rendah. Setiap model menghasilkan nilai OOB prediction error yang digunakan untuk melihat tingkat kesalahan prediksi internal masing-masing model.

4.4 Evaluasi Model Berdasarkan OOB Error

# A5. Melihat Evaluasi OOB

# OOB Prediction Error
hasil.oob <- data.frame(
  mtry = parameter.rf$mtry,
  num.trees = parameter.rf$num.trees,
  OOB_Error = sapply(model.rf, function(x) x$prediction.error)
)

knitr::kable(
  hasil.oob,
  digits = 4,
  caption = "Hasil OOB Prediction Error"
)
Hasil OOB Prediction Error
mtry num.trees OOB_Error
2 200 0.0292
3 200 0.0271
5 200 0.0292
2 500 0.0292
3 500 0.0292
5 500 0.0292
2 1000 0.0292
3 1000 0.0271
5 1000 0.0271
# Confusion Matrix seluruh model
for (i in 1:length(model.rf)) {
  cat("\nModel", i,
      "- mtry =", parameter.rf$mtry[i],
      "- num.trees =", parameter.rf$num.trees[i], "\n")
  print(model.rf[[i]]$confusion.matrix)
}
## 
## Model 1 - mtry = 2 - num.trees = 200 
##            predicted
## true        benign malignant
##   benign       303         8
##   malignant      6       162
## 
## Model 2 - mtry = 3 - num.trees = 200 
##            predicted
## true        benign malignant
##   benign       303         8
##   malignant      5       163
## 
## Model 3 - mtry = 5 - num.trees = 200 
##            predicted
## true        benign malignant
##   benign       303         8
##   malignant      6       162
## 
## Model 4 - mtry = 2 - num.trees = 500 
##            predicted
## true        benign malignant
##   benign       303         8
##   malignant      6       162
## 
## Model 5 - mtry = 3 - num.trees = 500 
##            predicted
## true        benign malignant
##   benign       303         8
##   malignant      6       162
## 
## Model 6 - mtry = 5 - num.trees = 500 
##            predicted
## true        benign malignant
##   benign       303         8
##   malignant      6       162
## 
## Model 7 - mtry = 2 - num.trees = 1000 
##            predicted
## true        benign malignant
##   benign       303         8
##   malignant      6       162
## 
## Model 8 - mtry = 3 - num.trees = 1000 
##            predicted
## true        benign malignant
##   benign       303         8
##   malignant      5       163
## 
## Model 9 - mtry = 5 - num.trees = 1000 
##            predicted
## true        benign malignant
##   benign       303         8
##   malignant      5       163
# Enam hasil prediksi pertama dari model pertama
head(model.rf[[1]]$predictions)
## [1] benign    benign    malignant malignant benign    benign   
## Levels: benign malignant

Berdasarkan hasil evaluasi OOB, diperoleh nilai kesalahan klasifikasi sebesar 2,92% pada model pertama, ketiga, keempat, kelima, keenam, dan ketujuh. Sementara itu, model kedua, kedelapan, dan kesembilan menghasilkan OOB error sebesar 2,71%. Hal ini menunjukkan bahwa model kedua, kedelapan, dan kesembilan memiliki tingkat kesalahan prediksi paling rendah. Hasil confusion matrix juga menunjukkan bahwa ketiga model tersebut memiliki jumlah prediksi yang benar lebih banyak pada kelas malignant dibandingkan model lainnya. Sementara itu, hasil enam prediksi pertama dari model pertama menunjukkan bahwa data diklasifikasikan ke dalam kelas benign dan malignant. Dengan demikian, kombinasi parameter mtry = 3 dan num.trees = 200, mtry = 3 dan num.trees = 1000, serta mtry = 5 dan num.trees = 1000 menghasilkan evaluasi OOB terbaik dengan tingkat kesalahan klasifikasi sebesar 2,71%.

4.5 Prediksi Data Testinng

# A6. Prediksi Data Testing

pred.rf.cls <- list()
hasil.rf.cls <- list()

for (i in 1:length(model.rf)) {

  pred.rf.cls[[i]] <- predict(
    model.rf[[i]], data = bc.test
  )$predictions

  pred.rf.cls[[i]] <- factor(
    pred.rf.cls[[i]],
    levels = levels(bc.test$Class)
  )

  hasil.rf.cls[[i]] <- data.frame(
    Aktual = bc.test$Class,
    Prediksi = pred.rf.cls[[i]]
  )
}

# Menampilkan 10 hasil prediksi pertama dari model pertama
head(hasil.rf.cls[[1]], 10)
##       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

Berdasarkan output diperoleh hasil prediksi kelas pada 10 data testing pertama menggunakan model Random Forest pertama. Hasil tersebut menunjukkan bahwa sebagian besar data berhasil diklasifikasikan sesuai dengan kelas aktualnya. Namun, terdapat satu kesalahan klasifikasi pada data pertama, yaitu kelas aktual benign diprediksi sebagai malignant. Sementara itu, sembilan data lainnya berhasil diprediksi sesuai dengan kelas aktualnya.Dengan demikian, model Random Forest telah menghasilkan prediksi terhadap data testing yang selanjutnya digunakan untuk melakukan evaluasi kinerja model.

4.6 Evaluasi Model pada Data Testing

# A7. Confusion Matrix dan Ukuran Evaluasi

evaluasi.rf <- data.frame()

for (i in 1:length(model.rf)) {

  # Confusion Matrix
  cm.rf <- confusionMatrix(
    data = pred.rf.cls[[i]],
    reference = bc.test$Class,
    positive = "malignant"
  )

  cat("\nModel", i,
      "- mtry =", parameter.rf$mtry[i],
      "- num.trees =", parameter.rf$num.trees[i], "\n")

  print(cm.rf)

  # Menghitung ukuran evaluasi
  tab.rf <- table(
    Aktual = bc.test$Class,
    Prediksi = pred.rf.cls[[i]]
  )

  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 <- rbind(
    evaluasi.rf,
    data.frame(
      mtry = parameter.rf$mtry[i],
      num.trees = parameter.rf$num.trees[i],
      Accuracy,
      Precision,
      Recall,
      Specificity,
      F1_Score = F1
    )
  )
}
## 
## Model 1 - mtry = 2 - num.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 2 - mtry = 3 - num.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 3 - mtry = 5 - num.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 4 - mtry = 2 - num.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 5 - mtry = 3 - num.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 6 - mtry = 5 - num.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 7 - mtry = 2 - num.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 8 - mtry = 3 - num.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 9 - mtry = 5 - num.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       
## 
# Menampilkan hasil evaluasi seluruh model
knitr::kable(
  evaluasi.rf,
  digits = 4,
  caption = "Hasil Evaluasi Model Random Forest pada Data Testing"
)
Hasil Evaluasi Model Random Forest pada Data Testing
mtry num.trees Accuracy Precision Recall Specificity F1_Score
2 200 0.9804 0.9589 0.9859 0.9774 0.9722
3 200 0.9706 0.9577 0.9577 0.9774 0.9577
5 200 0.9608 0.9437 0.9437 0.9699 0.9437
2 500 0.9755 0.9459 0.9859 0.9699 0.9655
3 500 0.9706 0.9577 0.9577 0.9774 0.9577
5 500 0.9608 0.9437 0.9437 0.9699 0.9437
2 1000 0.9706 0.9452 0.9718 0.9699 0.9583
3 1000 0.9657 0.9444 0.9577 0.9699 0.9510
5 1000 0.9559 0.9429 0.9296 0.9699 0.9362

Berdasarkan hasil evaluasi sembilan model Random Forest pada data testing, diperoleh nilai Accuracy sekitar antara 95,59% hingga 98,04%. Model pertama dengan kombinasi mtry = 2 dan num.trees = 200 menghasilkan kinerja terbaik, dengan Accuracy sebesar 98,04%, Precision 95,89%, Recall 98,59%, Specificity 97,74%, dan F1-score 97,22%. Hasil confusion matrix menunjukkan bahwa model tersebut berhasil mengklasifikasikan 130 data benign dan 70 data malignant dengan benar, serta hanya menghasilkan 4 kesalahan klasifikasi. Dengan demikian, model pertama memiliki kemampuan klasifikasi terbaik pada data testing berdasarkan ukuran evaluasi yang digunakan.

4.7 Analisis Variable Importance (Kepentingan Variabel)

# A8. Variable Importance

importance.rf <- list()

for (i in 1:length(model.rf)) {

  importance.rf[[i]] <- sort(
    model.rf[[i]]$variable.importance,
    decreasing = TRUE
  )

  cat("\nModel", i,
      "- mtry =", parameter.rf$mtry[i],
      "- num.trees =", parameter.rf$num.trees[i], "\n")

  print(importance.rf[[i]])

  barplot(
    importance.rf[[i]],
    las = 2,
    main = paste("Variable Importance - Model", i),
    ylab = "Permutation Importance"
  )
}
## 
## Model 1 - mtry = 2 - num.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

## 
## Model 2 - mtry = 3 - num.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

## 
## Model 3 - mtry = 5 - num.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

## 
## Model 4 - mtry = 2 - num.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

## 
## Model 5 - mtry = 3 - num.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

## 
## Model 6 - mtry = 5 - num.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

## 
## Model 7 - mtry = 2 - num.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

## 
## Model 8 - mtry = 3 - num.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

## 
## Model 9 - mtry = 5 - num.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 importance dari kesembilan model, variabel Bare.nuclei secara konsisten memiliki nilai kepentingan tertinggi, dengan nilai berkisar antara 0,0805 hingga 0,1259. Variabel berikutnya yang memiliki pengaruh besar adalah Cell.size dan Cell.shape. Sementara itu, variabel Mitoses secara konsisten memiliki nilai importance paling rendah, yaitu sekitar 0,0026 hingga 0,0038. Hasil tersebut menunjukkan bahwa Bare.nuclei merupakan variabel yang paling berpengaruh dalam proses klasifikasi BreastCancer, sedangkan Mitoses memberikan kontribusi paling kecil. Pola ini relatif konsisten pada seluruh kombinasi mtry dan num.trees, sehingga perubahan parameter tidak mengubah variabel yang menempati urutan kepentingan tertinggi maupun terendah.

4.8 Visualisasi OOB Error

# A9. Visualisasi OOB Error

barplot(
  hasil.oob$OOB_Error,
  names.arg = paste0("Model ", 1:9),
  col = "skyblue",
  ylim = c(0, max(hasil.oob$OOB_Error) * 1.2),
  main = "Perbandingan OOB Error",
  xlab = "Model",
  ylab = "OOB Error",
  las = 1
)

Berdasarkan grafik perbandingan OOB Error, terlihat bahwa nilai kesalahan klasifikasi dari sembilan model berada pada kisaran 2,71% hingga 2,92%. Model 2, 8, dan 9 memiliki OOB Error terendah sebesar 2,71%, sedangkan model lainnya sebesar 2,92%. Hal ini menunjukkan bahwa model 2, 8, dan 9 memiliki tingkat kesalahan klasifikasi internal yang lebih rendah dibandingkan model lainnya. Dengan demikian, ketiga model tersebut memberikan hasil evaluasi internal yang lebih baik berdasarkan nilai OOB Error.

BAB V KESIMPULAN DAN SARAN

5.1 Kesimpulan

Random Forest dan Double Random Forest merupakan metode ensemble learning berbasis decision tree yang digunakan untuk meningkatkan kemampuan prediksi dengan menggabungkan hasil dari beberapa pohon keputusan. Random Forest membangun sejumlah pohon keputusan menggunakan pemilihan sampel dan variabel secara acak, sedangkan Double Random Forest merupakan pengembangan metode Random Forest dengan pendekatan dua tahap pembentukan model.

Implementasi Random Forest dan Double Random Forest dapat dilakukan untuk permasalahan klasifikasi maupun regresi. Pada klasifikasi, kedua metode digunakan untuk memprediksi kelas suatu pengamatan, sedangkan pada regresi digunakan untuk memprediksi nilai numerik berdasarkan variabel prediktor. Proses implementasi meliputi persiapan data, pembentukan model, prediksi, dan evaluasi hasil pemodelan.

Evaluasi performa model dilakukan untuk mengetahui kemampuan model dalam menghasilkan prediksi. Pada klasifikasi, evaluasi dapat menggunakan confusion matrix, Accuracy, Precision, Recall, Specificity, dan F1-score, sedangkan pada regresi dapat menggunakan ukuran kesalahan prediksi seperti MSE dan RMSE. Selain itu, OOB Error digunakan sebagai evaluasi internal Random Forest, sehingga performa Random Forest dan Double Random Forest dapat dibandingkan berdasarkan ukuran evaluasi yang digunakan.

Berdasarkan hasil batasan masalah menunjukkan bahwa model pertama dengan kombinasi mtry = 2 dan num.trees = 200 memberikan performa terbaik pada data testing dengan Accuracy sebesar 98,04%, Precision 95,89%, Recall 98,59%, Specificity 97,74%, dan F1-score 97,22%. Sementara itu, model kedua, kedelapan, dan kesembilan menghasilkan OOB Error terendah sebesar 2,71%. Hasil variabel importance menunjukkan bahwa Bare.nuclei merupakan variabel paling berpengaruh, sedangkan Mitoses memiliki tingkat kepentingan paling rendah pada seluruh model. Dengan demikian, seluruh tahapan analisis Random Forest Classification pada dataset BreastCancer telah dilakukan, mulai dari persiapan data hingga evaluasi, visualisasi, dan interpretasi hasil model.

DAFTAR PUSTAKA

Amaliah, S., Nursang, M., & Aswi. (2022). Penerapan metode Random Forest untuk klasifikasi varian minuman kopi di Kedai Kopi Konijiwa Bantaeng. VARIANSI: Journal of Statistics and Its Application on Teaching and Research, 4(2), 121–127.

Aprilia, K., Rosihan, Abdullah, S. D., Turuy, S., & Usmanullah, A. A. H. (2026). Penerapan algoritma Random Forest untuk klasifikasi predikat kelulusan mahasiswa Universitas Khairun. JATI (Jurnal Jaringan dan Teknologi Informasi), 4(2), 23–30

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

Fransiska, H. (2026). Modul praktikum machine learning and modern prediction. Universitas Bengkulu.

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

Khairunnisa, A., Notodiputro, K. A., & Sartono, B. (2024). A comparative study of Random Forest and Double Random Forest models from view points of their interpretability. Scientific Journal of Informatics, 11(1).

Nugroho, M. W., & Hendry, H. (2025). Analisis performa algoritma Random Forest dalam mengatasi overfitting pada model prediksi. Jurnal JTIK (Jurnal Teknologi Informasi dan Komunikasi), 9(4), 1562–1571.

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.