БустингиGradient Boosting

Gradient Boosting

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

Интерактивная визуализация

Играйте с параметрами — наблюдайте как меняется модель в реальном времени

Задача
РегрессияКлассиф.

Датасет


Деревьев20
Learning rate η0.10
Глубина дерева3
Subsample1.0
Вычисляю...
Шаг 0 / 0
Точки данных
Предсказание F(x)
Остаток (residual)

Числовой пример

Строки подсвечиваются при изменении — переключайте шаги в элементах управления выше.

Вычисляю...

Идея метода

Как работает Gradient Boosting — без формул

Аналогия

Представьте команду экспертов, где каждый следующий специально изучает ошибки предыдущего. Первый эксперт даёт грубую оценку. Второй смотрит, где первый ошибся, и корректирует. Третий исправляет то, что не доделал второй — и так далее. Итоговый ответ команды гораздо точнее любого одиночки.

В Gradient Boosting роль каждого «эксперта» играет простое решающее дерево. Каждое новое дерево обучается не на исходных данных, а на остатках — разнице между тем, что модель предсказала, и тем, что было на самом деле.

Ключевая идея

Gradient Boosting строит модель итеративно: на каждом шаге добавляется новое слабое дерево, которое аппроксимирует отрицательный градиент функции потерь. Это универсальный принцип — меняя функцию потерь, можно решать регрессию, классификацию и ранжирование одним и тем же алгоритмом.

Bagging vs Boosting

Bagging (Random Forest)

  • Деревья обучаются независимо
  • Параллельное обучение
  • Усредняет предсказания
  • Снижает дисперсию (variance)

Boosting (GBM)

  • Каждое дерево учится на ошибках предыдущего
  • Последовательное обучение
  • Взвешенно суммирует предсказания
  • Снижает смещение (bias)

Bias и Variance

Bias и Variance

Gradient Boosting — это прежде всего инструмент снижения bias (смещения): каждое новое дерево исправляет ошибки предыдущих, и модель всё точнее описывает обучающие данные. Но чем дольше мы бустим — тем сильнее растёт variance (дисперсия): модель начинает запоминать шум, и её предсказания на новых данных ухудшаются.

Ключевой приём: learning_rate ↓ + n_estimators ↑ пропорционально. Медленный бустинг снижает bias так же хорошо, но variance растёт значительно медленнее — модель обобщает лучше.

ОшибкаЧисло итераций (n_estimators) →ОптимумBias²VarianceTotal ErrorОптимум

По мере роста числа итераций bias монотонно падает, variance растёт. Минимум суммарной ошибки — оптимальная точка остановки.

ПараметрBiasVarianceРекомендация
n_estimators ↑↓ снижает↑ повышаетКонтролируй через learning_rate
learning_rate ↑↓ быстрее↑↑ резкоУменьши η, увеличь M — итог лучше
max_depth ↑↓ снижает↑↑ сильноОптимум 3–5 уровней
subsample < 1~ нейтрально↓ снижает0.7–0.9 добавляет стохастику
Золотое правило GBM: learning_rate = 0.01–0.1 + много деревьев (100–1000) даёт лучший результат, чем большой η + мало деревьев. Медленный бустинг — более стабильная и обобщающая модель.

Плюсы и минусы

Плюсы

  • +Высокая точность на табличных данных
  • +Хорошо работает «из коробки»
  • +Устойчив к выбросам (при правильном loss)
  • +Гибкость: любая дифференцируемая функция потерь

Минусы

  • Последовательное обучение — не параллелится
  • Склонен к переобучению при большом числе деревьев
  • Много гиперпараметров для тюнинга
  • Медленнее Random Forest на больших данных

Математика

Как это работает под капотом — с формулами и разбором на конкретных числах

Формула обновления модели

Fm(x)=Fm1(x)+ηhm(x)F_m(x) = F_{m-1}(x) + \eta \cdot h_m(x)
Fm(x)F_m(x)Итоговая модель после m раундов — сумма всех деревьев, которые мы обучили
Fm1(x)F_{m-1}(x)То, что модель предсказывала на прошлом шаге — от этого считаем ошибки
η\etaLearning rate — как сильно доверять новому дереву. Обычно 0.05–0.3: чем меньше, тем осторожнее
hm(x)h_m(x)Новое дерево, обученное специально на ошибках предыдущей модели

На каждом шаге мы добавляем новое дерево h_m, умноженное на learning rate. Дерево обучено предсказывать псевдо-остатки — направление, в котором нужно скорректировать текущую модель.

Разбор вручную: как GBM работает шаг за шагом

Возьмём 5 домов и запустим бустинг от нуля. Видно каждое число.

Датасет — 5 домов

iПлощадь (×10 м²)Цена (×$100k)
1103.0
2154.5
3205.0
4257.0
5308.5

Learning rate η = 0.5, пни глубины 1

F₀ — начальное предсказание (до первого дерева)

Мы начинаем с нуля — никакой модели ещё нет. Прежде чем строить деревья, нам нужно с чего-то стартовать. Самый простой и математически обоснованный вариант — предсказывать для всех домов одно и то же значение: среднее всех цен.

Почему именно среднее? Потому что среди всех возможных константных предсказаний среднее даёт наименьшую среднеквадратичную ошибку. Это можно доказать математически, но интуитивно тоже понятно: если не знаешь ничего конкретного — лучшая ставка это среднее.

F₀ = (3.0 + 4.5 + 5.0 + 7.0 + 8.5) / 5 = 28.0 / 5 = 5.6

Теперь посмотрим в таблицу ниже. Столбец «Остаток y − F₀» — это насколько мы ошиблись для каждого дома. Остаток считается как: реальная цена минус наше предсказание.

Отрицательный остаток означает: мы завысили цену (предсказали 5.6, а реальная цена меньше). Положительный остаток означает: мы занизили цену (предсказали 5.6, а дом стоит дороже). Именно эти остатки станут «учебным материалом» для первого дерева в следующем раунде.

Стартовая ошибка MSE:
MSE = (2.6² + 1.1² + 0.6² + 1.4² + 2.9²) / 5
= (6.76 + 1.21 + 0.36 + 1.96 + 8.41) / 5
= 18.70 / 5 = 3.74
iПлощадьЦена yF₀Остаток y−F₀
1103.05.6-2.60
2154.55.6-1.10
3205.05.6-0.60
4257.05.6+1.40
5308.55.6+2.90
Стартовый MSE:3.74

Как MSE падает с каждым раундом

Старт3.74R11.43R20.76R30.29

Активный раунд подсвечен. Три дерева — минус 92% ошибки.

Псевдокод

gradient_boosting.pseudo
1Вход: данные (x, y), n_estimators, learning_rate, max_depth
3F₀(x) = mean(y) # инициализация константой
5for m = 1 to n_estimators:
6rᵢ = yᵢ − F_{m-1}(xᵢ) для всех i # псевдо-остатки
7hₘ = fit_tree(X, r, max_depth) # дерево на остатках
8F_m(x) = F_{m-1}(x) + η · hₘ(x) # обновление модели
10return F_n # итоговая модель

Итог

Что важно запомнить

Ключевые выводы

  • 1Каждое дерево исправляет ошибки предыдущего, обучаясь на остатках
  • 2Learning rate контролирует размер шага — меньше η → больше деревьев нужно, но модель устойчивее
  • 3Псевдо-остатки — это отрицательный градиент функции потерь, что делает метод универсальным
  • 4Subsample < 1.0 вносит случайность и помогает бороться с переобучением
  • 5Глубина дерева регулирует сложность каждого шага: глубже = мощнее, но риск переобучения выше

Когда использовать

ЗадачаРекомендация
Регрессия (дома, цены)Отличный выбор
Бинарная классификацияОтличный выбор
Многоклассовая классификацияХороший выбор
Ранжирование (поиск, рекомендации)XGBoost / LightGBM лучше
Данные с высокой кардинальностьюCatBoost лучше