Теория + Интерактив

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, каждая со своими оптимизациями:

 XGBoostLightGBMCatBoost
Построение дереваLevel-wiseLeaf-wise (быстрее)Symmetric (oblivious)
КатегорииLabel EncodingВстроенная поддержкаOrdered TS (лучший)
РегуляризацияL1 + L2 на листьяL1 + L2 + min_data_in_leafL2 + 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 показывают: почему конкретному клиенту отказали. Интерпретируемость критична для регуляторов.

Загрузка интерактивного виджета...