Как устроен бустинг (boosting)?

«Как устроен бустинг (boosting)?» — вопрос из категории Деревья и ансамбли, который задают на 26% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Бустинг — это ансамблевый метод, где модели (обычно "слабые", например, неглубокие деревья) обучаются последовательно, а не параллельно, как в бэггинге. Каждая следующая модель фокусируется на ошибках, допущенных предыдущими.

Ключевой принцип, который я реализовывал при работе с XGBoost:

  1. Обучается первая базовая модель (например, дерево глубины 1).
  2. Для каждого объекта вычисляется остаток (residual) — разница между истинным значением и предсказанием.
  3. Следующая модель обучается предсказывать эти остатки.
  4. Предсказания всех моделей суммируются с учетом скорости обучения (learning rate) для получения итогового предсказания.

Практический пример с XGBoost для регрессии:

import xgboost as xgb
from sklearn.datasets import make_regression

# Генерируем данные
X, y = make_regression(n_samples=1000, n_features=10, noise=0.1)

# Определяем параметры бустинга
dtrain = xgb.DMatrix(X, label=y)
params = {
    'objective': 'reg:squarederror',
    'max_depth': 3,           # Слабая модель (неглубокое дерево)
    'eta': 0.1,               # Learning rate: маленький шаг для плавного обучения
    'subsample': 0.8,         # Доля данных для обучения каждого дерева
    'colsample_bytree': 0.8
}

# Обучаем модель. `num_boost_round` — количество последовательных деревьев (моделей)
model = xgb.train(params, dtrain, num_boost_round=100)

Преимущества, которые я наблюдал: Бустинг часто дает более высокую точность, чем бэггинг или одна модель, за счет последовательной коррекции ошибок. Однако он более склонен к переобучению, поэтому критически важны тщательный подбор learning rate и использование валидационных выборок для ранней остановки.