Perkembangan teknologi informasi dan ilmu pengetahuan telah menghasilkan peningkatan jumlah data yang dapat dimanfaatkan dalam berbagai bidang. Data yang semakin kompleks membutuhkan metode analisis yang mampu mengidentifikasi pola, hubungan, serta menghasilkan prediksi secara akurat. Salah satu bidang yang berkembang untuk mengatasi permasalahan tersebut adalah machine learning, yaitu bagian dari kecerdasan buatan yang memungkinkan komputer mempelajari pola dari data untuk melakukan klasifikasi maupun prediksi. Dalam penerapannya, metode machine learning terdiri atas berbagai pendekatan, salah satunya adalah ensemble learning yang menggabungkan beberapa model untuk menghasilkan prediksi yang lebih baik dibandingkan penggunaan satu model secara individual.
Salah satu metode ensemble learning yang banyak digunakan adalah Random Forest. Metode ini merupakan pengembangan dari algoritma decision tree yang membentuk sejumlah pohon keputusan secara acak dan menggabungkan hasil prediksinya. Proses pembentukan pohon dilakukan menggunakan teknik bootstrap aggregating (bagging), yaitu pengambilan sampel secara acak dengan pengembalian dari data pelatihan. Selain itu, Random Forest memilih sejumlah variabel prediktor secara acak pada setiap proses pemisahan simpul (node). Pada permasalahan klasifikasi, hasil prediksi ditentukan berdasarkan suara terbanyak (majority voting) dari seluruh pohon, sedangkan pada permasalahan regresi, hasil prediksi diperoleh melalui rata-rata prediksi seluruh pohon. Penggabungan tersebut bertujuan mengurangi varians model dan meningkatkan kemampuan prediksi terhadap data baru (Jain dan Jana, 2023).
Random Forest memiliki beberapa keunggulan, di antaranya mampu menangani data dengan jumlah variabel prediktor yang relatif banyak, dapat digunakan untuk permasalahan klasifikasi dan regresi, serta menyediakan informasi mengenai tingkat kepentingan variabel (variable importance). Selain itu, Random Forest memiliki evaluasi internal yang disebut Out-of-Bag (OOB) error. OOB diperoleh dari pengamatan yang tidak terpilih dalam sampel bootstrap pada pembentukan suatu pohon. Pengamatan tersebut kemudian digunakan untuk menguji hasil prediksi pohon yang bersangkutan sehingga dapat memberikan perkiraan kesalahan model selama proses pelatihan berlangsung (Smith et al., 2024).
Meskipun memiliki kemampuan prediksi yang baik, Random Forest masih dapat dikembangkan untuk memperoleh struktur pohon yang lebih beragam. Salah satu metode pengembangannya adalah Double Random Forest (DRF). Perbedaan utama antara Random Forest dan Double Random Forest terletak pada mekanisme pengambilan sampel bootstrap. Random Forest melakukan pengambilan sampel pada awal pembentukan setiap pohon, sedangkan Double Random Forest menerapkan pengambilan sampel bootstrap pada setiap simpul selama proses pembentukan pohon.
Berdasarkan uraian tersebut, pemahaman mengenai Random Forest dan Double Random Forest menjadi penting untuk mengetahui prinsip kerja, tahapan pembentukan model, serta kemampuan kedua metode dalam menyelesaikan permasalahan klasifikasi dan regresi. Selain memahami konsep dasar, diperlukan pula implementasi menggunakan perangkat lunak R agar mahasiswa mampu melakukan persiapan data, membentuk model, melakukan prediksi, mengevaluasi performa, dan menginterpretasikan hasil analisis. Perbandingan kedua metode juga diperlukan untuk mengetahui perbedaan karakteristik dan kemampuan prediksinya berdasarkan ukuran evaluasi yang sesuai.
Berdasarkan latar belakang di atas dapat disimpulkan bahwa rumusan masalah sebagai berikut:
Berdasarkan rumusan masalah di atas, tujuan penelitian yang dapat disimpulkan sebagai berikut:
Adapun manfaat yang didapatkan dari penelitian ini adalah sebagai berikut: 1. Bagi penulis: a. Dapat memberikan informasi serta pengetahuan tentang Random Forest dan Double Random Forest sebagai metode ensemble berbasis decision tree. b. Menerapkan ilmu atau wawasan baru mengenai program R-Studio. 2. Bagi pembaca: a. Menambah ilmu pengetahuan dan pemahaman tentang Random Forest dan Double Random Forest sebagai metode ensemble berbasis decision tree. b. Menjadi rujukan bagi peneliti selanjutnya.
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 dengan 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.
Machine learning merupakan pendekatan komputasi yang memungkinkan sistem mempelajari pola dari data untuk menghasilkan prediksi atau keputusan tanpa harus diprogram secara eksplisit untuk setiap aturan. Dalam penelitian statistik dan ilmu data, machine learning digunakan untuk memodelkan hubungan antara variabel prediktor dan variabel respons, terutama ketika hubungan tersebut bersifat nonlinear atau melibatkan interaksi antarkomponen data. Penggunaan machine learning berkembang dalam berbagai bidang karena algoritmanya dapat digunakan untuk klasifikasi, regresi, pendeteksian pola, dan pengambilan keputusan berbasis data (Mienye & Sun, 2022; Zhang et al., 2022).
Secara umum, machine learning dapat dibedakan menjadi pembelajaran terawasi (supervised learning), pembelajaran tidak terawasi (unsupervised learning), dan pembelajaran semi-terawasi. Penelitian yang menggunakan bagging umumnya termasuk dalam pembelajaran terawasi karena model dibangun berdasarkan data pelatihan yang memiliki variabel respons atau label. Pada pembelajaran terawasi, model mempelajari fungsi pemetaan antara himpunan prediktor dan respons. Untuk permasalahan klasifikasi, respons berbentuk kategori, sedangkan pada regresi respons berbentuk numerik kontinu.
Tujuan utama pemodelan machine learning bukan hanya memperoleh kecocokan yang baik terhadap data pelatihan, tetapi juga menghasilkan kemampuan generalisasi yang baik pada data baru. Model yang terlalu kompleks dapat mengalami overfitting, yaitu ketika model sangat sesuai dengan data pelatihan tetapi kurang mampu memprediksi data pengujian. Sebaliknya, model yang terlalu sederhana dapat mengalami underfitting. Oleh karena itu, pemilihan algoritma, pengaturan hiperparameter, pembagian data, dan validasi model merupakan bagian penting dalam penelitian machine learning (Zhao et al., 2025).
Random Forest (RF) merupakan metode ensemble yang menggabungkan banyak pohon keputusan untuk menghasilkan satu prediksi. Setiap pohon dibentuk melalui proses pengacakan data dan pengacakan variabel prediktor. Hasil klasifikasi diperoleh melalui suara mayoritas, sedangkan hasil regresi diperoleh melalui rata-rata prediksi seluruh pohon. Khairunnisa et al. (2024) menjelaskan bahwa RF menggunakan dua proses randomisasi utama, yaitu pengambilan sampel data dengan pengembalian (bootstrap sampling) dan pemilihan subset prediktor secara acak pada setiap simpul.
Misalkan terdapat sebanyak \(B\) pohon keputusan. Untuk masalah regresi, prediksi RF dapat dituliskan sebagai:
\[\hat{f}_{RF}(x) = \frac{1}{B}\sum_{b=1}^{B} T_b(x),\] di mana \(T_b(x)\) merupakan prediksi pohon ke-\(b\) terhadap observasi dengan vektor prediktor \(x\). Untuk masalah klasifikasi, RF memilih kelas dengan frekuensi suara terbanyak dari seluruh pohon.
Pembentukan RF dimulai dengan mengambil beberapa sampel bootstrap dari data pelatihan. Setiap sampel digunakan untuk membentuk satu pohon keputusan. Pada setiap simpul, model tidak mengevaluasi seluruh variabel prediktor, tetapi hanya mengevaluasi sebagian prediktor yang dipilih secara acak. Prosedur ini mengurangi kemiripan antar pohon. Ketika pohon-pohon yang relatif berbeda digabungkan, kesalahan prediksi agregat dapat berkurang.
RF juga dapat menggunakan observasi yang tidak masuk ke dalam sampel bootstrap sebagai data out-of-bag (OOB). Data OOB dapat digunakan untuk memperoleh estimasi kinerja internal tanpa membentuk data validasi terpisah. Meskipun demikian, penggunaan OOB atau random cross-validation tidak otomatis menghasilkan evaluasi yang sahih untuk data spasial. Milà et al. (2024) menunjukkan bahwa random k-fold cross-validation dapat menguntungkan model dengan prediktor spasial meskipun prediktor tersebut tidak sesuai untuk tujuan prediksi tertentu.
RF memiliki beberapa kelebihan. Metode ini dapat memodelkan hubungan nonlinear, menangani interaksi antarvariabel, menggunakan prediktor numerik maupun kategorik, dan relatif tahan terhadap pencilan. RF juga tidak mensyaratkan bentuk hubungan tertentu antara prediktor dan respons. Karakteristik tersebut menjadikan RF sesuai untuk data lingkungan dan sosial yang kompleks.
Namun, RF memiliki keterbatasan. Prediksi RF sulit dijelaskan secara langsung karena dihasilkan dari banyak pohon keputusan. Model juga dapat mengalami underfitting ketika struktur pohon tidak cukup besar untuk merepresentasikan pola data. Selain itu, RF standar tidak secara eksplisit memodelkan ketergantungan spasial. Apabila variabel spasial atau strategi validasi tidak dirancang dengan tepat, model dapat menghasilkan estimasi kinerja yang terlalu tinggi atau peta prediksi yang tidak stabil.
Double Random Forest (DRF) merupakan pengembangan dari metode RF yang mempertahankan gagasan ensemble dan randomisasi, tetapi menggunakan mekanisme pembentukan pohon yang berbeda. Khairunnisa et al. (2024) menjelaskan bahwa salah satu perbedaan penting DRF dan RF terletak pada penggunaan data pelatihan. RF menggunakan sampel bootstrap sebagai dasar pembentukan pohon, sedangkan DRF menggunakan seluruh data pelatihan pada proses tertentu sambil tetap menggunakan bootstrap dan pemilihan variabel secara acak untuk menentukan aturan pemisahan pada simpul.
Penggunaan seluruh data pelatihan dapat menghasilkan lebih banyak observasi unik pada setiap simpul. Dengan demikian, pohon pada DRF dapat tumbuh lebih besar dibandingkan pohon pada RF. Struktur tersebut ditujukan untuk mengatasi kondisi ketika RF mengalami underfitting. Dalam konteks ini, DRF tidak selalu menggantikan RF pada semua jenis data. Keunggulannya perlu diuji pada kondisi data tertentu, terutama ketika RF menghasilkan pohon yang terlalu sederhana atau ukuran pohon tidak memadai.
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 et al., 2024).
Jenis data yang digunakan dalam penelitian ini adalah data kuantitatif dan data kategorik. Data kuantitatif merupakan data berbentuk angka yang dapat dianalisis secara statistik maupun matematis, sedangkan data kategorik merupakan data yang dikelompokkan berdasarkan kategori tertentu. Data yang digunakan dalam penelitian ini berupa karakteristik sel kanker payudara yang terdiri atas beberapa variabel prediktor dan satu variabel target, yaitu klasifikasi kondisi tumor ke dalam kategori benign (jinak) dan malignant (ganas).
Jenis data yang digunakan merupakan data sekunder, yaitu data yang telah dikumpulkan dan disediakan oleh pihak lain. Data diperoleh dari dataset BreastCancer yang tersedia dalam paket mlbench pada perangkat lunak R. Sebelum dilakukan analisis, variabel Id dihapus dan data yang memiliki nilai hilang (missing value) dihilangkan menggunakan fungsi na.omit(). Selanjutnya, data dibagi menjadi 70% data latih (training data) dan 30% data uji (testing data) untuk membangun serta mengevaluasi model Random Forest klasifikasi.
Variabel adalah simbol, karakteristik, atau atribut yang dapat diukur atau diamati dalam suatu penelitian. Variabel yang digunakan dalam penelitian ini terdiri atas variabel dependen (Y), yaitu Class yang menunjukkan klasifikasi kondisi tumor payudara ke dalam kategori benign (jinak) dan malignant (ganas), serta variabel independen (X) yang meliputi Cl.thickness, Cell.size, Cell.shape, Marg.adhesion, Epith.c.size, Bare.nuclei, Bl.cromatin, Normal.nucleoli, dan Mitoses. Variabel dependen bertipe kategorik, sedangkan variabel independen merupakan variabel prediktor yang digunakan untuk mengidentifikasi dan mengklasifikasikan kondisi tumor payudara menggunakan metode Random Forest klasifikasi.
Langkah-langkah yang digunakan dalam penelitian ini adalah sebagai berikut:
mlbench dalam perangkat lunak R.str() dan summary(), kemudian menghapus
variabel Id serta menangani data hilang menggunakan fungsi
na.omit().Class menjadi faktor (factor) dan
memeriksa jumlah serta proporsi masing-masing kategori, yaitu benign dan
malignant.createDataPartition() dengan
set.seed(234).mtry = 2, 3, 5 dan
num.trees = 200, 500, 1000, sedangkan parameter lainnya
dibuat tetap.ranger()
dengan metode permutation untuk menghitung tingkat kepentingan variabel
(variable importance).mtry dan
num.trees terhadap performa model Random Forest
Classification.library(ranger)
library(mlbench)
library(caret)
## Loading required package: ggplot2
## Loading required package: lattice
library(ggplot2)
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
##
##
##
##
##
# A2. PERSIAPAN 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
Sintaks tersebut digunakan untuk melakukan persiapan data sebelum
analisis menggunakan metode Random Forest Classification dengan
memanggil paket ranger, mlbench,
caret, dan ggplot2, kemudian mengambil dataset
BreastCancer dari paket mlbench. Fungsi str()
dan summary() digunakan untuk mengetahui struktur serta
ringkasan data. Selanjutnya, variabel Id dihapus karena
tidak digunakan dalam proses klasifikasi, sedangkan fungsi
na.omit() digunakan untuk menghilangkan data yang memiliki
nilai hilang sehingga jumlah data berkurang dari 699 menjadi 683
observasi. Variabel Class kemudian diubah menjadi tipe
faktor menggunakan as.factor() dan kategori yang tidak
terpakai dihapus dengan droplevels(). Berdasarkan hasil
analisis, variabel Class memiliki dua kategori, yaitu
benign (jinak) sebanyak 444 observasi atau 65,01% dan malignant (ganas)
sebanyak 239 observasi atau 34,99%. Dengan demikian, data yang telah
dipersiapkan terdiri atas 683 observasi yang siap digunakan untuk
membangun model Random Forest Classification.
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
Sintaks tersebut digunakan untuk membagi dataset BreastCancer menjadi
data training dan data testing sebelum dilakukan pemodelan Random Forest
Classification. Fungsi set.seed(234) digunakan agar proses
pembagian data menghasilkan susunan yang konsisten ketika dijalankan
kembali. Selanjutnya, fungsi createDataPartition()
digunakan untuk membagi data dengan proporsi 70% sebagai data training
dan 30% sebagai data testing berdasarkan variabel Class,
sehingga proporsi setiap kategori tetap terjaga. Hasil pembagian
menunjukkan bahwa data training terdiri atas 479 observasi dan 10
variabel, sedangkan data testing terdiri atas 204 observasi dan 10
variabel. Pada data training, terdapat 311 observasi kategori benign dan
168 observasi kategori malignant, sementara pada data testing terdapat
133 observasi kategori benign dan 71 observasi kategori malignant.
Dengan demikian, data telah terbagi sesuai proporsi yang ditentukan dan
siap digunakan untuk proses pembentukan serta pengujian model Random
Forest Classification.
# A4. MENENTUKAN KOMBINASI PARAMETER
kombinasi <- expand.grid(
mtry = c(2, 3, 5),
num.trees = c(200, 500, 1000)
)
print(kombinasi)
## mtry num.trees
## 1 2 200
## 2 3 200
## 3 5 200
## 4 2 500
## 5 3 500
## 6 5 500
## 7 2 1000
## 8 3 1000
## 9 5 1000
Sintaks tersebut digunakan untuk menentukan sembilan kombinasi
parameter yang akan diuji dalam pemodelan Random Forest Classification.
Fungsi expand.grid() digunakan untuk menggabungkan nilai
parameter mtry, yaitu 2, 3, dan 5, dengan parameter
num.trees, yaitu 200, 500, dan 1000. Parameter
mtry menunjukkan jumlah variabel prediktor yang
dipertimbangkan pada setiap proses pemisahan simpul (node), sedangkan
num.trees menunjukkan jumlah pohon keputusan yang dibangun
dalam model. Berdasarkan hasil sintaks, diperoleh sembilan kombinasi
parameter, yaitu tiga kombinasi dengan 200 pohon, tiga kombinasi dengan
500 pohon, dan tiga kombinasi dengan 1000 pohon. Kesembilan kombinasi
tersebut selanjutnya digunakan untuk membangun dan membandingkan
performa model Random Forest Classification guna menentukan kombinasi
parameter yang menghasilkan kinerja klasifikasi terbaik.
set.seed(234)
hasil.model <- list()
hasil.evaluasi <- data.frame()
for (i in 1:nrow(kombinasi)) {
m <- kombinasi$mtry[i]
nt <- kombinasi$num.trees[i]
cat("\n================================\n")
cat("MODEL KE-", i, "\n")
cat("mtry =", m, "\n")
cat("num.trees =", nt, "\n")
cat("================================\n")
set.seed(234)
rf.cls <- ranger(
Class ~ .,
data = bc.train,
num.trees = nt,
mtry = m,
min.node.size = 1,
replace = TRUE,
sample.fraction = 1,
importance = "permutation",
seed = 234
)
nama.model <- paste0(
"mtry_", m, "_tree_", nt
)
hasil.model[[nama.model]] <- rf.cls
print(rf.cls)
# A6. EVALUASI OOB
cat("\n===== OOB ERROR =====\n")
print(rf.cls$prediction.error)
cat("\n===== OOB CONFUSION MATRIX =====\n")
print(rf.cls$confusion.matrix)
# A7. PREDIKSI DATA TESTING
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
)
print(head(hasil.rf.cls, 10))
# A8. CONFUSION MATRIX
cm.rf <- confusionMatrix(
data = pred.rf.cls,
reference = bc.test$Class,
positive = "malignant"
)
print(cm.rf)
# A9. MENGHITUNG UKURAN EVALUASI
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 <- ifelse(
TP + FP == 0, NA, TP / (TP + FP)
)
Recall <- ifelse(
TP + FN == 0, NA, TP / (TP + FN)
)
Specificity <- ifelse(
TN + FP == 0, NA, TN / (TN + FP)
)
F1 <- ifelse(
is.na(Precision) || is.na(Recall) ||
Precision + Recall == 0,
NA,
2 * (Precision * Recall) /
(Precision + Recall)
)
# A10. MENYIMPAN HASIL EVALUASI
hasil.evaluasi <- rbind(
hasil.evaluasi,
data.frame(
mtry = m,
num.trees = nt,
Accuracy = Accuracy,
Precision = Precision,
Recall = Recall,
Specificity = Specificity,
F1_Score = F1,
OOB_Error = rf.cls$prediction.error
)
)
cat("\n===== HASIL EVALUASI =====\n")
print(
round(
hasil.evaluasi[nrow(hasil.evaluasi), ],
4
)
)
}
##
## ================================
## MODEL KE- 1
## mtry = 2
## num.trees = 200
## ================================
## Ranger result
##
## Call:
## ranger(Class ~ ., data = bc.train, num.trees = nt, 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 %
##
## ===== OOB ERROR =====
## [1] 0.02922756
##
## ===== OOB CONFUSION MATRIX =====
## predicted
## true benign malignant
## benign 303 8
## malignant 6 162
## 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
## 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
##
##
## ===== HASIL EVALUASI =====
## mtry num.trees Accuracy Precision Recall Specificity F1_Score OOB_Error
## 1 2 200 0.9804 0.9589 0.9859 0.9774 0.9722 0.0292
##
## ================================
## MODEL KE- 2
## mtry = 3
## num.trees = 200
## ================================
## Ranger result
##
## Call:
## ranger(Class ~ ., data = bc.train, num.trees = nt, 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 %
##
## ===== OOB ERROR =====
## [1] 0.02713987
##
## ===== OOB CONFUSION MATRIX =====
## predicted
## true benign malignant
## benign 303 8
## malignant 5 163
## 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
## 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
##
##
## ===== HASIL EVALUASI =====
## mtry num.trees Accuracy Precision Recall Specificity F1_Score OOB_Error
## 2 3 200 0.9706 0.9577 0.9577 0.9774 0.9577 0.0271
##
## ================================
## MODEL KE- 3
## mtry = 5
## num.trees = 200
## ================================
## Ranger result
##
## Call:
## ranger(Class ~ ., data = bc.train, num.trees = nt, 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 %
##
## ===== OOB ERROR =====
## [1] 0.02922756
##
## ===== OOB CONFUSION MATRIX =====
## predicted
## true benign malignant
## benign 303 8
## malignant 6 162
## 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
## 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
##
##
## ===== HASIL EVALUASI =====
## mtry num.trees Accuracy Precision Recall Specificity F1_Score OOB_Error
## 3 5 200 0.9608 0.9437 0.9437 0.9699 0.9437 0.0292
##
## ================================
## MODEL KE- 4
## mtry = 2
## num.trees = 500
## ================================
## Ranger result
##
## Call:
## ranger(Class ~ ., data = bc.train, num.trees = nt, 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 %
##
## ===== OOB ERROR =====
## [1] 0.02922756
##
## ===== OOB CONFUSION MATRIX =====
## predicted
## true benign malignant
## benign 303 8
## malignant 6 162
## 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
## 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
##
##
## ===== HASIL EVALUASI =====
## mtry num.trees Accuracy Precision Recall Specificity F1_Score OOB_Error
## 4 2 500 0.9755 0.9459 0.9859 0.9699 0.9655 0.0292
##
## ================================
## MODEL KE- 5
## mtry = 3
## num.trees = 500
## ================================
## Ranger result
##
## Call:
## ranger(Class ~ ., data = bc.train, num.trees = nt, 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 %
##
## ===== OOB ERROR =====
## [1] 0.02922756
##
## ===== OOB CONFUSION MATRIX =====
## predicted
## true benign malignant
## benign 303 8
## malignant 6 162
## 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
## 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
##
##
## ===== HASIL EVALUASI =====
## mtry num.trees Accuracy Precision Recall Specificity F1_Score OOB_Error
## 5 3 500 0.9706 0.9577 0.9577 0.9774 0.9577 0.0292
##
## ================================
## MODEL KE- 6
## mtry = 5
## num.trees = 500
## ================================
## Ranger result
##
## Call:
## ranger(Class ~ ., data = bc.train, num.trees = nt, 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 %
##
## ===== OOB ERROR =====
## [1] 0.02922756
##
## ===== OOB CONFUSION MATRIX =====
## predicted
## true benign malignant
## benign 303 8
## malignant 6 162
## 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
## 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
##
##
## ===== HASIL EVALUASI =====
## mtry num.trees Accuracy Precision Recall Specificity F1_Score OOB_Error
## 6 5 500 0.9608 0.9437 0.9437 0.9699 0.9437 0.0292
##
## ================================
## MODEL KE- 7
## mtry = 2
## num.trees = 1000
## ================================
## Ranger result
##
## Call:
## ranger(Class ~ ., data = bc.train, num.trees = nt, 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 %
##
## ===== OOB ERROR =====
## [1] 0.02922756
##
## ===== OOB CONFUSION MATRIX =====
## predicted
## true benign malignant
## benign 303 8
## malignant 6 162
## 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
## 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
##
##
## ===== HASIL EVALUASI =====
## mtry num.trees Accuracy Precision Recall Specificity F1_Score OOB_Error
## 7 2 1000 0.9706 0.9452 0.9718 0.9699 0.9583 0.0292
##
## ================================
## MODEL KE- 8
## mtry = 3
## num.trees = 1000
## ================================
## Ranger result
##
## Call:
## ranger(Class ~ ., data = bc.train, num.trees = nt, 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 %
##
## ===== OOB ERROR =====
## [1] 0.02713987
##
## ===== OOB CONFUSION MATRIX =====
## predicted
## true benign malignant
## benign 303 8
## malignant 5 163
## 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
## 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
##
##
## ===== HASIL EVALUASI =====
## mtry num.trees Accuracy Precision Recall Specificity F1_Score OOB_Error
## 8 3 1000 0.9657 0.9444 0.9577 0.9699 0.951 0.0271
##
## ================================
## MODEL KE- 9
## mtry = 5
## num.trees = 1000
## ================================
## Ranger result
##
## Call:
## ranger(Class ~ ., data = bc.train, num.trees = nt, 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 %
##
## ===== OOB ERROR =====
## [1] 0.02713987
##
## ===== OOB CONFUSION MATRIX =====
## predicted
## true benign malignant
## benign 303 8
## malignant 5 163
## 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
## 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 EVALUASI =====
## mtry num.trees Accuracy Precision Recall Specificity F1_Score OOB_Error
## 9 5 1000 0.9559 0.9429 0.9296 0.9699 0.9362 0.0271
# A11. PERBANDINGAN SELURUH MODEL
cat("\n===== PERBANDINGAN MODEL =====\n")
##
## ===== PERBANDINGAN MODEL =====
print(
round(hasil.evaluasi, 4)
)
## mtry num.trees Accuracy Precision Recall Specificity F1_Score OOB_Error
## 1 2 200 0.9804 0.9589 0.9859 0.9774 0.9722 0.0292
## 2 3 200 0.9706 0.9577 0.9577 0.9774 0.9577 0.0271
## 3 5 200 0.9608 0.9437 0.9437 0.9699 0.9437 0.0292
## 4 2 500 0.9755 0.9459 0.9859 0.9699 0.9655 0.0292
## 5 3 500 0.9706 0.9577 0.9577 0.9774 0.9577 0.0292
## 6 5 500 0.9608 0.9437 0.9437 0.9699 0.9437 0.0292
## 7 2 1000 0.9706 0.9452 0.9718 0.9699 0.9583 0.0292
## 8 3 1000 0.9657 0.9444 0.9577 0.9699 0.9510 0.0271
## 9 5 1000 0.9559 0.9429 0.9296 0.9699 0.9362 0.0271
# Mengurutkan berdasarkan Accuracy tertinggi
peringkat.model <- hasil.evaluasi[
order(-hasil.evaluasi$Accuracy),
]
cat("\n===== PERINGKAT MODEL =====\n")
##
## ===== PERINGKAT MODEL =====
print(round(peringkat.model, 4))
## mtry num.trees Accuracy Precision Recall Specificity F1_Score OOB_Error
## 1 2 200 0.9804 0.9589 0.9859 0.9774 0.9722 0.0292
## 4 2 500 0.9755 0.9459 0.9859 0.9699 0.9655 0.0292
## 2 3 200 0.9706 0.9577 0.9577 0.9774 0.9577 0.0271
## 5 3 500 0.9706 0.9577 0.9577 0.9774 0.9577 0.0292
## 7 2 1000 0.9706 0.9452 0.9718 0.9699 0.9583 0.0292
## 8 3 1000 0.9657 0.9444 0.9577 0.9699 0.9510 0.0271
## 3 5 200 0.9608 0.9437 0.9437 0.9699 0.9437 0.0292
## 6 5 500 0.9608 0.9437 0.9437 0.9699 0.9437 0.0292
## 9 5 1000 0.9559 0.9429 0.9296 0.9699 0.9362 0.0271
Sintaks tersebut digunakan untuk membandingkan dan mengurutkan
performa sembilan model Random Forest Classification berdasarkan nilai
Accuracy tertinggi. Fungsi round(hasil.evaluasi, 4)
digunakan untuk menampilkan hasil evaluasi dengan empat angka di
belakang koma, sedangkan fungsi
order(-hasil.evaluasi$Accuracy) digunakan untuk mengurutkan
model dari nilai Accuracy tertinggi hingga terendah. Berdasarkan hasil
pengujian, model terbaik diperoleh pada kombinasi parameter
mtry = 2 dan num.trees = 200 dengan nilai
Accuracy sebesar 0,9804 (98,04%), Precision sebesar 0,9589 (95,89%),
Recall sebesar 0,9859 (98,59%), Specificity sebesar 0,9774 (97,74%),
F1-Score sebesar 0,9722 (97,22%), dan OOB Error sebesar 0,0292 (2,92%).
Sementara itu, model dengan Accuracy terendah diperoleh pada kombinasi
mtry = 5 dan num.trees = 1000, yaitu sebesar
0,9559 (95,59%). Hasil tersebut menunjukkan bahwa kombinasi
mtry = 2 dan num.trees = 200 menghasilkan
performa klasifikasi terbaik berdasarkan nilai Accuracy tertinggi,
sehingga dapat dipilih sebagai model terbaik untuk mengklasifikasikan
tumor payudara ke dalam kategori benign dan malignant.
# A12. MENENTUKAN MODEL TERBAIK
indeks.terbaik <- which.max(
hasil.evaluasi$Accuracy
)
m.terbaik <- hasil.evaluasi$mtry[
indeks.terbaik
]
nt.terbaik <- hasil.evaluasi$num.trees[
indeks.terbaik
]
nama.terbaik <- paste0(
"mtry_", m.terbaik,
"_tree_", nt.terbaik
)
model.terbaik <- hasil.model[[nama.terbaik]]
cat("\n===== MODEL TERBAIK =====\n")
##
## ===== MODEL TERBAIK =====
cat("mtry =", m.terbaik, "\n")
## mtry = 2
cat("num.trees =", nt.terbaik, "\n")
## num.trees = 200
print(model.terbaik)
## Ranger result
##
## Call:
## ranger(Class ~ ., data = bc.train, num.trees = nt, 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 %
Sintaks tersebut digunakan untuk menampilkan model Random Forest
Classification terbaik berdasarkan hasil perbandingan sembilan kombinasi
parameter sebelumnya. Model terbaik diambil menggunakan objek
hasil.model[[nama.terbaik]], kemudian fungsi
cat() digunakan untuk menampilkan nilai parameter
mtry dan num.trees, sedangkan
print(model.terbaik) digunakan untuk menampilkan ringkasan
model yang terpilih. Berdasarkan hasil analisis, diperoleh model terbaik
dengan mtry = 2 dan num.trees = 200, yang
dibangun menggunakan 479 observasi data training dan 9 variabel
independen. Model menggunakan ukuran simpul minimum (min.node.size)
sebesar 1, metode permutation untuk mengukur kepentingan variabel, serta
aturan pemisahan Gini. Nilai OOB Prediction Error yang diperoleh sebesar
2,92%, artinya tingkat kesalahan prediksi internal model sebesar 2,92%
atau tingkat ketepatan prediksi OOB sekitar 97,08%. Hasil ini
menunjukkan bahwa model dengan kombinasi parameter tersebut memiliki
performa terbaik berdasarkan perbandingan nilai Accuracy pada data
testing sebelumnya.
# A13. PREDIKSI DAN CONFUSION MATRIX MODEL TERBAIK
pred.terbaik <- predict(
model.terbaik,
data = bc.test
)$predictions
pred.terbaik <- factor(
pred.terbaik,
levels = levels(bc.test$Class)
)
cm.terbaik <- confusionMatrix(
data = pred.terbaik,
reference = bc.test$Class,
positive = "malignant"
)
print(cm.terbaik)
## 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
##
Sintaks tersebut digunakan untuk melakukan prediksi terhadap data
testing menggunakan model Random Forest Classification terbaik, kemudian
mengevaluasi hasil klasifikasi melalui confusion matrix. Fungsi
predict() digunakan untuk menghasilkan prediksi kategori
tumor, sedangkan factor() digunakan untuk menyesuaikan
kategori hasil prediksi dengan kategori aktual. Selanjutnya, fungsi
confusionMatrix() digunakan untuk membandingkan hasil
prediksi dengan data aktual dengan menetapkan kelas malignant sebagai
kelas positif. Berdasarkan hasil analisis, dari 204 data testing, model
berhasil mengklasifikasikan 130 data benign dan 70 data malignant dengan
benar, sedangkan terdapat 3 data benign yang salah diklasifikasikan
sebagai malignant dan 1 data malignant yang salah diklasifikasikan
sebagai benign. Model memperoleh nilai Accuracy sebesar 98,04%,
Sensitivity sebesar 98,59%, Specificity sebesar 97,74%, Precision
sebesar 95,89%, dan Kappa sebesar 0,9571. Selain itu, nilai Balanced
Accuracy sebesar 98,17% menunjukkan bahwa model memiliki kemampuan
klasifikasi yang baik pada kedua kategori. Dengan demikian, model Random
Forest terbaik mampu mengklasifikasikan kondisi tumor payudara ke dalam
kategori benign dan malignant dengan tingkat ketepatan yang sangat
tinggi.
cat("\n===== OOB ERROR MODEL TERBAIK =====\n")
##
## ===== OOB ERROR MODEL TERBAIK =====
print(model.terbaik$prediction.error)
## [1] 0.02922756
print(model.terbaik$confusion.matrix)
## predicted
## true benign malignant
## benign 303 8
## malignant 6 162
Sintaks tersebut digunakan untuk menampilkan nilai Out-of-Bag (OOB)
Error dan confusion matrix dari model Random Forest Classification
terbaik. Fungsi model.terbaik$prediction.error digunakan
untuk memperoleh tingkat kesalahan prediksi internal model berdasarkan
data OOB, sedangkan model.terbaik$confusion.matrix
digunakan untuk menampilkan perbandingan antara kelas aktual dan hasil
prediksi pada data OOB. Berdasarkan hasil analisis, diperoleh nilai OOB
Error sebesar 0,0292 atau 2,92%, yang menunjukkan bahwa tingkat
kesalahan klasifikasi internal model relatif rendah. Pada confusion
matrix, model berhasil mengklasifikasikan 303 data benign dan 162 data
malignant dengan benar, sedangkan 8 data benign salah diklasifikasikan
sebagai malignant dan 6 data malignant salah diklasifikasikan sebagai
benign. Dengan demikian, model memiliki tingkat ketepatan klasifikasi
OOB sekitar 97,08%, sehingga dapat dikatakan bahwa model Random Forest
terbaik memiliki kemampuan prediksi internal yang baik.
# A15. VARIABLE IMPORTANCE MODEL TERBAIK
importance.rf <- sort(
model.terbaik$variable.importance,
decreasing = TRUE
)
cat("\n===== VARIABLE IMPORTANCE =====\n")
##
## ===== VARIABLE IMPORTANCE =====
print(importance.rf)
## 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
barplot(
importance.rf,
las = 2,
main = "Variable Importance - Random Forest",
ylab = "Permutation Importance"
)
# A16. VISUALISASI PERBANDINGAN EVALUASI
library(reshape2)
hasil.long <- melt(
hasil.evaluasi,
id.vars = c("mtry", "num.trees"),
measure.vars = c(
"Accuracy",
"Precision",
"Recall",
"Specificity",
"F1_Score"
),
variable.name = "Metrik",
value.name = "Nilai"
)
ggplot(
hasil.long,
aes(
x = factor(num.trees),
y = Nilai,
color = factor(mtry),
group = factor(mtry)
)
) +
geom_line(linewidth = 1) +
geom_point(size = 3) +
facet_wrap(~Metrik) +
labs(
title = "Perbandingan Performa Random Forest",
x = "Number of Trees",
y = "Nilai Evaluasi",
color = "mtry"
) +
theme_minimal()
# A17. VISUALISASI OOB ERROR
ggplot(
hasil.evaluasi,
aes(
x = factor(num.trees),
y = OOB_Error,
color = factor(mtry),
group = factor(mtry)
)
) +
geom_line(linewidth = 1) +
geom_point(size = 3) +
labs(
title = "Perbandingan OOB Error Random Forest",
x = "Number of Trees",
y = "OOB Error",
color = "mtry"
) +
theme_minimal()
# A18. INTERPRETASI HASIL
cat("\n===== INTERPRETASI HASIL =====\n")
##
## ===== INTERPRETASI HASIL =====
cat(
"Model terbaik berdasarkan Accuracy:\n"
)
## Model terbaik berdasarkan Accuracy:
cat("mtry =", m.terbaik, "\n")
## mtry = 2
cat("num.trees =", nt.terbaik, "\n")
## num.trees = 200
cat(
"Accuracy =",
round(
hasil.evaluasi$Accuracy[indeks.terbaik],
4
),
"\n"
)
## Accuracy = 0.9804
cat(
"OOB Error =",
round(
hasil.evaluasi$OOB_Error[indeks.terbaik],
4
),
"\n"
)
## OOB Error = 0.0292
cat("\nLima variabel terpenting:\n")
##
## Lima variabel terpenting:
print(head(importance.rf, 5))
## Bare.nuclei Cell.size Cell.shape Cl.thickness Bl.cromatin
## 0.08392452 0.07871815 0.06096787 0.02448915 0.02147806
Berdasarkan hasil interpretasi akhir dari hasil pemodelan Random
Forest Classification, meliputi parameter model terbaik, nilai Accuracy,
OOB Error, dan lima variabel yang paling berpengaruh dalam proses
klasifikasi. Berdasarkan hasil analisis, model terbaik diperoleh pada
kombinasi mtry = 2 dan num.trees = 200 dengan
nilai Accuracy sebesar 0,9804 atau 98,04% serta OOB Error sebesar 0,0292
atau 2,92%. Selanjutnya, berdasarkan hasil variable importance, lima
variabel terpenting secara berurutan adalah Bare.nuclei
sebesar 0,0839, Cell.size sebesar 0,0787,
Cell.shape sebesar 0,0610, Cl.thickness
sebesar 0,0245, dan Bl.cromatin sebesar 0,0215. Hasil
tersebut menunjukkan bahwa variabel Bare.nuclei memiliki
tingkat kepentingan tertinggi dalam membantu model membedakan kategori
tumor benign dan malignant, sedangkan Cell.size dan
Cell.shape juga memberikan kontribusi penting dalam proses
klasifikasi. Dengan demikian, model Random Forest Classification dengan
kombinasi parameter tersebut mampu menghasilkan performa klasifikasi
yang sangat baik, dengan Bare.nuclei sebagai variabel
prediktor yang paling penting berdasarkan nilai permutation
importance.
Random Forest merupakan metode ensemble learning berbasis decision tree yang menggabungkan banyak pohon keputusan melalui proses bootstrap sampling dan pemilihan variabel secara acak. Metode ini dapat digunakan untuk permasalahan klasifikasi maupun regresi. Pada klasifikasi, hasil prediksi ditentukan berdasarkan suara terbanyak (majority voting), sedangkan pada regresi menggunakan rata-rata hasil prediksi seluruh pohon. Metode ini memiliki keunggulan dalam menangani hubungan nonlinear, mengurangi risiko overfitting, serta menyediakan informasi mengenai tingkat kepentingan variabel (variable importance).
Double Random Forest merupakan pengembangan metode Random Forest yang menggunakan mekanisme pengambilan sampel secara acak pada setiap proses pembentukan simpul (node) untuk meningkatkan keragaman pohon keputusan. Metode ini dapat diterapkan untuk permasalahan klasifikasi dan regresi sesuai dengan implementasi yang digunakan. Melalui praktikum ini, kedua metode diimplementasikan menggunakan perangkat lunak R, mulai dari persiapan data, pembagian data training dan testing, penentuan parameter, pembentukan model, hingga proses prediksi.
Evaluasi model Random Forest dan Double Random Forest dilakukan untuk mengetahui kemampuan model dalam menghasilkan prediksi yang tepat. Pada klasifikasi, evaluasi dapat menggunakan Accuracy, Precision, Recall, Specificity, dan F1-Score, sedangkan pada regresi menggunakan MSE, RMSE, MAE, dan R-Square. Selain itu, nilai Out-of-Bag (OOB) error digunakan untuk mengukur kesalahan prediksi internal model berdasarkan sampel yang tidak digunakan dalam pembentukan pohon tertentu. Perbandingan kedua metode dilakukan berdasarkan ukuran evaluasi tersebut sehingga dapat diketahui kelebihan dan kekurangan masing-masing metode serta kesesuaiannya terhadap karakteristik data dan tujuan analisis.
Berdasarkan seluruh hasil analisis menggunakan metode Random Forest
Classification pada dataset BreastCancer, diperoleh sebanyak 683
observasi setelah proses penghapusan data hilang (missing value), yang
terdiri atas 444 kategori benign (65,01%) dan 239 kategori malignant
(34,99%). Data kemudian dibagi menjadi 479 observasi data training (70%)
dan 204 observasi data testing (30%). Pengujian dilakukan terhadap
sembilan kombinasi parameter, yaitu mtry sebesar 2, 3, dan
5 serta num.trees sebesar 200, 500, dan 1000. Berdasarkan
hasil perbandingan, 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%, F1-Score sebesar 97,22%, dan OOB Error
sebesar 2,92%. Hasil confusion matrix pada data testing menunjukkan
bahwa model berhasil mengklasifikasikan 130 data benign dan 70 data
malignant dengan benar, sedangkan 4 data lainnya mengalami kesalahan
klasifikasi. Selain itu, hasil variable importance menunjukkan bahwa
Bare.nuclei merupakan variabel paling penting, diikuti oleh
Cell.size, Cell.shape,
Cl.thickness, dan Bl.cromatin. Dengan
demikian, metode Random Forest Classification mampu mengklasifikasikan
kondisi tumor payudara ke dalam kategori benign dan malignant dengan
performa yang sangat baik, dengan kombinasi parameter
mtry = 2 dan num.trees = 200 sebagai model
terbaik berdasarkan nilai Accuracy tertinggi.
Laporan praktikum ini melakukan pemograman R. Dalam hal ini perlu memahami sintak yang diperlukan dalam hal pengerjaannya ini agar tidak terjadi error pada programnya. Dan juga sangat perlu memahami tentang Random Forest dan Double Random Forest sebagai metode ensemble berbasis decision tree.
Fransiska, H. (2026). Modul Praktikum Machine Learning. Universitas Bengkulu
Georganos, S., & Kalogirou, S. (2022). A Forest of Forests: A Spatially Weighted and Computationally Efficient Formulation of Geographical Random Forests. ISPRS International Journal of Geo-Information, 11(9). https://doi.org/10.3390/ijgi11090471
Jain, N. & Jana, P.K. (2023). LRF: A logically randomized forest algorithm for classification and regression problems. Expert Systems with Applications, 225, 119225. https://doi.org/10.1016/j.eswa.2022.119225
Jemeļjanova, M., Kmoch, A., & Uuemaa, E. (2024). Adapting machine learning for environmental spatial data - A review. In Ecological Informatics (Vol. 81). https://doi.org/10.1016/j.ecoinf.2024.102634
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). https://doi.org/10.15294/sji.v11i1.48721
Kmoch, A., Harrison, C. T., Choi, J., & Uuemaa, E. (2025). Spatial autocorrelation in machine learning for modelling soil organic carbon. Ecological Informatics, 86. https://doi.org/10.1016/j.ecoinf.2025.103057
Mienye, I. D., & Sun, Y. (2022). A Survey of Ensemble Learning: Concepts, Algorithms, Applications, and Prospects. In IEEE Access (Vol. 10). https://doi.org/10.1109/ACCESS.2022.3207287
Milà, C., Ludwig, M., Pebesma, E., Tonne, C., & Meyer, H. (2024). Random forests with spatial proxies for environmental modelling: Opportunities and pitfalls. Geoscientific Model Development, 17(15). https://doi.org/10.5194/gmd-17-6007-2024
Smith, H.L., Biggs, P.J., French, N.P., Smith, A.N.H. & Marshall, J.C. (2024). Out of (the) bag—encoding categorical predictors impacts out-of-bag samples. PeerJ Computer Science, 10, e2445. https://doi.org/10.7717/peerj-cs.2445
Quan, D., Feng, W., Dauphin, G., Wang, X., Huang, W., & Xing, M. (2022). A Novel Double Ensemble Algorithm for the Classification of Multi-Class Imbalanced Hyperspectral Data. Remote Sensing, 14(15). https://doi.org/10.3390/rs14153765
Zhang, Y., Liu, J., & Shen, W. (2022). A Review of Ensemble Learning Algorithms Used in Remote Sensing Applications. In Applied Sciences (Switzerland) (Vol. 12, Number 17). https://doi.org/10.3390/app12178654
Zhao, H., Liu, W., Wang, Y., & Wu, L. (2025). Comparative analysis of algorithmic approaches in ensemble learning: bagging vs. boosting. Scientific Reports, 15(1). https://doi.org/10.1038/s41598-025-15971-0