总误差均值是否是回归模型的适当性能指标?
Is Total Error Mean an adequate performance metric for regression models?
我正在研究回归模型并评估模型性能,我的老板认为我们应该使用这个指标:
总绝对误差平均值 = 平均值 (y_predicted) / 平均值 (y_true) - 1
其中 mean(y_predicted) 是所有预测值的平均值,mean(y_true) 是所有真实值的平均值。
我以前从未见过机器学习中使用过这个指标,我说服他添加平均绝对百分比误差作为替代方案,但尽管我的模型在 MAPE 方面表现更好,但当我们查看总计时,某些领域表现不佳绝对误差均值。
我的直觉是这个指标在显示真实准确性方面是错误的,但我似乎无法理解为什么。
总绝对误差平均值是有效的性能指标吗?如果不是,那为什么呢?如果是,为什么回归模型的准确性会根据 MAPE 增加,而不是根据总绝对误差平均值增加?
提前致谢!
我建议通知您的老板,当有人希望引入新指标时,him/her 会展示它在现有指标之上的有用之处, not 相反(即我们展示了为什么不是);顺便说一句,这正是某人 确实 在研究论文中提出新提议指标时的标准程序,例如最近 Maximal Information Coefficient (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
底线:任何忽略元素差异而仅支持平均值的指标都受到类似的限制,即采用相同的值对于预测的任何排列,对于有用的性能指标来说,这是一个非常不受欢迎的特征。
我正在研究回归模型并评估模型性能,我的老板认为我们应该使用这个指标:
总绝对误差平均值 = 平均值 (y_predicted) / 平均值 (y_true) - 1
其中 mean(y_predicted) 是所有预测值的平均值,mean(y_true) 是所有真实值的平均值。
我以前从未见过机器学习中使用过这个指标,我说服他添加平均绝对百分比误差作为替代方案,但尽管我的模型在 MAPE 方面表现更好,但当我们查看总计时,某些领域表现不佳绝对误差均值。
我的直觉是这个指标在显示真实准确性方面是错误的,但我似乎无法理解为什么。
总绝对误差平均值是有效的性能指标吗?如果不是,那为什么呢?如果是,为什么回归模型的准确性会根据 MAPE 增加,而不是根据总绝对误差平均值增加?
提前致谢!
我建议通知您的老板,当有人希望引入新指标时,him/her 会展示它在现有指标之上的有用之处, not 相反(即我们展示了为什么不是);顺便说一句,这正是某人 确实 在研究论文中提出新提议指标时的标准程序,例如最近 Maximal Information Coefficient (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
底线:任何忽略元素差异而仅支持平均值的指标都受到类似的限制,即采用相同的值对于预测的任何排列,对于有用的性能指标来说,这是一个非常不受欢迎的特征。