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.
Berdasarkan latar belakang di atas, adapun rumusan masalah yang dapat disimpulkan sebagai berikut:
Adapun tujuan penelitian ini yaitu:
Adapun manfaat penelitian ini yaitu sebagai berikut:
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.
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.
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:
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).
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.
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.
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:
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.
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.
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.
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.
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.
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:
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.
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.
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.
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).
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.
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.
Berikut merupakan algoritma penelitian pada batasan masalah:
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.
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.
## '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 ...
## 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.
# 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"
##
## benign malignant
## 444 239
##
## 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 |
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
## [1] 204 10
##
## benign malignant
## 311 168
##
## benign malignant
## 133 71
##
## benign malignant
## 0.6492693 0.3507307
##
## 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.
# 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) *
## [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
## 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.
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.
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.
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
## 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
## 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.
# 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
## [1] 0.06862745 0.06862745 0.08333333 0.05882353 0.06372549 0.04901961
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.
# 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)
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.
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.
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.
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