XGBoost vs Random Forest
Карьерник — квиз-тренажёр в Telegram с 1500+ вопросами для собесов аналитика. SQL, Python, A/B, метрики. Бесплатно.
Зачем это различать
На собесе middle+ DS / ML-аналитик обязательно спросят: «в чём разница XGBoost и Random Forest». Правильный ответ показывает, понимаете ли вы bagging vs boosting — fundamental concepts ensemble learning.
На практике оба — topовые модели для tabular data. Если данные табличные (SQL, CSV, pandas DataFrame) — в 90% случаев оптимальный выбор между ними. Знать, когда какой выбрать, = знать ML на middle уровне.
В статье:
- Короткий ответ
- Bagging vs boosting — main difference
- Производительность
- Устойчивость к overfitting
- Когда что выбирать
- Hyperparameter tuning
Короткий ответ
- Random Forest — ensemble независимых деревьев (bagging). Параллельно обучаются, голосуют.
- XGBoost — ensemble последовательных деревьев (boosting). Каждое дерево исправляет ошибки предыдущих.
XGBoost обычно точнее, но сложнее настроить и склоннее к overfitting без регуляризации.
Bagging vs Boosting
Bagging (Random Forest)
- Каждое дерево обучается на случайной подвыборке
- Независимо друг от друга (параллельно)
- Финальное предсказание — голосование / среднее
Boosting (XGBoost, LightGBM, CatBoost)
- Деревья обучаются последовательно
- Каждое следующее фокусируется на ошибках предыдущих
- Финальное предсказание — взвешенная сумма
Сравнение
| Random Forest | XGBoost | |
|---|---|---|
| Parallel training | да | нет (sequential) |
| Overfitting | устойчив | требует регуляризации |
| Скорость train | быстрее | медленнее |
| Скорость inference | медленнее | быстрее |
| Accuracy | хорошая | обычно лучше |
| Hyperparameter tuning | меньше важно | критично |
| Interpretability | feature importance | SHAP values |
Когда Random Forest
- Quick baseline без тюнинга
- Strongly imbalanced data (меньше overfit)
- Когда нет времени на hyperparameter search
- Robust baseline для сравнения
Когда XGBoost
- Нужна максимальная точность
- Kaggle competitions (там традиционно выигрывает)
- Есть time / compute для tuning
- Large datasets
Hyperparameters
Random Forest (main)
n_estimators: 100-500max_depth: None или 10-20min_samples_leaf: 1-20max_features: 'sqrt' для classification
XGBoost (main)
n_estimators: 100-1000learning_rate: 0.01-0.3max_depth: 3-10 (меньше чем RF)min_child_weight: 1-10subsample: 0.7-1.0colsample_bytree: 0.7-1.0reg_alpha/reg_lambda: регуляризация
Example в Python
Random Forest
from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier(
n_estimators=200,
max_depth=10,
min_samples_leaf=5,
n_jobs=-1
)
model.fit(X_train, y_train)XGBoost
import xgboost as xgb
model = xgb.XGBClassifier(
n_estimators=500,
learning_rate=0.05,
max_depth=6,
subsample=0.8,
colsample_bytree=0.8,
early_stopping_rounds=20
)
model.fit(X_train, y_train, eval_set=[(X_val, y_val)])LightGBM и CatBoost
Альтернативы XGBoost:
- LightGBM (Microsoft) — быстрее XGBoost, меньше памяти
- CatBoost (Yandex) — лучше обрабатывает категориальные features
В 2026 году LightGBM и CatBoost часто предпочтительнее XGBoost.
Overfitting: как бороться
Random Forest
- Увеличить
min_samples_leaf - Уменьшить
max_depth - Добавить
max_featuresограничение
XGBoost
early_stopping_rounds- Регуляризация:
reg_alpha,reg_lambda subsample< 1- Уменьшить
max_depth,learning_rate
На собесе
«RF или XGBoost?» Для quick baseline — RF. Для top accuracy — XGBoost с тюнингом.
«Как бороться с overfitting в XGBoost?» Early stopping, регуляризация, subsample.
«LightGBM vs XGBoost?» Обычно LightGBM быстрее. Accuracy сравнима.
«Почему XGBoost точнее?» Boosting корректирует ошибки → лучше fit на сложных паттернах.
Feature importance
Оба дают feature importance:
# Random Forest
importances = model.feature_importances_
# XGBoost
importances = model.feature_importances_Для более точной interpretation — SHAP values:
import shap
explainer = shap.Explainer(model)
shap_values = explainer(X_test)Частые ошибки
1. XGBoost без CV для tuning
Важно: hyperparameters сильно влияют. Без CV — переобучитесь.
2. RF с default параметрами на больших данных
Default max_depth = None → overfit. Ограничьте.
3. Использовать один raw accuracy
На imbalanced данных — F1 / AUC важнее.
4. Не установить random_state
Результаты нестабильны. Всегда random_state=42.
Связанные темы
- Random Forest простыми словами
- Gradient Boosting / XGBoost
- Overfitting простыми словами
- Cross-validation простыми словами
FAQ
Какая быстрее на train?
RF (parallel). XGBoost sequentially.
Inference?
XGBoost быстрее (деревья меньше).
Для регрессии — так же?
Да. XGBoostRegressor, RandomForestRegressor.
NNет data — какой?
На малых (< 1000 rows) оба работают, но XGBoost склонен к overfit.
Тренируйте ML — откройте тренажёр с 1500+ вопросами для собесов.