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-500
  • max_depth: None или 10-20
  • min_samples_leaf: 1-20
  • max_features: 'sqrt' для classification

XGBoost (main)

  • n_estimators: 100-1000
  • learning_rate: 0.01-0.3
  • max_depth: 3-10 (меньше чем RF)
  • min_child_weight: 1-10
  • subsample: 0.7-1.0
  • colsample_bytree: 0.7-1.0
  • reg_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.

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

FAQ

Какая быстрее на train?

RF (parallel). XGBoost sequentially.

Inference?

XGBoost быстрее (деревья меньше).

Для регрессии — так же?

Да. XGBoostRegressor, RandomForestRegressor.

NNет data — какой?

На малых (< 1000 rows) оба работают, но XGBoost склонен к overfit.


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