LAPORAN PRAKTIKUM
PERTEMUAN III
MACHINE LEARNING AND MODERN PREDICTION
Oleh
Nama: Fierianti
NPM: F1F023002
Dosen Pengampu: 1. Dr. Herlin Fransiska, S.Si., M.Si.
  2. Wina Ayu Lestari, S.Si., M.Stat.
Asisten Praktikum: 1. Avrillia Permata Hati, M.Stat.
  2. Sabrina Aulia, M.Stat.
  3. Febry Widyan Adha, S.Stat.
  4. Rahmi Yulian Utama.
LABORATORIUM STATISTIKA
FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM
UNIVERSITAS BENGKULU
2026
DAFTAR ISI

BAB I PENDAHULUAN

1.1 Latar Belakang

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.

1.2 Rumusan Masalah

Berdasarkan latar belakang, rumusan masalah yang dapat disimpulkan yaitu sebagai berikut:

  1. Bagaimana mahasiswa mampu memahami konsep dasar dan prinsip kerja metode Bagging?

  2. Bagaimana mahasiswa mampu mengimplementasikan metode Bagging dengan menggunakan R?

  3. Bagaimana mahasiswa mampu mengevaluasi performa Bagging?

1.3 Tujuan

Berdasarkan rumusan masalah, tujuan yang dapat disimpulkan yaitu sebagai berikut:

  1. Mahasiswa dapat memahami konsep dasar dan prinsip kerja metode Bagging.

  2. Mahasiswa dapat mengimplementasikan metode Bagging dengan menggunakan R.

  3. Mahasiswa dapat mengevaluasi performa Bagging.

1.4 Manfaat Penelitian

Adapun manfaat pada penelitian ini yaitu:

  1. Bagi penulis:

    1. Dapat memberikan informasi serta pengetahuan tentang konsep dasar dan prinsip kerja metode Bagging, dan mengimplementasikan metode Bagging dengan menggunakan program R.
    2. Dapat mengembangkan dan menerapkan pengetahuan yang telah diperoleh dalam bidang Machine Learning dan program R.
  2. Bagi pembaca:

    1. Menambah ilmu pengetahuan dan pemahaman tentang konsep dasar dan prinsip kerja metode Bagging, dan mengimplementasikan metode Bagging dengan menggunakan program R.
    2. Menjadi rujukan bagi peneliti selanjutnya.

1.5 Batasan masalah

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

1.6 Sistematika Penulisan

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

BAB II TINJAUAN PUSTAKA

2.1 Machine Learning

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

2.2 Ensemble Learning

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

2.3 Bagging

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

2.4 Algoritma Berbasis Bagging

2.4.1 Bagging Classifier dan Bagging Regressor

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.

2.4.2 Random Forest

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.

2.4.3 Bagging dengan Algoritma Dasar Heterogen

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.

2.5 Bagging pada Data Tidak Seimbang

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.

2.5 Metrik Evaluasi

2.5.1 Metrik Evaluasi Model Klasifikasi

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.

  1. Accuracy, yaitu proporsi prediksi yang benar dari seluruh pengamatan.

\[ Accuracy=\frac{TP+TN}{TP+TN+FP+FN} \]

  1. Precision, yaitu proporsi prediksi positif yang benar-benar positif.

\[ Precision=\frac{TP}{TP+FP} \]

  1. Recall atau Sensitivity, yaitu proporsi pengamatan positif yang berhasil terdeteksi oleh model.

\[ Recall=\frac{TP}{TP+FN} \]

  1. Specificity, yaitu proporsi pengamatan negatif yang berhasil dikenali dengan benar.

\[ Specificity=\frac{TN}{TN+FP} \]

  1. F1-Score, yaitu rata-rata harmonik antara precision dan recall.

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

2.5.2 Metrik Evaluasi Model Regresi

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.

BAB III METODE PENELITIAN

3.1 Sumber Data

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.

3.2 Variabel Penelitian

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.

3.3 Langkah-langkah Analisis

Langkah-langkah analisis yang dilakukan dalam praktikum Bagging menggunakan Classification adalah sebagai berikut.

  1. Membuka aplikasi RStudio.
  2. Memanggil paket mlbench dan memuat dataset BreastCancer ke dalam R.
  3. Memeriksa struktur data, jumlah observasi, jumlah variabel, dan tipe data.
  4. Memeriksa keberadaan missing value pada setiap variabel.
  5. Menangani missing value dengan mengimputasi nilai hilang menggunakan fungsi mice.
  6. Menentukan Class sebagai variabel respons dan variabel lainnya sebagai variabel prediktor.
  7. Membagi data menjadi data training dan data testing.
  8. Membangun model bagging Classification dengan jumlah model dasar sebanyak 25, 50, dan 100.
  9. Menghasilkan prediksi terhadap data testing untuk setiap model.
  10. Menghitung confusion matrix pada masing-masing model.
  11. Membandingkan kinerja model dan menentukan model terbaik berdasarkan nilai metrik evaluasi.
  12. Menganalisis pengaruh jumlah model dasar terhadap performa bagging Classification.

BAB IV HASIL DAN PEMBAHASAN

4.1 Library dan Eksplorasi Data

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
str(data_raw)
## '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 ...
knitr::kable(head(data_raw), align = "c", caption = "Enam baris pertama dataset BreastCancer")
Enam baris pertama dataset BreastCancer
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 ...
summary(data_bc)
##   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.

Distribusi Variabel Respons

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

4.2 Pengecekan dan Penanganan Missing Value

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

imp <- mice(data_bc, m = 5, maxit = 5, seed = 123, printFlag = FALSE)
imp$method
##    Cl.thickness       Cell.size      Cell.shape   Marg.adhesion    Epith.c.size 
##              ""              ""              ""              ""              "" 
##     Bare.nuclei     Bl.cromatin Normal.nucleoli         Mitoses           Class 
##           "pmm"              ""              ""              ""              ""
data_imp <- complete(imp, 1)
colSums(is.na(data_imp))
##    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
dim(data_imp)
## [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.

4.3 Splitting Data

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
cat("Dimensi data testing  :", dim(data_test), "\n")
## 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")
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.

4.4 Pembentukan Model Bagging Classification

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

4.5 Prediksi dan Confusion Matrix

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.

4.6 Perhitungan Metrik Evaluasi

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

4.7 Perbandingan Model dan Pengaruh Jumlah Model Dasar (nbagg)

Perbandingan Data Training dan Testing

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

Model Terbaik dan Pengaruh nbagg

knitr::kable(
  tabel_test[, c("nbagg", "Accuracy", "Precision", "Recall", "Specificity", "F1", "OOB_Error")],
  digits = 4, align = "c",
  caption = "Ringkasan perbandingan model Bagging (data testing)"
)
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.

BAB V KESIMPULAN DAN SARAN

5.1 Kesimpulan

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:

  1. Dataset terdiri dari 699 observasi dengan sembilan variabel prediktor karakteristik sel dan satu variabel respons 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.
  2. Data dibagi menjadi 490 observasi training dan 209 observasi testing, kemudian model Bagging Classification dibangun dengan fungsi bagging() pada paket ipred menggunakan tiga jumlah model dasar, yaitu nbagg = 25, 50, dan 100.
  3. Estimasi OOB error ketiga model berkisar antara 3,06% dan 3,88%, yang menunjukkan kesalahan klasifikasi yang rendah pada data yang tidak dipakai melatih pohon.
  4. Pada data testing, akurasi model sebesar 97,13% (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%.
  5. Ketiga model menghasilkan kinerja yang identik pada data testing, sehingga model dengan nbagg = 25 dipilih sebagai model terbaik karena paling sederhana. Selisih akurasi antarmodel hanya 0 poin persentase, sehingga penambahan jumlah model dasar dari 25 hingga 100 tidak memberikan peningkatan kinerja yang berarti pada data ini.

5.2 Saran

  1. Penelitian selanjutnya dapat menambahkan ukuran evaluasi berbasis probabilitas, seperti kurva ROC dan nilai AUC, serta memperluas pilihan nbagg (misalnya 10, 200, atau 500) untuk melihat kapan kinerja model berhenti membaik.
  2. Evaluasi sebaiknya dilengkapi dengan validasi silang (cross-validation) agar hasil tidak bergantung pada satu kali pembagian data training dan testing, terutama karena jumlah data pengujian relatif kecil.
  3. Mengingat konsekuensi klinis dari sel ganas yang tidak terdeteksi, evaluasi model sebaiknya menekankan recall (sensitivitas) terhadap kelas ganas dan jumlah false negative.
  4. Bagging dapat dibandingkan dengan metode ensemble lain, seperti Random Forest yang menambahkan pemilihan prediktor acak untuk mengurangi korelasi antarpohon, atau dengan satu Decision Tree sebagai pembanding dasar.
  5. Pada praktikum berikutnya, imputasi sebaiknya dilakukan dengan memperhatikan potensi kebocoran informasi, yaitu hanya berdasarkan data training lalu diterapkan pada data testing.

DAFTAR PUSTAKA

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