Что происходит со смещением (bias) и дисперсией (variance) при бустинге?

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

Ответ

Бустинг (например, Gradient Boosting, XGBoost) целенаправленно уменьшает смещение (bias). Каждое последующее слабое обучающееся (часто неглубокое дерево) настраивается на ошибки (остатки) предыдущих моделей. Эта последовательная коррекция позволяет алгоритму строить сложные нелинейные зависимости, приближаясь к истинной функции с высокой точностью, тем самым снижая смещение.

Однако агрессивное исправление ошибок может увеличить дисперсию (variance) и привести к переобучению, особенно при большом количестве итераций (n_estimators). Модель начинает "запоминать" шум в тренировочных данных.

Ключевые гиперпараметры для контроля:

  • learning_rate (темп обучения): Уменьшает вклад каждого отдельного дерева. Меньший LR (например, 0.01 вместо 0.1) требует больше деревьев, но сильно снижает дисперсию и повышает обобщающую способность.
  • max_depth / max_leaf_nodes: Ограничивает сложность базовых деревьев, напрямую борясь с переобучением.
  • subsample: Обучение на случайной подвыборке данных (стохастический бустинг) также снижает дисперсию.

Пример настройки XGBoost для баланса:

from xgboost import XGBRegressor

model = XGBRegressor(
    n_estimators=1000,     # Большое число деревьев
    learning_rate=0.05,    # Низкий темп для плавного обучения и снижения дисперсии
    max_depth=4,           # Ограничение глубины деревьев
    subsample=0.8,         # Стохастический бустинг
    colsample_bytree=0.8,
    random_state=42
)
# Ранняя остановка (early_stopping_rounds) на валидации — критически важна.