Bagging melatih banyak model secara paralel lalu merata-ratakan hasilnya, sedangkan boosting mengambil arah sebaliknya. Keluarga model ini melatih model satu per satu secara berurutan, dan setiap model baru berfokus pada data yang masih salah oleh gabungan model sebelumnya. Topik ini menjelaskan prinsip kerja boosting beserta dua jalur utamanya, lalu membandingkannya dengan bagging. Idenya dibuktikan melalui perbandingan satu stump, yaitu pohon yang hanya berisi satu pertanyaan, dengan seratus stump pada dataset breast cancer. Istilah tahap dan laju belajar akan digunakan berulang kali, karena keduanya menjadi kunci penyetelan keluarga ini.
Mengoreksi error secara berurutan#
Boosting dimulai dari model sederhana yang lemah, lalu menambahkan model demi model yang ditugaskan untuk mengoreksi sisa kesalahan dari gabungan model sebelumnya. Prediksi akhir berupa gabungan berbobot dari seluruh model yang sudah dibangun. Karena setiap tahap bergantung pada hasil tahap sebelumnya, pelatihan tidak dapat diparalelkan antar tahap seperti pada bagging. Sisa kesalahannya diperkecil sedikit demi sedikit, dan kekuatan gabungan itu tumbuh bertahap sepanjang urutan tahapnya.
Dua jalur yang paling dikenal menentukan cara model baru mengenali kesalahan. AdaBoost menaikkan bobot sampel yang salah diprediksi, sehingga model berikutnya memusatkan perhatian pada contoh-contoh itu. Gradient boosting menempuh jalur matematis, yaitu melatih model baru untuk memprediksi residual (selisih nilai sebenarnya dan prediksi) atau arah penurunan gradien dari kesalahan gabungan. Keduanya berujung pada hal yang sama, yaitu model berikutnya selalu ditugaskan mengoreksi apa yang masih salah. Model lemah (weak learner) adalah model yang skornya hanya sedikit lebih baik daripada tebakan acak.
Model pembangun boosting umumnya berupa pohon sangat dangkal, sering kali stump yang hanya berisi satu pertanyaan. Satu stump nyaris tidak berguna, tetapi seratus stump yang masing-masing menutupi kelemahan tahap sebelumnya menghasilkan model yang kuat. Boosting terutama menurunkan bias, bukan varians, dan itulah perbedaan perannya dengan bagging. Kemajuan per tahap terlihat lambat karena tiap tambahan hanya menyentuh sisa kesalahan, tetapi konsistensinya menumpuk sepanjang urutan.
Kontras dengan bagging#
Perbedaan keduanya dapat diringkas pada tabel berikut.
| Aspek | Bagging | Boosting |
|---|---|---|
| Urutan pelatihan | Paralel dan saling bebas | Berurutan dan saling tergantung |
| Sasaran utama | Varians | Bias |
| Model pembangun | Pohon dalam dan bebas menghafal | Pohon dangkal atau stump |
| Cara menggabungkan | Voting atau rata-rata sama rata | Gabungan berbobot kontribusi |
| Terhadap derau | Relatif tahan | Lebih rentan menghafal derau |
| Risiko utama | Biaya banyak model | Penghafalan berlebihan bila tahap bertambah |
Risiko overfitting pada boosting muncul karena setiap tahap mengejar sisa kesalahan, termasuk kesalahan yang berasal dari derau. Dua tuas yang lazim digunakan untuk menahannya adalah learning_rate kecil dan early stopping. learning_rate yang kecil menahan langkah setiap tahap, sedangkan early stopping menghentikan penambahan tahap ketika skor data validasi berhenti membaik. Penyetelan kedua tuas ini dibahas lebih lanjut pada topik-topik gradient boosting. Perbandingan pada tabel juga menjelaskan urutan pemakaian yang lazim, yaitu random forest menjadi pilihan pertama karena mudah disetel, sedangkan boosting digunakan ketika skor masih perlu didorong lebih jauh.
Pilihan antara kedua keluarga ini juga memengaruhi urutan kerja. Bagging dapat diperluas dengan menambah anggota tanpa penyesuaian lain, sedangkan boosting menuntut penyetelan jumlah tahap dan laju belajarnya. Biaya penerapan boosting lebih tinggi, tetapi potensi skornya lebih baik pada banyak masalah data tabular. Kedua keluarga saling melengkapi, dan sejumlah pustaka modern menggabungkan idenya, misalnya pengacakan sampel pada model yang dibangun berurutan.
Seratus stump yang saling mengoreksi#
Skrip berikut membandingkan satu stump dengan ensemble AdaBoost berisi seratus stump pada dataset breast cancer. Model pembangunnya diberikan melalui parameter estimator, dan algorithm="SAMME" ditulis eksplisit karena nilai bawaan lama telah usang pada scikit-learn 1.5. Kedua model menggunakan data latih dan data uji yang sama dengan random_state=42.
from sklearn.datasets import load_breast_cancer
from sklearn.ensemble import AdaBoostClassifier
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
X, y = load_breast_cancer(return_X_y=True)
X_latih, X_uji, y_latih, y_uji = train_test_split(
X, y, test_size=0.2, random_state=42
)
# satu stump: pohon sedalam satu tingkat
stump = DecisionTreeClassifier(max_depth=1, random_state=42).fit(X_latih, y_latih)
print(f"Akurasi data uji, satu stump : {stump.score(X_uji, y_uji):.4f}")
# seratus stump berurutan yang saling mengoreksi
# algorithm="SAMME" ditulis eksplisit karena bawaan lama sudah usang pada sklearn 1.5
adaboost = AdaBoostClassifier(
estimator=DecisionTreeClassifier(max_depth=1),
n_estimators=100,
algorithm="SAMME",
random_state=42,
).fit(X_latih, y_latih)
print(f"Akurasi data uji, AdaBoost 100 stump : {adaboost.score(X_uji, y_uji):.4f}")Akurasi data uji, satu stump : 0.8947
Akurasi data uji, AdaBoost 100 stump : 0.9737Satu stump mencapai akurasi 0.8947, sedangkan seratus stump berurutan mencapai 0.9737. Kenaikan itu menunjukkan idenya secara langsung, yaitu setiap stump hanya membawa satu pertanyaan dan kelemahannya diperbaiki oleh stump berikutnya yang menangani contoh yang masih salah. Seratus tahap kecil yang berurutan mengalahkan satu tahap tunggal pada data ini. Dataset yang digunakan juga kecil, sehingga selisih 0.0790 tersebut berarti sembilan prediksi berpindah dari salah ke benar pada 114 baris data uji. Angka n_estimators=100 pada skrip juga perlu dibaca tepat, yaitu jumlah tahap boosting, bukan jumlah model yang saling bebas.
Hasil semacam ini tidak otomatis berlaku pada semua data. Pada data yang penuh derau, mengejar sisa kesalahan berarti mengejar derau, dan bagging justru lebih tahan pada situasi itu. Pilihan antara keduanya tetap dinilai dari skor data validasi, bukan dari asumsi bahwa boosting selalu lebih baik. Selain n_estimators, parameter learning_rate memperkecil kontribusi tiap stump sehingga membutuhkan lebih banyak tahap untuk hasil yang setara. Keduanya saling terkait, dan penyetelan pasangan itu menjadi pekerjaan utama saat menggunakan AdaBoost.
Ringkasan#
- Boosting melatih model berurutan yang masing-masing berfokus pada data yang masih salah oleh gabungan sebelumnya, melalui bobot sampel pada AdaBoost atau residual dan gradien pada gradient boosting.
- Bagging bekerja paralel dan menurunkan varians, sedangkan boosting bekerja berurutan dan menurunkan bias.
- Model pembangunnya lemah dan dangkal, dan kekuatannya lahir dari gabungan berbobot seluruh tahap.
- Terlalu banyak tahap membuat derau turut dikejar, dan tahanannya adalah
learning_ratekecil serta early stopping.
Referensi#
- Ensemble methods — scikit-learn — Panduan resmi yang membahas AdaBoost beserta mekanisme bobot sampelnya.
- sklearn.ensemble.AdaBoostClassifier — scikit-learn
— Dokumentasi parameter
estimator,n_estimators, danlearning_rate. - sklearn.tree.DecisionTreeClassifier — scikit-learn — Dokumentasi pohon dangkal yang menjadi model pembangun.