Gradient Boosting
Gradyan Yükseltme
Yüzlerce zayıf karar ağacını sırayla eğitip her birinin önceki ağaçların hatasını telafi etmesini sağlayan, tabular veride çoğu zaman birinci seçenek topluluk yöntemi.
Gradient boosting, bagging'in (random forest) kardeşi olan boosting ailesindendir. Random forest'ta ağaçlar paralel ve bağımsız eğitilir; gradient boosting'de ise sıralı: her yeni ağaç, kendinden öncekilerin yaptığı toplam tahmin hatasının gradyanına (eğimine) bakar ve bu hatayı azaltacak şekilde eğitilir. Bu adım adım iyileştirme, kayıp fonksiyonunu hızla küçültür.
Sınıflandırmada log-loss, regresyonda kareli hata gibi farklı kayıp fonksiyonları seçilebilir; her biri için gradient boosting uyarlanır. Üstün özellik şudur: model, kayıp fonksiyonunu optimize eden yöne bilinçli olarak ilerler — bu yüzden çoğu tabular veri yarışmasında (Kaggle) ilk üçten çıkmaz.
Kütüphaneler arası popüler seçenekler: XGBoost (en eski ve olgun), LightGBM (çok hızlı, büyük veri için), CatBoost (kategorik özellikleri otomatik işler). Hepsi aynı temel fikrin farklı optimizasyonlu uygulamalarıdır.
Bir şirketin satış tahmininde önce stajyer işe alıyorsun. O kabaca bir tahmin veriyor, ama aylık 50 bin sapma yapıyor. Üstüne kıdemli bir analist alıyorsun, ona "stajyerin nerede yanılıyor, sen oraya odaklan" diyorsun. Onun da hatasının üstüne bir senior tahminci alıyorsun, ona "ikisinin birlikte kalan hatasını sen kapat" diyorsun. Üç kişi birlikte, tek başına olduklarından çok daha iyi tahmin yapar — çünkü her biri öncekinin zayıf yanlarına odaklanmıştır. Gradient boosting tam olarak bu mantıkla çalışır.
Bir kredi kartı şirketi her işlemin "dolandırıcılık olasılığını" çıkarmak istiyor. Veri çok dengesiz (%0.1 fraud), özellik sayısı yüksek (200+), ilişkiler doğrusal değil (yer + saat + tutar kombinasyonu kritik). Lojistik regresyon AUC=0.78, random forest AUC=0.86, LightGBM ise AUC=0.93 veriyor.
Gradient boosting hangi sırada eğitiliyor? İlk 100 ağaç temel örüntüleri yakalar (yüksek tutar + yurtdışı = riskli). Sonraki 100 ağaç ilk 100'ün kaçırdığı incelikleri öğrenir (gece + küçük tutar + yeni kart = farklı bir dolandırıcılık türü). 1.500. ağaca kadar çıktığında her ağaç bir öncekinin kalıntı hatasını azaltır. Sonuç hem hızlı (saniyede 50.000 işlem skorlanabilir) hem doğru.
import lightgbm as lgb
from sklearn.model_selection import train_test_split
from sklearn.metrics import roc_auc_score
X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, stratify=y)
train_set = lgb.Dataset(X_train, label=y_train)
val_set = lgb.Dataset(X_val, label=y_val, reference=train_set)
params = {
"objective": "binary",
"metric": "auc",
"learning_rate": 0.05,
"num_leaves": 63,
"feature_fraction": 0.8,
"bagging_fraction": 0.8,
"bagging_freq": 5,
"is_unbalance": True, # dengesiz sınıf desteği
"verbose": -1,
}
model = lgb.train(
params,
train_set,
num_boost_round=2000,
valid_sets=[val_set],
callbacks=[lgb.early_stopping(50), lgb.log_evaluation(100)],
)
preds = model.predict(X_val)
print(f"AUC: {roc_auc_score(y_val, preds):.4f}")- Tabular veride en iyi doğruluğa ulaşmak istediğinde — çoğu zaman birinci seçim
- Karmaşık, doğrusal olmayan ilişkiler ve etkileşimler varsa
- Hem sınıflandırma hem regresyon için tek model arayışında
- Özellik mühendisliği zaman alıyorsa — gradient boosting'in yüksek toleransı vardır
- Çok küçük veri (~1000 satır altı) — aşırı öğrenme riski yüksek; doğrusal model dene
- Açıklanabilirlik tek başına yorum gerektiriyorsa (SHAP yardımcı olur ama tam kara kutu yorum değildir)
- Görüntü, ses, metin gibi yapısal olmayan verilerde — derin öğrenme daha iyi
Erken durdurmayı unutmak
Sınırsız round eğitirsen aşırı öğrenirsin. early_stopping_rounds ile validation setteki ilerleme durduğunda eğitimi kes.
Aşırı öğrenmeyi yanlış kontrol etmek
max_depth, num_leaves, min_child_samples, regularization parametreleri (lambda, alpha) hep birlikte ayarlanır. Tek tek ayarlayıp bırakmak yerine bir tuner (Optuna) kullan.
Kategorik özellikleri yanlış işlemek
XGBoost ve LightGBM kategorik özellikleri ya one-hot ister ya da özel ayar gerektirir. CatBoost bunu otomatik yapar — eğer çok kategorik veri varsa CatBoost'u tercih et.