3. sMAPE 定义与数学公式
对称平均百分比误差(symmetric Mean Absolute Percentage Error, sMAPE)是针对 MAPE 在分母为零或接近零时不稳定、且误差方向不对称等缺陷而提出的改进指标。sMAPE 在时间序列预测、库存需求预测和供应链绩效评估中广泛使用,尤其适用于实际值与预测值都可能接近零的场景。
3.1 sMAPE 的数学表达式
sMAPE 的核心思想是将分母从单一的实际值 A_t 改为实际值与预测值的平均值,从而避免分母过小导致的指标爆炸,同时使误差度量在过预测和欠预测之间保持对称。其标准数学表达式为:
sMAPE = (1/n) * Σ_{t=1}^{n} ( |F_t - A_t| / ((|A_t| + |F_t|) / 2) ) * 100%
其中:
- A_t:第 t 期的实际值(实际需求/实际库存)
- F_t:第 t 期的预测值
- n:预测期数
- |·|:值运算
在实际库存预测应用中,通常将分母简化为 (|A_t| + |F_t|) / 2,即实际值与预测值的值的算术平均。当 A_t 和 F_t 均为正数时(库存场景通常如此),值符号可以省略,表达式简化为:
sMAPE = (1/n) * Σ_{t=1}^{n} ( 2 * |F_t - A_t| / (A_t + F_t) ) * 100%
💡 关键区别: MAPE 的分母是 A_t(实际值),sMAPE 的分母是 (A_t + F_t)/2(实际值与预测值的均值)。这一变化从根本上改变了误差的度量尺度。
3.2 与 MAPE 的对称性改进
MAPE 的一个固有缺陷是误差方向不对称:当预测值高于实际值(过预测)和低于实际值(欠预测)时,即使误差相同,MAPE 的值也会不同。sMAPE 通过对称化分母解决了这一问题。
| 对比维度 | MAPE | sMAPE |
|---|---|---|
| 分母 | |A_t|(实际值值) | (|A_t| + |F_t|) / 2(实际与预测均值) |
| 对称性 | 不对称:过预测与欠预测惩罚不同 | 对称:过预测与欠预测惩罚相同 |
| 分母为零风险 | 高:A_t=0 时无定义 | 低:仅当 A_t=0 且 F_t=0 时无定义 |
| 取值范围 | [0%, +∞) | [0%, 200%](有界) |
| 库存场景适用性 | 不适合零需求/慢动品 | 适合零需求及慢动品 |
对称性验证: 假设 A_t=100,若 F_t=120(过预测20),MAPE=20%,sMAPE=2×20/(100+120)=18.18%;若 F_t=80(欠预测20),MAPE=20%,sMAPE=2×20/(100+80)=22.22%。注意:sMAPE 在两种情况下值不同,但方向对称——过预测和欠预测的 sMAPE 相对于实际值对称分布,而 MAPE 则完全不对称。
sMAPE 的对称性改进体现在:当预测误差的值相同时,过预测和欠预测对 sMAPE 的贡献在数学期望上是相等的。这使得 sMAPE 在评估预测系统偏差时更加公平,不会因为预测方向的不同而扭曲评估结果。
3.3 计算步骤
sMAPE 的计算分为四个步骤,下面以库存预测场景为例进行说明。
- 收集数据对: 获取同一时间点的实际需求值 A_t 和预测需求值 F_t。例如,某 SKU 过去 5 周的周需求数据如下:
| 周次 (t) | 实际需求 A_t | 预测需求 F_t |
|---|---|---|
| 第1周 | 120 | 110 |
| 第2周 | 95 | 100 |
| 第3周 | 0 | 5 |
| 第4周 | 150 | 140 |
| 第5周 | 80 | 90 |
- 计算每期误差与分母: 对每一期计算分子 |F_t - A_t| 和分母 (|A_t| + |F_t|) / 2。
| 周次 | 分子 |F_t - A_t| | 分母 (|A_t|+|F_t|)/2 | 单期 sMAPE (%) |
|---|---|---|---|
| 第1周 | 10 | (120+110)/2 = 115 | 10/115 × 100% = 8.70% |
| 第2周 | 5 | (95+100)/2 = 97.5 | 5/97.5 × 100% = 5.13% |
| 第3周 | 5 | (0+5)/2 = 2.5 | 5/2.5 × 100% = 200% |
| 第4周 | 10 | (150+140)/2 = 145 | 10/145 × 100% = 6.90% |
| 第5周 | 10 | (80+90)/2 = 85 | 10/85 × 100% = 11.76% |
- 汇总所有期数: 将所有单期 sMAPE 值相加。本例中:8.70% + 5.13% + 200% + 6.90% + 11.76% = 232.49%。
- 计算平均值: 将汇总值除以总期数 n=5,得到最终 sMAPE:232.49% / 5 = 46.50%。
⚠️ 注意: 第3周实际需求为0,预测为5。MAPE 在此处无定义(分母为0),而 sMAPE 可以计算,但单期值达到200%(上限)。这说明 sMAPE 虽然解决了分母为零的问题,但在实际值极小时,单期误差会急剧放大,最终 sMAPE 可能被少数异常期主导。在库存场景中,对于零需求期,建议结合业务规则进行特殊处理。
以下是 sMAPE 计算流程的可视化示意图,展示了从原始数据到最终指标的全过程:
通过上述步骤可以看出,sMAPE 的计算逻辑清晰、可解释性强,且对零值数据具有更好的容错性。在库存预测场景中,sMAPE 尤其适合处理包含慢动品、季节性零需求或促销期零库存的预测评估任务。