Skip to content

第九章 预测评价 ​

预测做出来之后,怎么评价它同样有讲究。本章讲 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 检验的功效极低,即使真实差异存在也很难检出。此时有两种诚实的做法:

  1. 做检验,但明确说明"样本过短,检验功效不足,不拒绝不能作为'无差异'的证据";
  2. 不做检验,只报告点估计与改善率,并在文字上明确"不主张统计显著性"。

两种都比"用文字反复强调不能宣称显著、却完全不提检验"更规范,因为后者会让评阅人怀疑作者不知道有这个工具。

9.6 信息泄漏的六种形态 ​

这是时间序列建模中最严重的错误类型,因为它会让结果看起来很好但完全无效。

(1)用全样本做标准化/缩放。 计算全样本的均值、标准差、min/max 来标准化,等于把测试期的信息带进了训练。正确做法:只用训练段计算缩放参数。

(2)用测试集选模。 反复在测试集上比较不同模型、不同参数,最终选出的"最优"模型已经过拟合了测试集。正确做法:测试集只用一次。

(3)用未来信息构造特征。 例如用中心移动平均(含未来值)、用全样本的季节因子、用未来才会公布的修订数据。

(4)用全样本估计的参数做样本外预测。 用 2000–2025 全样本估出的参数去"预测"2025 年,等于用了 2025 年的数据估参。正确做法:预测 2025 年 1 月时,只能用截至 2024 年 12 月的数据估参。

(5)重复使用测试集调参。 第一次用完测试集后改了模型,再用同一个测试集评价——此时测试集已不再是"未见过"的数据。

(6)数据修订(vintage 问题)。 用今天下载的修订后数据回测历史,而当时决策者只能看到当时发布的初值。这在宏观数据上尤其严重(GDP、就业数据会被多次修订)。

★ 检验是否泄漏的一个简单办法:把你的整个流程想象成"站在预测原点当天",问自己"这一刻我真的知道这个数字吗?"如果答案是否定的,就有泄漏。

要点 ​

  1. RMSE 惩罚大误差、MAE 稳健,恒有 RMSE ≥ MAE,两者比值反映误差集中度。
  2. MAPE 在 y 接近 0 时爆炸,且系统性惩罚高估,需谨慎使用。
  3. 必须与 Naive、Drift 等基准比较;复杂模型输给基准是常态。
  4. DM 检验判断精度差异是否显著,小样本功效低,需诚实说明。
  5. 信息泄漏有六种形态,最隐蔽的是"用全样本做缩放"和"用修订后数据回测"。
  6. 判断泄漏的黄金问题:站在预测原点当天,这个数字我知道吗?

自测 3 问 ​

Q1:RMSE 和 MAE 有什么区别?两者比值说明什么?

点开看答案

RMSE 对大误差惩罚更重,MAE 更稳健,恒有 RMSE ≥ MAE。

两者比值反映误差的集中程度:比值越大,说明有少数特别大的误差。

Q2:MAPE 有什么陷阱?

点开看答案

① 实际值 y 接近 0 时 MAPE 会爆炸;② 系统性地对高估惩罚更重,不对称。

所以序列接近 0 时不要用 MAPE。

Q3:怎么判断建模流程里有没有信息泄漏?举两个最隐蔽的例子。

点开看答案

黄金问题:站在预测原点当天,这个数字我当时知道吗? 不知道就是泄漏。

最隐蔽的两种:① 用全样本计算均值/标准差/min-max 做缩放;② 用今天下载的修订后数据回测历史(当时只能看到初值)。