XGBoost & LightGBM - Masterclass Gradient Boosting
Daftar Isi
Pendahuluan
Gradient boosting adalah salah satu teknik machine learning paling kuat untuk data terstruktur/tabular. XGBoost (eXtreme Gradient Boosting) dan LightGBM (Light Gradient Boosting Machine) adalah dua implementasi terdepan yang secara konsisten memenangkan kompetisi Kaggle dan menggerakkan sistem ML produksi di berbagai industri. Masterclass ini mencakup kedua library dari dasar hingga deployment produksi.
XGBoost, dikembangkan oleh Tianqi Chen, memperkenalkan regularisasi ke gradient boosting dan mempopulerkan teknik ini. LightGBM, dikembangkan oleh Microsoft, membawa inovasi seperti pemisahan berbasis histogram dan pertumbuhan pohon berbasis daun (leaf-wise) untuk pelatihan yang lebih cepat. Memahami keduanya memungkinkan Anda memilih alat yang tepat untuk setiap masalah.
Prasyarat
- Python 3.8 atau lebih tinggi
- Pemahaman dasar tentang konsep machine learning (klasifikasi, regresi, overfitting)
- Keakraban dengan konvensi API scikit-learn
pip install xgboost lightgbm
pip install scikit-learn pandas numpy
pip install shap matplotlib seaborn
pip install optuna # Untuk optimasi hyperparameter
Memahami Gradient Boosting
Gradient boosting membangun ansambel dari pelajar lemah (biasanya pohon keputusan) secara berurutan, di mana setiap pohon baru mengoreksi kesalahan dari ansambel sebelumnya:
import numpy as np
Ilustrasi konseptual gradient boosting
Langkah 1: Mulai dengan prediksi awal (misal, rata-rata target)
Langkah 2: Hitung residual (aktual - prediksi)
Langkah 3: Pasang pohon ke residual
Langkah 4: Perbarui prediksi: prediksibaru = prediksilama + learningrate prediksipohon
Langkah 5: Ulangi langkah 2-4
Perbedaan utama antara XGBoost dan LightGBM:
XGBoost: pertumbuhan pohon level-wise (breadth-first)
LightGBM: pertumbuhan pohon leaf-wise (best-first) - lebih cepat tapi risiko overfitting
XGBoost memisahkan node level per level
LightGBM memisahkan daun dengan pengurangan loss tertinggi
Pelatihan dan Tuning XGBoost
Klasifikasi Dasar
import xgboost as xgb
import numpy as np
from sklearn.datasets import makeclassification
from sklearn.modelselection import traintestsplit
from sklearn.metrics import accuracyscore, classificationreport, rocaucscore
Buat data sampel
X, y = makeclassification(
nsamples=10000, nfeatures=20, ninformative=15,
nredundant=3, randomstate=42
)
Xtrain, Xtest, ytrain, ytest = traintestsplit(X, y, testsize=0.2, randomstate=42)
Menggunakan API scikit-learn
clf = xgb.XGBClassifier(
nestimators=500,
maxdepth=6,
learningrate=0.1,
subsample=0.8,
colsamplebytree=0.8,
minchildweight=5,
gamma=0.1,
regalpha=0.1, # Regularisasi L1
reglambda=1.0, # Regularisasi L2
objective="binary:logistic",
evalmetric="logloss",
treemethod="hist", # Metode berbasis histogram (lebih cepat)
device="cuda", # Gunakan GPU jika tersedia
randomstate=42,
njobs=-1
)
clf.fit(
Xtrain, ytrain,
evalset=[(Xtest, ytest)],
verbose=50
)
ypred = clf.predict(Xtest)
yproba = clf.predictproba(Xtest)[:, 1]