Bagging vs Boosting на собеседовании Data Scientist

Подготовься к собесу по A/B и статистике
300+ вопросов с разбором: дизайн, размер выборки, p-value, ловушки
Тренировать A/B в Telegram

Карьерник — Duolingo для аналитиков: 10 минут в день тренируй SQL, Python, A/B, статистику, метрики и ещё 3 темы собеса. 1500+ вопросов в Telegram-боте. Бесплатно.

Зачем разбирать ансамбли

Ансамбли деревьев — топ-1 в табличных задачах. На собесе DS обязательно: «чем bagging отличается от boosting?», «почему RF не переобучается, а GB может?», «когда XGBoost vs LightGBM vs CatBoost?».

Главная боль без понимания — кандидат пишет «использую XGBoost», на вопрос «почему не RF?» отвечает «потому что XGBoost в Kaggle». Это junior-ответ, на middle ждут понимания механизмов.

Bagging

Bootstrap Aggregating. Параллельно тренируется N моделей на разных bootstrap-выборках (sampling с возвращением). Финальное предсказание — среднее (регрессия) или majority vote (классификация).

Идея: независимые «слабо коррелированные» модели усредняются → variance падает, bias тот же.

Random Forest — bagging над decision trees + случайный subset признаков на каждом разбиении (decorrelation между деревьями).

Параметры:

  • n_estimators — число деревьев (100-500 типично)
  • max_features — сколько признаков на разбиение (sqrt(n) для классификации)
  • max_depth, min_samples_split — против переобучения

Свойства:

  • Не переобучается с ростом N (просто среднее лучших)
  • Параллелится тривиально
  • Out-of-bag (OOB) error — бесплатная оценка без CV
  • Робастен к шуму

Boosting

Идея: последовательно тренируется N моделей, каждая исправляет ошибки предыдущих. Финальное предсказание — взвешенная сумма.

AdaBoost (Freund-Schapire, 1996) — увеличиваем веса неправильно классифицированных примеров для следующей итерации.

Gradient Boosting — каждое следующее дерево обучается на отрицательных градиентах loss (residuals для MSE).

Параметры:

  • n_estimators — число итераций (можно 500-5000)
  • learning_rate — размер шага (меньше = больше деревьев = лучше, но дольше)
  • max_depth — обычно 3-10
  • subsample, colsample_bytree — стохастичность против переобучения
  • early_stopping_rounds — остановка по val

Свойства:

  • Может переобучиться при большом N без регуляризации
  • Чувствителен к параметрам
  • Лучше из коробки на табличных данных
  • Последовательная тренировка (хуже параллелится, чем bagging)

Random Forest vs Gradient Boosting

Random Forest Gradient Boosting
Подход Параллельный bagging Последовательный
Bias Высокий (deep trees могут overfit, но усреднение помогает) Низкий (последовательно уменьшается)
Variance Низкий Высокий без регуляризации
Переобучение с ростом N Не переобучается Переобучается
Скорость train Быстрая Медленнее
Скорость inference Параллельно по деревьям Последовательно (сумма)
Гиперпараметры Менее чувствителен Очень чувствителен
Качество (табличные) Хорошо Обычно лучше

Выбор:

  • Quick baseline → RF
  • Production accuracy → GB
  • Большая размерность, sparse → GB (часто LightGBM)
  • Много categorical → CatBoost
Подготовься к собесу по A/B и статистике
300+ вопросов с разбором: дизайн, размер выборки, p-value, ловушки
Тренировать A/B в Telegram

XGBoost vs LightGBM vs CatBoost

XGBoost (2014, Chen):

  • Регуляризация L1/L2 в loss
  • Встроенный handling missing values
  • Стабильный, проверенный
  • Точнее всего на средних датасетах

LightGBM (Microsoft, 2017):

  • Гистограммный split (bucketize в N бинов)
  • Leaf-wise дерево (а не level-wise) → глубже, точнее, но риск переобучения
  • В 5-10× быстрее XGBoost на больших данных
  • Лучше на high-dimensional sparse

CatBoost (Yandex, 2017):

  • Native categorical features (target encoding с правильным CV)
  • Ordered boosting — снижает target leakage
  • Менее чувствителен к параметрам
  • Лучше «из коробки», чем XGBoost/LightGBM

Когда что:

  • Много categorical → CatBoost
  • Большие данные, нужна скорость → LightGBM
  • Стабильность, средние данные → XGBoost
  • Не уверен → CatBoost (хорошие defaults)

Stacking и blending

Stacking: N base-моделей → их out-of-fold предсказания → входы для meta-модели (часто linear regression или logistic).

Level 0: RF, XGBoost, NN — каждая делает CV-predictions
Level 1: meta-model (ridge regression) обучается на этих predictions

Может выжать +1-2% к бэйслайну, но усложняет pipeline.

Blending: упрощённый stacking — фиксированные веса (например, среднее) base-моделей.

В production stacking редко оправдан — сложность outweighs gain. На Kaggle — стандарт.

Частые ошибки

RF с дефолтным n_estimators=100. Часто мало. 200-500 даёт стабильнее результат.

GB без early stopping. Тренировать 5000 итераций, переобучиться, не заметить. С early_stopping_rounds=50 останавливаемся, когда val перестал улучшаться.

Считать, что boosting всегда лучше RF. На очень шумных данных RF робастнее. На маленьких выборках — тоже.

Пытаться объяснить «важность признаков» через feature_importances_. Эта метрика смещена в пользу high-cardinality features. Использовать permutation importance или SHAP.

XGBoost для categorical через one-hot. На сотнях категорий — взрыв размерности. CatBoost native handling гораздо эффективнее.

Не нормализовать learning_rate с n_estimators. Уменьшил lr → нужно увеличить n_estimators пропорционально, иначе модель недообучена.

Stacking без out-of-fold predictions. Использование train predictions для meta-модели = leakage. Только OOF.

Связанные темы

FAQ

XGBoost быстрее CatBoost?

На больших данных без categorical — XGBoost/LightGBM быстрее. С categorical — CatBoost обходит за счёт нативной обработки.

Чем feature importance в RF отличается от SHAP?

feature_importances_ — статистика по сплитам (как часто признак используется и насколько уменьшает gini). SHAP — game-theoretic, измеряет вклад признака в предсказание для каждой строки. SHAP точнее, дороже.

Можно ли тренировать GB на GPU?

Да: XGBoost (tree_method='gpu_hist'), LightGBM (gpu device), CatBoost. Ускорение 5-20× на больших данных, но требует setup.

Что такое monotonic constraints?

Можно ограничить, чтобы предсказание росло (или падало) с ростом признака. Полезно в бизнес-применениях («вероятность одобрения должна расти с доходом»). Поддерживается в XGBoost/LightGBM/CatBoost.

Boosting для регрессии или классификации?

Оба. Для классификации — log-loss objective, для регрессии — MSE/MAE. Один и тот же фреймворк.

Это официальная информация?

Нет. Статья основана на работах по бустингу (Friedman 1999, Chen 2014), документации XGBoost / LightGBM / CatBoost.


Тренируйте Data Science — откройте тренажёр с 1500+ вопросами для собесов.