首页 > 解决方案 > 总误差平均值是回归模型的充分性能指标吗?

问题描述

我正在研究回归模型并评估模型性能,我的老板认为我们应该使用这个指标:

总绝对误差平均值 = mean(y_predicted) / mean(y_true) - 1

其中 mean(y_predicted) 是所有预测的平均值,mean(y_true) 是所有真实值的平均值。

我以前从未见过在机器学习中使用过这个指标,我说服他添加平均绝对百分比误差作为替代方案,尽管我的模型在 MAPE 方面表现更好,但当我们查看总绝对误差平均值时,某些领域的表现不佳。

我的直觉是这个指标在显示真正的准确性方面是错误的,但我似乎无法理解为什么。

总绝对误差平均值是有效的性能指标吗?如果不是,那为什么?如果是,为什么回归模型的精度会在 MAPE 方面增加,而不是在总绝对误差平均值方面?

先感谢您!

标签: machine-learningstatisticsregressionmetrics

解决方案


我建议您通知您的老板,当一个人希望引入一个新指标时,他/她应该证明为什么它在现有指标之上有用,而不是相反(即我们证明它为什么是不是); 顺便说一句,当有人在研究论文中真正提出新的提议指标时,这正是标准程序,比如最近提出的最大信息系数 (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

底线任何忽略元素差异而仅支持平均值的度量都会受到类似的限制,即对预测的任何排列采用相同的值,这是非常不适合有用的性能度量的特征。


推荐阅读