BAB I PENDAHULUAN

1.1 Latar Belakang

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

1.2 Rumusan Masalah

  1. Bagaimana menerapkan AdaBoost pada dataset BreastCancer menggunakan adabag::boosting() dan decision stump sebagai weak learner?
  2. Bagaimana perbandingan model AdaBoost dengan jumlah learner 50, 100, dan 200 berdasarkan confusion matrix, Accuracy, Precision, Recall, Specificity, dan F1-score?

1.3 Tujuan Praktikum

  1. Memahami dan mengimplementasikan metode boosting, khususnya AdaBoost, untuk kasus klasifikasi menggunakan R.
  2. Membentuk model AdaBoost dengan jumlah learner 50, 100, dan 200 menggunakan decision stump sebagai weak learner.
  3. Mengevaluasi dan membandingkan performa ketiga model berdasarkan confusion matrix, Accuracy, Precision, Recall, Specificity, dan F1-score.

1.4 Batasan Masalah

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.

BAB II TINJAUAN PUSTAKA

2.1 Ensemble Learning dan Boosting

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

2.2 Decision Stump dan Dataset BreastCancer

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

2.3 Confusion Matrix dan Metrik Evaluasi

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.

BAB III METODE PENELITIAN

3.1 Data dan Perangkat Analisis

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

3.2 Variabel Penelitian

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.

3.3 Rancangan Analisis

Analisis dilakukan melalui tahapan berikut.

  1. Memanggil package adabag, mlbench, caret, dan rpart.
  2. Memuat dataset BreastCancer, memeriksa struktur data, menghapus Id, menangani nilai hilang dengan menghapus observasi terkait, dan memastikan Class bertipe faktor.
  3. Memeriksa distribusi kelas pada dataset sebelum pembagian data.
  4. Membagi data menjadi 70% data training dan 30% data testing menggunakan caret::createDataPartition() dengan set.seed(234).
  5. Membentuk tiga model AdaBoost menggunakan 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.
  6. Melakukan prediksi pada data testing untuk masing-masing model.
  7. Membentuk confusion matrix dengan kelas positif malignant.
  8. Menghitung Accuracy, Precision, Recall, Specificity, dan F1-score untuk setiap model.
  9. Membandingkan hasil ketiga model melalui tabel dan grafik, kemudian menentukan model dengan mempertimbangkan F1-score, Recall, dan Accuracy.

BAB IV HASIL DAN PEMBAHASAN

4.1 Memuat Package dan Dataset

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
cat("Jumlah variabel:", ncol(bc), "\n")
## Jumlah variabel: 10
str(bc)
## '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" ...
summary(bc)
##   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")
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.

4.2 Membagi Data Training dan Testing

Pembagian data training dan testing
Data Observasi
Training 479
Testing 204
Total 683
Distribusi kelas pada data testing
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.

4.3 Membangun Model AdaBoost

Variasi model AdaBoost yang dibandingkan
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.

4.4 Prediksi pada Data Testing

Sepuluh contoh hasil prediksi pada data testing
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.

4.5 Confusion Matrix dan Metrik Evaluasi

## 
## 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
Perbandingan metrik evaluasi AdaBoost
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.

4.6 Perbandingan Kinerja Model

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

4.7 Menentukan Model Terbaik

Peringkat model berdasarkan F1-score, Recall, dan Accuracy
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.

BAB V PENUTUP

5.1 Kesimpulan

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.

5.2 Saran

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.

DAFTAR PUSTAKA

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