Я хотел бы предложить сообщить вашему боссу, что когда кто-то хочет ввести новую метрику, он / она должен продемонстрировать, почему она полезна поверх существующих, не другой наоборот (т.е. мы демонстрируем, почему это не так); Кстати, это точно стандартная процедура, когда кто-то действительно предлагает новую предложенную метрику в исследовательской работе, например недавнее предложение Максимальный информационный коэффициент (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
Нижняя строка : Любая метрика , которая игнорирует поэлементные различия в пользу только средних значений, страдает от аналогичных ограничений, а именно, принимает одинаковые значения для любой перестановки предсказаний, характеристика, которая крайне нежелательно для полезного показателя производительности.