Penerapan machine learning sudah sangat populer dalam berbagai bidang termasuk bidang studi medis. Machine learning menyediakan berbagai layanan manipulasi seperti mengeksplorasi pola yang tidak diketahui, melakukan proses klasifikasi, clustering, deteksi anomali data, meningkatkan model prediksi klinis serta membantu dalam pengambilan keputusan medis (Pushpavathi dkk., 2021; Adler dkk., 2020; Reddy dkk., 2021). Random Forest adalah metode klasifikasi yang dikembangkan dari metode Decision Tree, di mana pemilihan atribut pada setiap node dilakukan secara acak untuk menentukan klasifikasi. Dalam proses klasifikasinya, keputusan akhir didasarkan pada mayoritas suara dari semua pohon keputusan yang telah dibentuk.
Pembentukan Random Forest menggunakan teknik yang dikenal sebagai bagging, dengan pemilihan atribut secara acak (Prayoga & Ermatita, 2024). Random Forest digunakan karena keandalannya dalam memprediksi hasil berdasarkan data yang kompleks dan bervariasi. Algoritma ini mampu mengolah sejumlah besar data dan variabel, serta menghasilkan model prediksi yang akurat. Random Forest juga dapat menangani data yang tidak seimbang dan mengurangi risiko overfitting, sehingga hasil prediksi lebih dapat diandalkan (Ilma dkk., 2023). RF menggunakan metode ensemble dengan pengembangan dari teknik bootstrap and aggregating, di mana training set akan disampel menggunakan metode random sampling with replacement (Han dkk., 2012).
Kelebihan dari Random Forest adalah kemampuannya dalam menangani ketergantungan dan interaksi antara variabel yang kompleks serta mampu mengatasi overfitting seiring penambahan jumlah pohon dan proses relatif cepat (Tantyoko dkk., 2023); (Breiman & Cutler, 2004).
Adapun batasan masalah pada penelitian ini yaitu lakukan analisis Random Forest secara lengkap mulai dari persiapan data, pembentukan model, prediksi, evaluasi, visualisasi, dan interpretasi. Gunakan set.seed(234) agar hasil dapat direproduksi.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.
Random Forest adalah algoritma untuk supervised learning yang bisa digunakan untuk klasifikasi maupun regresi. Algoritma ini paling fleksibel dan mudah digunakan. Random Forest (RF) terdiri dari beberapa Decision Tree. Semakin banyak Decision Tree yang dimiliki, semakin kuat algoritma Random Forest tersebut (Erlin dkk., 2022).
Algoritma Random Forest menggunakan rata-rata untuk meningkatkan akurasi prediksi dan kontrol overfitting. Ukuran sub-sampel dikontrol dengan parameter max_samples jika bootstrap=True (default), jika tidak, seluruh dataset digunakan untuk membangun setiap pohon (Pedregosa dkk., 2011).
Algoritma RF disebut dengan hutan acak karena terbentuk dari kombinasi pohon yang setiap pohon bergantung pada nilai acak dan saling bebas (Breiman, 2001). Kelebihan RF cocok untuk data berdimensi sedang hingga besar yakni ketika jumlah peubah prediktor lebih besar dari banyaknya observasi karena RF bekerja dengan tidak menggunakan semua peubah prediktor sekaligus (Schonlau & Zou, 2020). Semakin sedikit peubah yang digunakan, menyebabkan korelasi antar pohon menjadi lebih rendah. Terjadinya hal tersebut diharapkan akan menghasilkan akurasi prediksi akhir yang lebih baik (Han dkk., 2020).
RF menggunakan metode ensemble dengan pengembangan dari teknik bagging (bootstrap and aggregating) (Han dkk., 2012). Training set akan disampel menggunakan metode random sampling with replacement sejumlah tree yang diinginkan. Penggunaan bagging dan random feature membuat uncorrelated forest of decision trees. Adapun tahapan kerja algoritma RF adalah sebagai berikut (Nurpiana & Wijayanto, 2022):
Double Random Forest (DRF) dikembangkan dari RF ketika data RF mengalami underfit. DRF menggunakan bootstrap pada setiap node selama proses pembentukan pohon. Algoritma ini merupakan algoritma improvisasi dari RF ketika data RF mengalami underfit. DRF menggunakan seluruh sampel data latih untuk membangun pohon keputusan (Manaf dkk., 2024). Seluruh pohon yang dibentuk pada DRF berasal dari data yang sama akan menghasilkan contoh unik yang banyak. Semakin banyak contoh unik yang dimiliki, akan semakin besar pohon yang dihasilkan (Han dkk., 2020).
Adanya DRF diharapkan dapat menghasilkan pohon keputusan yang lebih besar dan bisa meningkatkan performa yang maksimum sesuai dengan ukuran node minimum (Ganaie dkk., 2022). DRF melakukan bootstrap pada setiap node untuk mendapatkan pemisah terbaik dan kondisi lain ketika tidak memerlukan bootstrap, yakni saat suatu node memiliki sampel kurang dari 10% dari total sampel. Setiap hasil prediksi suatu pohon akan digabungkan dengan menggunakan majority vote (Han dkk., 2020).
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)\} \] Untuk regresi, hasil akhir diperoleh dengan merata-ratakan prediksi semua tree:
\[ \hat{f}_{RF}(x) = \left(\frac{1}{B}\right) \sum_{b=1}^{B} T_b(x) \]
Dengan demikian, Random Forest tetap merupakan metode parallel ensemble, dengan setiap tree dapat dibentuk secara relatif independen, berbeda dari Boosting yang bersifat sequential.
Secara sederhana, proses Double Random Forest dilakukan sebagai berikut (Fransiska, 2026)::
Model Random Forest Regressor dievaluasi menggunakan beberapa metrik utama untuk menilai kinerjanya. Tujuannya adalah menarik kesimpulan dari hasil penerapan algoritma untuk memahami kinerja, keberhasilan, serta mengidentifikasi pola-pola atau karakteristik yang muncul selama proses learning (Hurifiani dkk., 2024). Metrik pertama, OOB Score, mengukur akurasi model dengan data sampel yang tidak terlibat dalam pelatihan, memberikan indikasi kemampuan generalisasi model. MSE digunakan untuk mengidentifikasi rata-rata kuadrat kesalahan antara prediksi dan nilai aktual, memberikan bobot lebih pada kesalahan besar. R-squared mengukur seberapa baik model dapat menjelaskan variabilitas dalam data target, yang menggambarkan kekuatan hubungan antara variabel independen dan dependen. Terakhir, MAE mengukur rata-rata kesalahan absolut pada prediksi, yang secara langsung menggambarkan tingkat kesalahan dalam satuan yang sama dengan data target (Hidayat dkk., 2025).
Nilai aktual adalah nilai sebenarnya yang diperoleh dari data yang digunakan, sedangkan nilai prediksi adalah nilai yang diperoleh dari hasil pengimplementasian algoritma Random Forest. Kedua nilai tersebut dibandingkan untuk melihat seberapa baik kinerja dari algoritma yang digunakan. Model Random Forest regression digunakan untuk mendapatkan nilai prediksi dengan nilai akurasi terbaik. Penentuan jumlah pohon sangat berpengaruh pada nilai akurasi, di mana semakin kecil nilai semakin baik model prediksi yang dihasilkan (Nur dkk., 2024).
Teknik pengujian yang digunakan adalah Root Mean Squared Error (RMSE), Mean Absolute Percentage Error (MAPE) dan koefisien determinasi (R2), untuk mengukur ketepatan ramalan untuk mengetahui hasil Algoritma Random Forest Regression dalam memprediksi hasil. RMSE yaitu besarnya angka kesalahan antara nilai aktual dan nilai prediksi yang telah ditentukan. Rumus untuk mencari nilai RMSE yaitu (Nur dkk., 2023):
\[ RMSE = \sqrt{\frac{1}{N}\sum_{i=1}^{N}(Y_i-{Y}_n)^2} \]
Semakin rendah nilai MAPE, maka semakin baik model yang dihasilkan karena tingkat akurasinya akan tinggi. Nilai Akurasi diperoleh berdasarkan persamaan:
\[ \text{Akurasi} = 100\% - MAPE \]
Nilai Mean Absolute Percentage Error (MAPE) yaitu: \[ MAPE = \frac{1}{N}\sum_{i=1}^{N}\frac{Y_i-Y_n}{Y_i}\times 100\% \]
dimana,
Yi: nilai prediksi
Yn: nilai aktual
𝑁 : jumlah dataset sampel
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).
Sumber data yang digunakan dalam penelitian ini adalah data sekunder berupa dataset BreastCancer dari package mlbench pada program R, yang digunakan untuk klasifikasi kondisi kanker payudara.
Pada penelitian ini, variabel yang digunakan terdiri atas variabel prediktor dan variabel target. Variabel target yang digunakan yaitu Class, sedangkan variabel prediktor terdiri atas Cl.thickness (ketebalan gumpalan sel), Cell.size (keseragaman ukuran sel), Cell.shape (keseragaman bentuk sel), Marg.adhesion (perlekatan sel), Epith.c.size (ukuran sel epitel), Bare.nuclei (kondisi inti sel), Bl.cromatin (struktur kromatin sel), Normal.nucleoli (kondisi nukleolus sel), dan Mitoses (aktivitas pembelahan sel). Variabel Class menunjukkan kondisi kanker payudara yang dikategorikan menjadi benign (jinak) dan malignant (ganas).
Langkah-langkah analisis yang dilakukan adalah sebagai berikut.
Id dan menangani missing value.set.seed(234).mtry dan num.trees yang telah ditentukan.## Loading required package: ggplot2
## Loading required package: lattice
## '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 ...
## 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
##
##
##
##
##
# Persiapan data
bc$Id <- NULL
bc <- na.omit(bc)
bc$Class <- droplevels(as.factor(bc$Class))
levels(bc$Class)## [1] "benign" "malignant"
##
## benign malignant
## 444 239
##
## benign malignant
## 0.6500732 0.3499268
Dataset BreastCancer awalnya terdiri atas 699 observasi dan 11 variabel. Setelah variabel Id dihapus dan 16 data yang memiliki missing value dikeluarkan, tersisa 683 observasi. Data tersebut terdiri atas 444 kategori benign (65,01%) dan 239 kategori malignant (34,99%). Hasil ini menunjukkan bahwa kategori benign lebih banyak dibandingkan malignant.
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
## [1] 204 10
##
## benign malignant
## 311 168
##
## benign malignant
## 133 71
Data dibagi menjadi 479 observasi (70%) sebagai data training dan 204 observasi (30%) sebagai data testing. Data training terdiri atas 311 kategori benign dan 168 malignant, sedangkan data testing terdiri atas 133 kategori benign dan 71 malignant.
kombinasi.rf <- expand.grid(
mtry = c(2, 3, 5),
num.trees = c(200, 500, 1000))
hasil.model <- list()
for (i in 1:nrow(kombinasi.rf)) {
set.seed(234)
rf.cls <- ranger(
Class ~ .,
data = bc.train,
num.trees = kombinasi.rf$num.trees[i],
mtry = kombinasi.rf$mtry[i],
min.node.size = 1,
replace = TRUE,
sample.fraction = 1,
importance = "permutation",
seed = 234
)
nama.model <- paste0(
"mtry_", kombinasi.rf$mtry[i],
"_trees_", kombinasi.rf$num.trees[i]
)
hasil.model[[nama.model]] <- rf.cls
}Pembentukan model Random Forest dilakukan menggunakan sembilan kombinasi parameter, yaitu mtry sebesar 2, 3, dan 5 serta num.trees sebanyak 200, 500, dan 1000 pohon. Setiap kombinasi menghasilkan satu model yang disimpan untuk proses prediksi dan evaluasi. Perbandingan tersebut bertujuan mengetahui kombinasi parameter yang memberikan performa klasifikasi terbaik.
hasil.oob <- data.frame(
Model = names(hasil.model),
mtry = kombinasi.rf$mtry,
Num_Trees = kombinasi.rf$num.trees,
OOB_Error = sapply(
hasil.model,
function(x) x$prediction.error))
hasil.oob## Model mtry Num_Trees OOB_Error
## mtry_2_trees_200 mtry_2_trees_200 2 200 0.02922756
## mtry_3_trees_200 mtry_3_trees_200 3 200 0.02713987
## mtry_5_trees_200 mtry_5_trees_200 5 200 0.02922756
## mtry_2_trees_500 mtry_2_trees_500 2 500 0.02922756
## mtry_3_trees_500 mtry_3_trees_500 3 500 0.02922756
## mtry_5_trees_500 mtry_5_trees_500 5 500 0.02922756
## mtry_2_trees_1000 mtry_2_trees_1000 2 1000 0.02922756
## mtry_3_trees_1000 mtry_3_trees_1000 3 1000 0.02713987
## mtry_5_trees_1000 mtry_5_trees_1000 5 1000 0.02713987
Hasil evaluasi OOB menunjukkan bahwa nilai kesalahan klasifikasi seluruh model berkisar antara 0,0271 hingga 0,0292 atau sekitar 2,71%–2,92%. Nilai OOB error terendah sebesar 0,0271 diperoleh pada model mtry_3_trees_200, mtry_3_trees_1000, dan mtry_5_trees_1000. Ketiga model tersebut memiliki kesalahan klasifikasi internal paling rendah, yaitu sekitar 2,71%.
hasil.prediksi <- list()
for (i in 1:length(hasil.model)) {
pred.rf.cls <- predict(
hasil.model[[i]],
data = bc.test
)$predictions
pred.rf.cls <- factor(
pred.rf.cls,
levels = levels(bc.test$Class))
hasil.prediksi[[i]] <- data.frame(
Aktual = bc.test$Class,
Prediksi = pred.rf.cls)
}
head(hasil.prediksi[[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
Hasil prediksi menunjukkan bahwa 9 dari 10 observasi memiliki kategori yang sesuai dengan data aktual, sedangkan 1 observasi mengalami kesalahan klasifikasi, yaitu kategori benign diprediksi sebagai malignant. Hasil ini menunjukkan bahwa model Random Forest mampu mengklasifikasikan sebagian besar data testing dengan tepat.
hasil.evaluasi <- data.frame()
for (i in 1:length(hasil.model)) {
cat("\nModel:", names(hasil.model)[i], "\n")
pred.rf.cls <- hasil.prediksi[[i]]$Prediksi
cm.rf <- confusionMatrix(
data = pred.rf.cls,
reference = bc.test$Class,
positive = "malignant")
print(cm.rf)
tab.rf <- table(
Aktual = bc.test$Class,
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(
Accuracy,
Precision,
Recall,
Specificity,
F1_Score = F1)
hasil.evaluasi <- rbind(
hasil.evaluasi,
data.frame(
Model = names(hasil.model)[i],
mtry = kombinasi.rf$mtry[i],
Num_Trees = kombinasi.rf$num.trees[i],
evaluasi.rf))
}##
## 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
##
Hasil confusion matrix menunjukkan bahwa model Random Forest mampu mengklasifikasikan data testing dengan baik. Model mtry_2_trees_200 memperoleh akurasi tertinggi sebesar 98,04%, dengan 130 data benign dan 70 data malignant berhasil diprediksi secara tepat. Model tersebut juga menghasilkan precision sebesar 95,89%, recall sebesar 98,59%, specificity sebesar 97,74%, dan F1-score sebesar 97,23%. Hasil ini menunjukkan bahwa model mtry_2_trees_200 memiliki kinerja klasifikasi terbaik dibandingkan model lainnya berdasarkan hasil pengujian.
## Model mtry Num_Trees Accuracy Precision Recall Specificity
## 1 mtry_2_trees_200 2 200 0.9803922 0.9589041 0.9859155 0.9774436
## 2 mtry_3_trees_200 3 200 0.9705882 0.9577465 0.9577465 0.9774436
## 3 mtry_5_trees_200 5 200 0.9607843 0.9436620 0.9436620 0.9699248
## 4 mtry_2_trees_500 2 500 0.9754902 0.9459459 0.9859155 0.9699248
## 5 mtry_3_trees_500 3 500 0.9705882 0.9577465 0.9577465 0.9774436
## 6 mtry_5_trees_500 5 500 0.9607843 0.9436620 0.9436620 0.9699248
## 7 mtry_2_trees_1000 2 1000 0.9705882 0.9452055 0.9718310 0.9699248
## 8 mtry_3_trees_1000 3 1000 0.9656863 0.9444444 0.9577465 0.9699248
## 9 mtry_5_trees_1000 5 1000 0.9558824 0.9428571 0.9295775 0.9699248
## F1_Score
## 1 0.9722222
## 2 0.9577465
## 3 0.9436620
## 4 0.9655172
## 5 0.9577465
## 6 0.9436620
## 7 0.9583333
## 8 0.9510490
## 9 0.9361702
## Accuracy Precision Recall Specificity F1_Score
## 1 0.9804 0.9589 0.9859 0.9774 0.9722
## 2 0.9706 0.9577 0.9577 0.9774 0.9577
## 3 0.9608 0.9437 0.9437 0.9699 0.9437
## 4 0.9755 0.9459 0.9859 0.9699 0.9655
## 5 0.9706 0.9577 0.9577 0.9774 0.9577
## 6 0.9608 0.9437 0.9437 0.9699 0.9437
## 7 0.9706 0.9452 0.9718 0.9699 0.9583
## 8 0.9657 0.9444 0.9577 0.9699 0.9510
## 9 0.9559 0.9429 0.9296 0.9699 0.9362
Hasil evaluasi menunjukkan bahwa model mtry_2_trees_200 memperoleh kinerja terbaik dibandingkan 8 model lainnya, dengan nilai accuracy sebesar 98,04%, precision 95,89%, recall 98,59%, specificity 97,74%, dan F1-score 97,22%. Model tersebut memiliki kemampuan klasifikasi yang tinggi, baik dalam memprediksi kelas malignant maupun benign. Sementara, model mtry_5_trees_1000 menghasilkan nilai evaluasi terendah, dengan accuracy sebesar 95,59% dan F1-score 93,62%. Hasil ini menunjukkan bahwa penggunaan nilai mtry dan jumlah pohon yang berbeda menghasilkan kinerja klasifikasi yang bervariasi.
for (i in 1:length(hasil.model)) {
cat("\nModel:", names(hasil.model)[i], "\n")
importance.rf <- sort(
hasil.model[[i]]$variable.importance,
decreasing = TRUE
)
print(importance.rf)
barplot(
importance.rf,
las = 2,
main = paste(
"Variable Importance -",
names(hasil.model)[i]
),
ylab = "Permutation Importance"
)
}##
## Model: 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
##
## Model: 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
##
## Model: 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
##
## Model: 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
##
## Model: 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
##
## Model: 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
##
## Model: 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
##
## Model: 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
##
## Model: 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
Hasil variable importance menunjukkan bahwa variabel Bare.nuclei memiliki tingkat kepentingan tertinggi sebesar 0,0839, diikuti Cell.size sebesar 0,0787 dan Cell.shape sebesar 0,0610. Sementara, Mitoses memiliki tingkat kepentingan terendah sebesar 0,0038. Hasil ini menunjukkan bahwa Bare.nuclei, Cell.size, dan Cell.shape merupakan variabel yang paling berpengaruh terhadap hasil klasifikasi model Random Forest mtry_2_trees_200.
# Perbandingan Accuracy
barplot(
hasil.evaluasi$Accuracy,
names.arg = hasil.evaluasi$Model,
las = 2,
main = "Perbandingan Accuracy Random Forest",
ylab = "Accuracy",
ylim = c(0, 1)
)# Perbandingan Precision
barplot(
hasil.evaluasi$Precision,
names.arg = hasil.evaluasi$Model,
las = 2,
main = "Perbandingan Precision Random Forest",
ylab = "Precision",
ylim = c(0, 1)
)# Perbandingan Recall
barplot(
hasil.evaluasi$Recall,
names.arg = hasil.evaluasi$Model,
las = 2,
main = "Perbandingan Recall Random Forest",
ylab = "Recall",
ylim = c(0, 1)
)# Perbandingan Specificity
barplot(
hasil.evaluasi$Specificity,
names.arg = hasil.evaluasi$Model,
las = 2,
main = "Perbandingan Specificity Random Forest",
ylab = "Specificity",
ylim = c(0, 1)
)# Perbandingan F1-score
barplot(
hasil.evaluasi$F1_Score,
names.arg = hasil.evaluasi$Model,
las = 2,
main = "Perbandingan F1-Score Random Forest",
ylab = "F1-Score",
ylim = c(0, 1)
)# Perbandingan OOB Error
barplot(
hasil.oob$OOB_Error,
names.arg = hasil.oob$Model,
las = 2,
main = "Perbandingan OOB Error Random Forest",
ylab = "OOB Error"
)## Model mtry Num_Trees Accuracy Precision Recall Specificity
## 1 mtry_2_trees_200 2 200 0.9803922 0.9589041 0.9859155 0.9774436
## 4 mtry_2_trees_500 2 500 0.9754902 0.9459459 0.9859155 0.9699248
## 7 mtry_2_trees_1000 2 1000 0.9705882 0.9452055 0.9718310 0.9699248
## 2 mtry_3_trees_200 3 200 0.9705882 0.9577465 0.9577465 0.9774436
## 5 mtry_3_trees_500 3 500 0.9705882 0.9577465 0.9577465 0.9774436
## 8 mtry_3_trees_1000 3 1000 0.9656863 0.9444444 0.9577465 0.9699248
## 3 mtry_5_trees_200 5 200 0.9607843 0.9436620 0.9436620 0.9699248
## 6 mtry_5_trees_500 5 500 0.9607843 0.9436620 0.9436620 0.9699248
## 9 mtry_5_trees_1000 5 1000 0.9558824 0.9428571 0.9295775 0.9699248
## F1_Score
## 1 0.9722222
## 4 0.9655172
## 7 0.9583333
## 2 0.9577465
## 5 0.9577465
## 8 0.9510490
## 3 0.9436620
## 6 0.9436620
## 9 0.9361702
## Model mtry Num_Trees Accuracy Precision Recall Specificity
## 1 mtry_2_trees_200 2 200 0.9803922 0.9589041 0.9859155 0.9774436
## F1_Score
## 1 0.9722222
## Model mtry Num_Trees OOB_Error
## mtry_3_trees_200 mtry_3_trees_200 3 200 0.02713987
Berdasarkan hasil pengurutan nilai F1-score, model mtry_2_trees_200 memperoleh nilai tertinggi sebesar 97,22%. Model tersebut juga menghasilkan accuracy sebesar 98,04%, precision 95,89%, recall 98,59%, dan specificity 97,74%. Hasil ini menunjukkan bahwa model mtry_2_trees_200 memiliki keseimbangan terbaik antara precision dan recall serta ketepatan klasifikasi tertinggi pada data testing.
Hasil evaluasi OOB menunjukkan bahwa model mtry_3_trees_200 memiliki nilai kesalahan terendah sebesar 2,71%. Meskipun demikian, model mtry_2_trees_200 dipilih sebagai model terbaik karena menghasilkan nilai accuracy dan F1-score tertinggi berdasarkan evaluasi data testing.
Penerapan algoritma Random Forest Classification pada dataset BreastCancer yang dibagi menjadi 479 sebagai data training dan 204 sebagai data testing. Pembentukan model dilakukan menggunakan 9 kombinasi parameter mtry sebesar 2, 3, dan 5 serta num.trees sebanyak 200, 500, dan 1000. Hasil evaluasi menunjukkan bahwa model mtry_2_trees_200 menghasilkan 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, nilai OOB error terendah sebesar 2,71% diperoleh oleh model mtry_3_trees_200, mtry_3_trees_1000, dan mtry_5_trees_1000. Berdasarkan analisis variable importance, variabel Bare.nuclei memiliki tingkat kepentingan tertinggi, sedangkan Mitoses memiliki tingkat kepentingan terendah. Hasil tersebut menunjukkan bahwa algoritma Random Forest mampu menghasilkan klasifikasi dengan tingkat ketepatan yang tinggi pada dataset yang digunakan.
Berdasarkan hasil penelitian yang telah dilakukan, disarankan untuk menggunakan variasi kombinasi parameter yang lebih beragam untuk memperoleh model dengan performa klasifikasi yang lebih optimal. Persiapan data, pemilihan parameter, serta evaluasi model juga perlu diperhatikan secara cermat agar hasil analisis yang diperoleh lebih akurat.
Adler, E. D., Voors, A. A., Klein, L., Macheret, F., Braun, O. O., Urey, M. A., Zhu, W., Sama, I., Tadel, M., Campagnari, C., Greenberg, B., & Yagil, A. (2020). Improving risk prediction in heart failure using machine learning. European Journal of Heart Failure, 22(1), 139–147.
Breiman, L. (2001). Random forests. Machine Learning, 45, 5–32. https://doi.org/10.1023/A:1010933404324
Breiman, L., & Cutler, A. (2004). RFtools for predicting and understanding data. Interface Work, 1–62.
Erlin, Desnelita, Y., Nasution, N., Suryati, L., & Zoromi, F. (2022). Dampak SMOTE terhadap kinerja random forest classifier berdasarkan data tidak seimbang. Matrik: Jurnal Manajemen, Teknik Informatika, dan Rekayasa Komputer, 21(3), 677–690. https://doi.org/10.30812/matrik.v21i3.1726
Fransiska, H. (2026). Modul praktikum machine learning and modern prediction. Universitas Bengkulu.
Ganaie, M. A., Tanveer, M., Suganthan, P. N., & Snášel, V. (2022). Oblique and rotation double random forest. Neural Networks, 153, 496–517. https://doi.org/10.1016/j.neunet.2022.06.013
Han, J., Kamber, M., & Pei, J. (2012). Data mining: Concepts and techniques (3rd ed.). Morgan Kaufmann.
Han, S., Kim, H., & Lee, Y. S. (2020). Double random forest. Machine Learning, 198, 1569–1586.
Hidayat, R., Saputra, H. T., Husnah, M., Nabila, Hidayatullah, M. B., Nazhmi, M. N., Azra, J., & Rana, A. (2025). Implementasi algoritma random forest regression untuk memprediksi penjualan produk di supermarket. Jurnal Sistem Informasi dan Sistem Komputer, 10(1), 101–109. https://doi.org/10.51717/simkom.v10i1.703
Hurifiani, A., Purnamasari, A. I., & Ali, I. (2024). Penerapan algoritma regresi linear untuk prediksi penjualan alat tulis kantor (ATK) di BUMDes. JATI (Jurnal Mahasiswa Teknik Informatika), 8(1), 266–273. https://doi.org/10.36040/jati.v8i1.8305
Ilma, H., Notodiputro, K. A., & Sartono, B. (2023). Association rules in random forest for the most interpretable model. BAREKENG: Jurnal Ilmu Matematika dan Terapan, 17(1), 185–196. https://doi.org/10.30598/barekengvol17iss1pp0185-0196
Manaf, S. A. R., Fitrianto, A., & Soleh, A. M. (2024). Perbandingan algoritma pohon dengan beberapa skenario pelabelan untuk analisis sentimen pada aplikasi milik pemerintah/BUMN. JEPIN (Jurnal Edukasi dan Penelitian Informatika), 10(1), 24–32
Nur, N., Wajidi, F., Sulfayanti, & Wildayani. (2023). Implementasi algoritma random forest regression untuk memprediksi hasil panen padi di Desa Minanga. Jurnal Komputer Terapan, 9(1), 58–64. https://jurnal.pcr.ac.id/index.php/jkt/article/view/5917/2062
Nurpiana, A., & Wijayanto, A. W. (2022). Comparison of models for classification of learning achievement of middle school students in Indonesia in 2019 using the support vector machine algorithm, conditional inference trees, and random forest. Jurnal Matematika, Statistika dan Komputasi, 18(3), 447–455. https://doi.org/10.20956/j.v18i3.19208
Pedregosa, F., Varoquaux, G., Gramfort, A., Michel, V., & Thirion, B. (2011). Scikit-learn: Machine learning in Python. Journal of Machine Learning Research, 12, 2825–2830.
Prayoga, M. H. B., & Ermatita. (2024). Analisis pemilihan jurusan pada calon siswa SMK Negeri 4 Palembang pada faktor penentu pemilihan jurusan menggunakan association rule dan random forest. Jurnal Pendidikan dan Teknologi Indonesia, 4(12), 537–547. https://doi.org/10.52436/1.jpti.449
Pushpavathi, T. P., Kumari, S., & Kubra, N. K. (2021). Heart failure prediction by feature ranking analysis in machine learning. Proceedings of the 6th International Conference on Inventive Computation Technologies (ICICT 2021), 915–923.
Reddy, K. V. V., Elamvazuthi, I., Aziz, A. A., Paramasivam, S., Chua, H. N., & Pranavanand, S. (2021). Heart disease risk prediction using machine learning classifiers with attribute evaluators. Applied Sciences, 11(18).
Schonlau, M., & Zou, R. Y. (2020). The random forest algorithm for statistical learning. The Stata Journal, 20(1), 3–29. https://doi.org/10.1177/1536867X20909688
Tantyoko, H., Sari, D. K., & Wijaya, A. R. (2023). Prediksi potensial gempa bumi Indonesia menggunakan metode random forest dan feature selection. IDEALIS: Indonesian Journal of Information System, 6(2), 83–89. https://doi.org/10.36080/idealis.v6i2.3036