Собесов

Сценарий ML: MAPE vs sMAPE vs MAE для прогноза

ML / Data ScienceМетрики и оценкаСредняяMiddle

Условие

Прогнозируем daily revenue, некоторые дни близки к 0. Какую метрику использовать и почему?

Решение

Подход

Метрика Формула Плюсы Минусы
MAE `(1/n) Σ y − ŷ `
RMSE √(1/n) Σ (y−ŷ)² Штрафует большие ошибки Чувствительна к outliers
MAPE `(100/n) Σ y − ŷ /
sMAPE `(100/n) Σ y−ŷ /((
MASE MAE / MAE_naive Сравнима между сериями Нужен baseline
WAPE y−ŷ / Σ

Когда что

  • MAE/RMSE: внутри одной серии, бизнес меряет в рублях.
  • MAPE: если y >> 0 везде. Если есть точки с y ≈ 0 — забыть, взрывается.
  • WAPE: для агрегированной оценки по портфелю (e.g. forecast всех SKU).
  • MASE: cross-series сравнение, или benchmark vs naive (yesterday=today).

Реализация

import numpy as np
 
def mape(y, yhat):
    return 100 * np.mean(np.abs((y - yhat) / y))
 
def smape(y, yhat):
    return 100 * np.mean(2 * np.abs(y - yhat) / (np.abs(y) + np.abs(yhat) + 1e-9))
 
def wape(y, yhat):
    return 100 * np.sum(np.abs(y - yhat)) / np.sum(np.abs(y))
 
def mase(y, yhat, season=1):
    naive_mae = np.mean(np.abs(y[season:] - y[:-season]))
    return np.mean(np.abs(y - yhat)) / naive_mae

Asymmetry MAPE

MAPE штрафует over-forecast и under-forecast асимметрично:

  • y=100, ŷ=150 → MAPE=50%
  • y=100, ŷ=50 → MAPE=50%
  • y=50, ŷ=100 → MAPE=100% (!)

Это поощряет модели предсказывать ниже истинного значения. Если бизнес чувствителен к under-forecast (out of stock), это плохо.

Для бизнеса

  • Бизнес чаще понимает MAPE (%), но осторожно с y→0.
  • Для нескольких товаров с разным масштабом — WAPE или MASE.
  • При интервальном прогнозе — pinball loss / quantile loss.

Подводные камни

  1. MAPE при y=0 = ∞. Фильтруйте такие точки или используйте sMAPE / WAPE.
  2. RMSE более чувствительна к outliers — на noisy данных модель будет «бороться» с выбросами.
  3. Скрытый zero division: если в test разовый ноль, средняя MAPE улетает. Решения — MAPE на subset y>threshold.
  4. MASE с seasonal naive (season=7 для daily с недельной сезонностью) — обычно более релевантный baseline.
  5. Метрика для optimization (loss) и для evaluation могут отличаться. Часто learn на MSE, evaluate на MAPE — потому что MSE дифференцируема, а MAPE нет.

Эталонный ответ

MAE/RMSE — в исходных единицах. MAPE — относительная, но взрывается при y→0 и асимметрична (поощряет under-forecast). sMAPE ограничена 200%. WAPE стабильна и хороша для agg-portfolio. MASE — для сравнения с naive baseline. При y близких к 0 — WAPE или MAE, не MAPE.

Хочешь увидеть разбор?

Зарегистрируйся бесплатно — откроется развёрнутое решение этой задачи и ещё 4 на выбор.

Зарегистрироваться и увидеть разбор
Уже есть аккаунт? Войти