BAB I PENDAHULUAN

1.1 Latar Belakang

Machine learning merupakan cabang kecerdasan buatan yang memungkinkan komputer mempelajari pola dari data untuk menghasilkan prediksi. Dalam pemodelan prediktif, satu model tunggal sering kali belum andal karena rentan terhadap galat akibat bias maupun variansi yang tinggi. Kondisi tersebut mendorong berkembangnya metode ensemble learning, yaitu pendekatan yang menggabungkan sejumlah model untuk menghasilkan prediksi yang lebih akurat dan stabil (Sepbriant & Utomo, 2024). Salah satu pendekatannya adalah Boosting yang membentuk model secara bertahap untuk memperbaiki hasil prediksi.

Boosting adalah metode ensemble learning yang mengubah sejumlah model berkemampuan lemah (weak learner) menjadi model berkemampuan kuat (strong learner) (Sipper & Moore, 2022). Prinsip kerjanya menggabungkan model secara berurutan, dengan setiap model baru memberikan perhatian lebih pada kesalahan model sebelumnya. Mekanisme ini berbeda dengan Bagging yang membentuk model secara independen dari sampel bootstrap (Dinata, Abdurrahman, & Fitriyah, 2023). Metode ini relevan untuk klasifikasi maupun regresi, dan penerapannya dapat didukung oleh perangkat lunak statistik, khususnya R.

Model prediktif perlu dievaluasi agar kemampuan prediksinya dapat dinilai secara objektif. Penilaian tersebut menuntut ukuran evaluasi yang sesuai dengan karakteristik permasalahan, karena klasifikasi menilai ketepatan penetapan kategori, sedangkan regresi menilai kedekatan nilai prediksi terhadap nilai aktual (Mundu dkk., 2026). Evaluasi yang cermat diperlukan untuk memahami kualitas sekaligus keterbatasan model prediktif.

1.2 Rumusan Masalah

Berdasarkan latar belakang di atas, adapun rumusan masalah yang dapat disimpulkan sebagai berikut:

  1. Bagaimana konsep dan mekanisme kerja Boosting sebagai salah satu metode ensemble learning?
  2. Bagaimana implementasi metode Boosting untuk kasus klasifikasi dan regresi menggunakan software R?
  3. Bagaimana performa model Boosting yang dihasilkan berdasarkan ukuran evaluasi yang sesuai untuk kasus klasifikasi dan regresi?

1.3 Tujuan Penelitian

Adapun tujuan penelitian ini yaitu:

  1. Praktikan dapat memahami Boosting sebagai metode ensemble learning.
  2. Praktikan dapat mengimplementasikan Boosting untuk kasus klasifikasi dan regresi menggunakan R.
  3. Praktikan dapat mengevaluasi performa model menggunakan ukuran evaluasi yang sesuai.

1.4 Manfaat Penelitian

Adapun manfaat penelitian ini yaitu sebagai berikut:

  1. Bagi penulis
    1. Penulis dapat memperdalam pemahaman mengenai prinsip Boosting dan perbedaannya dengan metode ensemble learning lainnya.
    2. Penulis dapat meningkatkan keterampilan dalam membangun dan mengevaluasi model Boosting.
  2. Bagi pembaca
    1. Pembaca mendapat pemahaman mengenai konsep dan mekanisme kerja Boosting sebagai metode ensemble learning.
    2. Pembaca mendapat referensi dalam menerapkan Boosting menggunakan R serta memilih ukuran evaluasi model yang sesuai.

1.5 Batasan Masalah

Adapun batasan masalah pada penelitian ini yaitu lakukan klasifikasi menggunakan AdaBoost pada data BreastCancer. Bandingkan untuk 50, 100, dan 200 jumlah learner. Bandingkan pula performa model berdasarkan confusion matrix, accuracy, precision, recall, specificity, dan F1-score. Gunakan adabag::boosting() dengan decision stump sebagai weak learner.

BAB II TINJAUAN PUSTAKA

2.1 Ensemble Learning

Ensemble learning merupakan pendekatan dalam machine learning yang menggabungkan dua atau lebih algoritma dengan tujuan meningkatkan akurasi, mengurangi kesalahan, atau menekan bias model yang dihasilkan oleh algoritma individu. Sepbriant dan Utomo (2024) menjelaskan bahwa ensemble learning merupakan metode yang melibatkan beberapa algoritma dengan performa lemah yang kemudian dikombinasikan untuk menghasilkan performa yang lebih baik. Pendekatan ini bertujuan memperoleh performa superior dibandingkan dengan algoritma yang digunakan secara tunggal. Sebagaimana dikemukakan oleh Dinata, Abdurrahman, dan Fitriyah (2023), ensemble learning bekerja dengan menyusun kumpulan model secara berurutan atau paralel, kemudian menggabungkan seluruh model tersebut untuk menciptakan ekspektasi prediksi yang lebih andal.

Terdapat tiga teknik utama dalam ensemble learning, yaitu bagging, boosting, dan stacking. Sepbriant dan Utomo (2024) menyebutkan bahwa boosting merupakan teknik yang memproses data secara sekuensial berdasarkan hasil dari model sebelumnya. Malek dkk. (2023) menjelaskan bahwa bagging atau bootstrap aggregating merupakan metode yang melatih beberapa pengklasifikasi dasar secara paralel, sementara boosting melatih beberapa learner secara berurutan. Perbedaan mekanisme ini berimplikasi pada cara masing-masing pendekatan mengelola kesalahan prediksi dan varians model.

2.2 Boosting

Boosting merupakan teknik ensemble yang mengubah weak learner menjadi strong learner melalui proses pembelajaran berurutan. Weak learner adalah model yang mampu menghasilkan hipotesis yang kinerjanya hanya sedikit lebih baik daripada tebakan acak, sedangkan strong learner adalah model yang dengan peluang tinggi mampu menghasilkan hipotesis yang benar pada hampir seluruh instans. Konsep dasar ini pertama kali diperkenalkan melalui metode yang mengonversi algoritma pembelajaran lemah menjadi algoritma yang mencapai akurasi tinggi secara arbitrer. Sejumlah algoritma boosting yang sukses kemudian dikembangkan, termasuk AdaBoost, gradient boosting, dan XGBoost (Sipper & Moore, 2022). Beberapa algoritma boosting yang umum digunakan dalam machine learning diuraikan sebagai berikut:

1. AdaBoost

AdaBoost merupakan salah satu algoritma boosting paling populer yang menyesuaikan distribusi data pada setiap iterasi berdasarkan kesalahan learner saat ini. Iosifidis dkk. (2023) menjelaskan bahwa pada setiap putaran boosting, bobot instans diperbarui untuk memfokuskan pembelajaran pada instans yang salah diklasifikasi pada putaran berikutnya. Pembaruan bobot tersebut dirumuskan sebagai berikut:

\[ D^{t+1}(i) = \frac{D^{t}(i)\exp\left(-\alpha_{t} y_{i} h_{t}(x_{i})\right)}{Z_{t}} \tag{2.1} \]

Parameter \(\alpha_t\) menyatakan bobot weak learner \(h_t\) dalam keputusan klasifikasi akhir dan dihitung berdasarkan tingkat kesalahan learner tersebut. Parameter \(Z_t\) merupakan faktor normalisasi yang digunakan pada akhir setiap putaran boosting agar \(D^{t+1}\) tetap menjadi distribusi peluang. Model akhir merupakan kombinasi terbobot dari seluruh weak learner yang terbentuk (Iosifidis dkk., 2023).

2. Gradient Boosting

Gradient Boosting bekerja dengan membangun model prediksi secara iteratif, di mana setiap model berupaya meminimalkan kesalahan pada residual dari tahap sebelumnya. Emami dan Martínez-Muñoz (2025) menjelaskan bahwa dalam gradient boosting, metode pembelajaran bekerja dengan menciptakan model dasar baru secara berurutan yang mempelajari bagian dari konsep yang belum tertangkap oleh learner sebelumnya. Masalah tersebut dirumuskan sebagai masalah optimasi di mana keluaran setiap model baru dibangun agar berkorelasi dengan gradien negatif dari fungsi kerugian iterasi sebelumnya. Sipper dan Moore (2022) menambahkan bahwa gradient boosting membangun model prediksi secara iteratif dengan setiap model berupaya meminimalkan kesalahan atas residual dari tahap sebelumnya.

Proses optimasi dalam gradient boosting dilakukan melalui pendekatan greedy bertahap. Emami dan Martínez-Muñoz (2025) merumuskan bahwa model \(\hat{F}(\mathbf{x})\) dibangun melalui ekspansi aditif sebagai berikut:

\[ \hat{F}(\mathbf{x}) = \sum_{m=0}^{M} \gamma_{m} h_{m}(\mathbf{x}) \tag{2.2} \]

dengan \(h(x)\) merupakan model regresor dasar dan \(\gamma_m\) adalah koefisien yang dioptimalkan. Pada setiap langkah, gradient descent dilakukan dengan menghitung gradien negatif atau pseudo-residual untuk setiap titik data. Decision tree regresor ke-\(m\), yaitu \(h_m(x)\) dilatih untuk menyesuaikan diri terhadap pseudo-residual tersebut.

3. XGBoost

XGBoost merupakan pengembangan dari metode gradient boosting decision tree yang dioptimalkan untuk efisiensi komputasi dan akurasi. Lim dkk. (2026) menjelaskan bahwa XGBoost membangun pohon keputusan secara bertahap, di mana setiap pohon baru fokus memperbaiki kesalahan dari model sebelumnya. Fungsi objektif XGBoost dirumuskan sebagai berikut:

\[ Obj = \sum_{i=1}^{n} l(y_{i}, \hat{y}_{i}) + \sum_{k=1}^{K} \Omega(f_{k}) \tag{2.3} \]

dengan fungsi regularisasi:

\[ \Omega(f_{k}) = \gamma T + \frac{1}{2}\lambda \lVert w \rVert^{2} \tag{2.4} \]

Komponen \(l(y_i, \hat{y}_i)\) menyatakan fungsi kerugian antara nilai aktual dan prediksi, sedangkan \(\Omega(f_k)\) merupakan regularisasi kompleksitas model. Parameter \(\gamma\) adalah penalti kompleksitas, \(\lambda\) adalah parameter regularisasi bobot, \(T\) menyatakan jumlah leaf node, dan \(w\) adalah bobot leaf node (Lim dkk., 2026). Dinata, Abdurrahman, dan Fitriyah (2023) menambahkan bahwa XGBoost mampu menangani dataset besar, missing value, dan mencegah terjadinya overfitting. Penggunaan tree depth, learning rate, dan subsampling menjadikan XGBoost menghasilkan akurasi yang lebih baik dibandingkan algoritma pembelajaran mesin lainnya.

Parameter penting dalam boosting mencakup jumlah iterasi, learning rate, dan kedalaman pohon. Emami dan Martínez-Muñoz (2025) menyatakan bahwa \(M\) merepresentasikan jumlah total epoch boosting, sedangkan \(v\) merupakan learning rate yang berfungsi sebagai pengatur regularisasi model. Learning rate mengendalikan seberapa besar kontribusi setiap model baru terhadap model keseluruhan. Sepbriant dan Utomo (2024) menjelaskan bahwa parameter n_estimators digunakan untuk menentukan jumlah pohon keputusan yang dibuat, learning rate berfungsi sebagai laju pembelajaran, dan max_depth menentukan kedalaman maksimum pohon keputusan. Ketiga parameter tersebut dioptimalkan melalui hyperparameter tuning untuk memperoleh hasil terbaik.

2.3 Evaluasi Model Klasifikasi

Evaluasi model klasifikasi merupakan tahap penting untuk menilai sejauh mana model mampu memprediksi kelas dengan benar. Sejumlah metrik evaluasi digunakan untuk mengukur kinerja model klasifikasi. Metrik-metrik tersebut dihitung berdasarkan nilai true positive (TP), true negative (TN), false positive (FP), dan false negative (FN) yang terdapat dalam confusion matrix. Beberapa metrik evaluasi model klasifikasi yang umum digunakan diuraikan sebagai berikut:

1. Confusion Matrix

Confusion matrix merupakan tabel kontingensi yang merepresentasikan jumlah elemen yang diprediksi benar dan jumlah elemen yang salah diklasifikasi. Iosifidis dkk. (2023) menjelaskan bahwa confusion matrix untuk klasifikasi biner terdiri atas empat kategori, yaitu true positive (TP) untuk positif yang diprediksi benar, false negative (FN) untuk positif yang diprediksi negatif, false positive (FP) untuk negatif yang diprediksi positif, dan true negative (TN) untuk negatif yang diprediksi benar. Chicco, Tötsch, dan Jurman (2021) menambahkan bahwa setiap kategori dalam confusion matrix tidak boleh dievaluasi secara terpisah, melainkan harus dievaluasi secara relatif terhadap kategori lainnya. Sepbriant dan Utomo (2024) menjelaskan bahwa confusion matrix digunakan sebagai alat bantu untuk evaluasi klasifikasi.

2. Akurasi

Akurasi merupakan perbandingan antara data yang diklasifikasi dengan benar dan seluruh data. Dinata, Abdurrahman, dan Fitriyah (2023) merumuskan akurasi sebagai berikut:

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

Nilai akurasi menunjukkan seberapa baik sistem dapat mengklasifikasikan data secara keseluruhan. Malek dkk. (2023) menjelaskan bahwa akurasi mungkin tidak memberikan gambaran yang jelas tentang kinerja pengklasifikasi pada dataset yang tidak seimbang. Hal ini disebabkan karena akurasi dapat mencapai nilai yang sangat tinggi meskipun pengklasifikasi gagal mengklasifikasi kelas minoritas dengan benar.

3. Sensitivitas dan Spesifisitas

Sensitivitas dan spesifisitas merupakan dua metrik yang saling melengkapi dalam mengevaluasi kinerja pengklasifikasi. Sensitivitas atau true positive rate (TPR) mengukur proporsi data kelas positif yang berhasil diklasifikasi dengan benar oleh algoritma. Dinata, Abdurrahman, dan Fitriyah (2023) merumuskan sensitivitas atau recall sebagai berikut:

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

Spesifisitas atau true negative rate (TNR) mengukur proporsi data kelas negatif yang berhasil diklasifikasi dengan benar. Chicco, Warrens, dan Jurman (2021) merumuskan spesifisitas sebagai berikut:

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

Malek dkk. (2023) menjelaskan bahwa sensitivitas menunjukkan kemampuan model dalam mendeteksi kelas positif, sedangkan spesifisitas menunjukkan kemampuan model dalam mengidentifikasi kelas negatif. Kedua metrik ini menjadi sangat penting ketika dataset memiliki distribusi kelas yang tidak seimbang.

4. Presisi dan F1-Score

Presisi dan F1-Score merupakan metrik yang digunakan untuk mengukur keseimbangan antara ketepatan dan kelengkapan prediksi. Presisi atau positive predictive value (PPV) mengukur rasio jumlah data kategori positif yang dikategorikan dengan benar terhadap seluruh data yang diprediksi sebagai positif. Dinata, Abdurrahman, dan Fitriyah (2023) merumuskan presisi sebagai berikut:

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

F1-Score merupakan nilai rata-rata harmonik dari presisi dan recall. Dinata, Abdurrahman, dan Fitriyah (2023) merumuskan F1-Score sebagai berikut:

\[ F1\text{-}Score = \frac{2 \times TP}{2 \times TP + FP + FN} \tag{2.9} \]

Nilai F1-Score berkisar antara 0 hingga 1, di mana nilai yang tinggi menunjukkan keseimbangan yang baik antara presisi dan recall. Sepbriant dan Utomo (2024) menjelaskan bahwa F1-Score digunakan untuk mencari keseimbangan antara nilai presisi dan recall, sehingga algoritma mampu meminimalkan nilai false positive dan false negative.

5. Area Under the Curve (AUC)

Area Under the Curve (AUC) merupakan metrik yang mengukur kinerja klasifikasi berdasarkan kurva Receiver Operating Characteristic (ROC). Malek dkk. (2023) merumuskan AUC sebagai berikut:

\[ AUC = \frac{1 + TPR - FPR}{2} \tag{2.10} \]

dengan TPR adalah true positive rate dan FPR adalah false positive rate. Nilai AUC berkisar antara 0 hingga 1, di mana nilai yang mendekati 1 menunjukkan kinerja klasifikasi yang semakin baik. Iosifidis dkk. (2023) menggunakan AUC sebagai salah satu metrik evaluasi untuk mengukur kinerja metode cost-sensitive boosting yang diusulkan. AUC memberikan gambaran menyeluruh tentang kemampuan model dalam membedakan antara kelas positif dan negatif pada berbagai ambang keputusan.

2.4 Evaluasi Model Regresi

Evaluasi model regresi bertujuan untuk mengukur seberapa dekat nilai prediksi dengan nilai aktual. Berbeda dengan klasifikasi yang menggunakan metrik berbasis confusion matrix, regresi menggunakan metrik berbasis kesalahan (error) dan koefisien determinasi. Metrik-metrik evaluasi model regresi tersebut diuraikan sebagai berikut:

1. Root Mean Square Error (RMSE)

Root Mean Square Error (RMSE) mengukur akar dari rata-rata kuadrat selisih antara nilai aktual dan nilai prediksi. Mundu dkk. (2026) merumuskan RMSE sebagai berikut:

\[ RMSE = \sqrt{\frac{1}{n}\sum_{i=1}^{n}\left(y_{i} - \hat{y}_{i}\right)^{2}} \tag{2.11} \]

dengan \(n\) adalah jumlah observasi, \(y_i\) adalah nilai observasi, dan \(\hat{y}_i\) adalah nilai prediksi. Mundu dkk. (2026) menjelaskan bahwa pengkuadratan kesalahan dalam RMSE menekankan deviasi yang lebih besar, sehingga RMSE sangat sesuai ketika kesalahan besar bersifat kritis. Namun, sensitivitas RMSE terhadap outlier dapat mendistorsi evaluasi kinerja, terutama ketika beberapa kesalahan besar mendominasi metrik.

2. Mean Absolute Error (MAE)

Mean Absolute Error (MAE) mengukur rata-rata besaran kesalahan prediksi yang dinyatakan dalam satuan yang sama dengan variabel target. Mundu dkk. (2026) merumuskan MAE sebagai berikut:

\[ MAE = \frac{1}{n}\sum_{i=1}^{n}\left|y_{i} - \hat{y}_{i}\right| \tag{2.12} \]

Mundu dkk. (2026) menjelaskan bahwa MAE memperlakukan semua kesalahan secara setara, sehingga lebih robust terhadap outlier dibandingkan RMSE. Nilai MAE berkisar dari nol hingga tak terhingga, dengan nilai nol menunjukkan kesesuaian sempurna antara prediksi model dan observasi.

3. Koefisien Determinasi (\(R^2\))

Koefisien determinasi (\(R^2\)) mengukur proporsi varians dalam variabel dependen yang dapat dijelaskan oleh model. Chicco, Warrens, dan Jurman (2021) merumuskan \(R^2\) sebagai berikut:

\[ R^{2} = 1 - \frac{\sum_{i=1}^{m}\left(X_{i} - Y_{i}\right)^{2}}{\sum_{i=1}^{m}\left(\bar{Y} - Y_{i}\right)^{2}} \tag{2.13} \]

dengan \(X_i\) adalah nilai prediksi, \(Y_i\) adalah nilai aktual, dan \(\bar{Y}\) adalah rata-rata nilai aktual. Nilai \(R^2\) berkisar antara negatif tak terhingga hingga \(+1\), dengan nilai \(+1\) menunjukkan prediksi sempurna. Mundu dkk. (2026) menjelaskan bahwa \(R^2\) berguna untuk menginterpretasi varians yang dijelaskan, tetapi harus dilengkapi dengan MAE atau RMSE untuk memastikan bahwa goodness-of-fit tidak menutupi kesalahan yang mendasari.

2.5 Program R

Program R menyediakan fungsi-fungsi utama untuk membangun model boosting melalui package adabag dan gbm. Fungsi boosting() pada package adabag digunakan untuk membentuk model AdaBoost dengan argumen mfinal yang menentukan jumlah iterasi boosting dan coeflearn yang menetapkan skema pembaruan bobot, sedangkan fungsi predict() menghasilkan prediksi kelas berdasarkan model yang telah dilatih. Fungsi errorevol() menghitung perkembangan error pada setiap jumlah learner, dan atribut $importance menyimpan nilai kepentingan variabel prediktor. Pada package gbm, fungsi gbm() membentuk model gradient boosting dengan argumen distribution yang menentukan jenis fungsi kerugian, n.trees untuk jumlah pohon, interaction.depth untuk kedalaman interaksi, shrinkage sebagai learning rate, serta cv.folds untuk validasi silang. Fungsi gbm.perf() menentukan jumlah iterasi optimal berdasarkan validasi silang, sedangkan fungsi summary() menampilkan kepentingan variabel relatif dari model yang terbentuk (Fransiska, 2026).

BAB III METODE PENELITIAN

3.1 Jenis dan Sumber Data

Jenis data yang digunakan dalam penelitian ini adalah data kategorik, yaitu data yang menunjukkan pengelompokan objek berdasarkan kategori tertentu. Data yang digunakan berasal dari hasil pemeriksaan klinis sel kanker payudara yang disajikan dalam bentuk kategori.

Sumber data yang digunakan dalam penelitian ini adalah data sekunder. Data sekunder merupakan data yang telah dikumpulkan oleh pihak lain dan dapat dimanfaatkan kembali untuk keperluan penelitian. Dataset BreastCancer diperoleh dari package mlbench pada perangkat lunak R. Dataset tersebut terdiri atas 699 observasi.

3.2 Variabel Penelitian

Variabel merupakan karakteristik atau atribut yang dapat diukur maupun diamati dalam suatu penelitian. Penelitian ini menggunakan sepuluh variabel, yaitu Cl.thickness, Cell.size, Cell.shape, Marg.adhesion, Epith.c.size, Bare.nuclei, Bl.cromatin, Normal.nucleoli, Mitoses, dan Class. Variabel Class berperan sebagai variabel respons yang bertipe kategorik dengan dua kelas, yaitu benign (jinak) dan malignant (ganas). Sembilan variabel lainnya berperan sebagai variabel prediktor yang bertipe kategorik dengan skala 1 sampai 10.

3.3 Analisis Data

Berikut merupakan algoritma penelitian pada batasan masalah:

  1. Input data.
  2. Persiapan data.
  3. Pembagian data training dan testing.
  4. Pembentukan model AdaBoost.
  5. Prediksi data testing.
  6. Evaluasi model.
  7. Bandingkan performa model.
  8. Analisis perkembangan galat.
  9. Analisis variable importance.
  10. Output.
  11. Interpretasi.

BAB IV HASIL DAN PEMBAHASAN

Pada batasan masalah diminta untuk melakukan klasifikasi menggunakan AdaBoost pada data BreastCancer dengan membandingkan jumlah learner sebanyak 50, 100, dan 200. Performa model dibandingkan berdasarkan confusion matrix, accuracy, precision, recall, specificity, dan F1-score. Model dibangun melalui fungsi adabag::boosting() dengan decision stump sebagai weak learner. Bab ini memuat sintaks, output, dan pembahasan pada setiap tahapan analisis.

4.1 Library

library(adabag)
library(mlbench)
library(caret)
library(rpart)

Paket adabag menyediakan fungsi boosting() untuk membentuk model AdaBoost serta fungsi errorevol() untuk menelusuri perkembangan galat. Paket mlbench memuat data BreastCancer yang digunakan sebagai bahan analisis. Paket rpart digunakan untuk membentuk pohon keputusan yang berperan sebagai weak learner.

Paket caret menyediakan fungsi createDataPartition() untuk membagi data secara berstrata dan fungsi confusionMatrix() untuk mengevaluasi hasil klasifikasi. Seluruh paket dipanggil di awal agar fungsi yang dibutuhkan pada tahap berikutnya dapat digunakan.

4.2 Memuat dan Mengeksplorasi Data

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

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  
##                 
##                 
##                 
##                 
## 

Data BreastCancer terdiri atas 699 observasi dan 11 variabel. Variabel Id bertipe karakter dan hanya berfungsi sebagai penanda sampel. Sembilan variabel bertipe factor maupun ordered factor merupakan karakteristik sel yang dinilai pada skala 1 sampai 10, sedangkan variabel Class menjadi respons dengan kategori benign dan malignant.

Statistik deskriptif merupakan ringkasan yang menggambarkan karakteristik data tanpa menarik kesimpulan di luar data yang diamati. Seluruh variabel pada data ini berupa kategori, sehingga ringkasan yang dihasilkan fungsi summary() berupa frekuensi pada setiap kategori. Variabel Cell.size didominasi kategori 1 dengan 384 observasi, Marg.adhesion kategori 1 dengan 407 observasi, dan Mitoses kategori 1 dengan 579 observasi.

Ringkasan tersebut juga memperlihatkan bahwa variabel Bare.nuclei memiliki 16 nilai hilang. Variabel Id hanya memiliki 645 nilai unik dari 699 observasi, yang menunjukkan adanya identitas yang muncul lebih dari satu kali. Respons terdiri atas 458 observasi benign dan 241 observasi malignant, sehingga kelas benign lebih banyak dibandingkan kelas malignant.

4.3 Persiapan Data

# Menghapus Id karena hanya merupakan identifier
bc$Id <- NULL

# Menghapus observasi yang mengandung missing value
bc <- na.omit(bc)

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

# Melihat kategori respons
levels(bc$Class)
## [1] "benign"    "malignant"
# Distribusi kelas
table(bc$Class)
## 
##    benign malignant 
##       444       239
prop.table(table(bc$Class))
## 
##    benign malignant 
## 0.6500732 0.3499268

Persiapan data diperlukan agar data yang masuk ke dalam model bersih, konsisten, dan sesuai dengan kebutuhan algoritma. Kebutuhan tersebut meliputi penghapusan variabel yang tidak informatif, penanganan nilai hilang, pemastian tipe data respons, dan pemeriksaan distribusi kelas. Variabel Id dihapus karena hanya berfungsi sebagai penanda dan tidak mengandung informasi karakteristik sel.

Penanganan nilai hilang dilakukan dengan menghapus observasi yang memuat missing value melalui fungsi na.omit(). Langkah ini mengurangi data dari 699 menjadi 683 observasi, yaitu 14 observasi kelas benign dan 2 observasi kelas malignant. Jumlah observasi yang dihapus tergolong kecil, sehingga proporsi kelas tidak banyak berubah.

Respons dipastikan bertipe factor dengan kategori benign dan malignant agar dikenali sebagai variabel kelas oleh fungsi boosting(). Distribusi kelas setelah pembersihan disajikan pada Tabel 4.1. Kelas benign mencakup 65,01 persen data, sehingga distribusi kelas tergolong tidak seimbang secara moderat.

Tabel 4.1 Distribusi Kelas Setelah Penanganan Nilai Hilang

Kelas Jumlah Proporsi (%)
benign 444 65,01
malignant 239 34,99
Total 683 100,00

4.4 Pembagian Data Training dan Testing

set.seed(46)

idx.cls <- createDataPartition(
  bc$Class,
  p = 0.70,
  list = FALSE
)

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

dim(bc.train)
## [1] 479  10
dim(bc.test)
## [1] 204  10
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

Data dibagi menjadi data training sebesar 70 persen dan data testing sebesar 30 persen. Fungsi set.seed(46) digunakan agar pembagian data dapat direproduksi pada setiap pengulangan analisis. Hasil pembagian disajikan pada Tabel 4.2.

Tabel 4.2 Hasil Pembagian Data

Data Jumlah Observasi benign malignant Proporsi malignant (%)
Training 479 311 168 35,07
Testing 204 133 71 34,80

Fungsi createDataPartition() melakukan pembagian secara berstrata berdasarkan kelas respons. Proporsi kelas malignant pada data training sebesar 35,07 persen dan pada data testing sebesar 34,80 persen, sehingga keduanya mendekati proporsi data awal sebesar 34,99 persen. Kondisi ini membuat data testing mewakili karakteristik data keseluruhan dan evaluasi model menjadi lebih adil.

4.5 Pembentukan Model AdaBoost

# Decision stump (maxdepth = 1); jumlah learner: 50, 100, dan 200
jumlah.learner <- c(50, 100, 200)
boost.ada <- list()

for (m in jumlah.learner) {
  set.seed(46)
  
  boost.ada[[paste0("mfinal_", m)]] <- boosting(
    Class ~ .,
    data = bc.train,
    boos = FALSE,
    mfinal = m,
    coeflearn = "Freund",
    control = rpart.control(
      maxdepth = 1,
      minsplit = 10,
      cp = 0
    )
  )
}

# Menampilkan tiga pohon pertama, bobot learner, dan variable importance (model 50 learner)
boost.ada$mfinal_50$trees[1:3]
## [[1]]
## n= 479 
## 
## node), split, n, loss, yval, (yprob)
##       * denotes terminal node
## 
## 1) root 479 0.35073070 benign (0.77410861 0.22589139)  
##   2) Cell.size=1,2,3 329 0.05427975 benign (0.95570025 0.04429975) *
##   3) Cell.size=4,5,6,7,8,9,10 150 0.01670146 malignant (0.09444276 0.90555724) *
## 
## [[2]]
## n= 479 
## 
## node), split, n, loss, yval, (yprob)
##       * denotes terminal node
## 
## 1) root 479 0.45809650 malignant (0.4167775 0.5832225)  
##   2) Bare.nuclei=1,2,8 313 0.04279577 benign (0.8776710 0.1223290) *
##   3) Bare.nuclei=3,4,5,6,7,9,10 166 0.09487773 malignant (0.1384479 0.8615521) *
## 
## [[3]]
## n= 479 
## 
## node), split, n, loss, yval, (yprob)
##       * denotes terminal node
## 
## 1) root 479 0.44482090 benign (0.60903033 0.39096967)  
##   2) Normal.nucleoli=1,2,6,7,8 370 0.15771230 benign (0.80900374 0.19099626) *
##   3) Normal.nucleoli=3,4,5,9,10 109 0.01994562 malignant (0.07978794 0.92021206) *
boost.ada$mfinal_50$weights
##  [1] 2.5717138 1.8347491 1.5322966 1.0850725 0.9066204 1.3497332 0.5974266
##  [8] 0.9306116 0.8110893 0.6056759 0.6421240 0.4293474 0.4753809 0.7321019
## [15] 0.8171094 0.7488820 0.5455531 0.2745162 0.3682355 0.6185626 0.3732438
## [22] 0.6592885 0.3551416 0.2553701 0.3005390 0.5773455 0.4443223 0.3350395
## [29] 0.4886979 0.6051515 0.2687810 0.5486510 0.3663917 0.3845952 0.2478759
## [36] 0.2204314 0.2286070 0.2050745 0.2205878 0.2639498 0.6426731 0.4767394
## [43] 0.3420932 0.3161883 0.3026620 0.4818058 0.3309315 0.4959372 0.2558409
## [50] 0.2211841
boost.ada$mfinal_50$importance
##     Bare.nuclei     Bl.cromatin      Cell.shape       Cell.size    Cl.thickness 
##      23.7830550       3.7606701       1.1584366      32.7093696      12.9016140 
##    Epith.c.size   Marg.adhesion         Mitoses Normal.nucleoli 
##       0.5542059       6.5640078       2.7341308      15.8345102

Model AdaBoost dibentuk dengan tiga skenario jumlah learner, yaitu 50, 100, dan 200. Argumen maxdepth = 1 membatasi setiap pohon hanya pada satu pemisahan sehingga berbentuk decision stump. Argumen boos = FALSE membuat seluruh observasi digunakan pada setiap iterasi dengan bobot yang diperbarui, sedangkan coeflearn = "Freund" menetapkan koefisien learner menurut rumus AdaBoost.M1.

Pohon pertama membagi data berdasarkan variabel Cell.size, yaitu kategori 1 sampai 3 dan kategori 4 sampai 10. Koefisien pohon pertama sebesar 2,5717 setara dengan galat terboboti sekitar 0,07, dan nilai ini merupakan yang terbesar di antara seluruh learner. Pohon kedua dan ketiga menggunakan variabel Bare.nuclei dan Normal.nucleoli, yang menunjukkan bahwa setiap iterasi memusatkan perhatian pada observasi yang belum terklasifikasi dengan baik.

Koefisien learner menurun seiring bertambahnya iterasi, dari 2,5717 pada learner pertama menjadi 0,2212 pada learner ke-50. Penurunan ini wajar karena observasi yang tersisa semakin sulit diklasifikasikan sehingga galat terboboti tiap learner semakin besar. Pohon ke-38 pada model 50 learner hanya berupa simpul akar tanpa pemisahan, sehingga kontribusinya terbatas pada prediksi kelas mayoritas terboboti.

4.6 Prediksi Data Testing

pred.ada <- list()

for (nama in names(boost.ada)) {
  pred.obj <- predict(boost.ada[[nama]], newdata = bc.test)
  
  pred.ada[[nama]] <- factor(
    pred.obj$class,
    levels = levels(bc.test$Class)
  )
}

hasil.ada <- data.frame(
  Aktual = bc.test$Class,
  Prediksi_50 = pred.ada$mfinal_50,
  Prediksi_100 = pred.ada$mfinal_100,
  Prediksi_200 = pred.ada$mfinal_200
)

head(hasil.ada, 10)
##       Aktual Prediksi_50 Prediksi_100 Prediksi_200
## 1     benign      benign       benign       benign
## 2     benign      benign       benign       benign
## 3     benign      benign       benign       benign
## 4     benign      benign       benign       benign
## 5     benign      benign       benign       benign
## 6     benign      benign       benign       benign
## 7  malignant      benign       benign       benign
## 8     benign      benign       benign       benign
## 9     benign      benign       benign       benign
## 10 malignant      benign       benign       benign

Prediksi dilakukan terhadap 204 observasi pada data testing menggunakan masing-masing model. Level factor hasil prediksi disamakan dengan level data aktual agar perhitungan evaluasi tidak mengalami kesalahan urutan kategori. Sepuluh observasi pertama disajikan pada Tabel 4.3 sebagai gambaran hasil prediksi.

Tabel 4.3 Perbandingan Nilai Aktual dan Prediksi pada Sepuluh Observasi Pertama

No Aktual Prediksi 50 Learner Prediksi 100 Learner Prediksi 200 Learner
1 benign benign benign benign
2 benign benign benign benign
3 benign benign benign benign
4 benign benign benign benign
5 benign benign benign benign
6 benign benign benign benign
7 malignant benign benign benign
8 benign benign benign benign
9 benign benign benign benign
10 malignant benign benign benign

Delapan dari sepuluh observasi tersebut diprediksi benar oleh ketiga model. Observasi ke-7 dan ke-10 berkelas malignant tetapi diprediksi benign oleh seluruh model. Kesalahan jenis ini perlu mendapat perhatian karena pada konteks diagnosis, tumor ganas yang terdeteksi sebagai jinak berpotensi menunda penanganan.

4.7 Confusion Matrix

cm.ada <- list()

for (nama in names(pred.ada)) {
  cm.ada[[nama]] <- confusionMatrix(
    data = pred.ada[[nama]],
    reference = bc.test$Class,
    positive = "malignant"
  )
  
  cat("\n=====", nama, "=====\n")
  print(cm.ada[[nama]])
}
## 
## ===== mfinal_50 =====
## Confusion Matrix and Statistics
## 
##            Reference
## Prediction  benign malignant
##   benign       129         9
##   malignant      4        62
##                                           
##                Accuracy : 0.9363          
##                  95% CI : (0.8935, 0.9656)
##     No Information Rate : 0.652           
##     P-Value [Acc > NIR] : <2e-16          
##                                           
##                   Kappa : 0.8572          
##                                           
##  Mcnemar's Test P-Value : 0.2673          
##                                           
##             Sensitivity : 0.8732          
##             Specificity : 0.9699          
##          Pos Pred Value : 0.9394          
##          Neg Pred Value : 0.9348          
##              Prevalence : 0.3480          
##          Detection Rate : 0.3039          
##    Detection Prevalence : 0.3235          
##       Balanced Accuracy : 0.9216          
##                                           
##        'Positive' Class : malignant       
##                                           
## 
## ===== mfinal_100 =====
## Confusion Matrix and Statistics
## 
##            Reference
## Prediction  benign malignant
##   benign       129         8
##   malignant      4        63
##                                           
##                Accuracy : 0.9412          
##                  95% CI : (0.8995, 0.9692)
##     No Information Rate : 0.652           
##     P-Value [Acc > NIR] : <2e-16          
##                                           
##                   Kappa : 0.8687          
##                                           
##  Mcnemar's Test P-Value : 0.3865          
##                                           
##             Sensitivity : 0.8873          
##             Specificity : 0.9699          
##          Pos Pred Value : 0.9403          
##          Neg Pred Value : 0.9416          
##              Prevalence : 0.3480          
##          Detection Rate : 0.3088          
##    Detection Prevalence : 0.3284          
##       Balanced Accuracy : 0.9286          
##                                           
##        'Positive' Class : malignant       
##                                           
## 
## ===== mfinal_200 =====
## Confusion Matrix and Statistics
## 
##            Reference
## Prediction  benign malignant
##   benign       129         9
##   malignant      4        62
##                                           
##                Accuracy : 0.9363          
##                  95% CI : (0.8935, 0.9656)
##     No Information Rate : 0.652           
##     P-Value [Acc > NIR] : <2e-16          
##                                           
##                   Kappa : 0.8572          
##                                           
##  Mcnemar's Test P-Value : 0.2673          
##                                           
##             Sensitivity : 0.8732          
##             Specificity : 0.9699          
##          Pos Pred Value : 0.9394          
##          Neg Pred Value : 0.9348          
##              Prevalence : 0.3480          
##          Detection Rate : 0.3039          
##    Detection Prevalence : 0.3235          
##       Balanced Accuracy : 0.9216          
##                                           
##        'Positive' Class : malignant       
## 

Confusion matrix merangkum hasil klasifikasi ke dalam empat komponen, yaitu true positive (TP), true negative (TN), false positive (FP), dan false negative (FN). Kelas malignant ditetapkan sebagai kelas positif sehingga TP menunjukkan tumor ganas yang diprediksi ganas. Hasil ketiga model disajikan pada Tabel 4.4.

Tabel 4.4 Confusion Matrix Model AdaBoost pada Data Testing

Jumlah Learner Aktual Prediksi benign Prediksi malignant
50 benign 129 (TN) 4 (FP)
50 malignant 9 (FN) 62 (TP)
100 benign 129 (TN) 4 (FP)
100 malignant 8 (FN) 63 (TP)
200 benign 129 (TN) 4 (FP)
200 malignant 9 (FN) 62 (TP)

Model dengan 50 dan 200 learner menghasilkan confusion matrix yang identik, yaitu 129 TN, 4 FP, 9 FN, dan 62 TP. Model dengan 100 learner mengklasifikasikan satu observasi malignant tambahan dengan benar sehingga FN berkurang menjadi 8 dan TP bertambah menjadi 63. Jumlah FP tetap 4 pada ketiga model, yang berarti perbedaan antarmodel hanya terletak pada kemampuan mendeteksi kelas malignant.

4.8 Ukuran Evaluasi Klasifikasi

tab.ada <- list()
evaluasi.ada <- data.frame()

for (nama in names(pred.ada)) {
  
  tab.ada[[nama]] <- table(
    Aktual = bc.test$Class,
    Prediksi = pred.ada[[nama]]
  )
  
  cat("\n=====", nama, "=====\n")
  print(tab.ada[[nama]])
  
  TN <- tab.ada[[nama]]["benign", "benign"]
  FP <- tab.ada[[nama]]["benign", "malignant"]
  FN <- tab.ada[[nama]]["malignant", "benign"]
  TP <- tab.ada[[nama]]["malignant", "malignant"]
  
  # Accuracy
  Accuracy <- (TP + TN) / (TP + TN + FP + FN)
  
  # Precision
  Precision <- TP / (TP + FP)
  
  # Recall / Sensitivity
  Recall <- TP / (TP + FN)
  
  # Specificity
  Specificity <- TN / (TN + FP)
  
  # F1-score
  F1 <- 2 * (Precision * Recall) / (Precision + Recall)
  
  evaluasi.ada <- rbind(
    evaluasi.ada,
    data.frame(
      Jumlah_Learner = gsub("mfinal_", "", nama),
      Accuracy = Accuracy,
      Precision = Precision,
      Recall = Recall,
      Specificity = Specificity,
      F1_Score = F1
    )
  )
}
## 
## ===== mfinal_50 =====
##            Prediksi
## Aktual      benign malignant
##   benign       129         4
##   malignant      9        62
## 
## ===== mfinal_100 =====
##            Prediksi
## Aktual      benign malignant
##   benign       129         4
##   malignant      8        63
## 
## ===== mfinal_200 =====
##            Prediksi
## Aktual      benign malignant
##   benign       129         4
##   malignant      9        62
round(evaluasi.ada[, 2:6], 4)
##   Accuracy Precision Recall Specificity F1_Score
## 1   0.9363    0.9394 0.8732      0.9699   0.9051
## 2   0.9412    0.9403 0.8873      0.9699   0.9130
## 3   0.9363    0.9394 0.8732      0.9699   0.9051
evaluasi.ada[, 2:6] <- round(evaluasi.ada[, 2:6], 4)
evaluasi.ada
##   Jumlah_Learner Accuracy Precision Recall Specificity F1_Score
## 1             50   0.9363    0.9394 0.8732      0.9699   0.9051
## 2            100   0.9412    0.9403 0.8873      0.9699   0.9130
## 3            200   0.9363    0.9394 0.8732      0.9699   0.9051

Accuracy menyatakan proporsi seluruh observasi yang diklasifikasikan dengan benar, sedangkan precision menyatakan proporsi prediksi malignant yang benar-benar malignant. Recall menyatakan kemampuan model menemukan seluruh observasi malignant, sedangkan specificity menyatakan kemampuan model mengenali observasi benign. F1-score merupakan rata-rata harmonik precision dan recall sehingga menggambarkan keseimbangan keduanya. Hasil perhitungan ukuran tersebut disajikan pada Tabel 4.5.

Tabel 4.5 Perbandingan Ukuran Evaluasi Model AdaBoost

Jumlah Learner Accuracy Precision Recall Specificity F1-score
50 0,9363 0,9394 0,8732 0,9699 0,9051
100 0,9412 0,9403 0,8873 0,9699 0,9130
200 0,9363 0,9394 0,8732 0,9699 0,9051

Model dengan 100 learner memperoleh nilai tertinggi pada accuracy (0,9412), precision (0,9403), recall (0,8873), dan F1-score (0,9130). Model dengan 50 dan 200 learner memiliki seluruh nilai yang sama, yaitu accuracy 0,9363 dan F1-score 0,9051. Nilai specificity seragam sebesar 0,9699 pada ketiga model karena jumlah FP tidak berubah.

Selisih accuracy antara model terbaik dan model lainnya hanya sebesar 0,0049, yang setara dengan satu observasi dari 204 data testing. Selisih sekecil ini belum cukup kuat untuk menyimpulkan bahwa 100 learner secara nyata lebih unggul. Seluruh model juga melampaui No Information Rate sebesar 0,652 dengan nilai Kappa di atas 0,85, sehingga ketiganya tergolong andal dalam membedakan kedua kelas.

Nilai recall yang lebih rendah dibandingkan specificity menunjukkan bahwa model lebih cermat mengenali tumor jinak daripada tumor ganas. Peningkatan jumlah learner dari 100 menjadi 200 tidak memperbaiki performa, yang mengindikasikan bahwa penambahan iterasi sudah tidak memberikan informasi baru. Model dengan 100 learner dapat dipandang paling efisien karena menghasilkan performa terbaik dengan jumlah iterasi yang lebih sedikit.

4.9 Perkembangan Galat AdaBoost

# Perkembangan Error AdaBoost (model 200 learner)
# Menghitung error pada setiap jumlah learner
error.train <- errorevol(boost.ada$mfinal_200, newdata = bc.train)
error.test <- errorevol(boost.ada$mfinal_200, newdata = bc.test)

# Melihat nilai error
head(error.train$error)
## [1] 0.07098121 0.07098121 0.05845511 0.05845511 0.05219207 0.03757829
head(error.test$error)
## [1] 0.06862745 0.06862745 0.08333333 0.05882353 0.06372549 0.04901961
# Membandingkan training dan testing error
plot.errorevol(error.test, error.train)
Gambar 4.1 Perkembangan Galat Training dan Testing AdaBoost (200 Learner)

Gambar 4.1 Perkembangan Galat Training dan Testing AdaBoost (200 Learner)

Fungsi errorevol() menghitung galat klasifikasi pada setiap penambahan learner, sehingga perkembangan kinerja model dapat ditelusuri dari iterasi pertama hingga ke-200. Galat pada enam learner pertama disajikan pada Tabel 4.6, sedangkan perkembangan keseluruhan ditampilkan pada Gambar 4.1. Garis merah menunjukkan galat pada data testing dan garis biru putus-putus menunjukkan galat pada data training.

Tabel 4.6 Galat pada Enam Learner Pertama

Jumlah Learner Galat Training Galat Testing
1 0,0710 0,0686
2 0,0710 0,0686
3 0,0585 0,0833
4 0,0585 0,0588
5 0,0522 0,0637
6 0,0376 0,0490

Galat training menurun tajam pada iterasi awal, dari 0,0710 pada learner pertama menjadi sekitar 0,02 pada iterasi ke-20. Penurunan berlanjut secara bertahap hingga galat mencapai nol pada sekitar iterasi ke-90 dan bertahan di nilai tersebut sampai iterasi ke-200. Hal ini menunjukkan bahwa gabungan decision stump mampu mengklasifikasikan seluruh data training dengan benar setelah jumlah learner mencukupi.

Galat testing mencapai puncak sebesar 0,0833 pada learner ketiga, kemudian turun dan berfluktuasi pada kisaran 0,05 hingga 0,06 untuk iterasi berikutnya. Galat terendah sekitar 0,049 tampak pada beberapa rentang iterasi di antara 100 dan 180. Galat pada model 50, 100, dan 200 learner masing-masing sebesar 0,0637; 0,0588; dan 0,0637, sesuai dengan nilai accuracy pada Tabel 4.5.

Galat testing tidak ikut turun ketika galat training menuju nol, sehingga terdapat jarak sekitar 0,06 antara kedua kurva pada iterasi di atas 90. Jarak ini menandakan kecenderungan overfitting ringan, yaitu model sangat sesuai dengan data training tetapi kemampuan generalisasinya berhenti membaik. Meskipun demikian, galat testing tidak meningkat secara berarti hingga iterasi ke-200, sehingga penambahan learner tidak merusak performa model.

Kurva testing yang mendatar setelah sekitar 100 iterasi konsisten dengan temuan pada Tabel 4.5 bahwa 200 learner tidak lebih baik daripada 100 learner. Fluktuasi kecil pada kurva setara dengan perubahan satu atau dua observasi dari 204 data testing, sehingga tidak perlu ditafsirkan sebagai perbedaan performa yang nyata. Hasil ini mendukung pemilihan jumlah learner sekitar 100 sebagai jumlah yang cukup dan efisien.

4.10 Variable Importance

# Variable Importance (model 200 learner)
importance.ada <- boost.ada$mfinal_200$importance
importance.ada
##     Bare.nuclei     Bl.cromatin      Cell.shape       Cell.size    Cl.thickness 
##       20.923385        4.744682        1.597013       30.150728       13.168483 
##    Epith.c.size   Marg.adhesion         Mitoses Normal.nucleoli 
##        3.361739        8.556505        2.387314       15.110151
# Mengurutkan variable importance
importance.ada <- sort(importance.ada, decreasing = TRUE)
importance.ada
##       Cell.size     Bare.nuclei Normal.nucleoli    Cl.thickness   Marg.adhesion 
##       30.150728       20.923385       15.110151       13.168483        8.556505 
##     Bl.cromatin    Epith.c.size         Mitoses      Cell.shape 
##        4.744682        3.361739        2.387314        1.597013
# Plot variable importance
par(mar = c(9, 4, 4, 2))
barplot(
  importance.ada,
  las = 2,
  main = "Variable Importance - AdaBoost (200 Learner)",
  ylab = "Importance"
)
Gambar 4.2 Variable Importance AdaBoost (200 Learner)

Gambar 4.2 Variable Importance AdaBoost (200 Learner)

Variable importance menunjukkan besar kontribusi setiap variabel prediktor terhadap pembentukan model. Pada AdaBoost, nilai ini diperoleh dari akumulasi peran variabel pada seluruh decision stump dengan memperhitungkan bobot masing-masing learner. Hasil untuk model 200 learner disajikan pada Tabel 4.7 dan Gambar 4.2, dan total seluruh nilai berjumlah 100.

Tabel 4.7 Variable Importance Model AdaBoost (200 Learner)

Peringkat Variabel Importance
1 Cell.size 30,1507
2 Bare.nuclei 20,9234
3 Normal.nucleoli 15,1102
4 Cl.thickness 13,1685
5 Marg.adhesion 8,5565
6 Bl.cromatin 4,7447
7 Epith.c.size 3,3617
8 Mitoses 2,3873
9 Cell.shape 1,5970

Gambar 4.2 memperlihatkan bahwa Cell.size memiliki batang tertinggi dengan kontribusi sebesar 30,15 persen. Variabel Bare.nuclei dan Normal.nucleoli menyusul dengan kontribusi masing-masing 20,92 persen dan 15,11 persen. Ketiga variabel tersebut menyumbang sekitar 66 persen dari seluruh kontribusi, sehingga ukuran sel, inti sel tanpa sitoplasma, dan jumlah nukleolus menjadi penentu utama klasifikasi.

Hasil ini sejalan dengan struktur model, karena pohon pertama membelah data berdasarkan Cell.size dan pohon kedua serta ketiga menggunakan Bare.nuclei dan Normal.nucleoli. Variabel Cl.thickness dan Marg.adhesion berada pada tingkat menengah dengan kontribusi 13,17 persen dan 8,56 persen. Kelima variabel teratas secara bersama menyumbang sekitar 88 persen dari total kontribusi.

Variabel Bl.cromatin, Epith.c.size, Mitoses, dan Cell.shape memiliki kontribusi di bawah 5 persen, dengan Cell.shape sebagai yang terendah sebesar 1,60 persen. Kontribusi Cell.shape yang rendah kemungkinan disebabkan oleh informasinya yang telah terwakili oleh variabel lain, terutama Cell.size. Variabel dengan kontribusi kecil dapat dipertimbangkan untuk disederhanakan pada penelitian lanjutan, meskipun keputusan tersebut perlu didukung pengujian tambahan.

BAB V PENUTUP

5.1 Kesimpulan

Boosting merupakan metode ensemble learning yang menggabungkan sejumlah weak learner secara berurutan menjadi satu strong learner. Setiap learner baru dibentuk dengan memperhatikan kesalahan learner sebelumnya, misalnya melalui pembaruan bobot observasi pada AdaBoost atau penyesuaian terhadap residual pada Gradient Boosting. Mekanisme berurutan ini membedakan Boosting dari Bagging yang melatih model secara paralel.

Implementasi Boosting pada R dilakukan melalui package adabag untuk klasifikasi dan package gbm untuk regresi. Fungsi boosting() membentuk model AdaBoost dengan argumen jumlah iterasi dan skema pembaruan bobot, sedangkan fungsi gbm() membentuk model Gradient Boosting dengan argumen fungsi kerugian, jumlah pohon, kedalaman interaksi, dan learning rate. Fungsi predict(), errorevol(), dan gbm.perf() melengkapi proses prediksi serta penelusuran galat dan jumlah iterasi optimal.

Evaluasi performa model dilakukan dengan ukuran yang disesuaikan dengan jenis permasalahan. Kasus klasifikasi dievaluasi menggunakan confusion matrix, accuracy, precision, recall, specificity, F1-score, dan AUC yang dihitung dari nilai TP, TN, FP, dan FN. Kasus regresi dievaluasi menggunakan RMSE, MAE, dan koefisien determinasi (\(R^2\)) yang mengukur kedekatan nilai prediksi terhadap nilai aktual.

Pada batasan masalah, klasifikasi AdaBoost pada data BreastCancer dengan decision stump sebagai weak learner menghasilkan performa yang baik pada jumlah learner 50, 100, dan 200. Model dengan 100 learner memperoleh nilai tertinggi pada accuracy sebesar 0,9412, precision sebesar 0,9403, recall sebesar 0,8873, dan F1-score sebesar 0,9130. Model dengan 50 dan 200 learner menghasilkan nilai yang sama, sedangkan specificity seragam sebesar 0,9699 pada ketiga model. Selisih performa antarmodel sangat kecil, sehingga penambahan jumlah learner di atas 100 tidak memberikan peningkatan yang berarti.

5.2 Saran

Penelitian selanjutnya disarankan melakukan penyetelan hiperparameter, seperti jumlah learner, kedalaman pohon, dan learning rate, melalui validasi silang agar pemilihan model tidak bergantung pada satu kali pembagian data. Perbandingan dengan algoritma Boosting lain, seperti Gradient Boosting dan XGBoost, juga dapat dilakukan untuk menilai keunggulan masing-masing pendekatan. Evaluasi sebaiknya dilengkapi dengan AUC dan pengujian pada data yang lebih bervariasi agar hasil lebih andal dan dapat digeneralisasi.

DAFTAR PUSTAKA

Chicco, D., Tötsch, N., & Jurman, G. (2021). The matthews correlation coefficient (MCC) is more reliable than balanced accuracy, bookmaker informedness, and markedness in two-class confusion matrix evaluation. BioData Mining, 14(13), 1–22. https://doi.org/10.1186/s13040-021-00244-z

Chicco, D., Warrens, M. J., & Jurman, G. (2021). The coefficient of determination R-squared is more informative than SMAPE, MAE, MAPE, MSE and RMSE in regression analysis evaluation. PeerJ Computer Science, 7(1), 1–24. https://doi.org/10.7717/PEERJ-CS.623

Dinata, N. A. S., Abdurrahman, G., & Fitriyah, N. Q. (2023). Perbandingan Optimasi Algoritma Random Forest Menggunakan Teknik Boosting Terhadap Kasus Klasifikasi Churn Pelanggan Di Industri Telekomunikasi. JASIE “Jurnal Aplikasi Sistem Informasi dan Elektronika,” 5(1), 28–37. www.kaggle.com.

Emami, S., & Martínez-Muñoz, G. (2025). Condensed-gradient boosting. International Journal of Machine Learning and Cybernetics, 16(1), 687–701. https://doi.org/10.1007/s13042-024-02279-0

Fransiska, H. (2026). Modul Praktikum Machine Learning and Modern Prediction. Laboratorium Matematika Fakultas Matematika dan Ilmu Pengetahuan Alam Universitas Bengkulu.

Iosifidis, V., Papadopoulos, S., Rosenhahn, B., & Ntoutsi, E. (2023). AdaCC: cumulative cost-sensitive boosting for imbalanced classification. Knowledge and Information Systems, 65(2), 789–826. https://doi.org/10.1007/s10115-022-01780-8

Lim, G. J., Chainara Putra, J., Agusia, P., & Utama, M. Y. (2026). PERBANDINGAN NAIVE BAYES, RANDOM FOREST, XGBOOST UNTUK KLASIFIKASI MUTU AIR. Jurnal Ilmu Komputer dan Sistem Informasi, 14(1), 1–9.

Malek, N. H. A., Yaacob, W. F. W., Wah, Y. B., Md Nasir, S. A., Shaadan, N., & Indratno, S. W. (2023). Comparison of ensemble hybrid sampling with bagging and boosting machine learning approach for imbalanced data. Indonesian Journal of Electrical Engineering and Computer Science, 29(1), 598–608. https://doi.org/10.11591/ijeecs.v29.i1.pp598-608

Mundu, M. M., Sempewo, J. I., Goparaju, A., & Uti, D. E. (2026). Comparative Analysis of Model Evaluation Metrics in Energy Systems, Environmental Modeling, and Sustainability Science. International Journal of Energy Research, 2026(1), 1–13. https://doi.org/10.1155/er/6170467

Sepbriant, G. D., & Utomo, D. W. (2024). Ensemble Learning pada Kategorisasi Produk E-Commerce Menggunakan Teknik Boosting. JISKA (Jurnal Informatika Sunan Kalijaga), 9(2), 123–133.

Sipper, M., & Moore, J. H. (2022). AddGBoost: A gradient boosting-style algorithm based on strong learners. Machine Learning with Applications, 7(1), 1–4. https://doi.org/10.1016/j.mlwa.2021.100243