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

> Ансамблевый метод, последовательно добавляющий решающие деревья, каждое из которых исправляет ошибки предыдущих; лучший выбор для табличных данных.

Источник: https://llmdocs.ru/wiki/gradient-boosting/ · обновлено 2026-11-09 · лицензия CC BY-SA 4.0

- **Тип**: ансамбль решающих деревьев
- **Теория**: Джером Фридман, «Greedy Function Approximation» (1999–2001)
- **XGBoost**: Тяньци Чэнь, 2014
- **LightGBM**: Microsoft, 2016
- **CatBoost**: Яндекс, 2017
- **Применение**: табличные данные — скоринг, отток, ранжирование, прогноз спроса
**Градиентный бустинг** (англ. *gradient boosting*) — метод [машинного обучения](https://llmdocs.ru/wiki/machine-learning.md), который строит сильную модель как сумму множества слабых — обычно неглубоких решающих деревьев. Деревья добавляются последовательно, и каждое новое учится исправлять ошибки уже построенного ансамбля. Реализации XGBoost, LightGBM и CatBoost годами доминируют в задачах на **табличных данных** — кредитный скоринг, прогноз оттока, ранжирование, предсказание спроса — и обычно обходят там нейросети.[5]

## Идея

Бустинг как идею «усиления» слабых моделей сформулировали Шапир и Фройнд в 1990-х (алгоритм AdaBoost). Джером Фридман в 1999–2001 годах обобщил его: добавление каждого дерева — это шаг [градиентного спуска](https://llmdocs.ru/wiki/gradient-descent.md), только не по весам, а в пространстве функций.[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.

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

В отличие от случайного леса, где деревья независимы и усредняются (снижается разброс), в бустинге деревья зависимы и уменьшают смещение — поэтому бустинг точнее, но легче [переобучается](https://llmdocs.ru/wiki/overfitting-regularization.md).

## Реализации

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

Все три поддерживают GPU, пропуски в данных, раннюю остановку, распределённое обучение и интерфейс, совместимый со [scikit-learn](https://llmdocs.ru/wiki/scikit-learn.md). В самом scikit-learn есть быстрый `HistGradientBoostingClassifier`, построенный по образцу LightGBM.

## Пример

```python
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) с честной [кросс-валидацией](https://llmdocs.ru/wiki/cross-validation.md); для временных рядов — с разбиением по времени.

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

Важность признаков доступна «из коробки», но может вводить в заблуждение; точнее объясняют предсказания значения SHAP, для деревьев вычисляемые быстро и точно. Это важно в регулируемых областях вроде банковского скоринга. Качество классификаторов оценивают ROC AUC, PR AUC и другими [метриками](https://llmdocs.ru/wiki/classification-metrics.md).

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

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

## См. также

- [Градиентный спуск](https://llmdocs.ru/wiki/gradient-descent.md)
- [scikit-learn](https://llmdocs.ru/wiki/scikit-learn.md)
- [Переобучение и регуляризация](https://llmdocs.ru/wiki/overfitting-regularization.md)
- [Метрики качества классификации](https://llmdocs.ru/wiki/classification-metrics.md)
- [MLOps](https://llmdocs.ru/wiki/mlops.md)

## Источники

1. [Friedman — Greedy Function Approximation: A Gradient Boosting Machine (2001)](https://projecteuclid.org/journals/annals-of-statistics/volume-29/issue-5/Greedy-function-approximation-A-gradient-boosting-machine/10.1214/aos/1013203451.full)
2. [Chen, Guestrin — XGBoost: A Scalable Tree Boosting System (2016)](https://arxiv.org/abs/1603.02754)
3. [Ke et al. — LightGBM: A Highly Efficient Gradient Boosting Decision Tree (NeurIPS 2017)](https://papers.nips.cc/paper/6907-lightgbm-a-highly-efficient-gradient-boosting-decision-tree)
4. [Prokhorenkova et al. — CatBoost: unbiased boosting with categorical features (2018)](https://arxiv.org/abs/1706.09516)
5. [Grinsztajn et al. — Why do tree-based models still outperform deep learning on tabular data? (2022)](https://arxiv.org/abs/2207.08815)
6. [XGBoost — Parameters](https://xgboost.readthedocs.io/en/stable/parameter.html)
7. [CatBoost — документация](https://catboost.ai/docs/)
