В чем разница между CatBoost, XGBoost и LightGBM?

«В чем разница между CatBoost, XGBoost и LightGBM?» — вопрос из категории Деревья и ансамбли, который задают на 35% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Все три — это библиотеки градиентного бустинга, но с разными архитектурными решениями, влияющими на скорость, точность и удобство.

XGBoost (eXtreme Gradient Boosting):

  • Основа: Алгоритм на основе предварительной сортировки признаков и гистограмм для поиска лучшего разбиения.
  • Ключевые особенности: Встроенная регуляризация (L1/L2) для борьбы с переобучением, возможность распараллеливания, обработка пропущенных значений.
  • Когда использовать: Когда нужен баланс между точностью, скоростью и стабильностью, особенно на данных среднего размера.
  • Пример на Python:
    from xgboost import XGBClassifier
    model = XGBClassifier(n_estimators=100, learning_rate=0.1, max_depth=6)
    model.fit(X_train, y_train)

LightGBM (Light Gradient Boosting Machine):

  • Основа: Использует Gradient-based One-Side Sampling (GOSS) для выборки данных и Exclusive Feature Bundling (EFB) для объединения разреженных признаков. Растёт leaf-wise (по листьям), а не level-wise.
  • Ключевые особенности: Очень высокая скорость обучения и низкое потребление памяти, что критично для больших данных.
  • Когда использовать: Для очень больших датасетов, где скорость и память являются ограничивающими факторами.
  • Пример на Python:
    from lightgbm import LGBMClassifier
    model = LGBMClassifier(n_estimators=100, learning_rate=0.1, num_leaves=31)
    model.fit(X_train, y_train)

CatBoost (Categorical Boosting):

  • Основа: Ordered boosting (упорядоченный бустинг) для борьбы со смещением предсказаний и эффективная встроенная обработка категориальных признаков.
  • Ключевые особенности: Автоматическая обработка категориальных фичей без предварительного кодирования (использует ordered target statistics). Высокая устойчивость к переобучению «из коробки».
  • Когда использовать: Когда в данных много категориальных признаков или нужна максимальная точность без тонкой настройки обработки категорий.
  • Пример на Python:
    from catboost import CatBoostClassifier
    model = CatBoostClassifier(iterations=100, learning_rate=0.1, depth=6, verbose=0)
    model.fit(X_train, y_train, cat_features=categorical_features_indices)

Итог: Выбор зависит от данных и задачи. Для табличных данных с категориями — CatBoost. Для больших данных и скорости — LightGBM. XGBoost остаётся надежным, хорошо документированным и сбалансированным выбором для многих задач.