Градиентный бустинг (XGBoost, CatBoost, LightGBM)
| Тип | ансамбль решающих деревьев |
|---|---|
| Теория | Джером Фридман, «Greedy Function Approximation» (1999–2001) |
| XGBoost | Тяньци Чэнь, 2014 |
| LightGBM | Microsoft, 2016 |
| CatBoost | Яндекс, 2017 |
| Применение | табличные данные — скоринг, отток, ранжирование, прогноз спроса |
Градиентный бустинг (англ. gradient boosting) — метод машинного обучения, который строит сильную модель как сумму множества слабых — обычно неглубоких решающих деревьев. Деревья добавляются последовательно, и каждое новое учится исправлять ошибки уже построенного ансамбля. Реализации XGBoost, LightGBM и CatBoost годами доминируют в задачах на табличных данных — кредитный скоринг, прогноз оттока, ранжирование, предсказание спроса — и обычно обходят там нейросети.[5]
Идея
Бустинг как идею «усиления» слабых моделей сформулировали Шапир и Фройнд в 1990-х (алгоритм AdaBoost). Джером Фридман в 1999–2001 годах обобщил его: добавление каждого дерева — это шаг градиентного спуска, только не по весам, а в пространстве функций.[1]
Алгоритм для функции потерь $L$:
- Начать с константы $F_0$ (например, среднего значения целевой переменной).
- На шаге $m$ вычислить для каждого объекта антиградиент потерь — для квадратичной ошибки это просто остатки $y - F_{m-1}(x)$.
- Обучить небольшое дерево $h_m$ предсказывать эти остатки.
- Обновить модель: $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.
См. также
Источники
- Friedman — Greedy Function Approximation: A Gradient Boosting Machine (2001)
- Chen, Guestrin — XGBoost: A Scalable Tree Boosting System (2016)
- Ke et al. — LightGBM: A Highly Efficient Gradient Boosting Decision Tree (NeurIPS 2017)
- Prokhorenkova et al. — CatBoost: unbiased boosting with categorical features (2018)
- Grinsztajn et al. — Why do tree-based models still outperform deep learning on tabular data? (2022)
- XGBoost — Parameters
- CatBoost — документация