Градиентный бустинг (XGBoost, CatBoost, LightGBM)

Материал из llmdocs — справочник разработчика
Портал: ML и MLOps
Градиентный бустинг (XGBoost, CatBoost, LightGBM)
Типансамбль решающих деревьев
ТеорияДжером Фридман, «Greedy Function Approximation» (1999–2001)
XGBoostТяньци Чэнь, 2014
LightGBMMicrosoft, 2016
CatBoostЯндекс, 2017
Применениетабличные данные — скоринг, отток, ранжирование, прогноз спроса

Градиентный бустинг (англ. gradient boosting) — метод машинного обучения, который строит сильную модель как сумму множества слабых — обычно неглубоких решающих деревьев. Деревья добавляются последовательно, и каждое новое учится исправлять ошибки уже построенного ансамбля. Реализации XGBoost, LightGBM и CatBoost годами доминируют в задачах на табличных данных — кредитный скоринг, прогноз оттока, ранжирование, предсказание спроса — и обычно обходят там нейросети.[5]

Идея

Бустинг как идею «усиления» слабых моделей сформулировали Шапир и Фройнд в 1990-х (алгоритм AdaBoost). Джером Фридман в 1999–2001 годах обобщил его: добавление каждого дерева — это шаг градиентного спуска, только не по весам, а в пространстве функций.[1]

Алгоритм для функции потерь $L$:

  1. Начать с константы $F_0$ (например, среднего значения целевой переменной).
  2. На шаге $m$ вычислить для каждого объекта антиградиент потерь — для квадратичной ошибки это просто остатки $y - F_{m-1}(x)$.
  3. Обучить небольшое дерево $h_m$ предсказывать эти остатки.
  4. Обновить модель: $F_m = F_{m-1} + \eta \, h_m$, где $\eta$ — темп обучения (shrinkage), обычно 0,01–0,1.

Выбор функции потерь задаёт задачу: квадратичная — регрессия, логистическая — классификация, специальные попарные и списочные потери — ранжирование.

В отличие от случайного леса, где деревья независимы и усредняются (снижается разброс), в бустинге деревья зависимы и уменьшают смещение — поэтому бустинг точнее, но легче переобучается.

Реализации

XGBoost LightGBM CatBoost
Автор Тяньци Чэнь (2014) Microsoft (2016) Яндекс (2017)
Рост деревьев по уровням по листьям (leaf-wise) симметричные (oblivious)
Категориальные признаки базовая поддержка встроенная сильная сторона: target statistics
Особенности регуляризация в целевой функции, стандарт индустрии[2] гистограммы, GOSS, EFB — самая быстрая на больших данных[3] упорядоченный бустинг против утечки, хорош «из коробки»[4]

Все три поддерживают GPU, пропуски в данных, раннюю остановку, распределённое обучение и интерфейс, совместимый со scikit-learn. В самом scikit-learn есть быстрый HistGradientBoostingClassifier, построенный по образцу LightGBM.

Пример

from catboost import CatBoostClassifier
from sklearn.model_selection import train_test_split

X_train, X_val, y_train, y_val = train_test_split(X, y, stratify=y, random_state=0)

model = CatBoostClassifier(
    iterations=3000,
    learning_rate=0.05,
    depth=6,
    eval_metric="AUC",
    cat_features=["city", "device"],   # категории без one-hot
    early_stopping_rounds=200,
    verbose=500,
)
model.fit(X_train, y_train, eval_set=(X_val, y_val))
print(model.get_feature_importance(prettified=True).head(10))

Основные гиперпараметры

  • Число деревьев и темп обучения — связаны: меньший темп требует больше деревьев и обычно даёт лучший результат. Число деревьев подбирают ранней остановкой по валидации.
  • Глубина / число листьев — сложность отдельного дерева; типично 4–10 уровней.
  • Подвыборки строк и признаков (subsample, colsample_bytree) — вносят случайность и снижают переобучение.
  • Регуляризация листьев (L1/L2), минимальное число объектов в листе.[6]

Подбор удобно автоматизировать (Optuna) с честной кросс-валидацией; для временных рядов — с разбиением по времени.

Интерпретация

Важность признаков доступна «из коробки», но может вводить в заблуждение; точнее объясняют предсказания значения SHAP, для деревьев вычисляемые быстро и точно. Это важно в регулируемых областях вроде банковского скоринга. Качество классификаторов оценивают ROC AUC, PR AUC и другими метриками.

Когда не подходит

Изображения, звук, тексты — область нейросетей и эмбеддингов (которые, впрочем, нередко подают бустингу как признаки). Деревья плохо экстраполируют: за пределами диапазона обучающих данных предсказание остаётся константой. Для продакшена модели экспортируют в собственные бинарные форматы или ONNX.

См. также

Источники

  1. Friedman — Greedy Function Approximation: A Gradient Boosting Machine (2001)
  2. Chen, Guestrin — XGBoost: A Scalable Tree Boosting System (2016)
  3. Ke et al. — LightGBM: A Highly Efficient Gradient Boosting Decision Tree (NeurIPS 2017)
  4. Prokhorenkova et al. — CatBoost: unbiased boosting with categorical features (2018)
  5. Grinsztajn et al. — Why do tree-based models still outperform deep learning on tabular data? (2022)
  6. XGBoost — Parameters
  7. CatBoost — документация