You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何添加MAPE指标后训练输出的平均绝对百分比误差异常偏高?

为什么你的MAPE指标数值异常巨大?

这种十几万甚至上百万的MAPE值绝对不正常,大概率是你忽略了数据预处理的关键步骤,或是你的数据特性和MAPE指标本身的局限性冲突了。下面给你拆解问题和解决办法:

核心原因:MAPE对极小值极其敏感

先明确MAPE的计算公式:

MAPE = 100 * 平均(|(实际值 - 预测值)/实际值|)

如果你的目标变量(实际值y_true)中存在大量接近0的数值,分母会变得极小,直接导致整个计算结果爆炸式增长——这就是你看到离谱数值的根本原因。

解决办法:从数据和指标两方面入手

1. 先检查并预处理你的数据

  • 第一步:查看目标变量的取值分布,确认是否存在大量接近0的样本。如果是,必须做归一化/标准化:
    • 用MinMaxScaler把数据缩放到[0,1]区间,或者用StandardScaler转换成均值为0、方差为1的分布。这样能避免出现极小的分母值,MAPE会立刻回归合理范围。
    • 注意:训练集和测试集要共用同一个缩放器——用训练集拟合的缩放器去转换测试集,不要分开拟合。

2. 替换内置MAPE为自定义抗干扰版本

Keras内置的mean_absolute_percentage_error没有处理分母为0的情况,你可以自定义一个带epsilon的MAPE,避免除以0的极端情况:

import tensorflow.keras.backend as K

def custom_mape(y_true, y_pred):
    # 用K.maximum确保分母不会小于1e-7,彻底避免除以0
    return 100 * K.mean(K.abs((y_true - y_pred) / K.maximum(y_true, 1e-7)), axis=-1)

然后在编译模型时使用这个自定义指标:

model.compile(optimizer='adam', loss='mse', metrics=[custom_mape])

3. 考虑换用更合适的指标

如果你的目标变量本身就有很多0或者极小值,MAPE其实不是最佳选择。可以试试这些替代指标:

  • MAE(平均绝对误差):对异常值的敏感度比MAPE低,不需要除法运算,结果更稳定。
  • SMAPE(对称平均绝对百分比误差):公式是100 * 平均(|y_true - y_pred| / ((|y_true| + |y_pred|)/2)),既避免了分母为0的问题,又保留了百分比的可解释性。

总结

先去检查你的目标变量分布,优先做数据归一化/标准化,这是最快速解决问题的办法。如果还是有问题,再考虑自定义MAPE或者换用其他指标。

内容的提问来源于stack exchange,提问作者Srivatsa Sharma G

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:12:06