Ответ
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 твой выбор, чувак. Ошибёшься — и потом сам от себя охуеешь, когда все твои красивые предсказания на деле окажутся пизда рулю. Э, бошка, думай!