Ensemble learning merupakan pendekatan pembelajaran mesin yang menggabungkan beberapa model dasar (base learner) untuk memperoleh hasil prediksi yang lebih baik dibandingkan penggunaan satu model saja. Salah satu metode ensemble learning adalah boosting, yaitu membangun model secara berurutan sehingga model berikutnya berupaya memperbaiki kesalahan yang masih dilakukan model sebelumnya (Bonaccorso, 2018; Forsyth, 2019).
Adaptive Boosting (AdaBoost) merupakan algoritma boosting yang menggabungkan sejumlah weak learner. Pada setiap iterasi, bobot observasi yang salah diklasifikasikan ditingkatkan agar proses pembelajaran berikutnya lebih memperhatikan observasi tersebut. Setiap weak learner kemudian diberi bobot kontribusi dan digabungkan untuk menghasilkan prediksi akhir (Bonaccorso, 2018; Rosyidi & Rochmawati, 2024). Dalam klasifikasi berbasis pohon, decision stump, yaitu pohon keputusan dengan kedalaman satu, dapat digunakan sebagai weak learner sederhana.
Pada praktikum Pertemuan IV, AdaBoost diterapkan pada dataset
BreastCancer yang tersedia dalam package mlbench. Variabel
respons Class memiliki dua kategori, yaitu benign
dan malignant. Sesuai petunjuk praktikum, model dibentuk
menggunakan fungsi adabag::boosting() dengan decision
stump sebagai weak learner. Perbandingan dilakukan pada
jumlah learner sebanyak 50, 100, dan 200, kemudian performanya
dievaluasi menggunakan confusion matrix, Accuracy, Precision,
Recall, Specificity, dan F1-score. Penggunaan beberapa metrik diperlukan
karena evaluasi klasifikasi sebaiknya tidak hanya bergantung pada satu
ukuran kinerja (Novianti et al., 2022; Rosyidi & Rochmawati,
2024).
adabag::boosting() dan decision stump sebagai
weak learner?Analisis dibatasi pada dataset BreastCancer dari package
mlbench dan metode AdaBoost menggunakan fungsi
adabag::boosting(). Variabel Id dihapus karena
berfungsi sebagai identitas observasi, sedangkan observasi yang memiliki
nilai hilang dihapus sebelum pemodelan. Data dibagi menjadi 70% data
training dan 30% data testing dengan
set.seed(234). Decision stump digunakan sebagai
weak learner dengan maxdepth = 1. Jumlah learner
yang dibandingkan adalah 50, 100, dan 200. Kelas malignant
ditetapkan sebagai kelas positif untuk menghitung metrik evaluasi.
Analisis ini berfokus pada perbandingan performa model dan bukan untuk
menghasilkan diagnosis klinis.
Ensemble learning merupakan metode yang menggabungkan beberapa model dasar untuk menghasilkan prediksi yang lebih baik. Salah satu metodenya adalah boosting, yaitu membangun model secara berurutan dengan memperhatikan kesalahan model sebelumnya. AdaBoost (Adaptive Boosting) menerapkan prinsip tersebut dengan meningkatkan bobot observasi yang salah diklasifikasikan agar lebih diperhatikan pada iterasi berikutnya (Bonaccorso, 2018; Forsyth, 2019).
Decision stump merupakan pohon keputusan dengan kedalaman
satu yang digunakan sebagai weak learner dalam AdaBoost. Pada
praktikum ini, pemodelan dilakukan menggunakan fungsi
adabag::boosting() dengan parameter
maxdepth = 1, serta jumlah learner sebanyak 50, 100, dan
200. Dataset BreastCancer dari package mlbench digunakan
untuk mengklasifikasikan respons Class menjadi kategori
benign dan malignant. Variabel Id dihapus
dan observasi dengan nilai hilang dikeluarkan sebelum analisis (Leisch
& Dimitriadou, n.d.).
Confusion matrix digunakan untuk membandingkan kelas aktual dan hasil prediksi melalui empat komponen, yaitu True Positive (TP), True Negative (TN), False Positive (FP), dan False Negative (FN). Dengan menetapkan malignant sebagai kelas positif, performa model dievaluasi menggunakan Accuracy, Precision, Recall, Specificity, dan F1-score. Kelima metrik tersebut digunakan bersama untuk menilai ketepatan prediksi dan kemampuan model mengenali masing-masing kelas (Novianti et al., 2022; Rosyidi & Rochmawati, 2024).
Rumus evaluasi yang digunakan adalah:
\[ Accuracy=\frac{TP+TN}{TP+TN+FP+FN} \]
\[ Precision=\frac{TP}{TP+FP},\qquad Recall=\frac{TP}{TP+FN} \]
\[ Specificity=\frac{TN}{TN+FP},\qquad F1=2\frac{Precision\times Recall}{Precision+Recall} \]
Performa ketiga model dibandingkan menggunakan data testing yang sama untuk menentukan jumlah learner dengan hasil klasifikasi terbaik.
Data yang digunakan adalah dataset BreastCancer dari package
mlbench pada perangkat lunak R. Analisis dilakukan
menggunakan package adabag untuk membentuk model AdaBoost,
mlbench untuk menyediakan dataset, caret untuk
pembagian data dan evaluasi klasifikasi, serta rpart untuk
mengatur pohon keputusan sebagai weak learner. Dataset dimuat
dengan perintah
data(BreastCancer, package = "mlbench").
Variabel respons adalah Class, yang terdiri atas kelas
benign dan malignant. Variabel prediktor adalah
variabel karakteristik pada dataset selain Id dan
Class. Variabel Id dihapus karena hanya
berfungsi sebagai pengenal observasi. Sebelum pemodelan, observasi
dengan nilai hilang dihapus dan Class diubah menjadi
faktor.
Analisis dilakukan melalui tahapan berikut.
adabag, mlbench,
caret, dan rpart.Id, menangani nilai hilang dengan menghapus observasi
terkait, dan memastikan Class bertipe faktor.caret::createDataPartition()
dengan set.seed(234).adabag::boosting() dengan boos = FALSE,
coeflearn = "Freund", dan decision stump melalui
rpart.control(maxdepth = 1, minsplit = 10, cp = 0). Nilai
mfinal masing-masing adalah 50, 100, dan 200.malignant.knitr::opts_chunk$set(echo = FALSE)
# Jalankan sekali jika package belum terpasang:
# install.packages(c("adabag", "mlbench", "caret", "rpart", "knitr", "ggplot2", "tidyr"))
library(adabag)
library(mlbench)
library(caret)
library(rpart)
library(ggplot2)
library(tidyr)
# Memuat dataset
data(BreastCancer, package = "mlbench")
bc <- BreastCancer
# Menghapus Id dan observasi dengan nilai hilang
bc$Id <- NULL
bc <- na.omit(bc)
bc$Class <- droplevels(as.factor(bc$Class))
# Pemeriksaan awal
cat("Jumlah observasi:", nrow(bc), "\n")## Jumlah observasi: 683
## Jumlah variabel: 10
## 'data.frame': 683 obs. of 10 variables:
## $ 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 ...
## - attr(*, "na.action")= 'omit' Named int [1:16] 24 41 140 146 159 165 236 250 276 293 ...
## ..- attr(*, "names")= chr [1:16] "24" "41" "140" "146" ...
## Cl.thickness Cell.size Cell.shape Marg.adhesion Epith.c.size
## 1 :139 1 :373 1 :346 1 :393 2 :376
## 5 :128 10 : 67 2 : 58 2 : 58 3 : 71
## 3 :104 3 : 52 10 : 58 3 : 58 4 : 48
## 4 : 79 2 : 45 3 : 53 10 : 55 1 : 44
## 10 : 69 4 : 38 4 : 43 4 : 33 6 : 40
## 2 : 50 5 : 30 5 : 32 8 : 25 5 : 39
## (Other):114 (Other): 78 (Other): 93 (Other): 61 (Other): 65
## Bare.nuclei Bl.cromatin Normal.nucleoli Mitoses Class
## 1 :402 3 :161 1 :432 1 :563 benign :444
## 10 :132 2 :160 10 : 60 2 : 35 malignant:239
## 2 : 30 1 :150 3 : 42 3 : 33
## 5 : 30 7 : 71 2 : 36 10 : 14
## 3 : 28 4 : 39 8 : 23 4 : 12
## 8 : 21 5 : 34 6 : 22 7 : 9
## (Other): 40 (Other): 68 (Other): 68 (Other): 17
knitr::kable(as.data.frame(table(Kelas = bc$Class)),
col.names = c("Kelas", "Jumlah"),
caption = "Distribusi kelas pada dataset BreastCancer")| Kelas | Jumlah |
|---|---|
| benign | 444 |
| malignant | 239 |
Dataset BreastCancer dipersiapkan dengan menghapus variabel
Id karena hanya merupakan pengenal observasi. Selanjutnya,
observasi yang mengandung nilai hilang dihapus dan variabel
Class dikonversi menjadi faktor. Tabel distribusi kelas
yang dihasilkan menunjukkan jumlah observasi pada kategori
benign dan malignant. Informasi ini penting untuk
mengetahui komposisi kelas sebelum data dibagi menjadi data
training dan testing.
| Data | Observasi |
|---|---|
| Training | 479 |
| Testing | 204 |
| Total | 683 |
| Kelas | Jumlah | Persentase (%) |
|---|---|---|
| benign | 133 | 65.2 |
| malignant | 71 | 34.8 |
Dataset BreastCancer yang telah melalui tahap persiapan terdiri atas 683 observasi. Data dibagi menjadi 479 observasi (70%) sebagai data training dan 204 observasi (30%) sebagai data testing menggunakan fungsi createDataPartition() dari package caret. Pembagian dilakukan secara terstratifikasi untuk mempertahankan proporsi kelas pada kedua kelompok data. Pada data testing, terdapat 133 observasi kelas benign (65,2%) dan 71 observasi kelas malignant (34,8%). Data training digunakan untuk membangun model AdaBoost, sedangkan data testing digunakan untuk mengevaluasi kemampuan prediksi model terhadap observasi yang tidak digunakan selama pelatihan.
| Jumlah_Learner | Model |
|---|---|
| 50 | AdaBoost 50 learner |
| 100 | AdaBoost 100 learner |
| 200 | AdaBoost 200 learner |
Pemodelan dilakukan menggunakan algoritma AdaBoost dengan decision stump sebagai weak learner. Tiga variasi model dibangun dengan jumlah learner sebanyak 50, 100, dan 200, sedangkan data training dan pengaturan lainnya dipertahankan sama. Pembatasan kedalaman pohon pada maxdepth = 1 menghasilkan pohon keputusan sederhana pada setiap tahap pembelajaran. Perbandingan ketiga variasi tersebut bertujuan untuk mengetahui perubahan performa klasifikasi akibat perbedaan jumlah learner.
| Aktual | Prediksi_50 | Prediksi_100 | Prediksi_200 |
|---|---|---|---|
| benign | malignant | malignant | malignant |
| benign | benign | benign | benign |
| benign | benign | benign | benign |
| benign | benign | benign | benign |
| benign | benign | benign | benign |
| malignant | malignant | malignant | malignant |
| benign | benign | benign | benign |
| benign | benign | benign | benign |
| benign | benign | benign | benign |
| malignant | malignant | malignant | malignant |
Hasil prediksi menunjukkan bahwa ketiga model menghasilkan klasifikasi yang relatif serupa pada sepuluh observasi pertama yang ditampilkan. Sebagian besar observasi kelas benign diprediksi dengan benar, sedangkan beberapa observasi menunjukkan perbedaan antara kelas aktual dan kelas prediksi. Namun, sepuluh contoh tersebut belum cukup untuk menggambarkan kinerja model secara keseluruhan. Oleh karena itu, evaluasi selanjutnya dilakukan menggunakan confusion matrix dan metrik klasifikasi yang dihitung dari seluruh 204 observasi pada data testing.
##
## Confusion Matrix - 50 learner
## Prediksi
## Aktual benign malignant
## benign 130 3
## malignant 4 67
##
## Confusion Matrix - 100 learner
## Prediksi
## Aktual benign malignant
## benign 130 3
## malignant 4 67
##
## Confusion Matrix - 200 learner
## Prediksi
## Aktual benign malignant
## benign 130 3
## malignant 5 66
| Learner | Accuracy | Precision | Recall | Specificity | F1_Score | |
|---|---|---|---|---|---|---|
| 50 | 50 | 0.9657 | 0.9571 | 0.9437 | 0.9774 | 0.9504 |
| 100 | 100 | 0.9657 | 0.9571 | 0.9437 | 0.9774 | 0.9504 |
| 200 | 200 | 0.9608 | 0.9565 | 0.9296 | 0.9774 | 0.9429 |
Berdasarkan confusion matrix, model dengan 50 dan 100 learner menghasilkan 130 prediksi benar untuk kelas benign, 3 prediksi salah kelas benign sebagai malignant, 4 prediksi salah kelas malignant sebagai benign, serta 67 prediksi benar untuk kelas malignant. Sementara itu, model dengan 200 learner menghasilkan 130 prediksi benar untuk kelas benign, 3 false positive, 5 false negative, dan 66 true positive. Dengan demikian, penambahan jumlah learner menjadi 200 tidak meningkatkan hasil klasifikasi dibandingkan dua model lainnya.
Berdasarkan tabel evaluasi, model dengan 50 dan 100 learner memiliki Accuracy sebesar 0,9657, Precision sebesar 0,9571, Recall sebesar 0,9437, Specificity sebesar 0,9774, dan F1-score sebesar 0,9504. Sementara itu, model dengan 200 learner menghasilkan Accuracy sebesar 0,9608, Precision sebesar 0,9565, Recall sebesar 0,9296, Specificity sebesar 0,9774, dan F1-score sebesar 0,9429. Hasil tersebut menunjukkan bahwa model 50 dan 100 learner memiliki kinerja yang sama pada seluruh metrik yang ditampilkan, sedangkan model 200 learner mengalami penurunan Accuracy, Precision, Recall, dan F1-score. Nilai Specificity yang sama menunjukkan bahwa ketiga model memiliki kemampuan yang setara dalam mengenali kelas benign berdasarkan hasil evaluasi tersebut.
Grafik perbandingan metrik memperlihatkan bahwa model 50 dan 100 learner memiliki nilai Accuracy, Precision, Recall, Specificity, dan F1-score yang sama. Pada model 200 learner, nilai Accuracy menurun dari 0,9657 menjadi 0,9608, Precision menurun dari 0,9571 menjadi 0,9565, Recall menurun dari 0,9437 menjadi 0,9296, dan F1-score menurun dari 0,9504 menjadi 0,9429. Sementara itu, Specificity tetap sebesar 0,9774 pada ketiga model. Penurunan terutama terlihat pada Recall, yang menunjukkan berkurangnya proporsi observasi malignant yang berhasil dikenali. Oleh karena itu, peningkatan jumlah learner dari 100 menjadi 200 tidak memberikan perbaikan kinerja pada data testing yang digunakan
| Learner | Accuracy | Precision | Recall | Specificity | F1_Score | |
|---|---|---|---|---|---|---|
| 50 | 50 | 0.9657 | 0.9571 | 0.9437 | 0.9774 | 0.9504 |
| 100 | 100 | 0.9657 | 0.9571 | 0.9437 | 0.9774 | 0.9504 |
| 200 | 200 | 0.9608 | 0.9565 | 0.9296 | 0.9774 | 0.9429 |
##
## Model terbaik berdasarkan urutan F1-score, Recall, lalu Accuracy:
## Learner Accuracy Precision Recall Specificity F1_Score
## 50 50 0.9656863 0.9571429 0.943662 0.9774436 0.9503546
Berdasarkan perbandingan metrik evaluasi, model AdaBoost dengan 50 dan 100 learner memperoleh hasil yang sama, yaitu Accuracy 0,9657, Precision 0,9571, Recall 0,9437, Specificity 0,9774, dan F1-score 0,9504. Kedua model tersebut memiliki F1-score tertinggi dibandingkan model dengan 200 learner, sehingga keduanya dapat dianggap sebagai model terbaik berdasarkan hasil pengujian ini. Jika mempertimbangkan efisiensi komputasi, model 50 learner dapat dipilih karena menghasilkan kinerja yang sama dengan model 100 learner menggunakan jumlah learner yang lebih sedikit. Model dengan 200 learner tidak menjadi pilihan utama karena menghasilkan nilai Recall dan F1-score yang lebih rendah.
Berdasarkan hasil klasifikasi menggunakan algoritma AdaBoost pada dataset BreastCancer, model dengan 50 dan 100 learner memberikan performa terbaik di antara tiga variasi yang dibandingkan. Kedua model menghasilkan Accuracy sebesar 96,57%, Precision sebesar 95,71%, Recall sebesar 94,37%, Specificity sebesar 97,74%, dan F1-score sebesar 95,04%. Model dengan 200 learner menghasilkan Accuracy sebesar 96,08% dan F1-score sebesar 94,29%, disertai penurunan Recall menjadi 92,96%. Hasil ini menunjukkan bahwa penambahan jumlah learner tidak selalu meningkatkan kinerja klasifikasi. Dengan mempertimbangkan kesamaan performa dan jumlah learner yang lebih sedikit, model 50 learner dapat dipilih sebagai model yang lebih efisien pada pengujian ini.
Analisis berikutnya dapat menguji kestabilan model menggunakan cross-validation atau beberapa pembagian data yang berbeda. Selain itu, AdaBoost dapat dibandingkan dengan algoritma klasifikasi lain menggunakan data dan metrik evaluasi yang sama. Untuk konteks klasifikasi medis, Recall kelas malignant perlu diperhatikan karena nilai Recall yang rendah berarti sebagian kasus positif tidak berhasil dikenali model. Hasil klasifikasi pada dataset ini juga tidak dapat langsung dianggap sebagai dasar diagnosis klinis.
Bonaccorso, G. (2018). Machine learning algorithms (2nd ed.). Packt Publishing.
Crismayella, Y., Satyahadewi, N., & Perdana, H. (2023). Algoritma Adaboost pada metode decision tree untuk klasifikasi kelulusan mahasiswa. Jambura Journal of Mathematics, 5(2). https://ejurnal.ung.ac.id/index.php/jjom/article/view/18790
Fahriah, S., Kamarudin, N. D., Triyono, L., & Rizaldy, A. (2024). The addition of Adaboost to the use of the C4.5 algorithm to improve the accuracy of classification of study interests. Indonesian Journal of Information Systems, 6(2), 130–139. https://doi.org/10.24002/ijis.v6i2.7588
Forsyth, D. (2019). Applied machine learning. Springer. https://doi.org/10.1007/978-3-030-18114-7
Leisch, F., & Dimitriadou, E. (n.d.). mlbench: Machine learning benchmark problems [R package]. Comprehensive R Archive Network. https://CRAN.R-project.org/package=mlbench
Novianti, N., Zarlis, M., & Sihombing, P. (2022). Penerapan algoritma Adaboost untuk peningkatan kinerja klasifikasi data mining pada imbalance dataset diabetes. Jurnal Media Informatika Budidarma, 6(2), 1200–1206. https://doi.org/10.30865/mib.v6i2.4017
R Core Team. (2026). R: A language and environment for statistical computing. R Foundation for Statistical Computing. https://www.R-project.org/
Rosyidi, M. I. U., & Rochmawati, N. (2024). Implementasi ensemble learning Adaboost pada algoritma klasifikasi decision tree dan SVM untuk klasifikasi SMS berbahasa Indonesia. JIEET (Journal of Information Engineering and Educational Technology), 8(1), 7–13. https://doi.org/10.26740/jieet.v8n1.p7-13