Продолжаем серию постов про метрики регрессии

Предыдущие посты - часть 1 про MAE и RMSE, часть 2 про MALE и RMSLE



Часть 3. Первая относительная метрика: MAPE



Абсолютные метрики (RMSE, RMSLE, ...) хороши своей простотой, но имеют ряд недостатков:

- Сложно интерепретировать и презентовать бизнесу ("у модели MAE = 307"; - "И что я должен с этим делать? Хороша ли модель-то?")

- Проблемы при обучении на разнородных обьектах (у одного товара 1к продаж в неделю, у другого - 5. Если усреднить RMSE этих товаров, то получится нечто странное)



Поэтому придумали относительные метрики!

Note:

- Macro average = считаем метрику по каждому обьекту, затем усредняем. Дальше речь пойдет именно о таком усреднении

- Micro average = считаем числители и знаменатели по каждому обьекту. Складываем все числители, все знаменатели. Делим один суммарный числитель на суммарный знаменатель. Это полный аналог MAE: macro MAPE = MAE / mean(y_true)



MAPE (Mean Absolute Percentage Error) = MEAN(|y_true - y_pred| / y_true)



Это простая и интуитивно понятная метрика, но есть нюансы:

- Может быть > 1

- Не симметрична: по-разному штрафует недопрогноз или перепрогноз

- Плохо работает при маленьких y_true. На практике можно делать так: MEAN(|y_true - y_pred| / (y_true + offset)). Это частично решает проблему



При обучении некоторых ml-моделей можно указать MAPE как лосс. Но у него неприятная производная. Поэтому на практике MAPE аппроксимируют через MALE, потому что:

1. ln(1 + f(x)) ~ f(x) при f(x) --> 0

2. ln(1 + |y_true - y_pred| / y_pred) --> |y_true - y_pred| / y_pred = MAPE при -//-

3. ln(y_pred + |y_true - y_pred|) - ln(y_true) --> MAPE при --//--

4. Сильное предположение, но на практике выполняется: |y_true - y_pred| --> 0 при |y_true - y_pred| / y_pred --> 0

5. ln(y_pred + |y_true - y_pred|) - ln(y_true) --> ln(y_pred) - ln(y_true) --> MAPE при -//-

6. Не забудьте взять модуль у первого выражения и получите, что MALE --> MAPE при небольших разницах в |y_true - y_pred|



Хороший рецепт: Loss = MALE, Метрика на валидации/тесте = MAPE



#metrics