BAB I PENDAHULUAN

1.1 Latar Belakang Masalah

Machine learning bukanlah konsep yang baru. Sejak akhir tahun 1950-an, para peneliti telah berupaya mengembangkan algoritma yang memungkinkan mesin untuk belajar dari data. Salah satu pionirnya adalah Arthur Samuel, yang mengembangkan program bermain catur yang dapat “belajar” dari permainan sebelumnya untuk menjadi lebih baik. Seiring waktu, machine learning berkembang pesat dengan meningkatnya kemampuan komputasi dan ketersediaan data dalam jumlah besar. Di era digital saat ini, machine learning telah menjadi salah satu bidang yang paling cepat berkembang di dunia teknologi. Dari pengenalan pola sederhana hingga sistem pembelajaran mendalam (deep learning) yang kompleks, machine learning telah menjadi fondasi dari banyak inovasi teknologi modern, seperti pengenalan wajah, kendaraan otonom, asisten virtual, dan sistem rekomendasi (Bintoro dkk., 2024).

Machine Learning terbagi menjadi 2 macam konsep pembelajaran, yaitu pertama Supervised Learning yang merupakan teknik machine learning yang membuat suatu fungsi berdasarkan data latihan yang sudah ada, dalam hal ini dapat dikatakan untuk teknik ini sudah tersedia data latihan secara detail dan terklasifikasi dengan baik yang akan dijadikan sebuah model data saat dilakukan proses uji coba dengan data tes yang baru dan menghasilkan hasil keluaran yang sesuai diharapkan sebelumnya berdasarkan data latihan yang ada. Kedua adalah Unsupervised Learning yang merupakan teknik machine learning yang berusaha untuk melakukan representasi pola sebuah input yang berasal dari data latihan dan salah satu yang menjadi perbedaan dengan Supervised Learning adalah tidak adanya pengklasifikasian dari input data. Dalam Machine Learning teknik Unsupervised Learning menjadi esensial karena sistem kerja yang diberikan sama dengan cara kerja otak manusia dimana dalam proses pembelajaran tidak ada role model atau informasi dan contoh yang tersedia untuk dijadikan sebagai model dalam melakukan proses uji coba untuk penyelesaian sebuah masalah dengan data yang baru (Fathurohman, 2021).

Random Forest adalah algoritma ensemble learning berbasis tree yang membangun banyak decision tree dan menggabungkan prediksinya untuk meningkatkan akurasi dan mengurangi overfitting. Menurut James, Witten, Hastie, dan Tibshirani dalam An Introduction to Statistical Learning (ISL), Random Forest merupakan pengembangan dari metode bagging (Bootstrap Aggregating) yang menggunakan kumpulan pohon keputusan (decision trees) sebagai model dasar. Metode ini dirancang untuk mengurangi variansi model dan meningkatkan kemampuan generalisasi. Seperti Bagging, RF membentuk banyak pohon dari proses resampling dan kemudian menggabungkan hasil prediksinya. Perbedaannya, RF menambahkan pengacakan pada pemilihan prediktor di setiap node. Dengan demikian, pohon-pohon dalam forest tidak hanya dibangun dari sampel yang berbeda, tetapi juga tidak selalu mempertimbangkan prediktor yang sama ketika mencari split terbaik (Fransiska, 2026).

1.2 Rumusan Masalah

Berdasarkan latar belakang tersebut, rumusan masalah yang dapat disimpulkan adalah:

1.Bagaimana cara memahami Random Forest dan Double Random Forest sebagai metode ensemble berbasis decision tree?

2.Bagaimana mengimplementasikan Random Forest untuk klasifikasi dan regresi, serta Double Random Forest untuk klasifikasi dan regresi?

3.Bagaimana mengevaluasi performa model, memahami Out-of-Bag (OOB) error, dan membandingkan Random Forest dengan Double Random Forest?

1.3 Tujuan Penelitian

Berdasarkan rumusan masalah tersebut, tujuan yang dapat disimpulkan adalah:

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 pada penelitian ini yaitu:

1.Bagi Penulis

a.Memberikan informasi serta pengetahuan tentang konsep dasar dan prinsip kerja Random Forest dan Double Random Forest sebagai metode ensemble berbasis decision tree dalam Machine Learning.

b.Mengembangkan dan menerapkan wawasan ilmu yang telah diperoleh dalam bidang statistika, khususnya tentang konsep dasar dan prinsip kerja Random Forest dan Double Random Forest sebagai metode ensemble berbasis decision tree, dan mmengevaluasi performa model, memahami Out-of-Bag (OOB) error, dan membandingkan Random Forest dengan Double Random Forest dengan R-Studio.

2.Bagi Pembaca

Menambah ilmu pengetahuan dan pemahaman yang berkaitan dengan konsep dasar dan prinsip kerja metode Random Forest untuk klasifikasi dan regresi, serta Double Random Forest untuk klasifikasi dan regresi dengan R-Studio.

1.5 Batasan Masalah

Lakukan analisis Random Forest secara lengkap mulai dari persiapan data, pembentukan model, prediksi, evaluasi, visualisasi, dan interpretasi. Gunakan set.seed(234) agar hasil dapat direproduksi. Lakukan Random Forest Classification pada data BreastCancer. Bandingkan mtry = 2, 3, dan 5 dengan num.trees = 200, 500, dan 1000. Bandingkan performa data testing berdasarkan confusion matrix, Accuracy, Precision, Recall, Specificity, F1-score, dan variable importance. Tampilkan pula OOB error sebagai evaluasi internal model.

1.6 Sistematika Penulisan

Adapun sistematika penulisan dari praktikum ini adalah sebagai berikut.

BAB IPENDAHULUAN

Bab ini terdiri dari latar belakang, rumusan masalah, tujuan penelitian, manfaat penelitian, batasan masalah, dan sistematika penulisan.

BAB IITINJAUAN PUSTAKA

Bab ini berisi kajian pustaka yang terdiri dari jurnal, buku, dan informasi pendukung mengenai Random Forest dan Double Random Forest sebagai metode ensemble pada program R-Studio.

BAB IIIMETODE PENELITIAN

Bab ini terdiri dari jenis dan sumber data, variabel penelitian, algoritma penelitian, dan diagram alir.

BAB IVHASIL DAN PEMBAHASAN

Bab ini berisi hasil yang diperoleh dari analisis data beserta penjelasannya pada bagian pembahasan.

BAB VKESIMPULAN

Bab ini merupakan bagian penutup laporan yang berisi kesimpulan dari hasil analisis serta saran dari penulis.

DAFTAR PUSTAKA

LAMPIRAN

BAB II TINJAUAN PUSTAKA

2.1 Machine Learning and Modern Prediction

Machine Learning adalah studi tentang algoritma untuk mempelajari bagaimana melakukan tugas-tugas tertentu yang dilakukan secara otomatis oleh orang-orang. Di sini, belajar mengacu pada kemampuan untuk melakukan berbagai kegiatan yang sudah ada atau untuk mengekstrapolasi kesimpulan baru dengan benar dari berbagai pola yang diamati sebelumnya. Salah satu subbidang kecerdasan buatan, Machine Learning, dapat berdampak pada sejumlah bidang lain, termasuk statistik, matematika, dan banyak bidang teoretis ilmu komputer. Intinya, tujuan machine learning adalah untuk mengembangkan algoritma yang dapat mengeksekusi sistem pembelajaran otonom dengan sangat sedikit masukan dari orang-orang pada umumnya. Berikut beberapa contoh algoritma dari konsep pembelajaran Supervised Learning dan Unsupervised Learning (Fathurohman, 2021):

1.Supervised Learning

a.Logistic Regression: adalah strategi statistik yang dapat digunakan untuk memecahkan masalah dengan membuat prediksi variabel baru berdasarkan sejumlah variabel yang sudah ada dan yang ditentukan sebelumnya dan mencari korelasi antara variabel data input yang ditentukan sebelumnya dengan variabel prediksi baru.

b.K-Nearest Neighbors Algorithm (KNN): memerlukan pembentukan ruang fitur di mana item yang menjadi data pelatihan dan model data diberi nilai berbobot dan direpresentasikan dalam vektor n-dimensi untuk menyelesaikan masalah klasifikasi. Kesulitan tersebut kemudian diselesaikan dengan menentukan jarak dari item baru yang dapat ditentukan menggunakan model data dalam vektor n-dimensi, dan objek baru tersebut kemudian diberikan kategori.

2.Unsupervised Learning

a.Clustering: sebuah proses untuk membuat arketipe item yang digunakan dalam pembelajaran mesin untuk mengatasi tantangan seperti mengklasifikasikan atau mengkategorikan hal-hal ke dalam kelas atau kategori. Data yang digunakan sebagai model data belum membentuk kelompok data, sehingga tidak dapat mengidentifikasi klasifikasi suatu item. Akibatnya, pola dasar pertama-tama harus dibangun menggunakan sejumlah karakteristik yang diperlukan sebelum model data dan data pelatihan dapat digunakan. jika terjadi klasifikasi objek baru.

2.2 Random Forest

Random Forest (RF) pertama kali diperkenalkan oleh Leo Breiman (2001). RF merupakan salah satu metode yang dapat meningkatkan hasil akurasi dalam membangkitkan atribut untuk setiap node yang dilakukan secara acak. RF terdiri dari sekumpulan decision tree, dimana kumpulan pohon keputusan ini digunakan untuk mengklasifikasi data ke suatu kelas. Pohon keputusan dibuat dengan menentukan node akar dan berakhir dengan beberapa node daun untuk mendapatkan hasil akhir. Membentuk pohon keputusan pada metode RF sama dengan proses pada Classsification and Regression Tree (CART), hanya saja pada RF tidak dilakukan prunning (pemangkasan). Indeks Gini digunakan unruk memilih fitur di setiap simpul internal dari pohon keputusan. Nilai Indeks Gini dapat dihitung sebagai berikut (Amaliah, Nusrang, dan aswi., 2022):

\[ Gini(S_i) = 1 - \sum_{i=0}^{c-1} p_i^2 \] dengan pi merupakan frekuensi relative kelas Ci di dalam set. Ci merupakan kelas untuk i = 1, …, c-1, dan c adalah jumlah kelas yang telah ditentukan. Berikut ini ilustrasi pada model random forest (Fransiska, 2026):

Ilustrasi model random forest

Ilustrasi model random forest

2.3 Proses Random Forest (RF)

Misalkan tersedia data latih 𝐷 = (𝑥𝑖, 𝑦𝑖), 𝑖 = 1, 2, . . . , 𝑛 dan akan dibentuk 𝐵 pohon. Secara sederhana, proses Random Forest dilakukan sebagai berikut (Fransiska, 2026):

1.Mengambil sampel bootstrap dari data latih untuk membentuk data bagi tree ke-𝑏.

2.Pada setiap node, memilih mtry prediktor secara acak dari seluruh 𝑝 prediktor.

3.Menentukan split terbaik hanya dari mtry prediktor yang terpilih.

4.Menumbuhkan decision tree hingga memenuhi aturan penghentian, misalnya minimum node size.

5.Mengulangi proses sampai diperoleh 𝐵 tree, kemudian menggabungkan prediksi seluruh tree. Untuk klasifikasi, hasil akhir diperoleh melalui majority voting:

\[ \hat{G}_{RF}(x) = \operatorname{mode}\{G_1(x), G_2(x), \ldots, G_B(x)\} \] Untuk regresi, hasil akhir diperoleh dengan merata-ratakan prediksi semua tree:

\[ \hat{f}_{RF}(x) = \left(\frac{1}{B}\right) \sum_{b=1}^{B} T_b(x) \] Dengan demikian, Random Forest tetap merupakan metode parallel ensemble, dengan setiap tree dapat dibentuk secara relatif independen, berbeda dari Boosting yang bersifat sequential.

2.4 Out-of-Bag (OOB) Error

Pada bootstrap berukuran 𝑛 yang diambil dengan pengembalian dari 𝑛 observasi, sebagian observasi dapat terambil lebih dari sekali dan sebagian lainnya tidak terambil. Secara rata-rata, proporsi observasi unik yang masuk ke satu bootstrap sampel mendekati 1 − 𝑒⁻¹ ≈ 0,632. Artinya, sekitar 36,8% observasi tidak digunakan untuk membentuk tree tertentu dan disebut Out-of-Bag (OOB) observations. Untuk setiap observasi, prediksi OOB diperoleh hanya dari tree-tree yang tidak menggunakan observasi tersebut ketika dibentuk. Prediksi ini dapat digunakan untuk menghitung OOB prediction error sebagai ukuran evaluasi internal Random Forest. Pada ranger, OOB error dihitung secara otomatis secara default. Untuk klasifikasi, prediction.error menyatakan proporsi salah klasifikasi OOB, sedangkan untuk regresi menyatakan OOB Mean Squared Error (MSE) (Fransiska, 2026).

2.5 Double Random Forest (DRF)

Double random forest (DRF) dikembangkan dari RF ketika data RF mengalami underfit. Berbeda dengan RF, DRF menggunakan seluruh sampel data latih untuk membangun pohon keputusan. Seluruh pohon yang dibentuk pada DRF berasal dari data yang sama akan menghasilkan contoh unik yang banyak. Semakin banyak contoh unik yang dimiliki, akan semakin besar pohon yang dihasilkan. Adanya DRF diharapkan dapat menghasilkan pohon keputusan yang lebih besar dan bisa meningkatkan performa yang maksimum sesuai dengan ukuran node minimum. DRF melakukan bootstrap pada setiap node untuk mendapatkan pemisah terbaik dan kondisi lain ketika tidak memerlukan bootstrap yakni saat suatu node memiliki sampel kurang dari 10% dari total sampel. Setiap hasil prediksi suatu pohon akan digabungkan dengan menggunakan majority vote (Manaf, Fitrianto, dan Soleh., 2024).

Secara sederhana, proses Double Random Forest dilakukan sebagai berikut (Fransiska, 2026):

1.Memulai setiap tree dengan seluruh data training, bukan satu bootstrap sample untuk seluruh tree.

2.Pada node yang sedang diproses, mengambil bootstrap sample dari observasi yang mencapai node tersebut.

3.Memilih mtry prediktor secara acak dan mencari split terbaik menggunakan bootstrap sample pada node.

4.Setelah split terbaik ditemukan, bootstrap sample tidak diteruskan. Split tersebut diterapkan kembali pada data asli yang mencapai node, kemudian observasi asli dikirim ke child nodes.

5.Mengulangi proses pada node berikutnya sampai aturan penghentian tercapai, lalu mengulangi untuk seluruh tree.

6.Menggabungkan prediksi seluruh tree. Pada klasifikasi, hasil akhir diperoleh melalui majority voting, sedangkan pada regresi prediksi akhir diperoleh dengan merata-ratakan prediksi seluruh tree.

Karena setiap tree menggunakan seluruh data training untuk tumbuh, maka DRF cenderung dapat menghasilkan tree yang lebih besar. Pada saat yang sama, penggunaan bootstrap pada setiap node dan random feature subset tetap menambahkan keragaman pada aturan split. Konsekuensinya, DRF umumnya membutuhkan waktu komputasi lebih besar dibanding RF karena proses bootstrap dilakukan berulang pada banyak node.

Ilustrasi model random forest

Ilustrasi model random forest

berikut ini tabel perbedaan antara random forest dan double random forest:

Ilustrasi model random forest

Ilustrasi model random forest

berikut ini parameter penting RF dan DRF:

Ilustrasi model random forest

Ilustrasi model random forest

berikut ini evaluasi model pada random forest dan double random forest:

Ilustrasi model random forest

Ilustrasi model random forest

BAB III METODE PENELITIAN

3.1 Sumber Data

Penelitian ini merupakan penelitian kuantitatif dengan pendekatan komputasi yang bertujuan untuk menerapkan metode Random Forest Classification dalam mengklasifikasikan data kanker payudara. Data yang digunakan adalah dataset BreastCancer yang tersedia dalam paket mlbench pada perangkat lunak RStudio. Dataset ini memuat informasi karakteristik sel hasil pemeriksaan yang digunakan untuk membedakan dua kelas diagnosis, yaitu benign (jinak) dan malignant (ganas). Pengolahan data dan pembentukan model dilakukan menggunakan bahasa pemrograman R dengan bantuan paket mlbench, caret, dan ranger. Data dibagi menjadi data training sebesar 70% dan data testing sebesar 30% menggunakan fungsi createDataPartition() dengan set.seed(234) agar pembagian data dapat direproduksi.

3.2 Variabel Penelitian

Variabel penelitian yang digunakan terdiri atas variabel respons dan variabel prediktor. Variabel respons adalah Class, yang menunjukkan kategori diagnosis kanker payudara, yaitu benign (jinak) dan malignant (ganas). Sementara itu, variabel prediktor terdiri atas sembilan karakteristik sel, yaitu Cl.thickness (ketebalan kelompok sel), Cell.size (keseragaman ukuran sel), Cell.shape (keseragaman bentuk sel), Marg.adhesion (adhesi marginal sel), Epith.c.size (ukuran sel epitel tunggal), Bare.nuclei (kondisi inti sel), Bl.cromatin (karakteristik kromatin), Normal.nucleoli (kondisi nukleolus), dan Mitoses (tingkat mitosis sel). Seluruh variabel prediktor tersebut digunakan untuk membentuk model Random Forest Classification dalam memprediksi kategori diagnosis kanker payudara. Adapun variabel Id dihapus karena hanya berfungsi sebagai identitas pengamatan dan tidak digunakan dalam proses pemodelan.

3.3 Langkah-langkah Analisis

Algoritma berdasarkan batasan masalah adalah:

1.Memasukkan dataset BreastCancer ke dalam R-Studio.

2.Memeriksa struktur dan distribusi kelas pada dataset.

3.Mengidentifikasi variabel prediktor dan variabel respon pada dataset.

4.Menghapus variabel identitas (ID) yang tidak digunakan dalam pemodelan.

5.Mengidentifikasi dan menangani nilai yang hilang (missing value) pada dataset.

6.Membagi dataset menjadi data training sebesar 70% dan data testing sebesar 30% menggunakan createDataPartition() dengan set.seed(234).

7.Menentukan kombinasi parameter mtry, yaitu 2, 3, dan 5, serta num.trees, yaitu 200, 500, dan 1000, sehingga diperoleh sembilan kombinasi model.

8.Membentuk sembilan model Random Forest Classification menggunakan fungsi ranger() dengan data training, min.node.size = 1, replace = TRUE, sample.fraction = 1, dan importance = “permutation”. Penggunaan set.seed(234) dilakukan untuk mendukung reproduksibilitas hasil.

9.Menghitung Out-of-Bag (OOB) error untuk setiap model sebagai ukuran kesalahan klasifikasi internal yang diperoleh dari pengamatan yang tidak digunakan pada sampel bootstrap tertentu.

10.Melakukan prediksi terhadap data testing menggunakan masing-masing model untuk memperoleh kategori diagnosis benign atau malignant.

11.Membentuk confusion matrix dengan membandingkan kelas aktual dan kelas prediksi untuk mengetahui jumlah prediksi benar dan salah pada setiap kategori.

12.Menghitung nilai Accuracy, Precision, Recall, Specificity, dan F1-score untuk mengevaluasi kinerja masing-masing model, dengan kelas malignant sebagai kelas positif.

13.Membandingkan kinerja sembilan model berdasarkan hasil evaluasi data testing dan nilai OOB error untuk mengetahui perbedaan performa akibat variasi parameter mtry dan num.trees.

14.Menghitung variable importance menggunakan metode permutation importance untuk mengidentifikasi variabel prediktor yang memiliki kontribusi relatif besar terhadap kinerja model.

15.Menyajikan hasil analisis melalui tabel perbandingan evaluasi, confusion matrix, grafik perbandingan Accuracy, grafik OOB error, serta grafik variable importance.

16.Menentukan model terbaik berdasarkan Accuracy data testing tertinggi, dengan OOB error terendah sebagai pertimbangan apabila terdapat nilai Accuracy yang sama. Nilai Recall, Precision, dan F1-score turut diperhatikan dalam interpretasi, terutama untuk menilai kemampuan model mendeteksi kelas malignant.

17.Kesimpulan.

3.4 Diagram Alir Penelitian

Berikut ini diagram alir penelitian:

BAB IV HASIL DAN PEMBAHASAN

4.1 Library dan Import Data

Berikut ini library dan statistik deskriptif yang digunakan dalam meng-import data dari excel:

library(ranger)
library(mlbench)
library(caret)
## Loading required package: ggplot2
## Loading required package: lattice
# A1. Memuat dan memeriksa data
data(BreastCancer, package = "mlbench")
bc <- BreastCancer

str(bc)
## 'data.frame':    699 obs. of  11 variables:
##  $ Id             : chr  "1000025" "1002945" "1015425" "1016277" ...
##  $ Cl.thickness   : Ord.factor w/ 10 levels "1"<"2"<"3"<"4"<..: 5 5 3 6 4 8 1 2 2 4 ...
##  $ Cell.size      : Ord.factor w/ 10 levels "1"<"2"<"3"<"4"<..: 1 4 1 8 1 10 1 1 1 2 ...
##  $ Cell.shape     : Ord.factor w/ 10 levels "1"<"2"<"3"<"4"<..: 1 4 1 8 1 10 1 2 1 1 ...
##  $ Marg.adhesion  : Ord.factor w/ 10 levels "1"<"2"<"3"<"4"<..: 1 5 1 1 3 8 1 1 1 1 ...
##  $ Epith.c.size   : Ord.factor w/ 10 levels "1"<"2"<"3"<"4"<..: 2 7 2 3 2 7 2 2 2 2 ...
##  $ Bare.nuclei    : Factor w/ 10 levels "1","2","3","4",..: 1 10 2 4 1 10 10 1 1 1 ...
##  $ Bl.cromatin    : Factor w/ 10 levels "1","2","3","4",..: 3 3 3 3 3 9 3 3 1 2 ...
##  $ Normal.nucleoli: Factor w/ 10 levels "1","2","3","4",..: 1 2 1 7 1 7 1 1 1 1 ...
##  $ Mitoses        : Factor w/ 9 levels "1","2","3","4",..: 1 1 1 1 1 1 1 1 5 1 ...
##  $ Class          : Factor w/ 2 levels "benign","malignant": 1 1 1 1 1 2 1 1 1 1 ...
summary(bc)
##          Id       Cl.thickness   Cell.size     Cell.shape  Marg.adhesion
##  Length   :699   1      :145   1      :384   1      :353   1      :407  
##  N.unique :645   5      :130   10     : 67   2      : 59   2      : 58  
##  N.blank  :  0   3      :108   3      : 52   10     : 58   3      : 58  
##  Min.nchar:  5   4      : 80   2      : 45   3      : 56   10     : 55  
##  Max.nchar:  8   10     : 69   4      : 40   4      : 44   4      : 33  
##                  2      : 50   5      : 30   5      : 34   8      : 25  
##                  (Other):117   (Other): 81   (Other): 95   (Other): 63  
##   Epith.c.size  Bare.nuclei   Bl.cromatin  Normal.nucleoli    Mitoses   
##  2      :386   1      :402   2      :166   1      :443     1      :579  
##  3      : 72   10     :132   3      :165   10     : 61     2      : 35  
##  4      : 48   2      : 30   1      :152   3      : 44     3      : 33  
##  1      : 47   5      : 30   7      : 73   2      : 36     10     : 14  
##  6      : 41   3      : 28   4      : 40   8      : 24     4      : 12  
##  5      : 39   (Other): 61   5      : 34   6      : 22     7      :  9  
##  (Other): 66   NAs    : 16   (Other): 69   (Other): 69     (Other): 17  
##        Class    
##  benign   :458  
##  malignant:241  
##                 
##                 
##                 
##                 
## 
dim(bc)
## [1] 699  11
table(bc$Class)
## 
##    benign malignant 
##       458       241
# A2. Persiapan data
# Menghapus variabel identitas
bc$Id <- NULL

# Menghapus baris yang memiliki missing value
bc <- na.omit(bc)

# Memastikan variabel respon berbentuk factor
bc$Class <- factor(
  bc$Class,
  levels = c("benign", "malignant")
)

# Memeriksa distribusi kelas
levels(bc$Class)
## [1] "benign"    "malignant"
table(bc$Class)
## 
##    benign malignant 
##       444       239
prop.table(table(bc$Class))
## 
##    benign malignant 
## 0.6500732 0.3499268

Berdasarkan hasil pemeriksaan dataset BreastCancer dari paket mlbench, diperoleh 699 observasi dan 11 variabel yang terdiri atas satu variabel identitas (Id), sembilan variabel prediktor, dan satu variabel respons (Class). Hasil pemeriksaan menunjukkan bahwa terdapat 458 observasi kategori benign (jinak) dan 241 observasi kategori malignant (ganas), serta 16 nilai hilang (missing value) pada variabel Bare.nuclei. Pada tahap persiapan data, variabel Id dihapus karena hanya berfungsi sebagai identitas pengamatan, sedangkan observasi yang memiliki nilai hilang dihapus menggunakan fungsi na.omit(), sehingga jumlah data berkurang menjadi 683 observasi. Setelah itu, variabel Class dipastikan bertipe faktor dengan dua kategori, yaitu benign dan malignant. Hasil akhir menunjukkan bahwa terdapat 444 observasi benign atau sebesar 65,01% dan 239 observasi malignant atau sebesar 34,99%. Dengan demikian, data telah dipersiapkan untuk tahap pembagian data training dan testing serta pembentukan model Random Forest Classification.

4.2 Pembagian Data Training dan Testing

Berikut ini pembagian data train dan data test pada data yang digunakan:

# A3. Membagi data training dan testing
set.seed(234)

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

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

# Memeriksa ukuran data
dim(bc.train)
## [1] 479  10
dim(bc.test)
## [1] 204  10
# Distribusi kelas training dan testing
table(bc.train$Class)
## 
##    benign malignant 
##       311       168
table(bc.test$Class)
## 
##    benign malignant 
##       133        71

Berdasarkan hasil pembagian data menggunakan fungsi createDataPartition() dengan proporsi 70% untuk data training dan 30% untuk data testing, diperoleh sebanyak 479 observasi dengan 10 variabel pada data training dan 204 observasi dengan 10 variabel pada data testing. Proses pembagian dilakukan menggunakan set.seed(234) agar hasil pembagian data dapat direproduksi secara konsisten. Pada data training, terdapat 311 observasi kategori benign (jinak) dan 168 observasi kategori malignant (ganas), sedangkan pada data testing terdapat 133 observasi benign dan 71 observasi malignant. Distribusi kelas pada kedua kelompok data tersebut relatif sebanding dengan distribusi kelas pada dataset secara keseluruhan. Data training digunakan untuk membangun model Random Forest Classification, sedangkan data testing digunakan untuk menguji kemampuan model dalam mengklasifikasikan data baru yang tidak digunakan selama proses pelatihan.

4.3 Menentukan Kombinasi Parameter

Berikut ini kombinasi parameter pada data yang digunakan:

# A4. Menentukan kombinasi parameter
kombinasi <- expand.grid(
  mtry = c(2, 3, 5),
  num.trees = c(200, 500, 1000)
)

kombinasi$Model <- paste0(
  "mtry_", kombinasi$mtry,
  "_trees_", kombinasi$num.trees
)

kombinasi <- kombinasi[
  , c("Model", "mtry", "num.trees")
]

kombinasi
##               Model mtry num.trees
## 1  mtry_2_trees_200    2       200
## 2  mtry_3_trees_200    3       200
## 3  mtry_5_trees_200    5       200
## 4  mtry_2_trees_500    2       500
## 5  mtry_3_trees_500    3       500
## 6  mtry_5_trees_500    5       500
## 7 mtry_2_trees_1000    2      1000
## 8 mtry_3_trees_1000    3      1000
## 9 mtry_5_trees_1000    5      1000

Berdasarkan tabel kombinasi parameter model Random Forest Classification, dilakukan pengujian terhadap sembilan kombinasi model dengan menggunakan variasi parameter mtry sebesar 2, 3, dan 5 serta jumlah pohon (num.trees) sebesar 200, 500, dan 1000. Parameter mtry menunjukkan jumlah variabel prediktor yang dipertimbangkan secara acak pada setiap pemisahan simpul pohon, sedangkan num.trees menunjukkan banyaknya pohon keputusan yang dibentuk dalam model. Kombinasi tersebut menghasilkan sembilan model, yaitu tiga model dengan 200 pohon, tiga model dengan 500 pohon, dan tiga model dengan 1000 pohon. Pengujian berbagai kombinasi parameter ini bertujuan untuk mengetahui konfigurasi model yang memberikan kinerja klasifikasi terbaik dalam membedakan diagnosis benign (jinak) dan malignant (ganas). Selanjutnya, setiap model akan dievaluasi menggunakan data testing berdasarkan nilai confusion matrix, Accuracy, Precision, Recall, Specificity, F1-score, AUC, serta Out-of-Bag (OOB) Error untuk menentukan model yang paling sesuai.

4.4 Model Random Forest Classification

Berikut ini untuk menentukan 9 model pada RF classification pada data yang digunakan:

# A5. Membentuk 9 model Random Forest Classification
model.rf <- list()
hasil.evaluasi <- list()
hasil.importance <- list()
hasil.cm <- list()

for (i in seq_len(nrow(kombinasi))) {
  
  set.seed(234)
  
  nama.model <- kombinasi$Model[i]
  nilai.mtry <- kombinasi$mtry[i]
  jumlah.pohon <- kombinasi$num.trees[i]
  
  cat("\n\n========================================\n")
  cat("MODEL:", nama.model, "\n")
  cat("mtry =", nilai.mtry,
      "| num.trees =", jumlah.pohon, "\n")
  cat("========================================\n")
  
  # Membentuk model Random Forest Classification
  model <- ranger(
    Class ~ .,
    data = bc.train,
    num.trees = jumlah.pohon,
    mtry = nilai.mtry,
    min.node.size = 1,
    replace = TRUE,
    sample.fraction = 1,
    importance = "permutation",
    seed = 234
  )
  
  model.rf[[nama.model]] <- model
  
  # Menampilkan ringkasan model
  print(model)
  
  # Evaluasi internal OOB
  oob.error <- model$prediction.error
  
  cat("\nOOB Error:\n")
  print(oob.error)
  
  # Prediksi data testing
  prediksi <- predict(
    model,
    data = bc.test
  )$predictions
  
  prediksi <- factor(
    prediksi,
    levels = levels(bc.test$Class)
  )
  
  aktual <- bc.test$Class
  
  # Menampilkan hasil prediksi
  hasil.prediksi <- data.frame(
    Aktual = aktual,
    Prediksi = prediksi
  )
  
  cat("\n10 Hasil Prediksi Pertama:\n")
  print(head(hasil.prediksi, 10))
  
  # Confusion Matrix
  cm <- confusionMatrix(
    data = prediksi,
    reference = aktual,
    positive = "malignant"
  )
  
  hasil.cm[[nama.model]] <- cm
  
  cat("\nConfusion Matrix:\n")
  print(cm)
  
  # Menghitung komponen confusion matrix
  tab <- table(
    Aktual = aktual,
    Prediksi = prediksi
  )
  
  TN <- tab["benign", "benign"]
  FP <- tab["benign", "malignant"]
  FN <- tab["malignant", "benign"]
  TP <- tab["malignant", "malignant"]
  
  # Menghitung ukuran evaluasi
  Accuracy <- (TP + TN) / sum(tab)
  
  Precision <- ifelse(
    TP + FP == 0, 0, TP / (TP + FP)
  )
  
  Recall <- ifelse(
    TP + FN == 0, 0, TP / (TP + FN)
  )
  
  Specificity <- ifelse(
    TN + FP == 0, 0, TN / (TN + FP)
  )
  
  F1 <- ifelse(
    Precision + Recall == 0,
    0,
    2 * Precision * Recall /
      (Precision + Recall)
  )
  
  hasil.evaluasi[[nama.model]] <- data.frame(
    Model = nama.model,
    mtry = nilai.mtry,
    num.trees = jumlah.pohon,
    OOB_Error = oob.error,
    Accuracy = Accuracy,
    Precision = Precision,
    Recall = Recall,
    Specificity = Specificity,
    F1_Score = F1
  )
  
  cat("\nHasil Evaluasi Model:\n")
  print(
    round(
      hasil.evaluasi[[nama.model]][
        , c(
          "OOB_Error", "Accuracy", "Precision",
          "Recall", "Specificity", "F1_Score"
        )
      ],
      4
    )
  )
  
  # Variable Importance
  vi <- sort(
    model$variable.importance,
    decreasing = TRUE
  )
  
  hasil.importance[[nama.model]] <- data.frame(
    Model = nama.model,
    Variabel = names(vi),
    Importance = as.numeric(vi)
  )
  
  cat("\nVariable Importance:\n")
  print(hasil.importance[[nama.model]])
}
## 
## 
## ========================================
## MODEL: mtry_2_trees_200 
## mtry = 2 | num.trees = 200 
## ========================================
## Ranger result
## 
## Call:
##  ranger(Class ~ ., data = bc.train, num.trees = jumlah.pohon,      mtry = nilai.mtry, 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
## 
## 10 Hasil Prediksi Pertama:
##       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:
## 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 Model:
##   OOB_Error Accuracy Precision Recall Specificity F1_Score
## 1    0.0292   0.9804    0.9589 0.9859      0.9774   0.9722
## 
## Variable Importance:
##              Model        Variabel  Importance
## 1 mtry_2_trees_200     Bare.nuclei 0.083924522
## 2 mtry_2_trees_200       Cell.size 0.078718154
## 3 mtry_2_trees_200      Cell.shape 0.060967868
## 4 mtry_2_trees_200    Cl.thickness 0.024489152
## 5 mtry_2_trees_200     Bl.cromatin 0.021478062
## 6 mtry_2_trees_200 Normal.nucleoli 0.020446839
## 7 mtry_2_trees_200   Marg.adhesion 0.019251533
## 8 mtry_2_trees_200    Epith.c.size 0.011737675
## 9 mtry_2_trees_200         Mitoses 0.003751688
## 
## 
## ========================================
## MODEL: mtry_3_trees_200 
## mtry = 3 | num.trees = 200 
## ========================================
## Ranger result
## 
## Call:
##  ranger(Class ~ ., data = bc.train, num.trees = jumlah.pohon,      mtry = nilai.mtry, 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
## 
## 10 Hasil Prediksi Pertama:
##       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:
## 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 Model:
##   OOB_Error Accuracy Precision Recall Specificity F1_Score
## 1    0.0271   0.9706    0.9577 0.9577      0.9774   0.9577
## 
## Variable Importance:
##              Model        Variabel  Importance
## 1 mtry_3_trees_200     Bare.nuclei 0.097215967
## 2 mtry_3_trees_200       Cell.size 0.091653406
## 3 mtry_3_trees_200      Cell.shape 0.062810795
## 4 mtry_3_trees_200    Cl.thickness 0.027788431
## 5 mtry_3_trees_200   Marg.adhesion 0.019128466
## 6 mtry_3_trees_200     Bl.cromatin 0.017950453
## 7 mtry_3_trees_200 Normal.nucleoli 0.015967442
## 8 mtry_3_trees_200    Epith.c.size 0.009877622
## 9 mtry_3_trees_200         Mitoses 0.003686372
## 
## 
## ========================================
## MODEL: mtry_5_trees_200 
## mtry = 5 | num.trees = 200 
## ========================================
## Ranger result
## 
## Call:
##  ranger(Class ~ ., data = bc.train, num.trees = jumlah.pohon,      mtry = nilai.mtry, 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
## 
## 10 Hasil Prediksi Pertama:
##       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:
## 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 Model:
##   OOB_Error Accuracy Precision Recall Specificity F1_Score
## 1    0.0292   0.9608    0.9437 0.9437      0.9699   0.9437
## 
## Variable Importance:
##              Model        Variabel  Importance
## 1 mtry_5_trees_200     Bare.nuclei 0.125936890
## 2 mtry_5_trees_200       Cell.size 0.089778781
## 3 mtry_5_trees_200      Cell.shape 0.042713777
## 4 mtry_5_trees_200    Cl.thickness 0.023260225
## 5 mtry_5_trees_200 Normal.nucleoli 0.021657685
## 6 mtry_5_trees_200   Marg.adhesion 0.020899801
## 7 mtry_5_trees_200     Bl.cromatin 0.014237292
## 8 mtry_5_trees_200    Epith.c.size 0.008615232
## 9 mtry_5_trees_200         Mitoses 0.002635523
## 
## 
## ========================================
## MODEL: mtry_2_trees_500 
## mtry = 2 | num.trees = 500 
## ========================================
## Ranger result
## 
## Call:
##  ranger(Class ~ ., data = bc.train, num.trees = jumlah.pohon,      mtry = nilai.mtry, 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
## 
## 10 Hasil Prediksi Pertama:
##       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:
## 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 Model:
##   OOB_Error Accuracy Precision Recall Specificity F1_Score
## 1    0.0292   0.9755    0.9459 0.9859      0.9699   0.9655
## 
## Variable Importance:
##              Model        Variabel  Importance
## 1 mtry_2_trees_500     Bare.nuclei 0.080504597
## 2 mtry_2_trees_500       Cell.size 0.077257729
## 3 mtry_2_trees_500      Cell.shape 0.062974113
## 4 mtry_2_trees_500    Cl.thickness 0.026747140
## 5 mtry_2_trees_500     Bl.cromatin 0.021877891
## 6 mtry_2_trees_500 Normal.nucleoli 0.021841450
## 7 mtry_2_trees_500   Marg.adhesion 0.019112201
## 8 mtry_2_trees_500    Epith.c.size 0.013222617
## 9 mtry_2_trees_500         Mitoses 0.003090966
## 
## 
## ========================================
## MODEL: mtry_3_trees_500 
## mtry = 3 | num.trees = 500 
## ========================================
## Ranger result
## 
## Call:
##  ranger(Class ~ ., data = bc.train, num.trees = jumlah.pohon,      mtry = nilai.mtry, 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
## 
## 10 Hasil Prediksi Pertama:
##       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:
## 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 Model:
##   OOB_Error Accuracy Precision Recall Specificity F1_Score
## 1    0.0292   0.9706    0.9577 0.9577      0.9774   0.9577
## 
## Variable Importance:
##              Model        Variabel  Importance
## 1 mtry_3_trees_500     Bare.nuclei 0.099119249
## 2 mtry_3_trees_500       Cell.size 0.085328389
## 3 mtry_3_trees_500      Cell.shape 0.065123301
## 4 mtry_3_trees_500    Cl.thickness 0.026031551
## 5 mtry_3_trees_500   Marg.adhesion 0.019338940
## 6 mtry_3_trees_500     Bl.cromatin 0.018814782
## 7 mtry_3_trees_500 Normal.nucleoli 0.014788223
## 8 mtry_3_trees_500    Epith.c.size 0.010949414
## 9 mtry_3_trees_500         Mitoses 0.003211898
## 
## 
## ========================================
## MODEL: mtry_5_trees_500 
## mtry = 5 | num.trees = 500 
## ========================================
## Ranger result
## 
## Call:
##  ranger(Class ~ ., data = bc.train, num.trees = jumlah.pohon,      mtry = nilai.mtry, 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
## 
## 10 Hasil Prediksi Pertama:
##       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:
## 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 Model:
##   OOB_Error Accuracy Precision Recall Specificity F1_Score
## 1    0.0292   0.9608    0.9437 0.9437      0.9699   0.9437
## 
## Variable Importance:
##              Model        Variabel  Importance
## 1 mtry_5_trees_500     Bare.nuclei 0.124282812
## 2 mtry_5_trees_500       Cell.size 0.090904474
## 3 mtry_5_trees_500      Cell.shape 0.045966760
## 4 mtry_5_trees_500    Cl.thickness 0.021676702
## 5 mtry_5_trees_500 Normal.nucleoli 0.020300877
## 6 mtry_5_trees_500   Marg.adhesion 0.019536614
## 7 mtry_5_trees_500     Bl.cromatin 0.015268145
## 8 mtry_5_trees_500    Epith.c.size 0.009305183
## 9 mtry_5_trees_500         Mitoses 0.003024808
## 
## 
## ========================================
## MODEL: mtry_2_trees_1000 
## mtry = 2 | num.trees = 1000 
## ========================================
## Ranger result
## 
## Call:
##  ranger(Class ~ ., data = bc.train, num.trees = jumlah.pohon,      mtry = nilai.mtry, 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
## 
## 10 Hasil Prediksi Pertama:
##       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:
## 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 Model:
##   OOB_Error Accuracy Precision Recall Specificity F1_Score
## 1    0.0292   0.9706    0.9452 0.9718      0.9699   0.9583
## 
## Variable Importance:
##               Model        Variabel  Importance
## 1 mtry_2_trees_1000     Bare.nuclei 0.081727341
## 2 mtry_2_trees_1000       Cell.size 0.077885328
## 3 mtry_2_trees_1000      Cell.shape 0.062585865
## 4 mtry_2_trees_1000    Cl.thickness 0.026309142
## 5 mtry_2_trees_1000     Bl.cromatin 0.020503315
## 6 mtry_2_trees_1000 Normal.nucleoli 0.019947983
## 7 mtry_2_trees_1000   Marg.adhesion 0.018885437
## 8 mtry_2_trees_1000    Epith.c.size 0.014006791
## 9 mtry_2_trees_1000         Mitoses 0.003346598
## 
## 
## ========================================
## MODEL: mtry_3_trees_1000 
## mtry = 3 | num.trees = 1000 
## ========================================
## Ranger result
## 
## Call:
##  ranger(Class ~ ., data = bc.train, num.trees = jumlah.pohon,      mtry = nilai.mtry, 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
## 
## 10 Hasil Prediksi Pertama:
##       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:
## 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 Model:
##   OOB_Error Accuracy Precision Recall Specificity F1_Score
## 1    0.0271   0.9657    0.9444 0.9577      0.9699    0.951
## 
## Variable Importance:
##               Model        Variabel Importance
## 1 mtry_3_trees_1000     Bare.nuclei 0.10028334
## 2 mtry_3_trees_1000       Cell.size 0.08553569
## 3 mtry_3_trees_1000      Cell.shape 0.05925770
## 4 mtry_3_trees_1000    Cl.thickness 0.02481448
## 5 mtry_3_trees_1000   Marg.adhesion 0.01952841
## 6 mtry_3_trees_1000     Bl.cromatin 0.01920131
## 7 mtry_3_trees_1000 Normal.nucleoli 0.01648600
## 8 mtry_3_trees_1000    Epith.c.size 0.01186049
## 9 mtry_3_trees_1000         Mitoses 0.00318534
## 
## 
## ========================================
## MODEL: mtry_5_trees_1000 
## mtry = 5 | num.trees = 1000 
## ========================================
## Ranger result
## 
## Call:
##  ranger(Class ~ ., data = bc.train, num.trees = jumlah.pohon,      mtry = nilai.mtry, 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
## 
## 10 Hasil Prediksi Pertama:
##       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:
## 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 Model:
##   OOB_Error Accuracy Precision Recall Specificity F1_Score
## 1    0.0271   0.9559    0.9429 0.9296      0.9699   0.9362
## 
## Variable Importance:
##               Model        Variabel  Importance
## 1 mtry_5_trees_1000     Bare.nuclei 0.121396617
## 2 mtry_5_trees_1000       Cell.size 0.091093145
## 3 mtry_5_trees_1000      Cell.shape 0.043806238
## 4 mtry_5_trees_1000    Cl.thickness 0.022686356
## 5 mtry_5_trees_1000 Normal.nucleoli 0.020778434
## 6 mtry_5_trees_1000   Marg.adhesion 0.018867468
## 7 mtry_5_trees_1000     Bl.cromatin 0.016189366
## 8 mtry_5_trees_1000    Epith.c.size 0.009737954
## 9 mtry_5_trees_1000         Mitoses 0.003221466

Berdasarkan hasil pemodelan Random Forest Classification, setiap kombinasi parameter mtry dan num.trees menghasilkan nilai evaluasi yang berbeda. Pada model dengan mtry = 2 dan num.trees = 200, diperoleh nilai Accuracy sebesar 98,04%, Precision sebesar 95,89%, Recall sebesar 98,59%, Specificity sebesar 97,74%, dan F1-score sebesar 97,22%, dengan nilai Out-of-Bag (OOB) Error sebesar 2,92%. Hasil confusion matrix menunjukkan bahwa model tersebut mampu mengklasifikasikan 130 data benign dan 70 data malignant dengan benar, sedangkan 4 data mengalami kesalahan klasifikasi. Selain itu, berdasarkan nilai variable importance, variabel Bare.nuclei memiliki tingkat kepentingan tertinggi, diikuti oleh Cell.size dan Cell.shape, sehingga ketiga variabel tersebut memberikan kontribusi besar dalam proses klasifikasi. Hasil ini menunjukkan bahwa model Random Forest mampu mengklasifikasikan diagnosis dengan sangat baik pada data testing, meskipun pemilihan model terbaik tetap perlu mempertimbangkan hasil evaluasi dari seluruh kombinasi parameter yang diuji.

4.5 Perbandingan Hasil Evaluasi pada Model

Berikut ini hasil perbandingan evaluasi pada data yang digunakan:

# A6. Membandingkan hasil evaluasi 9 model
tabel.evaluasi <- do.call(
  rbind, hasil.evaluasi
)

rownames(tabel.evaluasi) <- NULL

# Mengurutkan berdasarkan Accuracy tertinggi,
# kemudian OOB error terendah
tabel.evaluasi <- tabel.evaluasi[
  order(
    -tabel.evaluasi$Accuracy,
    tabel.evaluasi$OOB_Error
  ),
]

print(round(
  tabel.evaluasi[
    , c(
      "OOB_Error", "Accuracy", "Precision",
      "Recall", "Specificity", "F1_Score"
    )
  ],
  4
))
##   OOB_Error Accuracy Precision Recall Specificity F1_Score
## 1    0.0292   0.9804    0.9589 0.9859      0.9774   0.9722
## 4    0.0292   0.9755    0.9459 0.9859      0.9699   0.9655
## 2    0.0271   0.9706    0.9577 0.9577      0.9774   0.9577
## 5    0.0292   0.9706    0.9577 0.9577      0.9774   0.9577
## 7    0.0292   0.9706    0.9452 0.9718      0.9699   0.9583
## 8    0.0271   0.9657    0.9444 0.9577      0.9699   0.9510
## 3    0.0292   0.9608    0.9437 0.9437      0.9699   0.9437
## 6    0.0292   0.9608    0.9437 0.9437      0.9699   0.9437
## 9    0.0271   0.9559    0.9429 0.9296      0.9699   0.9362
# Menampilkan seluruh tabel beserta parameter
print(tabel.evaluasi)
##               Model mtry num.trees  OOB_Error  Accuracy Precision    Recall
## 1  mtry_2_trees_200    2       200 0.02922756 0.9803922 0.9589041 0.9859155
## 4  mtry_2_trees_500    2       500 0.02922756 0.9754902 0.9459459 0.9859155
## 2  mtry_3_trees_200    3       200 0.02713987 0.9705882 0.9577465 0.9577465
## 5  mtry_3_trees_500    3       500 0.02922756 0.9705882 0.9577465 0.9577465
## 7 mtry_2_trees_1000    2      1000 0.02922756 0.9705882 0.9452055 0.9718310
## 8 mtry_3_trees_1000    3      1000 0.02713987 0.9656863 0.9444444 0.9577465
## 3  mtry_5_trees_200    5       200 0.02922756 0.9607843 0.9436620 0.9436620
## 6  mtry_5_trees_500    5       500 0.02922756 0.9607843 0.9436620 0.9436620
## 9 mtry_5_trees_1000    5      1000 0.02713987 0.9558824 0.9428571 0.9295775
##   Specificity  F1_Score
## 1   0.9774436 0.9722222
## 4   0.9699248 0.9655172
## 2   0.9774436 0.9577465
## 5   0.9774436 0.9577465
## 7   0.9699248 0.9583333
## 8   0.9699248 0.9510490
## 3   0.9699248 0.9436620
## 6   0.9699248 0.9436620
## 9   0.9699248 0.9361702

Berdasarkan tabel perbandingan sembilan model Random Forest Classification, diperoleh bahwa model terbaik adalah mtry_2_trees_200, dengan nilai Accuracy sebesar 98,04%, Precision sebesar 95,89%, Recall sebesar 98,59%, Specificity sebesar 97,74%, dan F1-score sebesar 97,22%, serta nilai OOB Error sebesar 2,92%. Model tersebut memiliki nilai Accuracy tertinggi dibandingkan delapan model lainnya, yang menunjukkan bahwa model mampu mengklasifikasikan 98,04% data testing dengan benar. Model mtry_2_trees_500 menempati urutan kedua dengan Accuracy sebesar 97,55%, sedangkan model lainnya memiliki Accuracy antara 95,59% hingga 97,06%. Meskipun beberapa model memiliki nilai OOB Error lebih rendah, yaitu 2,71%, model-model tersebut tidak menghasilkan Accuracy yang lebih tinggi pada data testing. Oleh karena itu, berdasarkan kriteria pemilihan yang mengutamakan Accuracy tertinggi dan kemudian mempertimbangkan OOB Error terendah, model mtry_2_trees_200 dipilih sebagai model terbaik. Hasil ini menunjukkan bahwa penggunaan 2 variabel prediktor pada setiap pemisahan simpul dan 200 pohon keputusan sudah memberikan kinerja klasifikasi yang sangat baik dalam membedakan diagnosis benign (jinak) dan malignant (ganas).

4.6 Confusion Matrix

Berikut ini confusion matrix pada data yang digunakan:

# A7. Confusion matrix untuk setiap model
for (nama.model in names(hasil.cm)) {
  cat("\n============================\n")
  cat("Model:", nama.model, "\n")
  print(hasil.cm[[nama.model]])
}
## 
## ============================
## Model: mtry_2_trees_200 
## Confusion Matrix and Statistics
## 
##            Reference
## Prediction  benign malignant
##   benign       130         1
##   malignant      3        70
##                                           
##                Accuracy : 0.9804          
##                  95% CI : (0.9506, 0.9946)
##     No Information Rate : 0.652           
##     P-Value [Acc > NIR] : <2e-16          
##                                           
##                   Kappa : 0.9571          
##                                           
##  Mcnemar's Test P-Value : 0.6171          
##                                           
##             Sensitivity : 0.9859          
##             Specificity : 0.9774          
##          Pos Pred Value : 0.9589          
##          Neg Pred Value : 0.9924          
##              Prevalence : 0.3480          
##          Detection Rate : 0.3431          
##    Detection Prevalence : 0.3578          
##       Balanced Accuracy : 0.9817          
##                                           
##        'Positive' Class : malignant       
##                                           
## 
## ============================
## Model: mtry_3_trees_200 
## Confusion Matrix and Statistics
## 
##            Reference
## Prediction  benign malignant
##   benign       130         3
##   malignant      3        68
##                                           
##                Accuracy : 0.9706          
##                  95% CI : (0.9371, 0.9891)
##     No Information Rate : 0.652           
##     P-Value [Acc > NIR] : <2e-16          
##                                           
##                   Kappa : 0.9352          
##                                           
##  Mcnemar's Test P-Value : 1               
##                                           
##             Sensitivity : 0.9577          
##             Specificity : 0.9774          
##          Pos Pred Value : 0.9577          
##          Neg Pred Value : 0.9774          
##              Prevalence : 0.3480          
##          Detection Rate : 0.3333          
##    Detection Prevalence : 0.3480          
##       Balanced Accuracy : 0.9676          
##                                           
##        'Positive' Class : malignant       
##                                           
## 
## ============================
## Model: mtry_5_trees_200 
## Confusion Matrix and Statistics
## 
##            Reference
## Prediction  benign malignant
##   benign       129         4
##   malignant      4        67
##                                           
##                Accuracy : 0.9608          
##                  95% CI : (0.9242, 0.9829)
##     No Information Rate : 0.652           
##     P-Value [Acc > NIR] : <2e-16          
##                                           
##                   Kappa : 0.9136          
##                                           
##  Mcnemar's Test P-Value : 1               
##                                           
##             Sensitivity : 0.9437          
##             Specificity : 0.9699          
##          Pos Pred Value : 0.9437          
##          Neg Pred Value : 0.9699          
##              Prevalence : 0.3480          
##          Detection Rate : 0.3284          
##    Detection Prevalence : 0.3480          
##       Balanced Accuracy : 0.9568          
##                                           
##        'Positive' Class : malignant       
##                                           
## 
## ============================
## Model: mtry_2_trees_500 
## Confusion Matrix and Statistics
## 
##            Reference
## Prediction  benign malignant
##   benign       129         1
##   malignant      4        70
##                                          
##                Accuracy : 0.9755         
##                  95% CI : (0.9437, 0.992)
##     No Information Rate : 0.652          
##     P-Value [Acc > NIR] : <2e-16         
##                                          
##                   Kappa : 0.9465         
##                                          
##  Mcnemar's Test P-Value : 0.3711         
##                                          
##             Sensitivity : 0.9859         
##             Specificity : 0.9699         
##          Pos Pred Value : 0.9459         
##          Neg Pred Value : 0.9923         
##              Prevalence : 0.3480         
##          Detection Rate : 0.3431         
##    Detection Prevalence : 0.3627         
##       Balanced Accuracy : 0.9779         
##                                          
##        'Positive' Class : malignant      
##                                          
## 
## ============================
## Model: mtry_3_trees_500 
## Confusion Matrix and Statistics
## 
##            Reference
## Prediction  benign malignant
##   benign       130         3
##   malignant      3        68
##                                           
##                Accuracy : 0.9706          
##                  95% CI : (0.9371, 0.9891)
##     No Information Rate : 0.652           
##     P-Value [Acc > NIR] : <2e-16          
##                                           
##                   Kappa : 0.9352          
##                                           
##  Mcnemar's Test P-Value : 1               
##                                           
##             Sensitivity : 0.9577          
##             Specificity : 0.9774          
##          Pos Pred Value : 0.9577          
##          Neg Pred Value : 0.9774          
##              Prevalence : 0.3480          
##          Detection Rate : 0.3333          
##    Detection Prevalence : 0.3480          
##       Balanced Accuracy : 0.9676          
##                                           
##        'Positive' Class : malignant       
##                                           
## 
## ============================
## Model: mtry_5_trees_500 
## Confusion Matrix and Statistics
## 
##            Reference
## Prediction  benign malignant
##   benign       129         4
##   malignant      4        67
##                                           
##                Accuracy : 0.9608          
##                  95% CI : (0.9242, 0.9829)
##     No Information Rate : 0.652           
##     P-Value [Acc > NIR] : <2e-16          
##                                           
##                   Kappa : 0.9136          
##                                           
##  Mcnemar's Test P-Value : 1               
##                                           
##             Sensitivity : 0.9437          
##             Specificity : 0.9699          
##          Pos Pred Value : 0.9437          
##          Neg Pred Value : 0.9699          
##              Prevalence : 0.3480          
##          Detection Rate : 0.3284          
##    Detection Prevalence : 0.3480          
##       Balanced Accuracy : 0.9568          
##                                           
##        'Positive' Class : malignant       
##                                           
## 
## ============================
## Model: mtry_2_trees_1000 
## Confusion Matrix and Statistics
## 
##            Reference
## Prediction  benign malignant
##   benign       129         2
##   malignant      4        69
##                                           
##                Accuracy : 0.9706          
##                  95% CI : (0.9371, 0.9891)
##     No Information Rate : 0.652           
##     P-Value [Acc > NIR] : <2e-16          
##                                           
##                   Kappa : 0.9356          
##                                           
##  Mcnemar's Test P-Value : 0.6831          
##                                           
##             Sensitivity : 0.9718          
##             Specificity : 0.9699          
##          Pos Pred Value : 0.9452          
##          Neg Pred Value : 0.9847          
##              Prevalence : 0.3480          
##          Detection Rate : 0.3382          
##    Detection Prevalence : 0.3578          
##       Balanced Accuracy : 0.9709          
##                                           
##        'Positive' Class : malignant       
##                                           
## 
## ============================
## Model: mtry_3_trees_1000 
## Confusion Matrix and Statistics
## 
##            Reference
## Prediction  benign malignant
##   benign       129         3
##   malignant      4        68
##                                           
##                Accuracy : 0.9657          
##                  95% CI : (0.9306, 0.9861)
##     No Information Rate : 0.652           
##     P-Value [Acc > NIR] : <2e-16          
##                                           
##                   Kappa : 0.9246          
##                                           
##  Mcnemar's Test P-Value : 1               
##                                           
##             Sensitivity : 0.9577          
##             Specificity : 0.9699          
##          Pos Pred Value : 0.9444          
##          Neg Pred Value : 0.9773          
##              Prevalence : 0.3480          
##          Detection Rate : 0.3333          
##    Detection Prevalence : 0.3529          
##       Balanced Accuracy : 0.9638          
##                                           
##        'Positive' Class : malignant       
##                                           
## 
## ============================
## Model: mtry_5_trees_1000 
## Confusion Matrix and Statistics
## 
##            Reference
## Prediction  benign malignant
##   benign       129         5
##   malignant      4        66
##                                           
##                Accuracy : 0.9559          
##                  95% CI : (0.9179, 0.9796)
##     No Information Rate : 0.652           
##     P-Value [Acc > NIR] : <2e-16          
##                                           
##                   Kappa : 0.9025          
##                                           
##  Mcnemar's Test P-Value : 1               
##                                           
##             Sensitivity : 0.9296          
##             Specificity : 0.9699          
##          Pos Pred Value : 0.9429          
##          Neg Pred Value : 0.9627          
##              Prevalence : 0.3480          
##          Detection Rate : 0.3235          
##    Detection Prevalence : 0.3431          
##       Balanced Accuracy : 0.9498          
##                                           
##        'Positive' Class : malignant       
## 

Berdasarkan hasil confusion matrix dari sembilan model Random Forest Classification, model mtry_2_trees_200 menunjukkan kinerja terbaik dengan nilai Accuracy sebesar 98,04% dan Kappa sebesar 0,9571, yang menunjukkan tingkat kesesuaian klasifikasi yang sangat tinggi. Dari 204 data testing, model tersebut berhasil mengklasifikasikan 130 data benign (jinak) dan 70 data malignant (ganas) dengan benar, sedangkan 4 data lainnya salah diklasifikasikan, yaitu 1 data benign diprediksi sebagai malignant dan 3 data malignant diprediksi sebagai benign. Model ini juga memperoleh nilai Sensitivity sebesar 98,59% dan Specificity sebesar 97,74%, sehingga mampu mengenali sebagian besar data malignant maupun benign secara tepat. Dibandingkan dengan delapan model lainnya, model mtry_2_trees_200 memiliki nilai Accuracy tertinggi, sehingga dipilih sebagai model terbaik berdasarkan hasil pengujian pada data testing.

4.7 Model Terbaik berdasarkan Accuracy

Berikut ini merupakan hasil model terbaik dari accuracy pada data yang digunakan:

# A8. Menentukan model terbaik berdasarkan Accuracy
model.terbaik <- tabel.evaluasi[1, ]

print(model.terbaik)
##              Model mtry num.trees  OOB_Error  Accuracy Precision    Recall
## 1 mtry_2_trees_200    2       200 0.02922756 0.9803922 0.9589041 0.9859155
##   Specificity  F1_Score
## 1   0.9774436 0.9722222
nama.terbaik <- as.character(
  model.terbaik$Model
)

rf.terbaik <- model.rf[[nama.terbaik]]

Berdasarkan hasil pemilihan model terbaik, diperoleh model mtry_2_trees_200 dengan parameter mtry = 2 dan num.trees = 200. Model tersebut dipilih karena memiliki nilai Accuracy tertinggi, yaitu 98,04%, dengan Precision sebesar 95,89%, Recall sebesar 98,59%, Specificity sebesar 97,74%, F1-score sebesar 97,22%, dan OOB Error sebesar 2,92%. Selanjutnya, nama model terbaik disimpan dalam objek nama.terbaik, kemudian model yang sesuai diambil dari daftar model.rf dan disimpan ke dalam objek rf.terbaik. Dengan demikian, objek rf.terbaik berisi model Random Forest Classification dengan konfigurasi terbaik berdasarkan hasil evaluasi sembilan kombinasi parameter, sehingga dapat digunakan untuk analisis lanjutan, seperti melihat tingkat kepentingan variabel (variable importance) dan menginterpretasikan hasil klasifikasi diagnosis benign (jinak) dan malignant (ganas).

4.8 Variable Importance

Berikut ini merupakan hasil variable importance pada data yang digunakan:

# A9. Variable importance setiap model
tabel.importance <- do.call(
  rbind, hasil.importance
)

rownames(tabel.importance) <- NULL

# Menampilkan variable importance semua model
print(
  tabel.importance[
    order(
      tabel.importance$Model,
      -tabel.importance$Importance
    ),
  ]
)
##                Model        Variabel  Importance
## 55 mtry_2_trees_1000     Bare.nuclei 0.081727341
## 56 mtry_2_trees_1000       Cell.size 0.077885328
## 57 mtry_2_trees_1000      Cell.shape 0.062585865
## 58 mtry_2_trees_1000    Cl.thickness 0.026309142
## 59 mtry_2_trees_1000     Bl.cromatin 0.020503315
## 60 mtry_2_trees_1000 Normal.nucleoli 0.019947983
## 61 mtry_2_trees_1000   Marg.adhesion 0.018885437
## 62 mtry_2_trees_1000    Epith.c.size 0.014006791
## 63 mtry_2_trees_1000         Mitoses 0.003346598
## 1   mtry_2_trees_200     Bare.nuclei 0.083924522
## 2   mtry_2_trees_200       Cell.size 0.078718154
## 3   mtry_2_trees_200      Cell.shape 0.060967868
## 4   mtry_2_trees_200    Cl.thickness 0.024489152
## 5   mtry_2_trees_200     Bl.cromatin 0.021478062
## 6   mtry_2_trees_200 Normal.nucleoli 0.020446839
## 7   mtry_2_trees_200   Marg.adhesion 0.019251533
## 8   mtry_2_trees_200    Epith.c.size 0.011737675
## 9   mtry_2_trees_200         Mitoses 0.003751688
## 28  mtry_2_trees_500     Bare.nuclei 0.080504597
## 29  mtry_2_trees_500       Cell.size 0.077257729
## 30  mtry_2_trees_500      Cell.shape 0.062974113
## 31  mtry_2_trees_500    Cl.thickness 0.026747140
## 32  mtry_2_trees_500     Bl.cromatin 0.021877891
## 33  mtry_2_trees_500 Normal.nucleoli 0.021841450
## 34  mtry_2_trees_500   Marg.adhesion 0.019112201
## 35  mtry_2_trees_500    Epith.c.size 0.013222617
## 36  mtry_2_trees_500         Mitoses 0.003090966
## 64 mtry_3_trees_1000     Bare.nuclei 0.100283344
## 65 mtry_3_trees_1000       Cell.size 0.085535688
## 66 mtry_3_trees_1000      Cell.shape 0.059257703
## 67 mtry_3_trees_1000    Cl.thickness 0.024814485
## 68 mtry_3_trees_1000   Marg.adhesion 0.019528413
## 69 mtry_3_trees_1000     Bl.cromatin 0.019201313
## 70 mtry_3_trees_1000 Normal.nucleoli 0.016485996
## 71 mtry_3_trees_1000    Epith.c.size 0.011860487
## 72 mtry_3_trees_1000         Mitoses 0.003185340
## 10  mtry_3_trees_200     Bare.nuclei 0.097215967
## 11  mtry_3_trees_200       Cell.size 0.091653406
## 12  mtry_3_trees_200      Cell.shape 0.062810795
## 13  mtry_3_trees_200    Cl.thickness 0.027788431
## 14  mtry_3_trees_200   Marg.adhesion 0.019128466
## 15  mtry_3_trees_200     Bl.cromatin 0.017950453
## 16  mtry_3_trees_200 Normal.nucleoli 0.015967442
## 17  mtry_3_trees_200    Epith.c.size 0.009877622
## 18  mtry_3_trees_200         Mitoses 0.003686372
## 37  mtry_3_trees_500     Bare.nuclei 0.099119249
## 38  mtry_3_trees_500       Cell.size 0.085328389
## 39  mtry_3_trees_500      Cell.shape 0.065123301
## 40  mtry_3_trees_500    Cl.thickness 0.026031551
## 41  mtry_3_trees_500   Marg.adhesion 0.019338940
## 42  mtry_3_trees_500     Bl.cromatin 0.018814782
## 43  mtry_3_trees_500 Normal.nucleoli 0.014788223
## 44  mtry_3_trees_500    Epith.c.size 0.010949414
## 45  mtry_3_trees_500         Mitoses 0.003211898
## 73 mtry_5_trees_1000     Bare.nuclei 0.121396617
## 74 mtry_5_trees_1000       Cell.size 0.091093145
## 75 mtry_5_trees_1000      Cell.shape 0.043806238
## 76 mtry_5_trees_1000    Cl.thickness 0.022686356
## 77 mtry_5_trees_1000 Normal.nucleoli 0.020778434
## 78 mtry_5_trees_1000   Marg.adhesion 0.018867468
## 79 mtry_5_trees_1000     Bl.cromatin 0.016189366
## 80 mtry_5_trees_1000    Epith.c.size 0.009737954
## 81 mtry_5_trees_1000         Mitoses 0.003221466
## 19  mtry_5_trees_200     Bare.nuclei 0.125936890
## 20  mtry_5_trees_200       Cell.size 0.089778781
## 21  mtry_5_trees_200      Cell.shape 0.042713777
## 22  mtry_5_trees_200    Cl.thickness 0.023260225
## 23  mtry_5_trees_200 Normal.nucleoli 0.021657685
## 24  mtry_5_trees_200   Marg.adhesion 0.020899801
## 25  mtry_5_trees_200     Bl.cromatin 0.014237292
## 26  mtry_5_trees_200    Epith.c.size 0.008615232
## 27  mtry_5_trees_200         Mitoses 0.002635523
## 46  mtry_5_trees_500     Bare.nuclei 0.124282812
## 47  mtry_5_trees_500       Cell.size 0.090904474
## 48  mtry_5_trees_500      Cell.shape 0.045966760
## 49  mtry_5_trees_500    Cl.thickness 0.021676702
## 50  mtry_5_trees_500 Normal.nucleoli 0.020300877
## 51  mtry_5_trees_500   Marg.adhesion 0.019536614
## 52  mtry_5_trees_500     Bl.cromatin 0.015268145
## 53  mtry_5_trees_500    Epith.c.size 0.009305183
## 54  mtry_5_trees_500         Mitoses 0.003024808

Berdasarkan hasil variable importance dari sembilan model Random Forest Classification, variabel Bare.nuclei memiliki nilai kepentingan tertinggi pada seluruh kombinasi parameter, diikuti oleh Cell.size dan Cell.shape. Pada model terbaik, yaitu mtry_2_trees_200, nilai importance masing-masing variabel tersebut adalah 0,0839, 0,0787, dan 0,0610. Hal ini menunjukkan bahwa ketiga variabel tersebut memberikan kontribusi relatif paling besar dalam membantu model membedakan diagnosis benign (jinak) dan malignant (ganas). Sementara itu, variabel Mitoses memiliki nilai importance terendah, yaitu 0,0038 pada model terbaik, sehingga kontribusi relatifnya dalam proses klasifikasi lebih kecil dibandingkan variabel lainnya. Nilai variable importance dihitung menggunakan metode permutation, yaitu dengan melihat perubahan kinerja model ketika nilai suatu variabel diacak; semakin besar nilainya, semakin penting variabel tersebut bagi prediksi model. Dengan demikian, hasil analisis menunjukkan bahwa Bare.nuclei, Cell.size, dan Cell.shape merupakan variabel yang paling berpengaruh terhadap hasil klasifikasi pada dataset BreastCancer. Namun, nilai kepentingan ini menunjukkan kontribusi variabel dalam prediksi model, bukan membuktikan hubungan sebab-akibat atau menjadi dasar diagnosis medis secara langsung.

4.9 Visualisasi Perbandingan Accuracy

Berikut ini merupakan hasil visualisasi dari perbandingan accuracy pada data yang digunakan:

### A10. Visualisasi Perbandingan Accuracy
library(ggplot2)

ggplot(
  tabel.evaluasi,
  aes(
    x = num.trees,
    y = Accuracy,
    color = factor(mtry),
    group = factor(mtry)
  )
) +
  geom_line(linewidth = 1) +
  geom_point(size = 3) +
  scale_x_continuous(
    breaks = c(200, 500, 1000)
  ) +
  labs(
    title = "Perbandingan Accuracy Random Forest",
    x = "Jumlah Pohon (num.trees)",
    y = "Accuracy Data Testing",
    color = "Nilai mtry"
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(
      hjust = 0.5,
      face = "bold"
    )
  )

Berdasarkan grafik perbandingan Accuracy pada model Random Forest Classification, terlihat bahwa model dengan parameter mtry = 2 menghasilkan nilai Accuracy tertinggi pada seluruh variasi jumlah pohon, yaitu sekitar 98,04% pada 200 pohon, 97,55% pada 500 pohon, dan 97,06% pada 1.000 pohon. Sementara itu, model dengan mtry = 3 memiliki nilai Accuracy sekitar 97,06% pada 200 dan 500 pohon, kemudian menurun menjadi 96,57% pada 1.000 pohon. Adapun model dengan mtry = 5 menghasilkan nilai Accuracy terendah, yaitu sekitar 96,08% pada 200 dan 500 pohon serta 95,59% pada 1.000 pohon. Grafik tersebut menunjukkan bahwa penambahan jumlah pohon tidak selalu meningkatkan nilai Accuracy pada data pengujian. Dengan demikian, berdasarkan perbandingan nilai Accuracy, kombinasi parameter mtry = 2 dan num.trees = 200 merupakan model terbaik karena menghasilkan tingkat ketepatan klasifikasi tertinggi dibandingkan kombinasi parameter lainnya.

4.11 Visualisasi Importance

Berikut ini merupakan hasil visualisasi importance terbaik pada data yang digunakan:

# A12. Variable importance model terbaik
importance.terbaik <- sort(
  rf.terbaik$variable.importance,
  decreasing = TRUE
)

print(importance.terbaik)
##     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.terbaik,
  las = 2,
  main = paste(
    "Variable Importance -",
    nama.terbaik
  ),
  ylab = "Permutation Importance"
)

Berdasarkan hasil visualisasi Variable Importance pada model terbaik Random Forest, yaitu mtry_2_trees_200, variabel Bare.nuclei memiliki nilai importance tertinggi sebesar 0,0839, diikuti oleh Cell.size sebesar 0,0787 dan Cell.shape sebesar 0,0610. Hal ini menunjukkan bahwa ketiga variabel tersebut memiliki kontribusi relatif paling besar dalam membantu model mengklasifikasikan diagnosis benign (jinak) dan malignant (ganas). Selanjutnya, variabel Cl.thickness, Bl.cromatin, Normal.nucleoli, Marg.adhesion, dan Epith.c.size memiliki tingkat kepentingan yang lebih rendah, sedangkan Mitoses memiliki nilai importance terendah sebesar 0,0038. Nilai importance tersebut diperoleh melalui metode permutation, yang mengukur perubahan kinerja prediksi ketika nilai suatu variabel diacak. Dengan demikian, Bare.nuclei, Cell.size, dan Cell.shape merupakan variabel yang paling berkontribusi terhadap hasil prediksi model terbaik, sedangkan Mitoses memberikan kontribusi relatif paling kecil. Namun, hasil ini menunjukkan tingkat kepentingan variabel dalam prediksi model dan tidak membuktikan hubungan sebab-akibat secara langsung.

4.12 Visualisasi Variable Importance Rata-Rata

Berikut ini merupakan hasil visualisasi variabel importance rata-rata pada data yang digunakan:

# A13. Visualisasi variable importance rata-rata
importance.rata <- aggregate(
  Importance ~ Variabel,
  data = tabel.importance,
  FUN = mean
)

importance.rata <- importance.rata[
  order(
    importance.rata$Importance,
    decreasing = TRUE
  ),
]

print(importance.rata)
##          Variabel  Importance
## 1     Bare.nuclei 0.101599038
## 4       Cell.size 0.085350566
## 3      Cell.shape 0.056245158
## 5    Cl.thickness 0.024867020
## 7   Marg.adhesion 0.019394319
## 9 Normal.nucleoli 0.019134992
## 2     Bl.cromatin 0.018391180
## 6    Epith.c.size 0.011034775
## 8         Mitoses 0.003239407
barplot(
  importance.rata$Importance,
  names.arg = importance.rata$Variabel,
  las = 2,
  main = "Rata-rata Variable Importance",
  ylab = "Rata-rata Permutation Importance"
)

Berdasarkan hasil visualisasi rata-rata Variable Importance dari sembilan model Random Forest Classification, variabel Bare.nuclei memiliki nilai rata-rata importance tertinggi sebesar 0,1016, diikuti oleh Cell.size sebesar 0,0854 dan Cell.shape sebesar 0,0562. Hal ini menunjukkan bahwa ketiga variabel tersebut memiliki kontribusi relatif paling besar dalam membantu model melakukan klasifikasi pada data BreastCancer. Selanjutnya, variabel Cl.thickness memiliki nilai sebesar 0,0249, diikuti Marg.adhesion sebesar 0,0194, Normal.nucleoli sebesar 0,0191, Bl.cromatin sebesar 0,0184, dan Epith.c.size sebesar 0,0110. Sementara itu, variabel Mitoses memiliki nilai rata-rata importance terendah sebesar 0,0032, sehingga kontribusi relatifnya terhadap prediksi model paling kecil dibandingkan variabel lainnya. Dengan demikian, berdasarkan rata-rata nilai permutation importance dari seluruh kombinasi parameter yang diuji, Bare.nuclei, Cell.size, dan Cell.shape merupakan variabel yang paling berperan dalam membantu model membedakan kelas benign (jinak) dan malignant (ganas), meskipun hasil ini tidak menunjukkan hubungan sebab-akibat secara langsung.

BAB V KESIMPULAN

5.1 Kesimpulan

Machine Learning adalah studi tentang algoritma untuk mempelajari bagaimana melakukan tugas-tugas tertentu yang dilakukan secara otomatis oleh orang-orang. Di sini, belajar mengacu pada kemampuan untuk melakukan berbagai kegiatan yang sudah ada atau untuk mengekstrapolasi kesimpulan baru dengan benar dari berbagai pola yang diamati sebelumnya. Salah satu subbidang kecerdasan buatan, Machine Learning, dapat berdampak pada sejumlah bidang lain, termasuk statistik, matematika, dan banyak bidang teoretis ilmu komputer. Intinya, tujuan machine learning adalah untuk mengembangkan algoritma yang dapat mengeksekusi sistem pembelajaran otonom dengan sangat sedikit masukan dari orang-orang pada umumnya.

Random Forest adalah algoritma ensemble learning berbasis tree yang membangun banyak decision tree dan menggabungkan prediksinya untuk meningkatkan akurasi dan mengurangi overfitting. Menurut James, Witten, Hastie, dan Tibshirani dalam An Introduction to Statistical Learning (ISL), Random Forest merupakan pengembangan dari metode bagging (Bootstrap Aggregating) yang menggunakan kumpulan pohon keputusan (decision trees) sebagai model dasar. Metode ini dirancang untuk mengurangi variansi model dan meningkatkan kemampuan generalisasi. Seperti Bagging, RF membentuk banyak pohon dari proses resampling dan kemudian menggabungkan hasil prediksinya. Perbedaannya, RF menambahkan pengacakan pada pemilihan prediktor di setiap node. Dengan demikian, pohon-pohon dalam forest tidak hanya dibangun dari sampel yang berbeda, tetapi juga tidak selalu mempertimbangkan prediktor yang sama ketika mencari split terbaik.

Double random forest (DRF) dikembangkan dari RF ketika data RF mengalami underfit. Berbeda dengan RF, DRF menggunakan seluruh sampel data latih untuk membangun pohon keputusan. Seluruh pohon yang dibentuk pada DRF berasal dari data yang sama akan menghasilkan contoh unik yang banyak. Semakin banyak contoh unik yang dimiliki, akan semakin besar pohon yang dihasilkan. Adanya DRF diharapkan dapat menghasilkan pohon keputusan yang lebih besar dan bisa meningkatkan performa yang maksimum sesuai dengan ukuran node minimum. DRF melakukan bootstrap pada setiap node untuk mendapatkan pemisah terbaik dan kondisi lain ketika tidak memerlukan bootstrap yakni saat suatu node memiliki sampel kurang dari 10% dari total sampel. Setiap hasil prediksi suatu pohon akan digabungkan dengan menggunakan majority vote.

Berdasarkan seluruh hasil analisis klasifikasi menggunakan metode Random Forest pada dataset BreastCancer, dapat disimpulkan bahwa model terbaik diperoleh pada kombinasi parameter mtry = 2 dan num.trees = 200, dengan nilai 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 evaluasi menunjukkan bahwa model tersebut mampu mengklasifikasikan sebagian besar data pengujian dengan tepat. Selain itu, berdasarkan analisis variable importance dari sembilan kombinasi parameter, variabel Bare.nuclei memiliki rata-rata nilai kepentingan tertinggi sebesar 0,1016, diikuti oleh Cell.size sebesar 0,0854 dan Cell.shape sebesar 0,0562. Ketiga variabel tersebut merupakan variabel yang paling berkontribusi dalam proses prediksi model, sedangkan Mitoses memiliki rata-rata nilai kepentingan terendah sebesar 0,0032. Dengan demikian, metode Random Forest dengan kombinasi parameter terbaik mampu memberikan kinerja klasifikasi yang sangat baik pada dataset yang digunakan, dengan Bare.nuclei, Cell.size, dan Cell.shape sebagai variabel yang paling berpengaruh terhadap hasil prediksi model.

5.2 Saran

Ketika menggunakan program R, diperlukan ketelitian dalam penulisan, memasukkan, melakukan perhitungan, dan hal lainnya dikarenakan jika salah maka tidak akan mendapatkan hasil yang diharapkan. Oleh karena itu, harus mengikuti prosedur yang ada. Ketelitian dalam menginterprestasikan output-nya agar tidak terjadi kekeliruan. Harus cermat dalam menggunakan fungsi yang akan gunakan.

DAFTAR PUSTAKA

Amaliah, s., Nusrang, M., dan Aswi. (2022). Penerapan Metode Random Forest Untuk Klasifikasi Varian Minuman Kopi Di Kedai Kopi Konijiwa Bantaeng. VARIANSI: Journal of Statistics and Its Application on Teaching and Research ISSN 2684-7590 (Online) Vol. 4 No. 2 (2022), 121-127.

Bintoro, P., Ratnasari., Wihardjo, E., Putri, I, P., Asari, A. (2024). Pengantar Machine Learning.

Fathurohman, A. (2021). Machine Learning Untuk Pendidikan: Mengapa Dan Bagaimana. JURNAL JITEK, Vol 1 No. 3 November (2021), Hal 57-62.

Fransiska, H. (2026). Modul Praktikum Machine Learning and Modern Prediction. Laboratorium Statistika, Universitas Bengkulu.

Manaf, S. A. R., Fitrianto, A., dan Soleh, A. M. (2024). Perbandingan Algoritma Pohon dengan Beberapa Skenario Pelabelan untuk Analisis Sentimen pada Aplikasi Milik Pemerintah/BUMN. JEPIN (Jurnal Edukasi dan Penelitian Informatika), Vol. 10, No. 1 April 2024.