Какие ключевые гиперпараметры CatBoost вы знаете?

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

Ответ

CatBoost имеет множество гиперпараметров для тонкой настройки. Вот основные, с которыми я чаще всего работаю:

Основные гиперпараметры:

  • iterations (n_estimators в sklearn-стиле): Количество деревьев в ансамбле. По умолчанию 1000.
  • learning_rate: Темп обучения. Меньшие значения (0.01-0.1) обычно требуют больше итераций, но могут улучшить обобщающую способность.
  • depth: Максимальная глубина деревьев. Контролирует сложность модели. По умолчанию 6.
  • l2_leaf_reg: Коэффициент L2-регуляризации. Помогает бороться с переобучением.
  • random_strength: Сила рандомизации при выборе разбиений. Полезен для увеличения разнообразия деревьев.
  • border_count (max_bin): Количество границ для квантования числовых признаков. Большее значение может повысить точность, но замедлит обучение.
  • loss_function: Функция потерь. Для классификации — Logloss, CrossEntropy. Для регрессии — RMSE, MAE, Quantile.
  • cat_features: Список индексов или имен категориальных признаков. Ключевая особенность CatBoost — он эффективно обрабатывает их без предварительного кодирования.
  • early_stopping_rounds: Количество раундов без улучшения метрики на отложенной выборке для остановки обучения.

Пример настройки для задачи бинарной классификации:

from catboost import CatBoostClassifier, Pool

# Создаем пул данных с указанием категориальных признаков
train_pool = Pool(X_train, y_train, cat_features=['category1', 'category2'])
eval_pool = Pool(X_val, y_val, cat_features=['category1', 'category2'])

model = CatBoostClassifier(
    iterations=2000,
    learning_rate=0.05,
    depth=8,
    l2_leaf_reg=4,
    random_strength=0.5,
    border_count=128,
    loss_function='Logloss',
    early_stopping_rounds=50,
    verbose=100
)

model.fit(train_pool, eval_set=eval_pool)