Продолжаем серию постов про метрики регрессии
Предыдущие посты - часть 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
Предыдущие посты - часть 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