当我们需要评估一个回归或预测模型的优劣时,可能会用到MAPE这一指标来衡量真实值与预测值之间的误差大小。如果你按照MAPE的计算方法得到的结果是inf,那么说明在真实数据中,存在取值为0的样本。
我们从平均绝对百分比误差(Mean Absolute Percentage Error)的定义出发,来分析原因:
显然,若则
为无穷,所以MAPE为inf.
因此想要得到一个理想的MAPE值,就需要剔除真实值为0的样本数据。首先可以观察一下,在n个数据当中,取值为0的数据是不是只占极少数的比例,如果是,那么我们可以用下面的代码(python)将其剔除,从而得到大致的MAPE估计值。
#计算MAPE前的数据预处理
test_new=[]
predict_new=[]
for k in range(len(testdata)):
if testdata[k]!=0:
test_new.append(testdata[i])
predict_new.append(predictdata[i]) 不能用remove() 方法直接剔除,因为计算mape的输入是两组数据,相当于真实值为0所对应的成对数据我们不再考虑,若仅使用remove方法则无法把相对应的预测值数据剔除,会导致两组数据长度不等,无法计算MAPE指标值。
对数据进行预处理后,就可以计算mape指标了:
def MAPE(y_true, y_pred):
y_true, y_pred = np.array(y_true), np.array(y_pred)
return np.mean(np.fabs((y_true - y_pred) / y_true))
mape = format(MAPE(test_new, predict_new), '.4f')
祝模型评估顺利。