Градиентный бустинг (XGBoost, LightGBM, CatBoost)
Осваиваем главное оружие на Kaggle и в продакшене — бустинг, который побеждает почти всех.
Идея: каждое дерево исправляет ошибки предыдущих
Random Forest обучает деревья параллельно и независимо. Градиентный бустинг идёт другим путём — деревья строятся последовательно, и каждое следующее дерево учится на ошибках предыдущих.
По сути: первое дерево делает грубое предсказание. Второе — пытается предсказать остатки (ошибки) первого. Третье — остатки от суммы первого и второго. И так далее. Каждое новое дерево немного «подтягивает» общую модель.
Где h_m — новое дерево, α — learning rate, F — текущая модель
Бустинг vs Баггинг
- Bagging (RF): деревья обучаются ПАРАЛЛЕЛЬНО и НЕЗАВИСИМО → можно на всех ядрах → уменьшает variance
- Boosting: деревья обучаются ПОСЛЕДОВАТЕЛЬНО, каждое зависит от предыдущих → нельзя распараллелить обучение деревьев → уменьшает bias
- RF использует глубокие деревья → усредняет их. Бустинг использует мелкие деревья (stumps) → складывает их
- RF почти не переобучается от числа деревьев. Бустинг может переобучиться → нужна регуляризация
Почему «градиентный»?
Потому что каждое новое дерево обучается предсказывать антиградиент функции потерь. Для MSE антиградиент — это просто остатки (residuals). Для других функций потерь — другие «псевдо-остатки». По сути, мы делаем градиентный спуск в пространстве функций.
XGBoost, LightGBM, CatBoost
Классический градиентный бустинг (sklearn GradientBoostingClassifier) работает, но медленно. На практике используют оптимизированные реализации:
XGBoost (eXtreme Gradient Boosting)
Первая «быстрая» реализация бустинга, которая покорила Kaggle. Ключевые фичи:
- L1 и L2 регуляризация прямо в целевой функции
- Pruning — обрезка деревьев после построения (вместо жадного ограничения глубины)
- Работа с пропусками из коробки
- Распараллеливание на уровне построения дерева (не деревьев между собой)
- Приближённый поиск лучших сплитов для ускорения
LightGBM (Microsoft)
Быстрее XGBoost, особенно на больших данных. Ключевые отличия:
- Leaf-wise рост дерева (а не level-wise как в XGBoost) — быстрее находит оптимум, но может переобучиться
- Гистограммные сплиты — вместо точных значений признаков использует бины → на порядок быстрее
- GOSS (Gradient-based One-Side Sampling) — фокусируется на объектах с большим градиентом
- EFB (Exclusive Feature Bundling) — «склеивает» разреженные признаки
- Категориальные признаки — поддержка через оптимальный биннинг
CatBoost (Яндекс)
Сделан в Яндексе, «заточен» под реальные данные с категориями:
- Ordered Boosting — борется с target leakage при обработке категорий
- Категориальные признаки из коробки — не нужен one-hot encoding
- Symmetric trees — все сплиты на одном уровне одинаковые → быстрый inference
- Хорошо работает «из коробки» с дефолтными параметрами
- Встроенная поддержка текстовых признаков
Какой выбрать?
Быстрый ответ: LightGBM — если скорость критична или данных очень много. CatBoost — если много категориальных признаков или хочется минимум настройки. XGBoost — классика, хорошая документация, но чуть медленнее LightGBM.
Ключевые гиперпараметры
У бустинга больше гиперпараметров, чем у RF, и они сильнее влияют на результат:
- n_estimators (num_boost_round) — количество деревьев. Больше = лучше, но может переобучиться. Используй early stopping!
- learning_rate (eta) — вклад каждого дерева. Обычно 0.01–0.3. Маленький LR + много деревьев → лучше, но дольше
- max_depth — глубина деревьев. Для бустинга обычно 3–8 (мелкие деревья!). Для LightGBM лучше ограничивать num_leaves
- subsample — доля объектов для каждого дерева (0.5–1.0)
- colsample_bytree — доля признаков для каждого дерева
- reg_alpha (L1) и reg_lambda (L2) — регуляризация
Early Stopping — must use!
Всегда используй early stopping: обучай, пока качество на валидации растёт, и останавливайся, когда перестало. Это лучшая защита от переобучения в бустинге. В XGBoost/LightGBM/CatBoost — встроенный параметр early_stopping_rounds.
Бустинг на практике
🎤 На Kaggle бустинг — это 80% решений табличных задач
Для табличных данных (таблицы с числовыми и категориальными признаками) бустинг почти всегда побеждает. Нейросети на табличных данных работают хуже. Это не мнение — это статистика соревнований.
- Табличные данные → бустинг (LightGBM/CatBoost/XGBoost)
- Изображения → CNN/ViT
- Текст → трансформеры (BERT, GPT)
- Временные ряды → бустинг + специальные признаки ИЛИ специализированные модели
Итого
- Бустинг строит деревья последовательно, каждое исправляет ошибки предыдущих
- Уменьшает bias (в отличие от RF, который уменьшает variance)
- XGBoost — классика с регуляризацией и pruning
- LightGBM — быстрый, leaf-wise, гистограммы
- CatBoost — лучший для категорий, ordered boosting
- Ключевые параметры: n_estimators, learning_rate, max_depth + early stopping
- Для табличных данных — лучший выбор на сегодня
Материалы
Подробное объяснение бустинга с математикой
Теория и сравнение XGBoost, LightGBM, CatBoost
Наглядное объяснение градиентного бустинга
Официальная документация XGBoost
Официальная документация LightGBM
Официальная документация CatBoost