LightGBM adalah library gradient boosting cepat dari Microsoft. Dengan pendekatan histogram dan pertumbuhan pohon leaf-wise, LightGBM tetap akurat sambil mempercepat training pada data besar dan berdimensi tinggi.
Fitur seperti GPU training, dukungan kategorikal native, dan distributed learning membuatnya populer di Kaggle maupun produksi.
1. Fitur utama #
- Leaf-wise growth: mengembangkan leaf dengan penurunan loss terbesar. Atur dengan
max_depthataunum_leaves. - Histogram approximation: mengelompokkan nilai kontinu (mis. 256 bin) untuk mengurangi komputasi dan memori.
- Reuse gradien/Hessian: agregasi statistik per bin meningkatkan efisiensi cache.
- Dukungan kategorikal native: memilih split biner optimal tanpa one-hot.
- Fitur produksi: early stopping, sample weight, monotonic constraints, GPU.
2. Tujuan dalam rumus #
Seperti gradient boosting biasa, LightGBM menambahkan weak learner berdasarkan gradien negatif.
$$ \mathcal{L} = \sum_{i=1}^n \ell\big(y_i, F_{m-1}(x_i) + f_m(x_i)\big) + \Omega(f_m) $$
LightGBM mengumpulkan gradien \(g_i\) dan Hessian \(h_i\) per histogram bin lalu menghitung gain split:
$$ \text{Gain} = \frac{1}{2} \left( \frac{\left(\sum_{i \in L} g_i\right)^2}{\sum_{i \in L} h_i + \lambda} + \frac{\left(\sum_{i \in R} g_i\right)^2}{\sum_{i \in R} h_i + \lambda} - \frac{\left(\sum_{i \in (L \cup R)} g_i\right)^2}{\sum_{i \in (L \cup R)} h_i + \lambda} \right) - \gamma $$
\(\lambda\) adalah regularisasi L2 dan \(\gamma\) adalah penalti split.
3. Klasifikasi biner dengan Python #
import lightgbm as lgb
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report, roc_auc_score
X, y = make_classification(
n_samples=30_000,
n_features=40,
n_informative=12,
n_redundant=8,
weights=[0.85, 0.15],
random_state=42,
)
X_train, X_valid, y_train, y_valid = train_test_split(
X, y, test_size=0.2, stratify=y, random_state=42
)
params = {
"objective": "binary",
"metric": ["binary_logloss", "auc"],
"learning_rate": 0.05,
"num_leaves": 31,
"feature_fraction": 0.8,
"bagging_fraction": 0.8,
"bagging_freq": 5,
"lambda_l2": 1.0,
"min_data_in_leaf": 30,
}
train_data = lgb.Dataset(X_train, label=y_train)
valid_data = lgb.Dataset(X_valid, label=y_valid)
gbm = lgb.train(
params,
train_data,
num_boost_round=1000,
valid_sets=[train_data, valid_data],
valid_names=["train", "valid"],
callbacks=[lgb.early_stopping(stopping_rounds=50, verbose=True)],
)
y_pred = gbm.predict(X_valid)
print("ROC-AUC:", roc_auc_score(y_valid, y_pred))
print(classification_report(y_valid, (y_pred > 0.5).astype(int)))
Early stopping memungkinkan num_boost_round besar tanpa overfitting.
4. Hiperparameter utama #
| Parameter | Peran / tips |
|---|---|
num_leaves | Jumlah leaf. Menentukan kapasitas; naikkan bertahap di bawah 2 ** max_depth. |
max_depth | Batas kedalaman. -1 tanpa batas; nilai kecil mengurangi overfitting. |
min_data_in_leaf / min_sum_hessian_in_leaf | Minimal sampel / Hessian per leaf. Lebih besar lebih halus. |
learning_rate | Semakin kecil semakin stabil, tapi butuh lebih banyak pohon. |
feature_fraction | Subsampling fitur untuk generalisasi lebih baik. |
bagging_fraction & bagging_freq | Subsampling baris; aktif jika bagging_freq > 0. |
lambda_l1, lambda_l2 | Regularisasi L1/L2. |
min_gain_to_split | Gain minimum untuk split; menekan split yang berisik. |
5. Fitur kategorikal dan missing value #
- Cukup berikan indeks/nama kolom ke
categorical_feature. Tidak perlu target encoding. - Missing value diarahkan ke cabang khusus; dengan banyak missing, pertimbangkan imputasi.
- Monotonic constraints tersedia lewat
monotone_constraints.
categorical_cols = [0, 2, 5]
train_data = lgb.Dataset(
X_train,
label=y_train,
categorical_feature=categorical_cols,
)
6. Alur tuning yang praktis #
- Baseline:
learning_rate=0.1,num_leaves=31,feature_fraction=1.0. - Kapasitas: atur
num_leavesdanmin_data_in_leafsambil memantau loss validasi. - Randomisasi: set
feature_fractionataubagging_fractionke 0.6–0.9. - Regularisasi: tambahkan
lambda_l1/lambda_l2ataumin_gain_to_split. - Turunkan learning rate: jika mentok, gunakan 0.01 dan tambah
num_boost_round. - Ensemble: gabungkan beberapa LightGBM dengan seed/inisialisasi berbeda.
7. Ringkasan #
- LightGBM mengandalkan histogram dan leaf-wise growth untuk boosting yang cepat dan akurat.
- Seimbangkan
num_leavesdanlearning_rate, serta gunakan regularisasi dan subsampling. - Dukungan kategorikal, missing value, dan GPU membuatnya kuat untuk produksi dan ensemble.