BAB I PENDAHULUAN

1.1 Latar Belakang

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.

1.2 Rumusan Masalah

Berdasarkan latar belakang di atas dapat disimpulkan bahwa rumusan masalah sebagai berikut:

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

1.3 Tujuan Penelitian

Berdasarkan rumusan masalah di atas, tujuan penelitian yang dapat disimpulkan sebagai berikut:

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

1.4 Manfaat Penelitian

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.

1.5 Batasan Masalah

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.

BAB II TINJAUAN PUSTAKA

2.1 Machine Learning

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).

2.2 Random Forest

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.

2.3 Double Random Forest

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).

BAB III METODE PENELITIAN

3.1 Jenis dan Sumber Data

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.

3.2 Variabel Penelitian

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.

3.3 Analisis Data

Langkah-langkah yang digunakan dalam penelitian ini adalah sebagai berikut:

  1. Menggunakan dataset BreastCancer sebanyak data yang tersedia pada paket mlbench dalam perangkat lunak R.
  2. Melakukan pemeriksaan struktur dan ringkasan data menggunakan fungsi str() dan summary(), kemudian menghapus variabel Id serta menangani data hilang menggunakan fungsi na.omit().
  3. Mengubah variabel Class menjadi faktor (factor) dan memeriksa jumlah serta proporsi masing-masing kategori, yaitu benign dan malignant.
  4. Membagi data menjadi data training sebesar 70% dan data testing sebesar 30% menggunakan fungsi createDataPartition() dengan set.seed(234).
  5. Membentuk sembilan kombinasi model Random Forest Classification dengan membandingkan parameter mtry = 2, 3, 5 dan num.trees = 200, 500, 1000, sedangkan parameter lainnya dibuat tetap.
  6. Melakukan pelatihan model menggunakan fungsi ranger() dengan metode permutation untuk menghitung tingkat kepentingan variabel (variable importance).
  7. Menghitung nilai OOB Error (Out-of-Bag Error) untuk mengetahui tingkat kesalahan klasifikasi internal pada masing-masing model.
  8. Melakukan prediksi terhadap data testing, kemudian mengevaluasi hasil klasifikasi menggunakan confusion matrix serta menghitung nilai Accuracy, Precision, Recall, Specificity, dan F1-Score.
  9. Membuat visualisasi berupa grafik perbandingan performa model dan grafik variable importance untuk mengetahui variabel yang memberikan kontribusi penting dalam proses klasifikasi.
  10. Menentukan model terbaik berdasarkan nilai Accuracy, Precision, Recall, Specificity, dan F1-Score yang paling baik serta mempertimbangkan nilai OOB Error yang paling kecil. Selanjutnya, menginterpretasikan pengaruh parameter mtry dan num.trees terhadap performa model Random Forest Classification.

BAB IV HASIL DAN PEMBAHASAN

4.1 Library dan Pembentukan Dataset

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.

4.2 Pembagian Data Training dan Testing

set.seed(234)

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

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

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

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.

4.3 Menentukan Kombinasi Parameter

# 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.

4.4 Pembentukan Random Forest

  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

4.5 Perbandingan Seluruh Model

# 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.

4.6 Menentukan Model Terbaik

# 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.

4.7 Prediksi dan Confusion Matrix Model Terbaik

# 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.

4.8 Menentukan Model Terbaik

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.

4.9 Visualisasi

# 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()

4.10 Interpretasi

# 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.

BAB V KESIMPULAN DAN SARAN

5.1 Kesimpulan

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.

5.2 Saran

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.

DAFTAR PUSTAKA

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