Какие функции потерь можно использовать для обучения CatBoost?

Ответ

CatBoost поддерживает широкий спектр функций потерь, которые выбираются в зависимости от типа задачи.

Для задач классификации:

  • Logloss — логистическая функция потерь по умолчанию для бинарной классификации.
  • CrossEntropy — используется для многоклассовой классификации.
  • MultiClass / MultiClassOneVsAll — альтернативные варианты для многоклассовых задач.

Для задач регрессии:

  • RMSE (Root Mean Squared Error) — функция по умолчанию, чувствительна к выбросам.
  • MAE (Mean Absolute Error) — более робастная к выбросам.
  • Quantile — для квантильной регрессии (например, чтобы предсказать 90-й перцентиль).
  • Poisson — для регрессии с данными, распределёнными по закону Пуассона (например, количество событий).

Для задач ранжирования (Learning to Rank):

  • YetiRank и YetiRankPairwise — эффективные функции для ранжирования.
  • PairLogit — для попарного ранжирования.

Пример настройки для регрессии с MAE:

from catboost import CatBoostRegressor

model = CatBoostRegressor(
    loss_function='MAE',          # Используем Mean Absolute Error
    iterations=500,
    depth=6,
    learning_rate=0.03,
    verbose=100
)
model.fit(
    X_train, y_train,
    eval_set=(X_eval, y_eval),
    cat_features=categorical_features_indices  # CatBoost сам обработает категории
)

Выбор функции потерь напрямую влияет на то, какую ошибку модель минимизирует, что критично для достижения бизнес-метрик.

Ответ 18+ 🔞

Слушай, а вот CatBoost — это вообще отдельная песня, просто ёперный театр какой-то. Он там под капотом держит овердохуища разных функций потерь, и тебе надо просто не облажаться с выбором, а то будет тебе хиросима и нигасраки в метриках.

Если ты классифицируешь что-то:

  • Logloss — это типа дефолтная штука, когда у тебя задача «да/нет». Классика, хуй с горы.
  • CrossEntropy — вот это уже когда классов больше двух. Многоклассовость, понимаешь? Не «кошка/собака», а «кошка/собака/хомяк/манда с ушами».
  • MultiClass и прочие вариации — ну, альтернативы, на любителя. Да похуй, в общем-то.

А если регрессия, то тут уже веселее:

  • RMSE — стоит по умолчанию. Но он, сука, как девушка истеричная — чуть выброс, и он орет на весь лес. Чувствительный очень.
  • MAE — вот это уже более спокойный тип. Выбросы? Да похуй. Более робастный, что ли.
  • Quantile — это вообще для хитрожопых. Хочешь предсказать не среднюю цену квартиры, а, типа, «в 90% случаев цена будет не выше вот этой»? Вот тебе Quantile, ебать копать.
  • Poisson — это когда твои данные — это, например, количество заказов в час (целые числа, ноль и больше). Под него заточено.

Ну и для ранжирования (Learning to Rank) своя банда:

  • YetiRank всякие — это их фирменные фишки, они там очень хвалятся эффективностью.
  • PairLogit — для попарного подхода. Сравнивает два объекта: какой из них релевантнее.

Смотри, как это в коде выглядит, если тебе MAE захотелось:

from catboost import CatBoostRegressor

model = CatBoostRegressor(
    loss_function='MAE',          # Вот тут говорим: "Хочу MAE, ёпта!"
    iterations=500,
    depth=6,
    learning_rate=0.03,
    verbose=100
)
model.fit(
    X_train, y_train,
    eval_set=(X_eval, y_eval),
    cat_features=categorical_features_indices  # А категории он сам обработает, красава
)

Главное тут понять — выбранная функция потерь это и есть та самая цель, которую модель будет преследовать, как собака палку. Если бизнесу важна именно средняя ошибка в рублях, а не в квадратах рублей — то MAE твой выбор, чувак. Ошибёшься — и потом сам от себя охуеешь, когда все твои красивые предсказания на деле окажутся пизда рулю. Э, бошка, думай!