XGBoost dan LightGBM adalah dua implementasi gradient boosting yang paling banyak digunakan pada pekerjaan machine learning dengan data tabular. Topik ini membahas apa yang dioptimalkan di balik layar pada keduanya, hyperparameter yang benar-benar sering diubah, dan pengukuran sederhana pada dataset breast cancer. Hasil akhirnya adalah kemampuan memilih antara implementasi bawaan scikit-learn dan kedua library ini dengan alasan yang jelas.
Apa yang dioptimalkan XGBoost dan LightGBM#
Keduanya mengimplementasikan ide boosting yang sama, yaitu penambahan pohon secara berurutan untuk memperbaiki sisa kesalahan, dengan penekanan pada kecepatan, skala, dan ketahanan model. XGBoost menyertakan regularisasi berupa penalti L1 dan L2 terhadap bobot daun. Penalti ini masuk langsung ke fungsi objektif, yaitu fungsi yang diminimalkan selama pelatihan.
XGBoost juga menangani nilai hilang (missing value) secara bawaan. Arah cabang untuk baris yang nilainya hilang dipelajari dari data, sehingga pengisian nilai hilang (imputation) tidak lagi wajib dilakukan sebelum pemodelan. Pelatihan XGBoost diparalelkan pada pencarian titik bagi, yaitu ambang pemisah yang dicari di setiap percabangan pohon. Paralelisasi ini memangkas waktu pelatihan pada data besar. Keduanya juga tersedia di luar Python, sehingga model yang sama dapat digunakan dari bahasa pemrograman lain pada saat deployment.
LightGBM mengambil jalan yang berbeda pada sisi kecepatan. Nilai fitur kontinu dikelompokkan lebih dahulu ke dalam sejumlah bin tetap, yaitu rentang nilai yang berdekatan. Teknik ini disebut histogram binning dan membuat pencarian titik bagi menjadi murah karena kandidat ambangnya terbatas. Pohonnya tumbuh per daun (leaf-wise) dan bukan per kedalaman, sehingga pohon yang dihasilkan asimetris tetapi menargetkan daun yang paling mengurangi error lebih dahulu. Keduanya juga menyediakan kelas yang mengikuti antarmuka scikit-learn, yaitu XGBClassifier dan LGBMClassifier, sehingga model dapat dipasang di dalam pipeline dengan metode fit dan score yang biasa dipakai scikit-learn.
Pemasangan kedua library dilakukan melalui pip. Di lingkungan praktik jalur ini keduanya sudah terpasang, sehingga perintah berikut hanya diperlukan pada komputer lain.
# tidak-dijalankan
# memasang XGBoost dan LightGBM (di lingkungan praktik jalur ini keduanya sudah terpasang)
pip install xgboost lightgbmHyperparameter yang sering diubah#
Daftar hyperparameter kedua library ini sangat panjang, tetapi pekerjaan sehari-hari hanya menyentuh segelintirnya. Tabel berikut memasangkan nama parameter pada kedua alat beserta perannya. Kolom pertama menjabarkan peran parameter, sedangkan dua kolom berikutnya menyebut nama parameter pada masing-masing alat.
| Peran | XGBoost | LightGBM |
|---|---|---|
| Jumlah tahap boosting | n_estimators | n_estimators |
| Besar langkah per tahap | learning_rate | learning_rate |
| Ukuran pohon | max_depth | num_leaves |
| Sampel baris per pohon | subsample | subsample |
| Sampel kolom per pohon | colsample_bytree | feature_fraction |
| Regularisasi L2 bobot daun | reg_lambda | reg_lambda |
n_estimators dan learning_rate diubah berpasangan sesuai mekanika boosting, yaitu langkah kecil menuntut tahap lebih banyak. Pengendalian ukuran pohon berbeda bentuk, karena XGBoost membatasi kedalaman melalui max_depth, sedangkan LightGBM membatasi jumlah daun melalui num_leaves. Karena pohon LightGBM tumbuh per daun, num_leaves lebih menentukan kerumitan pohon daripada kedalaman, dan nilainya sering dijaga kecil pada dataset kecil. Parameter subsample dan colsample_bytree menambah keacakan sehingga setiap pohon dilatih pada sampel baris dan kolom yang berbeda. Keragaman antarpohon tersebut menurunkan varians ensemble. Parameter reg_lambda menjadi pilihan pertama ketika model terindikasi overfitting. Pada LightGBM, parameter min_child_samples sering berguna pada dataset kecil karena membatasi jumlah baris minimum dalam satu daun.
Urutan penalaan yang lazim mengikuti urutan tabel di atas. Learning rate dan jumlah tahap disetel lebih dahulu, kemudian ukuran pohon diperbesar bila muncul indikasi underfitting atau diperkecil bila muncul indikasi overfitting, dan yang terakhir adalah keacakan beserta regularisasinya. Nilai bawaan kedua alat sudah wajar untuk data tabular biasa, sehingga penalaan menyeluruh baru dilakukan setelah skor validasi menunjukkan ruang perbaikan yang nyata.
Pengukuran pada dataset breast cancer#
Skrip berikut melatih kedua model dengan konfigurasi yang lazim digunakan sebagai titik awal, lalu mencetak akurasi data uji. Argumen eval_metric="logloss" diberikan pada konstruktor XGBoost agar pelatihan berjalan tanpa peringatan, sedangkan verbose=-1 pada LightGBM menahan baris log bawaannya. Argumen n_jobs=1 dipatok pada keduanya agar seluruh perhitungan berjalan berurutan, sehingga hasilnya dapat direproduksi dengan pasti.
from lightgbm import LGBMClassifier
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from xgboost import XGBClassifier
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, stratify=y, random_state=42
)
print(f"Jumlah fitur : {X.shape[1]}")
xgb = XGBClassifier(
n_estimators=100, max_depth=3, learning_rate=0.1,
eval_metric="logloss", n_jobs=1, random_state=42
)
lgbm = LGBMClassifier(
n_estimators=100, num_leaves=15, learning_rate=0.1,
n_jobs=1, verbose=-1, random_state=42
)
for nama, model in [("XGBoost ", xgb), ("LightGBM", lgbm)]:
model.fit(X_latih, y_latih)
akurasi = model.score(X_uji, y_uji)
print(f"{nama} : akurasi data uji = {akurasi:.4f}")Jumlah fitur : 30
XGBoost : akurasi data uji = 0.9474
LightGBM : akurasi data uji = 0.9649Akurasi 0.9649 berbanding 0.9474 terlihat mencolok. Namun, data uji hanya berisi 114 baris, sehingga satu baris bernilai sekitar 0.9 persen. Selisih dua baris semacam itu mudah muncul karena kebetulan. Perbandingan yang lebih adil memerlukan cross-validation, yaitu pengulangan pemecahan data latih menjadi beberapa bagian validasi. Satu pembagian tunggal pada data kecil mudah bias.
Pada dataset kecil seperti ini, kedua library sekelas dengan GradientBoostingClassifier bawaan scikit-learn, dan ketiganya sama-sama layak menjadi kandidat. Keunggulan sebenarnya muncul pada data besar, karena histogram binning LightGBM dan paralelisasi XGBoost memang dirancang untuk jutaan baris, bukan untuk 455 baris data latih. Kesimpulan praktisnya, pilih berdasarkan kemudahan alur kerja pada dataset kecil, lalu pertimbangkan keduanya secara serius begitu ukuran data bertambah.
Ringkasan#
- XGBoost dan LightGBM adalah implementasi gradient boosting yang dioptimalkan, dengan regularisasi bawaan, penanganan nilai hilang, dan pelatihan terparalelkan.
- LightGBM mempercepat pencarian titik bagi melalui histogram binning dan menumbuhkan pohon per daun, sehingga
num_leavesmenjadi kendali utama kerumitan pohonnya. - Hyperparameter yang sering diubah hanya segelintir, yaitu
n_estimatorsdanlearning_rateberpasangan, ukuran pohon (max_depthataunum_leaves),subsample,colsample_bytree, danreg_lambda. - Pada dataset kecil keduanya sekelas dengan implementasi scikit-learn, sedangkan keunggulan kecepatannya baru terasa pada data besar.
Referensi#
- XGBoost Documentation — DMLC — Dokumentasi utama XGBoost, termasuk pengantar regularisasi dan penanganan nilai hilang.
- XGBoost Parameters — DMLC
— Daftar parameter XGBoost seperti
eta,max_depth,subsample,colsample_bytree, danlambda. - LightGBM Documentation — Microsoft — Dokumentasi utama LightGBM, termasuk penjelasan histogram binning dan pertumbuhan per daun.
- LightGBM Parameters — Microsoft
— Daftar parameter LightGBM seperti
num_leaves,feature_fraction, danlambda_l2.