模型预测评价指标

张彤 2021年10月25日 1,156次浏览

假设:

预测值 $\hat y={\hat y_1,\hat y_2,...\hat y_n}$
真实值 $y = {y_1,y_2,...y_n}$

MSE

均方误差(Mean Square Error)

$$MSE=\frac{1}\sum_N(\hat y_i-y_i)2$$
MSE.png

  • 范围$[0,+\infty)$,当预测值与真实值完全吻合时等于0,即完美模型;误差越大,该值越大。

RMSE

  • 均方根误差(Root Mean Square Error),其实就是MSE加了个根号,这样数量级上比较直观,比如RMSE=10,可以认为回归效果相比真实值平均相差10。

$$RMSE=\sqrt[2]{\frac{1}\sum_N(\hat y_i-y_i)2}$$
RMSE.png

  • 范围$[0,+\infty)$,当预测值与真实值完全吻合时等于0,即完美模型;误差越大,该值越大。

MAE

  • 平均绝对误差(Mean Absolute Error)
    $$MAE = \frac{1}
    \sum_^N|\hat y_i-y_i|$$
  • 范围$[0,+\infty)$,当预测值与真实值完全吻合时等于0,即完美模型;误差越大,该值越大。
    MAE.png

MAPE

  • 平均绝对百分比误差(Mean Absolute Percentage Error)
    $$MAPE=\frac{100%}
    \sum_^N|\frac{\hat y_i-y_i}|$$
  • 范围[0,+∞),MAPE 为0%表示完美模型,MAPE 大于 100 %则表示劣质模型。
  • 注意点:当真实值有数据等于0时,存在分母0除问题,该公式不可用!
    MAPE.png
    SMAPE
  • 对称平均绝对百分比误差(Symmetric Mean Absolute Percentage Error)

$$SMAPE=\frac{100%}\sum_^N\frac{|\hat y_i-y_i|}{(|\hat y_i| + |y_i|)/2}$$
SMAPE.png

  • 注意点:当真实值有数据等于0,而预测值也等于0时,存在分母0除问题,该公式不可用!

python 示例

import numpy as np
from sklearn import metrics

def mape(y_true,y_pred):
    return np.mean(np.abs((y_pred-y_true)/y_true)) * 100

def smape(y_true,y_pred):
    return 2.0 * np.mean(np.abs(y_pred-y_true)/(np.abs(y_pred)+np.abs(y_true))) * 100

y_true = np.array([1.0,5.0,4.0,3.0,2.0,5.0,-3.0])
y_pred = np.array([1.0,4.5,3.5,5.0,2.0,4.0,-3.0])

# MSE
print(metrics.mean_squared_error(y_true,y_pred))
# RMSE
print(np.sqrt(metrics.mean_squared_error(y_true,y_pred)))
# MAE
print(metrics.mean_absolute_error(y_true,y_pred))
# MAPE
print(mape(y_true,y_pred))
# SMAPE
print(smape(y_true,y_pred))