BAB I PENDAHULUAN

1.1 Latar Belakang Masalah

Teknik boosting dapat meningkatkan kinerja pengklasifikasi dengan menggabungkan beberapa model yang dipelajari secara berurutan, sehingga menghasilkan prediksi yang lebih akurat (Finda & Utomo, 2024).

Pada teknik boosting mempunyai metode seperti AdaBoost, XGBoost, dan metode Gradient Boosting (GB). AdaBoost merupakan ensemble learning yang sering digunakan pada metode boosting. Kelebihan dari metode AdaBoost adalah metode AdaBoost bisa menyesuaikan bobot data berdasarkan kesalahan yang dibuat oleh model sebelumnya. Model yang lebih baik akan diberikan bobot lebih tinggi, sementara model yang kurang baik akan diberi bobot lebih rendah. Metode GB sebanding dengan AdaBoost karena merupakan strategi pelatihan yang berurutan. Perbedaan antara AdaBoost dan GB adalah bahwa GB tidak memberikan bobot lebih pada hal-hal yang diklasifikasikan secara tidak akurat. Kelebihan GB mampu membangun model secara bertahap dengan mengurangi kesalahan residu dari model sebelumnya menggunakan metode optimasi berbasis gradien, sehingga memberikan performa yang kuat pada data yang beragam dan bisa disesuaikan dengan baik (Hastuti & Budiman, 2024).

Model gradient boosted tree regression merupakan suatu model yang melakukan penggabungan dari berbagai decision tree. Model ini memiliki karakteristik fleksibel karena dari regression tree yang terdiri atas interpretabilitas yang tinggi, konsep yang sederhana, dan efisiensi komputasi dengan boosting approach, selain itu juga meningkatkan akurasi pada model faktor (Shin, 2015).

1.2 Rumusan Masalah

  1. Bagaimana konsep dasar dan prinsip kerja metode Boosting sebagai metode ensemble learning?
  2. Bagaimana mengimplementasikan metode Boosting untuk kasus klasifikasi dan regresi menggunakan perangkat lunak R?
  3. Bagaimana mengevaluasi performa model Boosting menggunakan ukuran evaluasi yang sesuai?

1.3 Tujuan

  1. Memahami konsep dasar dan prinsip kerja metode Boosting sebagai metode ensemble learning.
  2. Mengimplementasikan metode Boosting untuk kasus klasifikasi dan regresi menggunakan perangkat lunak R.
  3. Mengevaluasi performa model Boosting menggunakan ukuran evaluasi yang sesuai.

1.4 Batasan Masalah

Adapun batasan masalah pada penelitian ini yaitu lakukan analisis Boosting secara lengkap mulai dari persiapan data, pembentukan model, prediksi, evaluasi, visualisasi, dan interpretasi. Gunakan set.seed(234) agar hasil pembagian data dapat direproduksi. Lakukan klasifikasi menggunakan AdaBoost pada data BreastCancer. Clue: Gunakan adabag::boosting() dengan decision stump sebagai weak learner. Bandingkan untuk 50, 100 dan 200 jumlah learner. Bandingkan pula performa model berdasarkan confusion matrix, Accuracy, Precision, Recall, Specificity, dan F1-score

BAB II TINJAUAN PUSTAKA

2.1 Boosting

Pembelajaran ensemble adalah teknik dalam pembelajaran mesin yang digunakan untuk meningkatkan kinerja dan akurasi model dengan menggabungkan hasil prediksi dari beberapa model atau algoritma yang berbeda. Teknik ini menggabungkan beberapa algoritma atau model dengan performa yang kurang baik untuk menghasilkan model dengan performa yang lebih baik dibandingkan pembelajaran tunggal (Suryanto & Utomo, 2024).

Secara teknis, teknik boosting melatih pembelajar lemah, menghitung prediksi, memilih sampel yang terklasifikasi tidak sesuai, melatih pembelajar lainnya dengan sampel salah dari iterasi sebelumnya. Salah satu tujuan utama teknik boosting adalah meningkatkan pembelajar lemah dengan bias yang tinggi (Mienye & Sun, 2022).

Boosting bekerja dengan cara membangun model secara berurutan, di mana setiap model baru berusaha memperbaiki kesalahan prediksi dari model sebelumnya (Nurhayati, 2022). Algoritma seperti AdaBoost (Adaptive Boosting) menyesuaikan bobot dari sampel yang salah klasifikasi sehingga model berikutnya lebih fokus pada kesalahan tersebut (Abdurrahman, 2022). Keunggulan utama boosting terletak pada kemampuannya untuk mengurangi bias dan variance, serta meningkatkan akurasi model secara keseluruhan, menjadikannya sangat efektif untuk berbagai jenis tugas klasifikasi dan regresi (Erkamim dkk., 2024). Metode boosting menggabungkan weak learner secara iteratif dengan memfokuskan pada kesalahan yang dihasilkan pada setiap langkah hingga diperoleh strong learner yang sesuai sebagai jumlah dari weak learner yang berurutan (Salamah, 2020).

2.2 Implementasi Boosting untuk Kasus Klasifikasi dan Regresi

Boosting membangun learner secara berurutan agar setiap learner baru membantu memperbaiki kesalahan yang masih tersisa. Mekanisme perbaikan tersebut dapat dilakukan dengan cara yang berbeda. Dalam praktikum ini, konsep Boosting untuk kasus klasifikasi diperkenalkan melalui Adaptive Boosting (AdaBoost), sedangkan untuk kasus regresi diperkenalkan melalui Gradient Boosting (Fransiska, 2026).

2.2.1 Adaptive Boosting (AdaBoost)

AdaBoost merupakan salah satu algoritma Boosting yang banyak digunakan untuk kasus klasifikasi (Fransiska, 2026). AdaBoost adalah metode ansambel yang bertujuan untuk mengubah sejumlah model prediksi lemah (weak learners) menjadi model prediksi yang kuat (strong learner)(Febianto dkk., 2024). Dalam konteks klasifikasi, weak learnerbiasanya adalah model yang sedikit lebih baik dari tebakan acak (Erkamim dkk., 2024). Algoritma ini bekerja secara iteratif, di mana setiap iterasi meningkatkan performa model dengan fokus pada kesalahan yang dibuat oleh model sebelumnya (Novianti dkk., 2022). Kekurangan dari AdaBoost, yaitu keterbatasan dalam penggunaan data yang hilang, keterbatasan dalam penggunaan pada data yang berukuran besar dan keterbatasan dalam penggunaan pada data yang kompleks (Mulyati, 2017).

AdaBoost digunakan untuk mengklasifikasi data kelasnya masing-masing, dalam penerapannya diawali dengan mencari kategori kelas berdasarkan nilai bobot yang dimiliki oleh kelas. AdaBoost memilih fungsi klasifikasi yang lemah dan digabungkan menjadi satu untuk menghasilkan fungsi klasifikasi yang baru, sehingga AdaBoost dapat dengan mudah digabungkan dengan metode kalsifikasi pada data mining (Desiani dkk., 2025). Pada setiap iterasi, nilai bobot akan terus bertambah pada bobot nilai yang salah (Novianti, 2022).

2.2.2 Gradient Boosting Regression

Algoritma Gradient Boosting Regression Tree merupakan pendekatan yang melibatkan penggabungan beberapa model untuk membuat prediksi yang lebih kuat, di mana model peramalan yang kuat dibentuk dengan mengintegrasikan beberapa pohon regresi individu (pohon keputusan) yang disebut sebagai pembelajar yang lemah. Model yang dipelajari dengan lemah adalah model yang memiliki bias tinggi terkait dataset pelatihan, dengan varians dan keteraturan yang rendah, dan yang keluarannya dianggap hanya sedikit lebih baik jika dibandingkan dengan tebakan acak. Secara umum, algoritma boosting berisi tiga komponen, yaitu model aditif, weak learner, dan loss function (Chairunisa dkk., 2024).

Pada kasus regresi, kesalahan model dapat dilihat melalui residual, yaitu selisih antara nilai aktual dan nilai hasil prediksi (Fransiska, 2026):

\[ e_i = y_i - \hat{y}_i \]

Residual menunjukkan bagian dari respons yang masih belum dapat diprediksi dengan baik oleh model. Gradient Boosting membangun weak learner berikutnya untuk mempelajari bagian kesalahan tersebut.

Dalam prosesnya, algoritma Gradient Boosting menyesuaikan weak learner dengan loss function, dan setiap model weak learner bertujuan untuk mengoreksi kesalahan yang dibuat oleh model weak learner sebelumnya. Hal ini dapat memperkuat kinerja prediksi dan mengurangi kesalahan prediksi model (Nie dkk., 2021). Algoritma Gradient Boosting Regression adalah algoritma ansambel lain yang membuat beberapa pohon keputusan, tetapi membangun pohon secara berurutan, bukan secara paralel. Dalam setiap iterasi, Gradient Boosting menyesuaikan pohon keputusan baru dengan sisa pohon sebelumnya, mencoba meningkatkan prediksi kegagalan model sebelumnya (Simamora dkk., 2024).

2.3 Mengevaluasi Performa Model

Evaluasi hasil pengujian memanfaatkan confusion matrix dari algoritma decision tree serta teknik boosting untuk menghitung sejauh mana algoritma tersebut bisa memprediksi target kelas secara akurat. Dengan adanya confusion matrix, dapat mengevaluasi hasil pengujian dengan memperkirakan seberapa model bisa memberikan hasil prediksi akurasi yang tepat dan akurat. Meliputi perhitungan True Positives (TP), True Negatives (TN), False Positives (FP), dan False Negatives (FN) untuk memperoleh nilai akurasi, yang membantu menganalisis sejauh mana metode memprediksi secara akurat dan mengenali kesalahan klasifikasi (Hastuti & Budiman, 2024).

Istilah TN, FP, FN, dan TP di mana (Jasman dkk., 2022):

  • TN (True Negative): Model memprediksi negatif dan faktanya negatif.
  • FP (False Positive): Model memprediksi positif dan faktanya negatif.
  • FN (False Negative): Model memprediksi negatif, tetapi faktanya positif.
  • TP (True Positive): Model memprediksi positif dan faktanya positif.

Berdasarkan confusion matrix, ukuran evaluasi yang digunakan adalah:

\[ Accuracy = \frac{TP+TN}{TP+TN+FP+FN} \qquad Precision = \frac{TP}{TP+FP} \qquad Recall = \frac{TP}{TP+FN} \] \[ Specificity = \frac{TN}{TN+FP} \qquad F1\text{-}Score = 2\left(\frac{Precision \times Recall}{Precision + Recall}\right) \]

BAB III METODE PENELITIAN

3.1 Sumber Data

Sumber data yang digunakan dalam penelitian ini adalah data sekunder berupa dataset BreastCancer dari package mlbench pada program R, yang digunakan untuk klasifikasi kondisi kanker payudara.

3.2 Variabel Penelitian

Pada penelitian ini, variabel yang digunakan terdiri atas variabel prediktor dan variabel target. Variabel target yang digunakan yaitu Class, sedangkan variabel prediktor terdiri atas Cl.thickness (ketebalan gumpalan sel), Cell.size (keseragaman ukuran sel), Cell.shape (keseragaman bentuk sel), Marg.adhesion (perlekatan sel), Epith.c.size (ukuran sel epitel), Bare.nuclei (kondisi inti sel), Bl.cromatin (struktur kromatin sel), Normal.nucleoli (kondisi nukleolus sel), dan Mitoses (aktivitas pembelahan sel). Variabel Class menunjukkan kondisi kanker payudara yang dikategorikan menjadi benign (jinak) dan malignant (ganas).

3.3 Langkah-langkah Analisis

Langkah-langkah analisis yang dilakukan adalah sebagai berikut.

  1. Menyiapkan dataset BreastCancer dan melakukan prapemrosesan data.
  2. Membagi data menjadi data training sebesar 70% dan testing sebesar 30%.
  3. Membentuk model AdaBoost menggunakan 50, 100, dan 200 learner.
  4. Melakukan prediksi pada data testing.
  5. Mengevaluasi model menggunakan confusion matrix, accuracy, precision, recall, specificity, dan F1-score.
  6. Membandingkan kinerja model berdasarkan hasil evaluasi dan visualisasi.
  7. Menganalisis error plot dan variable importance.
  8. Menentukan model AdaBoost terbaik berdasarkan nilai evaluasi.

BAB IV HASIL DAN PEMBAHASAN

4.1 Library & Data

library(adabag)
## Loading required package: rpart
## Loading required package: caret
## Loading required package: ggplot2
## Loading required package: lattice
## Loading required package: foreach
## Loading required package: doParallel
## Loading required package: iterators
## Loading required package: parallel
library(mlbench)
library(caret)
library(rpart)
library(ggplot2)
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(tidyr)

# ============================================================
# A1. MEMUAT DAN MEMERIKSA DATA
# ============================================================

data(BreastCancer, package = "mlbench")
bc <- BreastCancer

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

# Memeriksa missing value
colSums(is.na(bc))
##    Cl.thickness       Cell.size      Cell.shape   Marg.adhesion    Epith.c.size 
##               0               0               0               0               0 
##     Bare.nuclei     Bl.cromatin Normal.nucleoli         Mitoses           Class 
##              16               0               0               0               0
# Menghapus observasi dengan missing value
bc <- na.omit(bc)

# Memastikan respons berupa factor
bc$Class <- droplevels(as.factor(bc$Class))

# Memeriksa kategori dan distribusi kelas
levels(bc$Class)
## [1] "benign"    "malignant"
table(bc$Class)
## 
##    benign malignant 
##       444       239
round(prop.table(table(bc$Class)) * 100, 2)
## 
##    benign malignant 
##     65.01     34.99
# Menampilkan ukuran data setelah preprocessing
dim(bc)
## [1] 683  10

4.2 Eksplorasi Data

# Distribusi kelas diagnosis
distribusi <- as.data.frame(table(bc$Class))
names(distribusi) <- c("Diagnosis", "Jumlah")

distribusi$Persentase <- round(
  distribusi$Jumlah / sum(distribusi$Jumlah) * 100, 2
)

print(distribusi)
##   Diagnosis Jumlah Persentase
## 1    benign    444      65.01
## 2 malignant    239      34.99
# Visualisasi distribusi kelas
ggplot(distribusi, aes(x = Diagnosis, y = Jumlah,
                       fill = Diagnosis)) +
  geom_col(width = 0.6) +
  geom_text(aes(label = Jumlah), vjust = -0.5) +
  labs(
    title = "Distribusi Kelas Diagnosis BreastCancer",
    x = "Diagnosis",
    y = "Jumlah Pengamatan"
  ) +
  theme_minimal() +
  theme(legend.position = "none") 

distribusi kelas diagnosis pada data BreastCancer, menunjukkan bahwa diagnosis benign (jinak) berjumlah 444 pengamatan atau sebesar 65,01%, sedangkan diagnosis malignant (ganas) sebanyak 239 pengamatan atau sebesar 34,99%. Diagram batang menunjukkan bahwa jumlah pengamatan pada kelas benign lebih banyak dibandingkan kelas malignant. Hasil ini menunjukkan bahwa distribusi kelas pada data BreastCancer belum seimbang karena terdapat perbedaan jumlah pengamatan antara kedua kelas.

4.3 Pembagian Data Training dan Testing

# Set seed agar pembagian data dapat direproduksi
set.seed(234)

# Pembagian 70% training dan 30% testing secara stratifikasi
idx.cls <- createDataPartition(
  bc$Class,
  p = 0.70,
  list = FALSE
)

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

# Memeriksa ukuran data
dim(bc.train)
## [1] 479  10
dim(bc.test)
## [1] 204  10
# Memeriksa distribusi kelas
table(bc.train$Class)
## 
##    benign malignant 
##       311       168
table(bc.test$Class)
## 
##    benign malignant 
##       133        71
prop.table(table(bc.train$Class))
## 
##    benign malignant 
## 0.6492693 0.3507307
prop.table(table(bc.test$Class))
## 
##    benign malignant 
## 0.6519608 0.3480392

Pembagian data dilakukan dengan proporsi 70% untuk training (479 pengamatan) dan 30% untuk testing (204 pengamatan). Data training terdiri atas 311 kelas benign dan 168 kelas malignant, sedangkan data testing terdiri atas 133 kelas benign dan 71 kelas malignant.

4.4 Membentuk Model AdaBoost

# Decision stump: pohon keputusan dengan kedalaman maksimum 1
kontrol <- rpart.control(
  maxdepth = 1,
  minsplit = 10,
  cp = 0
)

# Fungsi pembentukan model dan evaluasi
evaluasi_adaboost <- function(m) {
  
  set.seed(234)
  
  # Membentuk model AdaBoost
  model <- adabag::boosting(
    Class ~ .,
    data = bc.train,
    boos = FALSE,
    mfinal = m,
    coeflearn = "Freund",
    control = kontrol
  )
  
  # Prediksi data testing
  hasil.pred <- predict(model, newdata = bc.test)
  
  pred <- factor(
    as.character(hasil.pred$class),
    levels = levels(bc.test$Class)
  )
  
  aktual <- factor(
    as.character(bc.test$Class),
    levels = levels(bc.test$Class)
  )
  
  # Confusion matrix
  cm <- caret::confusionMatrix(
    data = pred,
    reference = aktual,
    positive = "malignant"
  )
  
  print(cm)
  
  # Menyusun confusion matrix secara konsisten
  tab <- table(
    Aktual = factor(aktual,
                    levels = c("benign", "malignant")),
    Prediksi = factor(pred,
                      levels = c("benign", "malignant"))
  )
  
  TN <- unname(tab["benign", "benign"])
  FP <- unname(tab["benign", "malignant"])
  FN <- unname(tab["malignant", "benign"])
  TP <- unname(tab["malignant", "malignant"])
  
  # Menghitung ukuran evaluasi
  Accuracy <- (TP + TN) / sum(tab)
  
  Precision <- if ((TP + FP) > 0) {
    TP / (TP + FP)
  } else {
    NA_real_
  }
  
  Recall <- if ((TP + FN) > 0) {
    TP / (TP + FN)
  } else {
    NA_real_
  }
  
  Specificity <- if ((TN + FP) > 0) {
    TN / (TN + FP)
  } else {
    NA_real_
  }
  
  F1_Score <- if (is.finite(Precision) &&
                  is.finite(Recall) &&
                  (Precision + Recall) > 0) {
    2 * Precision * Recall / (Precision + Recall)
  } else {
    NA_real_
  }
  
  metrik <- data.frame(
    Learner = m,
    Accuracy = Accuracy,
    Precision = Precision,
    Recall = Recall,
    Specificity = Specificity,
    F1_Score = F1_Score
  )
  
  # Menyimpan hasil prediksi
  hasil <- data.frame(
    Aktual = aktual,
    Prediksi = pred
  )
  
  list(
    model = model,
    prediksi = hasil.pred,
    hasil = hasil,
    confusion = tab,
    evaluasi = metrik,
    cm = cm
  )
}
# Menjalankan evaluasi AdaBoost
hasil_50 <- evaluasi_adaboost(50)
## Confusion Matrix and Statistics
## 
##            Reference
## Prediction  benign malignant
##   benign       130         4
##   malignant      3        67
##                                           
##                Accuracy : 0.9657          
##                  95% CI : (0.9306, 0.9861)
##     No Information Rate : 0.652           
##     P-Value [Acc > NIR] : <2e-16          
##                                           
##                   Kappa : 0.9241          
##                                           
##  Mcnemar's Test P-Value : 1               
##                                           
##             Sensitivity : 0.9437          
##             Specificity : 0.9774          
##          Pos Pred Value : 0.9571          
##          Neg Pred Value : 0.9701          
##              Prevalence : 0.3480          
##          Detection Rate : 0.3284          
##    Detection Prevalence : 0.3431          
##       Balanced Accuracy : 0.9606          
##                                           
##        'Positive' Class : malignant       
## 
hasil_100 <- evaluasi_adaboost(100)
## Confusion Matrix and Statistics
## 
##            Reference
## Prediction  benign malignant
##   benign       130         4
##   malignant      3        67
##                                           
##                Accuracy : 0.9657          
##                  95% CI : (0.9306, 0.9861)
##     No Information Rate : 0.652           
##     P-Value [Acc > NIR] : <2e-16          
##                                           
##                   Kappa : 0.9241          
##                                           
##  Mcnemar's Test P-Value : 1               
##                                           
##             Sensitivity : 0.9437          
##             Specificity : 0.9774          
##          Pos Pred Value : 0.9571          
##          Neg Pred Value : 0.9701          
##              Prevalence : 0.3480          
##          Detection Rate : 0.3284          
##    Detection Prevalence : 0.3431          
##       Balanced Accuracy : 0.9606          
##                                           
##        'Positive' Class : malignant       
## 

Hasil evaluasi model AdaBoost dengan 50 dan 100 learner menunjukkan nilai accuracy sebesar 96,57%, sensitivity sebesar 94,37%, dan specificity sebesar 97,74%. Model berhasil mengklasifikasikan 130 data benign dan 67 data malignant dengan benar, sedangkan 7 data lainnya salah diklasifikasikan. Nilai Kappa sebesar 0,9241 menunjukkan tingkat kesesuaian prediksi yang sangat tinggi. Hasil kedua model identik, sehingga penambahan jumlah learner dari 50 menjadi 100 belum meningkatkan performa klasifikasi.

4.5 Hasil Prediksi

# Membentuk model dengan 50, 100, dan 200 learner
hasil_50 <- evaluasi_adaboost(50)
## Confusion Matrix and Statistics
## 
##            Reference
## Prediction  benign malignant
##   benign       130         4
##   malignant      3        67
##                                           
##                Accuracy : 0.9657          
##                  95% CI : (0.9306, 0.9861)
##     No Information Rate : 0.652           
##     P-Value [Acc > NIR] : <2e-16          
##                                           
##                   Kappa : 0.9241          
##                                           
##  Mcnemar's Test P-Value : 1               
##                                           
##             Sensitivity : 0.9437          
##             Specificity : 0.9774          
##          Pos Pred Value : 0.9571          
##          Neg Pred Value : 0.9701          
##              Prevalence : 0.3480          
##          Detection Rate : 0.3284          
##    Detection Prevalence : 0.3431          
##       Balanced Accuracy : 0.9606          
##                                           
##        'Positive' Class : malignant       
## 
hasil_100 <- evaluasi_adaboost(100)
## Confusion Matrix and Statistics
## 
##            Reference
## Prediction  benign malignant
##   benign       130         4
##   malignant      3        67
##                                           
##                Accuracy : 0.9657          
##                  95% CI : (0.9306, 0.9861)
##     No Information Rate : 0.652           
##     P-Value [Acc > NIR] : <2e-16          
##                                           
##                   Kappa : 0.9241          
##                                           
##  Mcnemar's Test P-Value : 1               
##                                           
##             Sensitivity : 0.9437          
##             Specificity : 0.9774          
##          Pos Pred Value : 0.9571          
##          Neg Pred Value : 0.9701          
##              Prevalence : 0.3480          
##          Detection Rate : 0.3284          
##    Detection Prevalence : 0.3431          
##       Balanced Accuracy : 0.9606          
##                                           
##        'Positive' Class : malignant       
## 
hasil_200 <- evaluasi_adaboost(200)
## Confusion Matrix and Statistics
## 
##            Reference
## Prediction  benign malignant
##   benign       130         5
##   malignant      3        66
##                                           
##                Accuracy : 0.9608          
##                  95% CI : (0.9242, 0.9829)
##     No Information Rate : 0.652           
##     P-Value [Acc > NIR] : <2e-16          
##                                           
##                   Kappa : 0.913           
##                                           
##  Mcnemar's Test P-Value : 0.7237          
##                                           
##             Sensitivity : 0.9296          
##             Specificity : 0.9774          
##          Pos Pred Value : 0.9565          
##          Neg Pred Value : 0.9630          
##              Prevalence : 0.3480          
##          Detection Rate : 0.3235          
##    Detection Prevalence : 0.3382          
##       Balanced Accuracy : 0.9535          
##                                           
##        'Positive' Class : malignant       
## 
# 10 prediksi pertama setiap model
head(hasil_50$hasil, 10)
##       Aktual  Prediksi
## 1     benign malignant
## 2     benign    benign
## 3     benign    benign
## 4     benign    benign
## 5     benign    benign
## 6  malignant malignant
## 7     benign    benign
## 8     benign    benign
## 9     benign    benign
## 10 malignant malignant
head(hasil_100$hasil, 10)
##       Aktual  Prediksi
## 1     benign malignant
## 2     benign    benign
## 3     benign    benign
## 4     benign    benign
## 5     benign    benign
## 6  malignant malignant
## 7     benign    benign
## 8     benign    benign
## 9     benign    benign
## 10 malignant malignant
head(hasil_200$hasil, 10)
##       Aktual  Prediksi
## 1     benign malignant
## 2     benign    benign
## 3     benign    benign
## 4     benign    benign
## 5     benign    benign
## 6  malignant malignant
## 7     benign    benign
## 8     benign    benign
## 9     benign    benign
## 10 malignant malignant

Hasil prediksi pada 10 pengamatan pertama menunjukkan bahwa ketiga model menghasilkan prediksi yang sama, yaitu 9 pengamatan diprediksi dengan benar dan 1 pengamatan kelas benign salah diprediksi sebagai malignant. Secara keseluruhan, model 50 dan 100 learner memperoleh accuracy sebesar 96,57%, sedangkan model 200 learner sebesar 96,08%. Hal ini menunjukkan bahwa penambahan jumlah learner tidak selalu meningkatkan ketepatan klasifikasi.

4.6 Confusion Matrix

# Model 50 learner
hasil_50$confusion
##            Prediksi
## Aktual      benign malignant
##   benign       130         3
##   malignant      4        67
# Model 100 learner
hasil_100$confusion
##            Prediksi
## Aktual      benign malignant
##   benign       130         3
##   malignant      4        67
# Model 200 learner
hasil_200$confusion 
##            Prediksi
## Aktual      benign malignant
##   benign       130         3
##   malignant      5        66

Pada model AdaBoost diperoleh confusion matrix untuk 50, 100, dan 200 learner sebagai berikut.

  1. Model 50 learner memprediksi 130 data benign dengan benar dan 67 data malignant dengan benar. Selain itu, terdapat 3 data benign yang salah diprediksi sebagai malignant dan 4 data malignant yang salah diprediksi sebagai benign.

  2. Model 100 learner menghasilkan prediksi yang sama dengan model 50 learner, yaitu 130 data benign dan 67 data malignant diklasifikasikan dengan benar, sedangkan 7 data lainnya salah diklasifikasikan.

  3. Model 200 learner memprediksi 130 data benign dan 66 data malignant dengan benar. Sebanyak 3 data benign salah diprediksi sebagai malignant, sedangkan 5 data malignant salah diprediksi sebagai benign.

Hasil tersebut menunjukkan bahwa model 50 dan 100 learner memiliki performa klasifikasi yang sama, sedangkan model 200 learner menghasilkan lebih banyak kesalahan klasifikasi. Dengan demikian, penambahan jumlah learner menjadi 200 belum meningkatkan ketepatan prediksi pada data testing.

4.7 Perbandingan Ukuran Evaluasi

evaluasi.semua <- bind_rows(
  hasil_50$evaluasi,
  hasil_100$evaluasi,
  hasil_200$evaluasi
)

# Menampilkan hasil dalam bentuk persentase
evaluasi.persen <- evaluasi.semua %>%
  mutate(
    across(
      c(Accuracy, Precision, Recall, Specificity, F1_Score),
      ~ round(.x * 100, 2)
    )
  )

print(evaluasi.persen)
##   Learner Accuracy Precision Recall Specificity F1_Score
## 1      50    96.57     95.71  94.37       97.74    95.04
## 2     100    96.57     95.71  94.37       97.74    95.04
## 3     200    96.08     95.65  92.96       97.74    94.29

Model AdaBoost dengan 50 dan 100 learner menghasilkan nilai accuracy sebesar 96,57%, yang berarti model mampu mengklasifikasikan 96,57% dari seluruh data testing dengan benar. Nilai precision menunjukkan bahwa 95,71% data yang diprediksi sebagai malignant benar-benar termasuk kelas malignant. Nilai recall menunjukkan bahwa model berhasil mengenali 94,37% dari seluruh data malignant yang sebenarnya. Specificity menunjukkan bahwa model mampu mengidentifikasi 97,74% dari seluruh data benign dengan benar. Nilai F1-score sebesar 95,04% menunjukkan keseimbangan yang baik antara precision dan recall.

Pada model 200 learner, accuracy turun menjadi 96,08% dan F1-score menjadi 94,29%, disertai penurunan precision dan recall.Nilai accuracy, precision, recall, dan F1-score yang lebih rendah menunjukkan bahwa model ini memiliki performa sedikit di bawah model 50 dan 100 learner, terutama dalam mengenali data malignant. Adapun nilai specificity yang sama menunjukkan bahwa kemampuan ketiga model dalam mengenali kelas benign relatif setara. Dengan demikian, model 50 learner dapat dipilih karena memberikan hasil evaluasi terbaik dengan jumlah learner yang lebih sedikit.

4.8 Visualisasi Perbandingan Performa Model

evaluasi.long <- evaluasi.semua %>%
  pivot_longer(
    cols = c(
      Accuracy, Precision, Recall,
      Specificity, F1_Score
    ),
    names_to = "Metrik",
    values_to = "Nilai"
  )

ggplot(
  evaluasi.long,
  aes(
    x = factor(Learner),
    y = Nilai,
    fill = Metrik
  )
) +
  geom_col(position = "dodge") +
  geom_text(
    aes(label = round(Nilai, 3)),
    position = position_dodge(width = 0.9),
    vjust = -0.3,
    size = 3
  ) +
  scale_y_continuous(
    limits = c(0, 1.12),
    breaks = seq(0, 1, 0.2)
  ) +
  labs(
    title = "Perbandingan Performa Model AdaBoost",
    subtitle = "Jumlah learner: 50, 100, dan 200",
    x = "Jumlah Learner",
    y = "Nilai Evaluasi",
    fill = "Metrik"
  ) +
  theme_minimal()

Grafik perbandingan performa model AdaBoost menunjukkan bahwa model dengan 50 dan 100 learner menghasilkan nilai evaluasi yang sama pada seluruh metrik. Kedua model memperoleh accuracy sebesar 0,966, precision 0,957, recall 0,944, F1-score 0,950, dan specificity 0,977. Nilai tersebut menunjukkan bahwa model memiliki ketepatan klasifikasi yang tinggi serta mampu mengenali kelas benign dan malignant dengan baik.

Pada model dengan 200 learner, nilai accuracy turun menjadi 0,961, precision menjadi 0,957, recall menjadi 0,930, dan F1-score menjadi 0,943, sedangkan specificity tetap sebesar 0,977. Penurunan recall menunjukkan bahwa model 200 learner kurang mampu mengenali data malignant dibandingkan dua model lainnya. Secara keseluruhan, model dengan 50 dan 100 learner memberikan performa terbaik, sehingga penambahan jumlah learner menjadi 200 tidak meningkatkan hasil klasifikasi.

4.9 Visualisasi Confusion Matrix

buat_plot_cm <- function(tab, jumlah.learner) {
  
  data.cm <- as.data.frame(tab)
  names(data.cm) <- c("Aktual", "Prediksi", "Jumlah")
  
  ggplot(
    data.cm,
    aes(x = Prediksi, y = Aktual, fill = Jumlah)
  ) +
    geom_tile(color = "white") +
    geom_text(aes(label = Jumlah), size = 6) +
    labs(
      title = paste(
        "Confusion Matrix -",
        jumlah.learner, "Learner"
      ),
      x = "Kelas Prediksi",
      y = "Kelas Aktual"
    ) +
    theme_minimal()
}

buat_plot_cm(hasil_50$confusion, 50)

Confusion matrix model AdaBoost dengan 50 learner menunjukkan bahwa 130 data benign dan 67 data malignant berhasil diklasifikasikan dengan benar. Sebanyak 3 data benign salah diprediksi sebagai malignant, sedangkan 4 data malignant salah diprediksi sebagai benign. Hasil ini menunjukkan bahwa model mampu mengklasifikasikan sebagian besar data dengan tepat, dengan total 7 kesalahan prediksi dari 204 data pengujian.

buat_plot_cm(hasil_100$confusion, 100)

Model AdaBoost dengan 100 learner menghasilkan confusion matrix yang sama dengan model 50 learner. Sebanyak 130 data benign dan 67 data malignant diklasifikasikan dengan benar, sedangkan 7 data lainnya mengalami kesalahan klasifikasi. Hasil ini menunjukkan bahwa penambahan jumlah learner dari 50 menjadi 100 belum mengubah hasil prediksi pada data pengujian.

buat_plot_cm(hasil_200$confusion, 200)

Pada model AdaBoost dengan 200 learner, sebanyak 130 data benign dan 66 data malignant berhasil diklasifikasikan dengan benar. Terdapat 3 data benign yang salah diprediksi sebagai malignant dan 5 data malignant yang salah diprediksi sebagai benign. Total kesalahan klasifikasi meningkat menjadi 8 dari 204 data pengujian. Hasil ini menunjukkan bahwa model 200 learner kurang baik dalam mengenali kelas malignant dibandingkan model dengan 50 dan 100 learner.

4.10 Perkembangan Error AdaBoost

# Model 50 learner
error.train_50 <- adabag::errorevol(
  hasil_50$model, newdata = bc.train
)
error.test_50 <- adabag::errorevol(
  hasil_50$model, newdata = bc.test
)

plot.errorevol(error.test_50, error.train_50)

Grafik menunjukkan bahwa error pada data training dan testing menurun seiring bertambahnya iterasi. Error data testing awalnya sekitar 0,08, kemudian turun dan stabil pada kisaran 0,034 setelah sekitar 25 iterasi. Sementara itu, error data training terus menurun hingga mendekati 0,02. Pola ini menunjukkan bahwa penambahan learner membantu mengurangi kesalahan prediksi, tetapi setelah sekitar 25 iterasi, penurunan error pada data testing tidak lagi terlihat.

# Model 100 learner
error.train_100 <- adabag::errorevol(
  hasil_100$model, newdata = bc.train
)
error.test_100 <- adabag::errorevol(
  hasil_100$model, newdata = bc.test
)

plot.errorevol(error.test_100, error.train_100)

Pada model 100 learner, error data testing menurun dari sekitar 0,08 hingga mencapai kisaran 0,034, lalu cenderung stabil setelah sekitar 25 iterasi. Sebaliknya, error data training terus menurun hingga mendekati 0,015. Kondisi ini menunjukkan bahwa penambahan iterasi setelah titik tersebut belum memberikan perbaikan berarti pada prediksi data testing, meskipun kesalahan pada data training masih berkurang.

# Model 200 learner
error.train_200 <- adabag::errorevol(
  hasil_200$model, newdata = bc.train
)
error.test_200 <- adabag::errorevol(
  hasil_200$model, newdata = bc.test
)

plot.errorevol(error.test_200, error.train_200)

Grafik model AdaBoost dengan 200 learner menunjukkan bahwa error pada data testing menurun pada awal iterasi, kemudian stabil di sekitar 0,034 hingga iterasi ke-135. Setelah itu, nilainya meningkat menjadi sekitar 0,038 dan tetap stabil sampai akhir iterasi. Sebaliknya, error pada data training terus menurun hingga mendekati 0,01. Perbedaan ini menunjukkan bahwa penambahan jumlah iterasi terus memperkecil kesalahan pada data training, tetapi tidak memberikan perbaikan pada data testing. Bahkan, peningkatan error setelah iterasi ke-135 menunjukkan bahwa performa prediksi pada data testing sedikit menurun.

4.11 Variable Importance

# Mengambil variable importance dari model 200 learner
importance.ada <- hasil_200$model$importance

# Mengurutkan dari terbesar ke terkecil
importance.ada <- sort(
  importance.ada,
  decreasing = TRUE
)

print(importance.ada)
##       Cell.size     Bare.nuclei    Cl.thickness   Marg.adhesion Normal.nucleoli 
##       37.360946       28.171016        9.835175        7.317661        5.932666 
##         Mitoses    Epith.c.size      Cell.shape     Bl.cromatin 
##        3.170586        2.965481        2.740277        2.506192
# Visualisasi 10 variabel terpenting
importance.top10 <- head(importance.ada, 10)

barplot(
  importance.top10,
  las = 2,
  main = "10 Variabel Terpenting - AdaBoost",
  xlab = "",
  ylab = "Importance"
)

Grafik variable importance menunjukkan bahwa variabel Cell.size memiliki tingkat kepentingan tertinggi sebesar 37,36, diikuti Bare.nuclei sebesar 28,17. Kedua variabel tersebut memiliki kontribusi paling besar dalam proses klasifikasi model AdaBoost. Selanjutnya, Cl.thickness memiliki nilai 9,84, Marg.adhesion sebesar 7,32, dan Normal.nucleoli sebesar 5,93. Variabel Mitoses, Epith.c.size, Cell.shape, dan Bl.cromatin memiliki nilai kepentingan yang lebih rendah, berkisar antara 2,51 hingga 3,17. Hasil ini menunjukkan bahwa model lebih mengandalkan variabel Cell.size dan Bare.nuclei untuk membedakan kelas benign dan malignant, sedangkan variabel lainnya memberikan kontribusi yang relatif lebih kecil.

4.12 Menentukan Model Terbaik

# Model dengan F1-score tertinggi
model.terbaik <- evaluasi.semua$Learner[
  which.max(evaluasi.semua$F1_Score)
]

cat(
  "Jumlah learner dengan F1-score tertinggi:",
  model.terbaik, "\n"
)
## Jumlah learner dengan F1-score tertinggi: 50
# Model dengan Recall tertinggi
model.recall <- evaluasi.semua$Learner[
  which.max(evaluasi.semua$Recall)
]

cat(
  "Jumlah learner dengan Recall tertinggi:",
  model.recall, "\n"
)
## Jumlah learner dengan Recall tertinggi: 50
# Model dengan Accuracy tertinggi
model.accuracy <- evaluasi.semua$Learner[
  which.max(evaluasi.semua$Accuracy)
]

cat(
  "Jumlah learner dengan Accuracy tertinggi:",
  model.accuracy, "\n"
)
## Jumlah learner dengan Accuracy tertinggi: 50

Hasil penentuan model terbaik menunjukkan bahwa AdaBoost dengan 50 learner memperoleh nilai F1-score, recall, dan accuracy tertinggi dibandingkan model dengan 100 dan 200 learner. Nilai F1-score sebesar 95,04% menunjukkan keseimbangan yang baik antara ketepatan prediksi kelas malignant dan kemampuan mengenali kelas tersebut. Nilai recall sebesar 94,37% menunjukkan bahwa model mampu mendeteksi sebagian besar kasus malignant, sedangkan accuracy sebesar 96,57% menunjukkan tingginya proporsi prediksi yang benar secara keseluruhan. Dengan demikian, model 50 learner dipilih sebagai model terbaik karena memberikan performa klasifikasi tertinggi dengan jumlah learner yang lebih sedikit.

BAB V KESIMPULAN

5.1 Kesimpulan

Boosting merupakan teknik ensemble learning yang membangun model secara berurutan untuk memperbaiki kesalahan prediksi dari model sebelumnya. AdaBoost bekerja dengan menyesuaikan bobot pada data yang salah diklasifikasikan, sedangkan Gradient Boosting memperbaiki kesalahan melalui pemodelan residual berdasarkan loss function.

Model AdaBoost dengan 50, 100, dan 200 learner menghasilkan performa klasifikasi yang berbeda. Model 50 dan 100 learner memperoleh hasil evaluasi yang sama, sedangkan model 200 learner mengalami penurunan pada beberapa metrik evaluasi.

Model AdaBoost dengan 50 learner menjadi model terbaik dengan accuracy sebesar 96,57%, precision 95,71%, recall 94,37%, specificity 97,74%, dan F1-score 95,04%. Hasil ini menunjukkan bahwa model mampu mengklasifikasikan sebagian besar data dengan benar dan mengenali kelas benign maupun malignant dengan baik.

Berdasarkan analisis variable importance pada model 200 learner, variabel Cell.size memiliki tingkat kepentingan tertinggi sebesar 37,36, diikuti Bare.nuclei sebesar 28,17. Kedua variabel tersebut memiliki peran terbesar dalam proses klasifikasi dibandingkan variabel prediktor lainnya.

5.2 Saran

Berdasarkan hasil penelitian yang telah dilakukan, disarankan untuk dapat menggunakan metode Boosting lain, seperti Gradient Boosting, untuk membandingkan performa klasifikasi dengan AdaBoost. Selain itu, pemilihan jumlah learner perlu mempertimbangkan hasil evaluasi pada data testing, karena penambahan jumlah learner tidak selalu meningkatkan ketepatan prediksi. Ketelitian dalam persiapan data, penyusunan sintaks, dan interpretasi hasil juga perlu diperhatikan agar kesimpulan sesuai dengan hasil analisis.

DAFTAR PUSTAKA

Abdurrahman, G. (2022). Klasifikasi penyakit diabetes melitus menggunakan AdaBoost classifier. JUSTINDO (Jurnal Sistem dan Teknologi Informasi Indonesia), 7(1), 59–66.

Chairunisa, G., Najib, M. K., Nurdiati, S., Imni, S. F., Sanjaya, W., Andriani, R. D., Henriyansah, Putri, R. S. P., & Ekaputri, D. (2024). Life expectancy prediction using decision tree, random forest, gradient boosting, and XGBoost regressions. Jurnal Sintak, 2(2), 71–82. https://journal.iteba.ac.id/index.php/jurnalsintak/article/view/249/173

Desiani, A., Nurhaliza, S., Putri, T. F., & Suprihatin, B. (2025). Algoritma Extreme Gradient Boosting (XGBoost) dan Adaptive Boosting (AdaBoost) untuk klasifikasi penyakit tiroid. Jurnal Rekayasa Elektro Sriwijaya, 6(2).

Erkamim, M., Tanniewa, A. M., AP, I., & Nurhayati. (2024). Analisis perbandingan metode AdaBoost, Gradient Boosting, dan XGBoost untuk klasifikasi status gizi pada balita. Building of Informatics, Technology and Science (BITS), 6(3), 1799–1807. https://doi.org/10.47065/bits.v6i3.5717

Febianto, R. T., Suranti, D., & Alinse, R. T. (2024). Penerapan algoritma Adaboost dalam mengetahui pola pengguna KB di Puskesmas Tanjung Harapan. Jurnal Science and Social Research, 7(1), 145–155.

Finda, S. M., & Utomo, D. W. (2024). Klasifikasi Stunting Balita menggunakan Metode Ensemble Learning dan Random Forest. Infotekmesin, 15(2), 287-295

Hastuti, N. T., & Budiman, F. (2024). Optimasi klasifikasi stunting balita dengan teknik boosting pada decision tree. Edumatic: Jurnal Pendidikan Informatika, 8(2), 655–664. https://doi.org/10.29408/edumatic.v8i2.27913

I. D. Mienye and Y. Sun, “A Survey of Ensemble Learning: Concepts, Algorithms, Applications, and Prospects,” IEEE Access, vol. 10, pp. 99129–99149, 2022, doi: 10.1109/ACCESS.2022.3207287.

Jasman, T. Z., Fadhlullah, M. A., Pratama, A. L., & Rismayani. (2022). Analisis algoritma Gradient Boosting, AdaBoost dan CatBoost dalam klasifikasi kualitas air. Jurnal Teknik Informatika dan Sistem Informasi, 8(2), 392–?. https://doi.org/10.28932/jutisi.v8i2.4906

Nie, P., Roccotelli, M., Pia, M., Ming, Z., & Li, Z. (2021). Prediction of home energy consumption based on gradient boosting regression tree. Energy Reports, 7, 1246–1255. https://doi.org/10.1016/j.egyr.2021.02.006

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

Nurhayati, N. (2022). Teknik ensemble learning untuk peningkatan performa akurasi model prediksi (seleksi mahasiswa penerima beasiswa). Pascal Books.

S. Mulyati, T. Informatika, U. Pamulang, and C. Pelanggan, “261256-Penerapan-Resampling-Dan-Adaboost-Untuk-a52Cf03a,” vol. 2, no. 4, pp. 190–199, 2017.

Salamah, U. (2020). Application of logistic regression methods to retinal damage detection on digital fundus images. International Journal of Scientific Research in Computer Science, Engineering and Information Technology, 3307, 103–109. https://doi.org/10.32628/cseit206217

Simamora, P., Pasaribu, S. A., & Wijaya, V. (2024). Peningkatan dan optimalisasi prediksi harga emas menggunakan metode combine machine learning Random Forest dan Gradient Boosting. Mahtik, 1(1), 42–51. https://doi.org/10.59929/mahtik.v1i1.37

Suryanto, M. R. H., & Utomo, D. W. (2024). Pembelajaran ensemble untuk klasifikasi ulasan pelanggan e-commerce menggunakan teknik boosting. Infotekmesin, 15(2), 238–244. https://ejournal.pnc.ac.id/index.php/infotekmesin/article/view/2314/780.

Y. Shin, “Application of boosting regression trees to preliminary cost estimation in building construction projects,” Comput. Intell. Neurosci., vol. 2015, no. 9, pp. 1–9, 2015, doi: 10.1155/2015/149702.