Обязательно

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

Осваиваем главное оружие на Kaggle и в продакшене — бустинг, который побеждает почти всех.

Время изучения: 20 мин

Идея: каждое дерево исправляет ошибки предыдущих

Random Forest обучает деревья параллельно и независимо. Градиентный бустинг идёт другим путём — деревья строятся последовательно, и каждое следующее дерево учится на ошибках предыдущих.

По сути: первое дерево делает грубое предсказание. Второе — пытается предсказать остатки (ошибки) первого. Третье — остатки от суммы первого и второго. И так далее. Каждое новое дерево немного «подтягивает» общую модель.

Fm(x)=Fm1(x)+αhm(x)F_m(x) = F_{m-1}(x) + \alpha \cdot h_m(x)

Где 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
  • Для табличных данных — лучший выбор на сегодня