Perkembangan machine learning dalam beberapa tahun terakhir menunjukkan peningkatan penggunaan metode ensemble learning untuk membangun model prediksi yang lebih akurat dan stabil. Ensemble learning menggabungkan beberapa model dasar (base learners) untuk menghasilkan satu prediksi akhir. Salah satu metode yang banyak digunakan adalah bagging (bootstrap aggregating), yaitu teknik yang membentuk beberapa sampel pelatihan melalui proses bootstrap, melatih model pada masing-masing sampel, kemudian menggabungkan hasil prediksi melalui voting atau rata-rata. Perkembangan ini terlihat dalam penelitian prediksi kesehatan. Saha et al. (2026) melakukan tinjauan sistematis terhadap 287 studi yang diterbitkan pada periode 2020-2024 dan menyeleksi 91 artikel untuk dianalisis. Hasilnya menunjukkan bahwa sekitar \(40\%\) penelitian menggunakan metode stacking atau ensemble hibrida, sedangkan sekitar \(20\%\) menggunakan metode sederhana berbasis bagging atau voting. Model stacking dan ensemble hibrida dilaporkan mampu menghasilkan akurasi sekitar \(94\% - 97\%\), sementara metode bagging sederhana cenderung menunjukkan performa yang lebih rendah pada berbagai kasus prediksi kesehatan.
Penggunaan bagging menjadi relevan karena model machine learning tunggal, khususnya pohon keputusan, memiliki sensitivitas yang tinggi terhadap perubahan data pelatihan. Perubahan kecil pada data dapat menghasilkan struktur pohon dan prediksi yang berbeda. Bagging berupaya mengatasi masalah tersebut dengan melatih beberapa model pada sampel data yang berbeda sehingga varians model dapat dikurangi dan prediksi menjadi lebih stabil (Zhang et al., 2022). Salah satu pengembangan bagging yang paling populer adalah Random Forest, yang menggabungkan proses bootstrap sampling dengan pemilihan acak sebagian variabel pada setiap pemisahan node. Meskipun demikian, penerapan bagging tidak selalu menghasilkan performa terbaik. Dalam tinjauan terhadap 45 penelitian prediksi penyakit, Mahajan et al. (2023) menemukan bahwa bagging digunakan dalam 41 penelitian, tetapi hanya menghasilkan performa terbaik pada 11 penelitian atau sekitar \(26,8\%\). Sebagai perbandingan, stacking hanya digunakan dalam 23 penelitian, tetapi menghasilkan performa terbaik pada 19 penelitian atau sekitar \(82,6\%\). Temuan tersebut menunjukkan bahwa tingginya frekuensi penggunaan bagging tidak secara otomatis menjamin keunggulan performa model.
Permasalahan lain muncul ketika bagging diterapkan pada data yang kompleks, tidak seimbang, memiliki banyak variabel, atau memiliki ukuran sampel yang terbatas. Pada data tidak seimbang, model dapat lebih sering memprediksi kelas mayoritas sehingga menghasilkan akurasi yang terlihat tinggi, tetapi memiliki kemampuan deteksi yang rendah terhadap kelas minoritas. Selain itu, peningkatan jumlah model dalam ensemble dapat menambah waktu komputasi dan ukuran model. Zhao et al. (2025) menunjukkan bahwa peningkatan kompleksitas ensemble dari 20 menjadi 200 base learners meningkatkan performa bagging pada dataset MNIST dari \(0,932\) menjadi \(0,933\), tetapi setelah itu performanya cenderung mengalami plateau. Pada tingkat kompleksitas yang sama, yaitu 200 base learners, metode boosting membutuhkan waktu komputasi sekitar 14 kali lebih besar dibandingkan bagging. Temuan ini memperlihatkan bahwa pemilihan metode ensemble tidak hanya perlu mempertimbangkan akurasi, tetapi juga stabilitas, biaya komputasi, ukuran model, dan karakteristik data.
Sejumlah penelitian terdahulu telah berusaha meningkatkan kemampuan bagging melalui pemilihan fitur, penanganan ketidakseimbangan kelas, dan penggunaan base learner yang berbeda. Sebagai contoh, Tusher et al. (2025) mengombinasikan bagging dengan beberapa algoritma machine learning serta teknik oversampling dan undersampling untuk mendeteksi infeksi Hepatitis C. Model Bagging k-NN pada kondisi oversampling menghasilkan akurasi sebesar 98,37%, F1-score sebesar 98,18%, balanced accuracy sebesar 98,06%, dan AUC sebesar 0,98. Namun, penelitian tersebut masih berfokus pada satu permasalahan kesehatan dan satu dataset dengan karakteristik tertentu. Selain itu, Qiu et al. (2025) menjelaskan bahwa strategi penggabungan berbobot tetap pada bagging tradisional masih memiliki keterbatasan ketika diterapkan pada dataset yang kompleks atau tidak seimbang. Penelitian tersebut mengusulkan metode func-bagging dan memperoleh peningkatan performa ekstrem rata-rata sebesar 1,810% dibandingkan model dasar, tetapi pengujiannya masih dilakukan pada dua dataset. Hal ini menunjukkan bahwa hasil penelitian bagging masih sangat bergantung pada domain, ukuran sampel, distribusi kelas, algoritma dasar, teknik prapemrosesan, dan konfigurasi hiperparameter.
Berdasarkan uraian tersebut, masih terdapat research gap berupa belum adanya kesimpulan yang konsisten mengenai kondisi ketika bagging memberikan keunggulan dibandingkan model tunggal maupun metode ensemble lainnya. Sebagian penelitian menunjukkan bahwa bagging mampu meningkatkan kestabilan dan akurasi, sedangkan tinjauan literatur lainnya memperlihatkan bahwa bagging lebih jarang menjadi metode dengan performa terbaik dibandingkan stacking atau boosting (Mahajan et al., 2023; Saha et al., 2026). Selain itu, beberapa studi lebih menitikberatkan pada nilai akurasi tanpa mengevaluasi metrik lain seperti presisi, recall, F1-score, balanced accuracy, AUC, variasi hasil prediksi, dan waktu komputasi. Research gap lainnya adalah keterbatasan generalisasi karena banyak penelitian bagging dilakukan pada dataset atau bidang tertentu. Oleh karena itu, penelitian yang membandingkan performa bagging secara sistematis dengan mempertimbangkan karakteristik data, pemilihan base learner, teknik validasi, metrik evaluasi yang beragam, dan biaya komputasi masih penting untuk dilakukan.
Penelitian mengenai bagging menjadi penting secara akademik karena dapat memperjelas mekanisme pengaruh bootstrap sampling, jumlah base learners, jenis algoritma dasar, dan karakteristik data terhadap performa model ensemble. Penelitian ini juga dapat memberikan kontribusi praktis dengan menghasilkan rekomendasi pemilihan metode bagging yang lebih tepat untuk permasalahan klasifikasi atau regresi yang dikaji. Evaluasi yang tidak hanya berfokus pada akurasi, tetapi juga mencakup stabilitas model, kemampuan menangani kelas minoritas, kompleksitas komputasi, dan interpretabilitas, diharapkan dapat menghasilkan kesimpulan yang lebih komprehensif. Dengan demikian, penelitian ini dapat memperkaya kajian machine learning, khususnya ensemble learning, sekaligus membantu pengguna model dalam memilih pendekatan prediksi yang akurat, stabil, efisien, dan sesuai dengan karakteristik data.
Berdasarkan latar belakang, rumusan masalah yang dapat disimpulkan yaitu sebagai berikut:
Bagaimana mahasiswa mampu memahami konsep dasar dan prinsip kerja metode Bagging?
Bagaimana mahasiswa mampu mengimplementasikan metode Bagging dengan menggunakan R?
Bagaimana mahasiswa mampu mengevaluasi performa Bagging?
Berdasarkan rumusan masalah, tujuan yang dapat disimpulkan yaitu sebagai berikut:
Mahasiswa dapat memahami konsep dasar dan prinsip kerja metode Bagging.
Mahasiswa dapat mengimplementasikan metode Bagging dengan menggunakan R.
Mahasiswa dapat mengevaluasi performa Bagging.
Adapun manfaat pada penelitian ini yaitu:
Bagi penulis:
Bagi pembaca:
Adapun batasan masalah pada penelitian ini yaitu, gunakan data
breast cancer kemudian lakukan bagging
classification dengan bandingkan hasil dengan menggunakan
nbagg=c(25, 50, 100) Kemudian hitung metrik evaluasinya
Adapun sistematika penulisan dari praktikum ini adalah:
BAB I PENDAHULUAN
Bab ini merupakan bab yang memuat latar belakang, rumusan masalah, tujuan dan manfaat, batasan masalah dan sistematika penulisan.
BAB II TINJAUAN PUSTAKA
Bab ini merupakan bab yang memuat pengertian dan teori yang diperlukan untuk rancangan penelitian pada bab-bab berikutnya.
BAB III METODE PENELITIAN
Bab ini merupakan bab yang memuat jenis dan sumber data, variabel penelitian, dan analisis data yang diperlukan untuk rancangan penelitian pada bab-bab berikutnya.
BAB IV HASIL DAN PEMBAHASAN
Bab ini merupakan bab yang memuat hasil dan pembahasan yang telah dilakukan pada program, kemudian diinterpretasikan untuk rancangan penelitian pada bab-bab berikutnya.
BAB V KESIMPULAN DAN SARAN
Bab ini merupakan bab yang memuat kesimpulan dan saran yang telah dilakukan.
DAFTAR PUSTAKA
Machine learning merupakan pendekatan dalam ilmu komputer yang memungkinkan sistem mempelajari pola dan hubungan dari data untuk menghasilkan prediksi atau keputusan. Proses pembelajaran dilakukan dengan membangun model berdasarkan data yang tersedia, sehingga model tersebut dapat digunakan untuk menganalisis pengamatan baru. Kemampuan model dalam menghasilkan prediksi dipengaruhi oleh karakteristik data, pemilihan metode, serta proses evaluasi yang dilakukan.
Salah satu pendekatan dalam machine learning adalah supervised learning, yaitu pembelajaran menggunakan data yang memiliki variabel prediktor dan variabel respons. Variabel prediktor digunakan sebagai dasar untuk memperkirakan nilai variabel respons. Berdasarkan jenis variabel responsnya, supervised learning dibedakan menjadi klasifikasi dan regresi. Klasifikasi digunakan ketika variabel respons berbentuk kategori, sedangkan regresi digunakan ketika variabel respons berbentuk numerik.
Salah satu metode supervised learning adalah Decision Tree. Metode ini membentuk model prediksi melalui serangkaian aturan pemisahan data berdasarkan variabel prediktor. Hasil pemodelannya berupa struktur pohon yang menunjukkan proses pengambilan keputusan dari simpul awal hingga simpul akhir. Decision Tree dapat digunakan untuk klasifikasi maupun regresi, serta memiliki kelebihan berupa struktur model yang relatif mudah dipahami dan diinterpretasikan. Oleh karena itu, metode ini dapat digunakan untuk mempelajari hubungan antara variabel prediktor dan variabel respons dalam suatu data (Fransiska, 2026).
Ensemble learning adalah teknik yang menggabungkan beberapa model dasar (base learners) untuk menghasilkan prediksi akhir. Gagasan utama metode ini adalah bahwa kombinasi beberapa model dapat menghasilkan prediksi yang lebih stabil atau lebih akurat dibandingkan satu model saja. Perbaikan tersebut dapat diperoleh melalui pengurangan varians, pengurangan bias, atau pemanfaatan keragaman kesalahan antar-base learners (Mienye & Sun, 2022; Zhang et al., 2022).
Kinerja ensemble dipengaruhi oleh dua unsur penting, yaitu akurasi setiap model dasar dan keragaman antar-model. Model-model yang memiliki akurasi tinggi tetapi menghasilkan prediksi yang hampir sama tidak selalu memberikan peningkatan yang berarti ketika digabungkan. Sebaliknya, model yang memiliki keragaman prediksi dapat saling melengkapi, selama tingkat kesalahan masing-masing model tidak terlalu besar. Dengan demikian, pembentukan ensemble perlu memperhatikan algoritma dasar, mekanisme pembentukan sampel, pemilihan fitur, serta metode penggabungan prediksi.
Tiga pendekatan ensemble yang banyak dibahas adalah bagging, boosting, dan stacking. Bagging membangun model secara paralel pada beberapa sampel hasil bootstrap dan menggabungkan prediksinya. Boosting membangun model secara bertahap dengan memberikan perhatian lebih besar pada observasi yang sebelumnya diprediksi dengan salah. Stacking menggabungkan beberapa model heterogen melalui model tingkat kedua atau meta-learner. Ketiga pendekatan tersebut memiliki mekanisme, kebutuhan komputasi, dan karakteristik performa yang berbeda (Qiu et al., 2025; Zhang et al., 2022).
Bagging merupakan singkatan dari bootstrap aggregating. Metode ini membentuk beberapa himpunan data pelatihan melalui pengambilan sampel secara acak dengan pengembalian dari data awal. Setiap sampel digunakan untuk melatih satu model dasar. Prediksi dari seluruh model kemudian digabungkan untuk memperoleh prediksi akhir. Pada klasifikasi, penggabungan umumnya dilakukan melalui suara mayoritas, sedangkan pada regresi penggabungan dilakukan melalui rata-rata prediksi (Zhang et al., 2022).
Misalkan data pelatihan dinyatakan sebagai:
\[D = \left\{ \left( x_{i},y_{i} \right) \right\}_{i = 1}^{n},\]
dengan \(x_{i}\) sebagai vektor prediktor dan \(y_{i}\) sebagai respons. Bagging menghasilkan \(B\) sampel bootstrap, yaitu \(D^{(1)},D^{(2)},\ldots,D^{(B)}\). Setiap sampel digunakan untuk membangun model dasar \(f_{b}(x)\). Untuk masalah regresi, prediksi ensemble dapat dituliskan sebagai:
\[{\widehat{f}}_{bag}(x) = \frac{1}{B}\sum_{b = 1}^{B}{f_{b}(x)}.\]
Untuk klasifikasi, prediksi akhir dapat ditentukan melalui suara mayoritas:
\[{\widehat{y}}_{bag}(x) = mode\left\{ f_{1}(x),f_{2}(x),\ldots,f_{B}(x) \right\}.\]
Formulasi tersebut menunjukkan bahwa bagging menggabungkan sejumlah prediksi individual menjadi satu keputusan akhir. Penggabungan ini diharapkan dapat mengurangi pengaruh fluktuasi sampel dan membuat prediksi lebih stabil dibandingkan prediksi dari satu model dasar (Zhang et al., 2022).
Bagging classifier digunakan untuk menyelesaikan masalah klasifikasi dengan membangun beberapa classifier pada sampel bootstrap yang berbeda, kemudian menggabungkan hasil prediksi melalui voting mayoritas. Pada masalah regresi, bagging regressor membangun beberapa regressor pada sampel bootstrap yang berbeda dan menghasilkan prediksi akhir melalui rata-rata prediksi seluruh regressor (Zhang et al., 2022) . Dengan demikian, perbedaan utama antara bagging classifier dan bagging regressor terletak pada bentuk variabel respons serta mekanisme agregasi prediksi yang digunakan.
Pemilihan algoritma dasar memengaruhi bias, varians, waktu pelatihan, dan interpretabilitas model. Bagging umumnya lebih bermanfaat bagi algoritma yang sensitif terhadap perubahan data pelatihan karena proses agregasi dapat mengurangi varians dan meningkatkan stabilitas prediksi (Zhang et al., 2022). Sebaliknya, apabila algoritma dasar sudah relatif stabil, penambahan bagging dapat memberikan peningkatan performa yang lebih kecil. Oleh karena itu, analisis perbandingan beberapa base learners penting dilakukan agar kontribusi bagging dapat dibedakan dari kontribusi algoritma dasar.
Penerapan bagging tidak terbatas pada satu jenis algoritma dasar. Bagging dapat dikombinasikan dengan k-nearest neighbors, regresi logistik, pohon keputusan, naive Bayes, support vector machine, dan Random Forest. Tusher et al. (2025) menunjukkan bahwa penerapan bagging pada algoritma-algoritma tersebut menghasilkan perbedaan nilai akurasi, precision, recall, F1-score, dan metrik lainnya. Temuan tersebut menunjukkan bahwa kinerja bagging perlu dievaluasi berdasarkan kombinasi antara metode agregasi dan algoritma dasar yang digunakan, bukan hanya berdasarkan label bagging secara umum.
Random Forest merupakan pengembangan metode bagging yang umumnya menggunakan pohon keputusan sebagai model dasar. Selain mengambil sampel bootstrap untuk membentuk setiap pohon, Random Forest memilih subset variabel secara acak pada setiap proses pemisahan node. Pemilihan acak tersebut bertujuan mengurangi korelasi antar-pohon sehingga prediksi ensemble menjadi lebih beragam dan stabil (Aria et al., 2021; Zhang et al., 2022).
Random Forest dapat digunakan untuk klasifikasi dan regresi. Pada klasifikasi, prediksi akhir biasanya diperoleh melalui voting mayoritas, sedangkan pada regresi prediksi diperoleh melalui rata-rata. Random Forest juga dapat menyediakan ukuran pentingnya variabel dan estimasi kesalahan OOB. Namun, meskipun memiliki performa prediksi yang baik, model ini dapat sulit diinterpretasikan karena merupakan gabungan dari banyak pohon. Aria et al. (2021) menjelaskan bahwa Random Forest dapat dipandang sebagai evolusi bagging yang berupaya mengurangi varians melalui bootstrap sekaligus mendekorelasi pohon melalui pemilihan subset prediktor secara acak.
Bagging tradisional sering menggunakan model dasar yang homogen, yaitu seluruh model dibangun menggunakan algoritma yang sama. Perkembangan terbaru juga mengkaji ensemble heterogen yang menggabungkan model dengan karakteristik berbeda. Qiu et al. (2025) mengusulkan strategi func-bagging yang menggabungkan integrasi classifier heterogen dengan pemberian bobot adaptif. Hasil penelitian tersebut menunjukkan peningkatan performa ekstrem rata-rata sebesar 1,810% dibandingkan model dasar pada eksperimen yang dilakukan.
Penggunaan model heterogen dapat meningkatkan keragaman prediksi, tetapi juga menambah kompleksitas proses pemodelan. Oleh sebab itu, penelitian yang menggunakan bagging heterogen perlu menjelaskan dasar pemilihan model, prosedur penggabungan prediksi, mekanisme pemberian bobot, serta metode validasinya. Tanpa prosedur validasi yang tepat, peningkatan performa dapat disebabkan oleh kebocoran data atau konfigurasi model yang terlalu menyesuaikan data penelitian.
Data tidak seimbang terjadi ketika jumlah observasi pada satu kelas jauh lebih besar dibandingkan kelas lainnya. Kondisi ini dapat menyebabkan model lebih memihak kelas mayoritas. Akurasi saja tidak cukup untuk menilai model pada kondisi tersebut karena model dapat memperoleh akurasi tinggi dengan mengabaikan kelas minoritas.
Beberapa pendekatan yang dapat digunakan untuk mengatasi data tidak seimbang adalah oversampling, undersampling, pembobotan kelas, dan metode ensemble yang dirancang khusus untuk ketidakseimbangan kelas. Dalam penelitian Tusher et al. (2025), kombinasi bagging dengan teknik oversampling dan undersampling digunakan untuk memprediksi infeksi Hepatitis C. Bagging k-NN pada data oversampling memperoleh akurasi 98,37%, presisi 97,67%, recall 97,93%, F1-score 97,79%, balanced accuracy 98,06%, dan AUC 0,98.
Meskipun hasil tersebut menunjukkan potensi bagging, performa tersebut tidak dapat digeneralisasi secara langsung ke semua dataset. Tusher et al. (2025) menekankan bahwa dataset yang digunakan berasal dari 615 individu yang dicurigai terinfeksi HCV sehingga validasi pada populasi yang lebih luas tetap diperlukan. Selain itu, teknik penanganan ketidakseimbangan kelas harus diterapkan hanya pada data pelatihan atau di dalam setiap lipatan validasi agar tidak menimbulkan data leakage.
Kinerja bagging classification dievaluasi dengan membandingkan kelas aktual dan kelas hasil prediksi pada data testing. Hasil perbandingan tersebut disajikan dalam confusion matrix (Fransiska, 2026), yaitu tabel yang memuat jumlah prediksi benar dan salah untuk setiap kelas.
| Prediksi Positif | Prediksi Negatif | |
|---|---|---|
| Aktual Positif | True Positive (TP) | False Negative (FN) |
| Aktual Negatif | False Positive (FP) | True Negative (TN) |
Keterangan: TP adalah pengamatan positif yang diprediksi positif, TN adalah pengamatan negatif yang diprediksi negatif, FP adalah pengamatan negatif yang salah diprediksi positif, dan FN adalah pengamatan positif yang salah diprediksi negatif. Berdasarkan confusion matrix, beberapa ukuran evaluasi yang digunakan adalah sebagai berikut.
\[ Accuracy=\frac{TP+TN}{TP+TN+FP+FN} \]
\[ Precision=\frac{TP}{TP+FP} \]
\[ Recall=\frac{TP}{TP+FN} \]
\[ Specificity=\frac{TN}{TN+FP} \]
\[ F1\text{-}Score=2\times\frac{Precision\times Recall}{Precision+Recall} \]
Accuracy mudah diinterpretasikan, tetapi dapat menyesatkan apabila proporsi kelas tidak seimbang, sehingga perlu dilengkapi dengan sensitivity, specificity, precision, dan F1-Score. Pada kasus medis seperti diagnosis kanker, nilai sensitivity menjadi perhatian utama karena kesalahan false negative (kasus positif yang terlewat) umumnya memiliki konsekuensi yang lebih serius daripada false positive.
Selain itu, kemampuan model membedakan kedua kelas pada berbagai ambang klasifikasi dapat dinilai menggunakan kurva Receiver Operating Characteristic (ROC). Kurva ini menggambarkan hubungan antara true positive rate (sensitivity) pada sumbu vertikal dan false positive rate (\(1-Specificity\)) pada sumbu horizontal (Fawcett, 2006). Ringkasan numeriknya adalah Area Under the Curve (AUC), yaitu luas di bawah kurva ROC. Nilai AUC berkisar antara 0 hingga 1; semakin mendekati 1, semakin baik kemampuan model membedakan kelas, sedangkan nilai 0,5 setara dengan tebakan acak (Fawcett, 2006).
Kinerja model regresi dapat dievaluasi menggunakan Mean Squared Error (MSE), yaitu rata-rata kuadrat selisih antara nilai aktual dan nilai prediksi. MSE dirumuskan sebagai berikut.
\[ MSE=\frac{1}{n}\sum_{i=1}^{n}(y_i-\hat{y}_i)^2 \] dengan \(n\) merupakan jumlah pengamatan, \(y_i\) merupakan nilai aktual, dan \(\hat{y}_i\) merupakan nilai prediksi. Nilai MSE yang lebih kecil menunjukkan tingkat kesalahan prediksi yang lebih rendah pada data evaluasi.
Jenis data yang digunakan dalam praktikum ini adalah data kuantitatif
dan data kategorik. Data kuantitatif berupa karakteristik sel yang
digunakan sebagai variabel prediktor, sedangkan data kategorik berupa
kondisi kanker payudara yang terdiri atas dua kelas, yaitu jinak
(benign) dan ganas (malignant). Sumber data
yang digunakan merupakan data sekunder dari dataset
BreastCancer dalam package mlbench
pada perangkat lunak R. Dataset ini memuat informasi karakteristik sel
untuk mengklasifikasikan kondisi kanker payudara. Data tersebut
digunakan dalam pemodelan Bagging dengan pendekatan
Bagging Classification.
Variabel penelitian terdiri atas variabel respons dan variabel
prediktor. Variabel respons yang digunakan adalah Class, yang
menunjukkan kondisi kanker payudara dalam kategori jinak
(benign) dan ganas (malignant). Sementara itu,
variabel prediktor meliputi Cl.thickness,
Cell.size, Cell.shape,
Marg.adhesion, Epith.c.size,
Bare.nuclei, Bl.cromatin,
Normal.nucleoli, dan Mitoses, yang
menggambarkan karakteristik sel untuk mengklasifikasikan kondisi kanker
payudara menggunakan metode Bagging Classification.
Langkah-langkah analisis yang dilakukan dalam praktikum Bagging menggunakan Classification adalah sebagai berikut.
mlbench dan memuat dataset
BreastCancer ke dalam R.mice.Tahap pertama adalah memanggil seluruh library yang
dibutuhkan dan memuat dataset BreastCancer dari
package mlbench. Package
ipred menyediakan fungsi bagging() yang
digunakan untuk membangun model Bagging, dengan pohon
klasifikasi (rpart) sebagai model dasarnya.
library("MASS")
library("survival")
library("ipred")
library("mlbench")
library("mice")
library("caret")
library("tidyverse")
# fungsi bantu:
koma <- function(x, d = 4) format(round(x, d), decimal.mark = ",", nsmall = 0)
# Classification: Breast Cancer data
data("BreastCancer", package = "mlbench")
data_raw <- BreastCancer
dim(data_raw)## [1] 699 11
## 'data.frame': 699 obs. of 11 variables:
## $ Id : chr "1000025" "1002945" "1015425" "1016277" ...
## $ Cl.thickness : Ord.factor w/ 10 levels "1"<"2"<"3"<"4"<..: 5 5 3 6 4 8 1 2 2 4 ...
## $ Cell.size : Ord.factor w/ 10 levels "1"<"2"<"3"<"4"<..: 1 4 1 8 1 10 1 1 1 2 ...
## $ Cell.shape : Ord.factor w/ 10 levels "1"<"2"<"3"<"4"<..: 1 4 1 8 1 10 1 2 1 1 ...
## $ Marg.adhesion : Ord.factor w/ 10 levels "1"<"2"<"3"<"4"<..: 1 5 1 1 3 8 1 1 1 1 ...
## $ Epith.c.size : Ord.factor w/ 10 levels "1"<"2"<"3"<"4"<..: 2 7 2 3 2 7 2 2 2 2 ...
## $ Bare.nuclei : Factor w/ 10 levels "1","2","3","4",..: 1 10 2 4 1 10 10 1 1 1 ...
## $ Bl.cromatin : Factor w/ 10 levels "1","2","3","4",..: 3 3 3 3 3 9 3 3 1 2 ...
## $ Normal.nucleoli: Factor w/ 10 levels "1","2","3","4",..: 1 2 1 7 1 7 1 1 1 1 ...
## $ Mitoses : Factor w/ 9 levels "1","2","3","4",..: 1 1 1 1 1 1 1 1 5 1 ...
## $ Class : Factor w/ 2 levels "benign","malignant": 1 1 1 1 1 2 1 1 1 1 ...
| Id | Cl.thickness | Cell.size | Cell.shape | Marg.adhesion | Epith.c.size | Bare.nuclei | Bl.cromatin | Normal.nucleoli | Mitoses | Class |
|---|---|---|---|---|---|---|---|---|---|---|
| 1000025 | 5 | 1 | 1 | 1 | 2 | 1 | 3 | 1 | 1 | benign |
| 1002945 | 5 | 4 | 4 | 5 | 7 | 10 | 3 | 2 | 1 | benign |
| 1015425 | 3 | 1 | 1 | 1 | 2 | 2 | 3 | 1 | 1 | benign |
| 1016277 | 6 | 8 | 8 | 1 | 3 | 4 | 3 | 7 | 1 | benign |
| 1017023 | 4 | 1 | 1 | 3 | 2 | 1 | 3 | 1 | 1 | benign |
| 1017122 | 8 | 10 | 10 | 8 | 7 | 10 | 9 | 7 | 1 | malignant |
Dataset memiliki 699 observasi dan 11 variabel. Variabel
Id hanyalah nomor identitas pasien sehingga tidak dipakai
sebagai prediktor. Variabel Class adalah variabel respons
dengan dua kategori (benign dan malignant),
sedangkan sembilan variabel lainnya (Cl.thickness sampai
Mitoses) adalah karakteristik sel yang menjadi prediktor.
Pada keluaran str(), seluruh prediktor tersimpan bertipe
factor dengan 10 level (skor 1 sampai 10). Karena skor
tersebut merupakan ukuran bertingkat dan sesuai dengan data kuantitatif
pada Bab III, kesembilan prediktor diubah menjadi numerik.
data_bc <- data_raw %>%
dplyr::select(-Id) %>%
mutate(across(-Class, ~ as.numeric(as.character(.x))))
str(data_bc)## 'data.frame': 699 obs. of 10 variables:
## $ Cl.thickness : num 5 5 3 6 4 8 1 2 2 4 ...
## $ Cell.size : num 1 4 1 8 1 10 1 1 1 2 ...
## $ Cell.shape : num 1 4 1 8 1 10 1 2 1 1 ...
## $ Marg.adhesion : num 1 5 1 1 3 8 1 1 1 1 ...
## $ Epith.c.size : num 2 7 2 3 2 7 2 2 2 2 ...
## $ Bare.nuclei : num 1 10 2 4 1 10 10 1 1 1 ...
## $ Bl.cromatin : num 3 3 3 3 3 9 3 3 1 2 ...
## $ Normal.nucleoli: num 1 2 1 7 1 7 1 1 1 1 ...
## $ Mitoses : num 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 ...
## Cl.thickness Cell.size Cell.shape Marg.adhesion
## Min. : 1.000 Min. : 1.000 Min. : 1.000 Min. : 1.000
## 1st Qu.: 2.000 1st Qu.: 1.000 1st Qu.: 1.000 1st Qu.: 1.000
## Median : 4.000 Median : 1.000 Median : 1.000 Median : 1.000
## Mean : 4.418 Mean : 3.134 Mean : 3.207 Mean : 2.807
## 3rd Qu.: 6.000 3rd Qu.: 5.000 3rd Qu.: 5.000 3rd Qu.: 4.000
## Max. :10.000 Max. :10.000 Max. :10.000 Max. :10.000
##
## Epith.c.size Bare.nuclei Bl.cromatin Normal.nucleoli
## Min. : 1.000 Min. : 1.000 Min. : 1.000 Min. : 1.000
## 1st Qu.: 2.000 1st Qu.: 1.000 1st Qu.: 2.000 1st Qu.: 1.000
## Median : 2.000 Median : 1.000 Median : 3.000 Median : 1.000
## Mean : 3.216 Mean : 3.545 Mean : 3.438 Mean : 2.867
## 3rd Qu.: 4.000 3rd Qu.: 6.000 3rd Qu.: 5.000 3rd Qu.: 4.000
## Max. :10.000 Max. :10.000 Max. :10.000 Max. :10.000
## NAs :16
## Mitoses Class
## Min. : 1.000 benign :458
## 1st Qu.: 1.000 malignant:241
## Median : 1.000
## Mean : 1.589
## 3rd Qu.: 1.000
## Max. :10.000
##
Setelah Id dikeluarkan dan prediktor diubah menjadi
numerik, data terdiri dari 699 observasi dan 10 variabel. Ringkasan
statistik menunjukkan seluruh prediktor berada pada rentang skor 1
sampai 10 dan terlihat adanya NA pada
Bare.nuclei.
tabel_class <- data.frame(
Kelas = names(table(data_bc$Class)),
Jumlah = as.vector(table(data_bc$Class)),
Persen = round(as.vector(prop.table(table(data_bc$Class))) * 100, 2)
)
knitr::kable(tabel_class, align = "c", caption = "Distribusi kelas variabel Class")| Kelas | Jumlah | Persen |
|---|---|---|
| benign | 458 | 65.52 |
| malignant | 241 | 34.48 |
ggplot(tabel_class, aes(x = Kelas, y = Jumlah, fill = Kelas)) +
geom_col(color = "black", width = 0.6) +
geom_text(aes(label = Jumlah), vjust = -0.4) +
scale_fill_manual(values = c("#008080", "#E69F00")) +
labs(title = "Distribusi Kondisi Kanker Payudara", x = "Class", y = "Jumlah") +
theme_minimal() +
theme(legend.position = "none")Dari 699 observasi, sebanyak 458 observasi (65,52%) termasuk kelas
jinak (benign) dan 241 observasi (34,48%) termasuk kelas
ganas (malignant). Kelas jinak lebih banyak, tetapi
perbedaannya tidak terlalu ekstrem sehingga data masih tergolong cukup
seimbang untuk dimodelkan tanpa teknik penyeimbangan.
tabel_missing <- data.frame(
Variabel = names(data_bc),
Jumlah_NA = as.vector(colSums(is.na(data_bc))),
Persen_NA = round(as.vector(colMeans(is.na(data_bc))) * 100, 2)
)
knitr::kable(tabel_missing, align = "c", caption = "Jumlah dan persentase missing value per variabel")| Variabel | Jumlah_NA | Persen_NA |
|---|---|---|
| Cl.thickness | 0 | 0.00 |
| Cell.size | 0 | 0.00 |
| Cell.shape | 0 | 0.00 |
| Marg.adhesion | 0 | 0.00 |
| Epith.c.size | 0 | 0.00 |
| Bare.nuclei | 16 | 2.29 |
| Bl.cromatin | 0 | 0.00 |
| Normal.nucleoli | 0 | 0.00 |
| Mitoses | 0 | 0.00 |
| Class | 0 | 0.00 |
Missing value hanya ditemukan pada Bare.nuclei,
sebanyak 16 observasi (2,29%). Sepuluh variabel lainnya, termasuk
Class, lengkap. Proporsi yang kecil ini membuat
penanganannya relatif mudah. Penanganan tetap dilakukan agar seluruh
observasi dapat dipakai dan data pada setiap model identik. Imputasi
dilakukan dengan paket mice menggunakan metode
predictive mean matching (pmm), yaitu metode
bawaan untuk variabel numerik yang mengambil nilai dari pengamatan
lengkap yang paling mirip sehingga hasil imputasi tetap berupa skor 1
sampai 10.
## Cl.thickness Cell.size Cell.shape Marg.adhesion Epith.c.size
## "" "" "" "" ""
## Bare.nuclei Bl.cromatin Normal.nucleoli Mitoses Class
## "pmm" "" "" "" ""
## Cl.thickness Cell.size Cell.shape Marg.adhesion Epith.c.size
## 0 0 0 0 0
## Bare.nuclei Bl.cromatin Normal.nucleoli Mitoses Class
## 0 0 0 0 0
## [1] 699 10
Keluaran imp$method menunjukkan bahwa hanya
Bare.nuclei yang di imputasi dengan pmm.
Setelah imputasi, tidak ada lagi missing value (0 nilai hilang)
dan jumlah observasi tetap 699. Karena model dibangun dari satu dataset
lengkap, digunakan hasil imputasi pertama. Pilihan ini bersifat praktis,
mengingat proporsi data yang diimputasi sangat kecil.
Data dibagi menjadi data training (70%) dan data
testing (30%) menggunakan createDataPartition().
Fungsi ini melakukan pengambilan sampel acak yang terstratifikasi
berdasarkan Class, sehingga proporsi kelas pada kedua
himpunan data tetap terjaga.
set.seed(234)
train <- createDataPartition(data_imp$Class, p = 0.7, list = FALSE)
data_train <- data_imp[train, ]
data_test <- data_imp[-train, ]
cat("Dimensi data training :", dim(data_train), "\n")## Dimensi data training : 490 10
## Dimensi data testing : 209 10
perbandingan <- rbind(
Data_Asli = round(prop.table(table(data_imp$Class)) * 100, 2),
Data_Training = round(prop.table(table(data_train$Class)) * 100, 2),
Data_Testing = round(prop.table(table(data_test$Class)) * 100, 2)
)
knitr::kable(perbandingan, align = "c", caption = "Persentase kelas Class (%) pada tiap himpunan data")| benign | malignant | |
|---|---|---|
| Data_Asli | 65.52 | 34.48 |
| Data_Training | 65.51 | 34.49 |
| Data_Testing | 65.55 | 34.45 |
Data terbagi menjadi 490 observasi training dan 209 observasi testing (sekitar 70:30). Proporsi kelas jinak dan ganas pada kedua himpunan data hampir sama dengan data asli, sehingga keduanya mewakili kondisi data sebenarnya. Data training digunakan untuk membangun model, sedangkan data testing hanya digunakan untuk menguji kemampuan prediksi pada pengamatan baru.
Model Bagging dibangun dengan fungsi bagging()
dari paket ipred. Variabel respons adalah
Class dan prediktornya adalah sembilan karakteristik sel.
Argumen nbagg menentukan jumlah sampel bootstrap
(sekaligus jumlah pohon klasifikasi) yang digabungkan, dan pada
penelitian ini dibandingkan tiga nilai, yaitu nbagg = 25,
50, dan 100. Argumen coob = TRUE
meminta penghitungan out-of-bag (OOB) error, yaitu
estimasi kesalahan klasifikasi yang dihitung dari pengamatan yang tidak
ikut terambil pada sampel bootstrap suatu pohon. Karena
pengambilan sampel bersifat acak, set.seed() digunakan
sebelum setiap model dibangun agar hasil dapat tidak berubah.
nbagg_set <- c(25, 50, 100)
model_bag <- list()
for (b in nbagg_set) {
set.seed(234)
model_bag[[as.character(b)]] <- bagging(
Class ~ Cl.thickness + Cell.size
+ Cell.shape + Marg.adhesion
+ Epith.c.size + Bare.nuclei
+ Bl.cromatin + Normal.nucleoli
+ Mitoses,
data = data_train, nbagg = b, coob = TRUE
)
}
for (b in names(model_bag)) {
cat("=============== nbagg =", b, "===============\n")
print(model_bag[[b]])
summary(model_bag[[b]])
cat("\n")
}## =============== nbagg = 25 ===============
##
## Bagging classification trees with 25 bootstrap replications
##
## Call: bagging.data.frame(formula = Class ~ Cl.thickness + Cell.size +
## Cell.shape + Marg.adhesion + Epith.c.size + Bare.nuclei +
## Bl.cromatin + Normal.nucleoli + Mitoses, data = data_train,
## nbagg = b, coob = TRUE)
##
## Out-of-bag estimate of misclassification error: 0.0347
##
##
## Bagging classification trees with 25 bootstrap replications
##
## Call: bagging.data.frame(formula = Class ~ Cl.thickness + Cell.size +
## Cell.shape + Marg.adhesion + Epith.c.size + Bare.nuclei +
## Bl.cromatin + Normal.nucleoli + Mitoses, data = data_train,
## nbagg = b, coob = TRUE)
##
## Out-of-bag estimate of misclassification error: 0.0347
##
##
## =============== nbagg = 50 ===============
##
## Bagging classification trees with 50 bootstrap replications
##
## Call: bagging.data.frame(formula = Class ~ Cl.thickness + Cell.size +
## Cell.shape + Marg.adhesion + Epith.c.size + Bare.nuclei +
## Bl.cromatin + Normal.nucleoli + Mitoses, data = data_train,
## nbagg = b, coob = TRUE)
##
## Out-of-bag estimate of misclassification error: 0.0388
##
##
## Bagging classification trees with 50 bootstrap replications
##
## Call: bagging.data.frame(formula = Class ~ Cl.thickness + Cell.size +
## Cell.shape + Marg.adhesion + Epith.c.size + Bare.nuclei +
## Bl.cromatin + Normal.nucleoli + Mitoses, data = data_train,
## nbagg = b, coob = TRUE)
##
## Out-of-bag estimate of misclassification error: 0.0388
##
##
## =============== nbagg = 100 ===============
##
## Bagging classification trees with 100 bootstrap replications
##
## Call: bagging.data.frame(formula = Class ~ Cl.thickness + Cell.size +
## Cell.shape + Marg.adhesion + Epith.c.size + Bare.nuclei +
## Bl.cromatin + Normal.nucleoli + Mitoses, data = data_train,
## nbagg = b, coob = TRUE)
##
## Out-of-bag estimate of misclassification error: 0.0306
##
##
## Bagging classification trees with 100 bootstrap replications
##
## Call: bagging.data.frame(formula = Class ~ Cl.thickness + Cell.size +
## Cell.shape + Marg.adhesion + Epith.c.size + Bare.nuclei +
## Bl.cromatin + Normal.nucleoli + Mitoses, data = data_train,
## nbagg = b, coob = TRUE)
##
## Out-of-bag estimate of misclassification error: 0.0306
oob_err <- sapply(model_bag, function(m) m$err)
tabel_oob <- data.frame(nbagg = as.numeric(names(oob_err)),
OOB_Error = round(as.numeric(oob_err), 4),
OOB_Accuracy = round(1 - as.numeric(oob_err), 4))
knitr::kable(tabel_oob, align = "c", caption = "Estimasi out-of-bag (OOB) untuk setiap nilai nbagg")| nbagg | OOB_Error | OOB_Accuracy |
|---|---|---|
| 25 | 0.0347 | 0.9653 |
| 50 | 0.0388 | 0.9612 |
| 100 | 0.0306 | 0.9694 |
Keluaran print() dan summary() menunjukkan
bahwa setiap model terdiri dari pohon klasifikasi sebanyak nilai
nbagg yang ditetapkan, beserta estimasi OOB error
masing-masing. Estimasi OOB error berkisar antara 3,06% dan
3,88%, atau setara dengan akurasi OOB sebesar 96,12% sampai 96,94%.
Nilai ini penting karena dihitung hanya dari pengamatan yang tidak
dipakai untuk melatih pohon yang bersangkutan, sehingga memberi gambaran
kesalahan pada data baru tanpa perlu data testing terpisah. OOB
error terkecil diperoleh pada nbagg = 100.
Setiap model digunakan untuk memprediksi kelas pada data
testing. Hasilnya dibandingkan dengan kelas aktual dalam bentuk
confusion matrix (baris = aktual, kolom = prediksi). Kelas
malignant ditetapkan sebagai kelas positif karena kesalahan
yang paling berbahaya secara klinis adalah gagal mendeteksi sel ganas.
Dengan urutan level benign lalu malignant, sel
[1,1] adalah True Negative (TN), [1,2] False
Positive (FP), [2,1] False Negative (FN), dan [2,2]
True Positive (TP).
# Fungsi evaluasi:
hitung_evaluasi <- function(model, data) {
pred <- predict(model, newdata = data)
ConfusionMAtrx <- table(Aktual = data$Class, Prediksi = pred)
TN <- ConfusionMAtrx[1, 1]
FP <- ConfusionMAtrx[1, 2]
FN <- ConfusionMAtrx[2, 1]
TP <- ConfusionMAtrx[2, 2]
accuracy <- (TP + TN) / (TP + TN + FP + FN) # Akurasi
precision <- TP / (TP + FP) # Presisi
recall <- TP / (TP + FN) # Recall
specificity <- TN / (TN + FP) # Specificity
f1 <- 2 * precision * recall / (precision + recall)
list(
cm = ConfusionMAtrx,
metrik = data.frame(TN = TN, FP = FP, FN = FN, TP = TP,
Accuracy = accuracy, Precision = precision,
Recall = recall, Specificity = specificity, F1 = f1)
)
}
hasil_test <- lapply(model_bag, hitung_evaluasi, data = data_test)for (b in names(hasil_test)) {
cat("=============== Confusion Matrix (data testing), nbagg =", b, "===============\n")
print(hasil_test[[b]]$cm)
cat("\n")
}## =============== Confusion Matrix (data testing), nbagg = 25 ===============
## Prediksi
## Aktual benign malignant
## benign 132 5
## malignant 1 71
##
## =============== Confusion Matrix (data testing), nbagg = 50 ===============
## Prediksi
## Aktual benign malignant
## benign 132 5
## malignant 1 71
##
## =============== Confusion Matrix (data testing), nbagg = 100 ===============
## Prediksi
## Aktual benign malignant
## benign 132 5
## malignant 1 71
Dari 209 data testing, hasil prediksi masing-masing model adalah sebagai berikut. Pada nbagg = 25, model memprediksi benar 71 observasi ganas dan 132 observasi jinak, dengan 5 false positive dan 1 false negative (total kesalahan 6). Pada nbagg = 50, model memprediksi benar 71 observasi ganas dan 132 observasi jinak, dengan 5 false positive dan 1 false negative (total kesalahan 6). Pada nbagg = 100, model memprediksi benar 71 observasi ganas dan 132 observasi jinak, dengan 5 false positive dan 1 false negative (total kesalahan 6). False negative (sel ganas yang diprediksi jinak) menjadi kesalahan yang paling perlu diperhatikan karena berarti kasus ganas terlewat, sedangkan false positive berarti sel jinak diprediksi ganas.
Dari confusion matrix, dihitung lima metrik evaluasi, yaitu
accuracy, precision, recall,
specificity, dan F1-Score (perhitungannya terdapat
pada fungsi hitung_evaluasi di atas). Hasil pada data
testing disajikan berikut.
tabel_test <- do.call(rbind, lapply(names(hasil_test), function(b) {
cbind(nbagg = as.numeric(b), hasil_test[[b]]$metrik)
}))
tabel_test$OOB_Error <- as.numeric(oob_err)
rownames(tabel_test) <- NULL
knitr::kable(tabel_test, digits = 4, align = "c",
caption = "Metrik evaluasi model Bagging pada data testing")| nbagg | TN | FP | FN | TP | Accuracy | Precision | Recall | Specificity | F1 | OOB_Error |
|---|---|---|---|---|---|---|---|---|---|---|
| 25 | 132 | 5 | 1 | 71 | 0.9713 | 0.9342 | 0.9861 | 0.9635 | 0.9595 | 0.0347 |
| 50 | 132 | 5 | 1 | 71 | 0.9713 | 0.9342 | 0.9861 | 0.9635 | 0.9595 | 0.0388 |
| 100 | 132 | 5 | 1 | 71 | 0.9713 | 0.9342 | 0.9861 | 0.9635 | 0.9595 | 0.0306 |
metrik_long <- tabel_test %>%
dplyr::select(nbagg, Accuracy, Precision, Recall, Specificity, F1) %>%
pivot_longer(-nbagg, names_to = "Metrik", values_to = "Nilai")
ymin <- max(0, floor(min(metrik_long$Nilai) * 20) / 20)
ggplot(metrik_long, aes(x = factor(nbagg), y = Nilai, color = Metrik, group = Metrik)) +
geom_line(linewidth = 1) +
geom_point(size = 2.5) +
coord_cartesian(ylim = c(ymin, 1)) +
labs(title = "Metrik Evaluasi Bagging pada Data Testing",
x = "Jumlah model dasar (nbagg)", y = "Nilai metrik") +
theme_minimal()Pada data testing, ketiga model menghasilkan akurasi 97,13%
(nbagg = 25), 97,13% (nbagg = 50), dan 97,13%
(nbagg = 100). Recall (sensitivitas terhadap kelas
ganas) berturut-turut sebesar 98,61%, 98,61%, dan 98,61%, artinya
sebesar itulah proporsi sel ganas yang berhasil terdeteksi.
Specificity sebesar 96,35%, 96,35%, dan 96,35% menunjukkan
proporsi sel jinak yang dikenali dengan benar, sedangkan
precision sebesar 93,42%, 93,42%, dan 93,42% menunjukkan
ketepatan prediksi ganas. F1-Score, sebagai rata-rata harmonik
precision dan recall, berada pada 0,9595, 0,9595, dan
0,9595. Seluruh metrik berada pada tingkat yang tinggi, yang menunjukkan
bahwa karakteristik sel dapat digunakan untuk membedakan kondisi jinak
dan ganas dengan sangat baik oleh model Bagging.
nbagg)Untuk melihat apakah model mengalami overfitting, metrik yang sama dihitung pada data training dan dibandingkan dengan data testing.
hasil_train <- lapply(model_bag, hitung_evaluasi, data = data_train)
tabel_train <- do.call(rbind, lapply(names(hasil_train), function(b) {
cbind(nbagg = as.numeric(b), hasil_train[[b]]$metrik)
}))
rownames(tabel_train) <- NULL
tabel_banding <- rbind(
cbind(Data = "Training", tabel_train[, c("nbagg", "Accuracy", "Recall", "Specificity", "F1")]),
cbind(Data = "Testing", tabel_test[, c("nbagg", "Accuracy", "Recall", "Specificity", "F1")])
)
knitr::kable(tabel_banding, digits = 4, align = "c",
caption = "Perbandingan metrik pada data training dan testing")| Data | nbagg | Accuracy | Recall | Specificity | F1 |
|---|---|---|---|---|---|
| Training | 25 | 0.9980 | 0.9941 | 1.0000 | 0.9970 |
| Training | 50 | 0.9980 | 0.9941 | 1.0000 | 0.9970 |
| Training | 100 | 1.0000 | 1.0000 | 1.0000 | 1.0000 |
| Testing | 25 | 0.9713 | 0.9861 | 0.9635 | 0.9595 |
| Testing | 50 | 0.9713 | 0.9861 | 0.9635 | 0.9595 |
| Testing | 100 | 0.9713 | 0.9861 | 0.9635 | 0.9595 |
Akurasi pada data training sebesar 99,8% sampai 100%, sedangkan pada data testing sebesar 97,13% sampai 97,13%. Selisih akurasi training terhadap testing berkisar antara 2,67 dan 2,87 poin persentase. Selisih yang kecil ini menunjukkan model tidak mengalami overfitting yang berarti dan mampu menggeneralisasi dengan baik pada data baru. Akurasi pada data training tidak dapat dijadikan ukuran utama karena model sudah melihat data tersebut, itulah sebabnya perbandingan antarmodel difokuskan pada data testing dan estimasi OOB.
nbaggknitr::kable(
tabel_test[, c("nbagg", "Accuracy", "Precision", "Recall", "Specificity", "F1", "OOB_Error")],
digits = 4, align = "c",
caption = "Ringkasan perbandingan model Bagging (data testing)"
)| nbagg | Accuracy | Precision | Recall | Specificity | F1 | OOB_Error |
|---|---|---|---|---|---|---|
| 25 | 0.9713 | 0.9342 | 0.9861 | 0.9635 | 0.9595 | 0.0347 |
| 50 | 0.9713 | 0.9342 | 0.9861 | 0.9635 | 0.9595 | 0.0388 |
| 100 | 0.9713 | 0.9342 | 0.9861 | 0.9635 | 0.9595 | 0.0306 |
Ketiga model menghasilkan akurasi dan recall yang identik pada data testing, yaitu akurasi 97,13% dan recall 98,61%. Karena kinerjanya setara, model dengan nbagg = 25 dapat dipilih sebagai model terbaik karena paling sederhana dan paling ringan secara komputasi.
Selisih akurasi antara model terbaik dan terendah hanya 0 poin persentase. Perbedaan yang sangat kecil ini menunjukkan bahwa menambah jumlah model dasar dari 25 menjadi 50 dan 100 tidak memberikan peningkatan kinerja yang berarti pada data ini. Hal ini sejalan dengan sifat Bagging yang bekerja dengan mengurangi variance: setelah jumlah pohon cukup banyak, rata-rata suara mayoritas sudah stabil sehingga penambahan pohon berikutnya hanya memberi perbaikan yang semakin kecil (diminishing returns), sementara waktu komputasi terus bertambah. Perlu diingat pula bahwa Bagging terutama mengurangi variance dan kurang efektif mengurangi bias (Fransiska, 2026), sehingga kinerjanya sangat dipengaruhi oleh kemampuan pohon dasar dalam menangkap pola pada data. Karena data pengujian relatif kecil (209 observasi), selisih satu atau dua observasi saja sudah dapat mengubah akurasi sekitar 0,48 poin persentase, sehingga perbedaan antarmodel perlu ditafsirkan dengan hati-hati.
Bagging (bootstrap aggregating) merupakan metode
ensemble yang membentuk banyak model dasar dari sampel
bootstrap data pelatihan, kemudian menggabungkan prediksinya
(pada klasifikasi melalui suara mayoritas) untuk memperoleh prediksi
akhir yang lebih stabil dan mengurangi variance model.
Berdasarkan hasil penerapan Bagging Classification pada dataset
BreastCancer, dapat disimpulkan sebagai berikut:
Class, dengan 65,52% kelas jinak dan 34,48% kelas ganas.
Missing value hanya ditemukan pada Bare.nuclei
sebanyak 16 observasi dan ditangani dengan imputasi mice
sehingga tidak ada observasi yang dihapus.bagging() pada
paket ipred menggunakan tiga jumlah model dasar, yaitu
nbagg = 25, 50, dan 100.nbagg = 25), 97,13% (nbagg = 50), dan 97,13%
(nbagg = 100), dengan recall terhadap kelas ganas
sebesar 98,61%, 98,61%, dan 98,61%, serta specificity sebesar
96,35%, 96,35%, dan 96,35%.nbagg (misalnya 10, 200, atau 500) untuk melihat kapan
kinerja model berhenti membaik.Aria, M., Cuccurullo, C., & Gnasso, A. (2021). A comparison among interpretative proposals for Random Forests. Machine Learning with Applications, 6. https://doi.org/10.1016/j.mlwa.2021.100094
Fransiska, H. (2026). Modul Praktikum Machine Learning. Universitas Bengkulu.
Fawcett, T. (2006). An introduction to ROC analysis. Pattern Recognition Letters, 27(8), 861–874. https://doi.org/10.1016/j.patrec.2005.10.010
Mahajan, P., Uddin, S., Hajati, F., & Moni, M. A. (2023). Ensemble Learning for Disease Prediction: A Review. In Healthcare (Switzerland) (Vol. 11, Number 12). https://doi.org/10.3390/healthcare11121808
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
Qiu, R., Yin, Y., Su, Q., & Guan, T. (2025). Func-Bagging: An Ensemble Learning Strategy for Improving the Performance of Heterogeneous Anomaly Detection Models. Applied Sciences (Switzerland), 15(2). https://doi.org/10.3390/app15020905
Saha, R., Saif, S., Khan, T., & Alabdultif, A. (2026). A critical systematic review of ensemble learning methods for predictive healthcare. In Discover Computing (Vol. 29, Number 1). https://doi.org/10.1007/s10791-026-10005-3
Tusher, E. H., Ismail, M. A., Akib, A., Gabralla, L. A., Ibrahim, A. O., Som, H. M., & Remli, M. A. (2025). Comparative investigation of bagging enhanced machine learning for early detection of HCV infections using class imbalance technique with feature selection. PLOS ONE, 20(6 June). https://doi.org/10.1371/journal.pone.0326488
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