Gradient Boosting
Интерактивный гайд: от идеи ансамблей до XGBoost. Двигайте слайдеры, наблюдайте как деревья обучаются на остатках, экспериментируйте с гиперпараметрами.
Ансамблевые методы
Ансамбль — это комбинация нескольких моделей (обычно деревьев решений), которая работает лучше, чем каждая отдельная модель. Идея проста: одно дерево легко ошибается, но если объединить предсказания множества деревьев — ошибки взаимно компенсируются.
Два основных подхода: Bagging (параллельное обучение на случайных подмножествах) и Boosting (последовательное обучение, каждая новая модель исправляет ошибки предыдущей). Random Forest — пример bagging. Gradient Boosting — пример boosting.
Аналогия: консилиум врачей
Один врач может ошибиться в диагнозе. Но если 100 врачей независимо выносят решение и их ответы усредняются — вероятность ошибки падает. Это bagging. А если каждый следующий врач фокусируется на случаях, где предыдущие ошиблись — это boosting.
Bagging vs Boosting
Bagging (Bootstrap AGGregatING): каждая модель обучается на случайной bootstrap-выборке из данных. Модели независимы, предсказания усредняются. Снижает дисперсию (variance), не влияет на смещение (bias).
Boosting: модели обучаются последовательно. Каждая новая модель фокусируется на ошибках предыдущей. Предсказания складываются. Снижает смещение (bias) и может снижать дисперсию. Более склонен к переобучению.
Bagging
- ✓ Параллельное обучение
- ✓ Снижает variance
- ✓ Устойчив к outliers
- • Random Forest
Boosting
- ✓ Последовательное обучение
- ✓ Снижает bias
- ✓ Часто точнее
- • GBM, XGBoost, LightGBM
На практике
Boosting (XGBoost/LightGBM) — метод №1 на Kaggle для табличных данных. Bagging (Random Forest) — надёжный baseline, который сложно сломать.
AdaBoost
AdaBoost (Adaptive Boosting) — первый успешный алгоритм boosting (Freund & Schapire, 1996). Ключевая идея: увеличивать веса неправильно классифицированных примеров, чтобы следующее дерево уделяло им больше внимания.
Вес дерева: чем меньше ошибка ε_m, тем больше вес α_m
Обновление весов: ошибочные примеры получают больший вес
Алгоритм пошагово: (1) инициализировать веса равномерно; (2) обучить слабый классификатор h_m на взвешенных данных; (3) вычислить взвешенную ошибку ε_m; (4) вычислить вес дерева α_m; (5) обновить веса примеров; (6) повторить.
Почему AdaBoost работает
Каждое новое дерево вынуждено исправлять ошибки предыдущих — оно получает «более сложные» примеры. Финальный классификатор: H(x) = sign(Σ α_m · h_m(x)) — взвешенное голосование.
Gradient Boosting
Gradient Boosting обобщает идею AdaBoost на произвольные функции потерь. Вместо взвешивания примеров, каждое новое дерево обучается предсказывать остатки (residuals) — разницу между истинными значениями и текущим предсказанием модели.
Итоговая модель: сумма базовой + новое дерево с learning rate η
Каждое дерево минимизирует функцию потерь на остатках
Для MSE остатки — просто r_i = y_i − F(x_i). Для произвольного loss берётся антиградиент: r_i = −∂L/∂F(x_i). Отсюда название «gradient» boosting — мы делаем градиентный спуск в пространстве функций.
Псевдо-остатки = антиградиент функции потерь
Интуиция: обучение на ошибках
Дерево 1 предсказывает y ≈ среднее. Дерево 2 учится на том, что дерево 1 не угадало. Дерево 3 учится на том, что деревья 1+2 не угадали. Каждое следующее дерево «дотюнивает» остатки — ошибки становятся всё меньше.
XGBoost, LightGBM, CatBoost
Три главные реализации Gradient Boosting, каждая со своими оптимизациями:
| XGBoost | LightGBM | CatBoost | |
|---|---|---|---|
| Построение дерева | Level-wise | Leaf-wise (быстрее) | Symmetric (oblivious) |
| Категории | Label Encoding | Встроенная поддержка | Ordered TS (лучший) |
| Регуляризация | L1 + L2 на листья | L1 + L2 + min_data_in_leaf | L2 + random permutations |
| Скорость | Хорошая | Самый быстрый | Средняя |
| Пропуски (NaN) | Встроенная обработка | Встроенная обработка | Встроенная обработка |
| GPU | Да | Да | Да (оптимизирован) |
XGBoost: регуляризация Ω(f) включена прямо в целевую функцию
Ω(f) = штраф за число листьев T + L2-штраф на веса листьев
Что выбрать на практике
LightGBM — для скорости и больших данных. CatBoost — если много категориальных признаков. XGBoost — универсальный выбор с огромным сообществом. На Kaggle все три показывают сопоставимое качество.
Ключевые гиперпараметры
Три главных гиперпараметра Gradient Boosting, которые контролируют баланс между качеством и переобучением:
learning_rate (η) — шаг обучения
Множитель при добавлении каждого нового дерева: F_m = F_{m-1} + η·h_m. Маленький η (0.01–0.1) → медленное обучение, но лучшее обобщение. Большой η (0.3–1.0) → быстрая сходимость, но риск переобучения. Типичное значение: 0.05–0.3.
n_estimators — количество деревьев
Больше деревьев = модель мощнее, но дольше обучается и может переобучиться. Обычно подбирается через early stopping: обучаем много деревьев, останавливаемся когда validation error перестаёт уменьшаться. Типично: 100–1000.
max_depth — глубина дерева
Контролирует сложность каждого отдельного дерева. Глубокие деревья (8+) запоминают данные. Мелкие (2-4) — слабые ученики, что хорошо для boosting. Типично: 3–8. В XGBoost по умолчанию 6, в LightGBM ограничивают num_leaves.
Финальная модель: M деревьев с learning rate η
Правило большого пальца
Уменьши learning_rate → увеличь n_estimators (и наоборот). С early stopping можно ставить n_estimators=10000, learning_rate=0.01 и остановиться автоматически.
Когда использовать и Feature Importance
Gradient Boosting — метод выбора для табличных данных. Превосходит нейронные сети на structured/tabular данных в большинстве задач (рекомендации, скоринг, прогнозирование, классификация клиентов). Не подходит для изображений, текстов, аудио — там deep learning.
Feature Importance — одно из главных преимуществ GB. Три вида: (1) Gain — суммарное улучшение loss при использовании признака для сплита; (2) Split count — сколько раз признак использовался; (3) SHAP values — вклад каждого признака в предсказание конкретного объекта.
✓ Используйте GB
- • Табличные данные
- • Смешанные типы признаков
- • Пропуски в данных
- • Нужна интерпретируемость
- • Kaggle / продакшен ML
✗ НЕ используйте GB
- • Изображения → CNN / ViT
- • Текст → Transformers
- • Аудио → WaveNet / Whisper
- • Генерация → LLM / Diffusion
- • Онлайн-обучение
Банковский скоринг — классический use case
Задача: предсказать дефолт по кредиту. Данные: 50 табличных признаков (возраст, доход, история). LightGBM даёт AUC 0.82. SHAP values показывают: почему конкретному клиенту отказали. Интерпретируемость критична для регуляторов.
Загрузка интерактивного виджета...