深色模式
第九章 预测评价
预测做出来之后,怎么评价它同样有讲究。本章讲 RMSE、MAE、MAPE 的性质差异,基准的选择,DM 检验,以及六种信息泄漏形态。
9.1 常用指标
设预测误差 eₜ = yₜ − ŷₜ,样本量 n。
RMSE = √( (1/n) Σ eₜ² )
MAE = (1/n) Σ |eₜ|
MAPE = (100/n) Σ |eₜ / yₜ|
MASE = MAE / [ (1/(n−m)) Σₜ |yₜ − yₜ₋m| ]
sMAPE = (100/n) Σ 2|eₜ| / (|yₜ| + |ŷₜ|)
其中 MASE 的分母是"朴素预测"(seasonal naive,m 为季节周期;非季节时 m = 1)的平均绝对误差,起缩放作用。
9.2 各指标的性质与适用
| 指标 | 量纲 | 对大误差 | 对异常值 | 可跨序列比较 | 主要问题 |
|---|---|---|---|---|---|
| RMSE | 同原序列 | 惩罚重(平方) | 敏感 | 否 | 被少数大误差主导 |
| MAE | 同原序列 | 线性 | 稳健 | 否 | 不区分误差来源 |
| MAPE | 无量纲(%) | 线性 | 敏感(y 小时爆炸) | 有限 | y 接近 0 时无意义;高估低估不对称 |
| MASE | 无量纲 | 线性 | 稳健 | 是 | 需要基准序列 |
| sMAPE | 无量纲(%) | 线性 | 较稳健 | 有限 | 仍有零点问题;上下界不对称 |
★ RMSE 与 MAE 的关系:恒有 RMSE ≥ MAE,等号仅在所有误差绝对值相等时成立。两者差距越大,说明误差分布越不均匀(存在少数大误差)。因此同时报告 RMSE 与 MAE 是有信息量的——它们的比值反映了误差的集中程度。
9.3 MAPE 的陷阱
MAPE 是最常被误用的指标,有三个必须知道的问题:
(1)y 接近 0 时爆炸。 若真实值为 0.5 而预测为 1.5,误差 1 的 MAPE 是 200%。若真实值为 0,MAPE 无定义。价格、价差、收益率、需求量在低谷期都可能接近 0。
(2)对高估与低估不对称。 预测值大于真实值时,分母是较小的真实值,误差被放大;预测值小于真实值时,分母较大,误差被缩小。因此 MAPE 系统性地惩罚高估多于低估。
(3)不可加总。 不同时期的 MAPE 不能简单平均得到"总 MAPE",因为各期分母不同。
替代方案:MASE(有基准缩放、无零点问题)、sMAPE(部分缓解)、或者直接报告 MAE 并说明量纲。
9.4 为什么必须有基准
任何预测模型都必须与朴素基准比较,否则无法判断"模型是否真的学到了东西"。
| 基准 | 公式 | 适用 |
|---|---|---|
| Naive(随机游走) | ŷ_{T+h} = y_T | 价格、股价等强持续性序列 |
| Seasonal naive | ŷ_{T+h} = y_ | 有明显季节性的序列 |
| Drift(带漂移) | ŷ_{T+h} = y_T + h·(y_T − y₁)/(T−1) | 有长期趋势的序列 |
| Mean | ŷ_{T+h} = ȳ | 无明显趋势与季节的序列 |
★ 复杂模型输给基准是常态,不是异常。 在 M 系列预测竞赛中,绝大多数复杂方法都没能显著超过简单基准的组合。因此"我的模型 RMSE 是 3.5"本身没有意义,必须说"基准是 3.6,改善 2.8%"。
★ 基准的选择会影响结论的方向。 若序列有强趋势,Drift 会比 Naive 强很多;若序列是纯随机游走,Naive 就是理论最优。选一个弱基准会让模型显得很好,这是不诚实的做法。合理的选择是:报告多个基准,并说明哪个最贴近数据的性质。
9.5 Diebold-Mariano 检验
用来判断两个模型的预测精度差异是否统计显著。
设损失函数为 L(如平方误差或绝对误差),定义损失差
dₜ = L(e₁ₜ) − L(e₂ₜ)
原假设 H₀: E(dₜ) = 0(两个模型精度相同)。检验统计量
DM = d̄ / √( 2π f̂_d(0) / T )
其中 f̂_d(0) 是 dₜ 的谱密度在零频处的估计(用于修正序列相关),T 是预测期数。
小样本修正:Harvey-Leybourne-Newbold 修正把统计量乘以 √[(T + 1 − 2h + h(h−1)/T) / T],并改用 t 分布,改善小样本表现。
★ T 很小时的困境:12 个预测点上,DM 检验的功效极低,即使真实差异存在也很难检出。此时有两种诚实的做法:
- 做检验,但明确说明"样本过短,检验功效不足,不拒绝不能作为'无差异'的证据";
- 不做检验,只报告点估计与改善率,并在文字上明确"不主张统计显著性"。
两种都比"用文字反复强调不能宣称显著、却完全不提检验"更规范,因为后者会让评阅人怀疑作者不知道有这个工具。
9.6 信息泄漏的六种形态
这是时间序列建模中最严重的错误类型,因为它会让结果看起来很好但完全无效。
(1)用全样本做标准化/缩放。 计算全样本的均值、标准差、min/max 来标准化,等于把测试期的信息带进了训练。正确做法:只用训练段计算缩放参数。
(2)用测试集选模。 反复在测试集上比较不同模型、不同参数,最终选出的"最优"模型已经过拟合了测试集。正确做法:测试集只用一次。
(3)用未来信息构造特征。 例如用中心移动平均(含未来值)、用全样本的季节因子、用未来才会公布的修订数据。
(4)用全样本估计的参数做样本外预测。 用 2000–2025 全样本估出的参数去"预测"2025 年,等于用了 2025 年的数据估参。正确做法:预测 2025 年 1 月时,只能用截至 2024 年 12 月的数据估参。
(5)重复使用测试集调参。 第一次用完测试集后改了模型,再用同一个测试集评价——此时测试集已不再是"未见过"的数据。
(6)数据修订(vintage 问题)。 用今天下载的修订后数据回测历史,而当时决策者只能看到当时发布的初值。这在宏观数据上尤其严重(GDP、就业数据会被多次修订)。
★ 检验是否泄漏的一个简单办法:把你的整个流程想象成"站在预测原点当天",问自己"这一刻我真的知道这个数字吗?"如果答案是否定的,就有泄漏。
要点
- RMSE 惩罚大误差、MAE 稳健,恒有 RMSE ≥ MAE,两者比值反映误差集中度。
- MAPE 在 y 接近 0 时爆炸,且系统性惩罚高估,需谨慎使用。
- 必须与 Naive、Drift 等基准比较;复杂模型输给基准是常态。
- DM 检验判断精度差异是否显著,小样本功效低,需诚实说明。
- 信息泄漏有六种形态,最隐蔽的是"用全样本做缩放"和"用修订后数据回测"。
- 判断泄漏的黄金问题:站在预测原点当天,这个数字我知道吗?
自测 3 问
Q1:RMSE 和 MAE 有什么区别?两者比值说明什么?
点开看答案
RMSE 对大误差惩罚更重,MAE 更稳健,恒有 RMSE ≥ MAE。
两者比值反映误差的集中程度:比值越大,说明有少数特别大的误差。
Q2:MAPE 有什么陷阱?
点开看答案
① 实际值 y 接近 0 时 MAPE 会爆炸;② 系统性地对高估惩罚更重,不对称。
所以序列接近 0 时不要用 MAPE。
Q3:怎么判断建模流程里有没有信息泄漏?举两个最隐蔽的例子。
点开看答案
黄金问题:站在预测原点当天,这个数字我当时知道吗? 不知道就是泄漏。
最隐蔽的两种:① 用全样本计算均值/标准差/min-max 做缩放;② 用今天下载的修订后数据回测历史(当时只能看到初值)。