Я работаю над регрессионной моделью, и мой босс считает, что для оценки производительности модели мы должны использовать эту метрику:

Среднее значение общей абсолютной ошибки = среднее (y_predicted) / mean (y_true) - 1

Где среднее значение (y_predicted) - это среднее значение всех прогнозов, а среднее значение (y_true) - это среднее значение всех истинных значений.

Я никогда раньше не видел, чтобы этот показатель использовался в машинном обучении, и я убедил его добавить в качестве альтернативы среднюю абсолютную процентную ошибку, но, несмотря на то, что моя модель работает лучше в отношении MAPE, некоторые области работают хуже, если мы смотрим на среднее значение общей абсолютной ошибки.

Мне кажется, что эта метрика неверна для отображения реальной точности, но я не могу понять почему.

Является ли значение общей абсолютной ошибки допустимым показателем производительности? Если нет, то почему? Если это так, то почему точность регрессионной модели может увеличиваться с точки зрения MAPE, но не с точки зрения среднего значения общей абсолютной ошибки?

Заранее спасибо!

2
Jurgis Samaitis 30 Мар 2019 в 17:37

1 ответ

Лучший ответ

Я хотел бы сообщить вашему начальнику, что, когда кто-то хочет ввести новую метрику, он / она должен продемонстрировать, почему она полезна в дополнение к существующим, не наоборот. (т.е. мы демонстрируем, почему это не так); Кстати, это как раз стандартная процедура, когда кто-то действительно придумывает новую предложенную метрику в исследовательской статье, как недавнее предложение Максимальный информационный коэффициент (MIC).

Тем не менее, нетрудно продемонстрировать на практике, что эта предложенная метрика является плохой с некоторыми фиктивными данными:

import numpy as np
from sklearn.metrics import mean_squared_error

# your proposed metric:
def taem(y_true, y_pred):
    return np.mean(y_true)/np.mean(y_pred)-1

# dummy true data:
y_true = np.array([0,1,2,3,4,5,6])

Теперь предположим, что у нас есть действительно потрясающая модель, которая отлично предсказывает, т.е. y_pred1 = y_true; в этом случае и MSE, и предлагаемый вами TAEM действительно будут равны 0:

y_pred1 = y_true # PERFECT predictions
mean_squared_error(y_true, y_pred1)
# 0.0
taem(y_true, y_pred1)
# 0.0

Все идет нормально. Но давайте теперь рассмотрим результат действительно плохой модели, которая предсказывает высокие значения, тогда как они должны были предсказывать низкие, и наоборот; Другими словами, рассмотрите другой набор прогнозов:

y_pred2 = np.array([6,5,4,3,2,1,0])

Что на самом деле y_pred1 в обратном порядке. Теперь легко увидеть, что здесь у нас также будет отличная оценка TAEM:

taem(y_true, y_pred2)
# 0.0

Хотя, конечно, MSE предупредила бы нас, что мы действительно очень далеки от идеальных прогнозов:

mean_squared_error(y_true, y_pred2)
# 16.0

Итог : Любая метрика, которая игнорирует поэлементные различия в пользу только средних значений, страдает схожими ограничениями, а именно, принимая одинаковые значения для любой перестановки прогнозов, что является характеристикой крайне нежелательно для полезной метрики производительности.

2
desertnaut 1 Апр 2019 в 11:09