Bagging vs Boosting на собеседовании Data Scientist
Карьерник — 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-10subsample,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
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.
Связанные темы
- Регуляризация L1 и L2 на собесе DS
- Hyperparameter tuning на собесе DS
- Random Forest для аналитика
- XGBoost vs Random Forest
- Подготовка к собесу Data Scientist
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+ вопросами для собесов.