Какие функции потерь и метрики лучше использовать при прогнозировании спроса на скоропортящийся товар
Что проверяют
Понимаете ли вы, что ошибка прогноза для скоропортящегося товара несимметрична: лишняя поставка уходит в списание, недостача оборачивается упущенной продажей, и стоят эти ошибки по-разному. Следом обычно спрашивают, как выбрать уровень прогноза и как оценить модель в деньгах.
Как отвечать
Свяжите задачу с задачей газетчика (newsvendor): если единица недостачи стоит Cu, а единица излишка Co, оптимальный заказ равен квантилю спроса уровня Cu / (Cu + Co). Отсюда выбор функций потерь:
- квантильная (pinball) loss: учит модель сразу на нужный квантиль. В LightGBM это
objective='quantile'с параметромalpha, в CatBoostQuantile:alpha=0.7; - Poisson или Tweedie: для штучных продаж с большим числом нулей в разрезе товара и магазина;
- MSE и MAE: как базовые. MSE оценивает среднее, MAE медиану, и ни одна из них не учитывает асимметрию потерь.
Метрики лучше разделить на технические и бизнесовые:
- WAPE: сумма модулей ошибок, делённая на сумму фактических продаж. Не ломается на нулях и честно агрегируется по ассортименту;
- bias: знаковое смещение, показывает, завышает ли модель систематически или занижает;
- pinball loss на отложенной выборке: если прогнозируете квантиль;
- деньги: симуляция заказов по прогнозу на истории, доля списаний и доля дней с нулевым остатком.
Валидация только по времени, бэктестом на нескольких окнах, а не случайным разбиением.
Где спотыкаются
Берут MAPE. На позициях с нулевыми продажами он не определён, на маленьких раздувается до сотен процентов, а завышение штрафует сильнее занижения и тянет модель вниз.
Не учитывают цензурированный спрос. Если товар закончился в обед, продажи за день меньше спроса, и модель учится на заниженных данных. Такие дни нужно помечать, а спрос восстанавливать или исключать.
Называют R² основной метрикой. Для тысяч рядов спроса он мало что говорит о том, сколько товара уйдёт в списание.