本节摘要:当多个 (p,q) 都过诊断,用信息准则在样本内平衡拟合与复杂度。AIC = -2 ln(L) + 2k,BIC = -2 ln(L) + ln(n) k。k 含 φ、θ 和常数等被估参数。值越小越好。BIC 对复杂度惩罚更重,大样本更爱简单模型。准则不能替代滚动预测误差。
阅读完本节,你应当能够:
多加一个 AR 项,样本内总还能再咬掉一点残差,对数似然几乎只会升(或持平)。若不惩罚,赢家永远是最胖的模型,持出样本会还债。信息准则把「解释力」和「参数个数」写在同一张账单上。原文给出的形式(k 的计数含 p+q 再加常数一类项,实现时以软件的 k 为准):
AIC = -2 ln(L) + 2k
BIC = -2 ln(L) + ln(n) k
n 是用于估计的有效样本量(差分会吃掉开头几点,n 不是原始长度)。n 大于 e²≈7.4 之后,ln(n)>2,BIC 对每个额外参数罚得比 AIC 狠。月度十年 n≈120,ln(120)≈4.8,多一个参数在 BIC 里相当于 AIC 的两倍多惩罚。这就是「大样本 BIC 更朴素」的定量来源。
示意(教学数字,不是某次真实拟合):
| 候选 | k | ln(L) 示意 | AIC 示意 | BIC 示意 n=100 |
|---|---|---|---|---|
| ARIMA(1,1,0) | 2 | -142.0 | 288.0 | 293.2 |
| ARIMA(2,1,0) | 3 | -140.5 | 287.0 | 294.8 |
| ARIMA(1,1,1) | 3 | -139.8 | 285.6 | 293.4 |
| ARIMA(3,1,2) | 6 | -138.0 | 288.0 | 303.6 |
AIC 会指着 (1,1,1),BIC 觉得 (1,1,0) 和 (1,1,1) 接近、胖模型明显吃亏。若三者残差都白,我会把 (1,1,0) 与 (1,1,1) 都送去滚动预测,而不是只宣布 AIC 冠军。
| 纪律 | 原因 |
|---|---|
| 同一 d、同一变换 | 似然定义在不同序列上,-2ln(L) 不可比 |
| 同一观测集合 | 多删 8 个异常点会让似然变,不是模型变好 |
| 先诊断再比准则 | 残差不白的模型即使 AIC 最小也不进决赛 |
| k 的定义一致 | 有的实现把方差也计入 k,跨软件勿混排 |
| 季节模型同样规则 | SARIMA 的 P、Q 也在 k 里 |
跨 d 比较是最常见的作弊。d=0 的似然在水平序列上,d=1 在差分序列上,AIC 小可能只是因为序列尺度变了。要比较不同 d,应把预测反变换回原尺度,用持出误差比,而不是比 AIC。
自动定阶函数内部就是在网格上最小化 AIC 或 AICc(小样本修正)。它很勤快,也很盲:网格含进季节滞后当普通 q、含进过差分,它仍会吐一个最小 AIC。所以自动结果必须再过残差 ACF 和 Q 检验。我把自动搜当「短名单扩容器」,不把它当完工章。
⚠️ 常见坑:在含季节的月度序列上用无季节网格搜到 ARIMA(0,1,12) 之类,AIC 漂亮,其实是在用普通 MA 硬扛年季节。准则不会提醒你 m=12。
小样本、真正的数据生成过程可能较复杂时,AIC 更不容易欠拟合,适合当探索。要上线给仓库排班、模型越简单越好交代时,我偏 BIC。两者选的模型若差很远(一个 (1,1,0) 一个 (3,2,2)),说明短名单或 d 不稳定,应回图,而不是平均两个预报。
AICc 在 n 只比 k 大一点时把惩罚再加重一点,月度短序列值得看。它仍是样本内准则。最终对外的数字,用滚动原点的 RMSE 或 MAE。准则负责「别胖到荒唐」,滚动负责「别在未来段丢脸」。
💡 关键直觉:AIC/BIC 是同一张试卷上的打分,滚动误差是下一次月考。用月考成绩录用,用平时分淘汰明显抄袭的胖子。
报告时同时给 AIC、BIC、Q 检验 p 值、持出 RMSE。四列比单列「最佳模型 ARIMA(2,1,1)」难被质疑。若业务问为什么不选 AIC 最小的那个,答案应是:它的残差在滞后 7 不过,或滚动 RMSE 更差。没有这句,准则就是玄学。
概念比较:
results = [] for p, q in [(1,0), (2,0), (1,1)]: fit = ARIMA(y, order=(p, 1, q)).fit() results.append((p, q, fit.aic, fit.bic)) # 只保留 Ljung-Box 通过的行,再按 bic 排序
原文把 AIC、BIC 放在「多个组合都看起来合理」之后,这个顺序必须遵守:先图、先诊断,再准则。把准则提前到识别阶段当唯一依据,等于放弃 ACF 口诀,也放弃对季节峰的视觉警觉。
小样本修正 AICc ≈ AIC + 2k(k+1)/(n-k-1),在 n 只比 k 大一点时把胖子罚得更狠。月度四五年、还要季节阶时,AICc 值得看。它仍完全是样本内。n-k-1 接近 0 时公式会炸,说明你参数已经对样本太贪,应减阶而不是改用 AIC。
自动定阶的网格若允许 p、q 到 5,再允许季节 P、Q 到 2,组合数爆炸,最小 AIC 常常是一个没有图支持的奇怪元组,持出很差。约束网格:非季节 0~2,季节 0~1,d、D 由检验先锁死而不是让准则去选差分。跨 d 的 AIC 不可比,让函数同时搜 d 等于允许它作弊。若软件默认搜 d,你要事后用图和 ADF 复核,而不是把搜到的 d 当真理。
同一模型在含常数与不含常数时 AIC 也会变。常数是否有意义应先看差分后均值和领域知识,再让准则在「有/无常数」两个合法设定里选,而不是把常数当又一个自由搜的整数阶。潮位有界却估出显著漂移,即使 AIC 更好,也要用物理否决。
和持出的分工写成口令:准则淘汰明显的胖子和残差不白者;持出在剩下的两三个里拍板;两者冲突时(AIC 爱 A,滚动爱 B)报两个数,让值班成本参与决策。不要平均两个模型的预报来「调和准则与持出」——那会让复盘无法指向单一工序。若必须组合,那是另一类方法,本课不展开。
报告四列(AIC、BIC、Q、持出 RMSE)时注明 n 和 k,避免后人把不同差分的 AIC 贴在一张历史表里比大小。这是跨项目最常见的表格污染。
残差不白的行先删。同一 d、同一变换下按 BIC 排序,AIC 冠军若不同,两个都送持出。跨 d 的 AIC 直接丢弃。自动搜到 (0,1,12) 先问季节,再问 Q 或 D,不要当普通 MA(12) 上线。
ln(n)>2 后 BIC 罚得更狠,上线交代时我偏 BIC。探索短样本可看 AIC/AICc。冲突时用滚动拍板,不要平均两个预报。
含 φ、θ、常数等被估参数,以软件为准。跨软件不要比 AIC 绝对值。
示意四行候选里 AIC 指 (1,1,1),BIC 觉得 (1,1,0) 接近。残差都白,两个都送滚动,不宣布 AIC 冠军。d=0 与 d=1 的 AIC 不可比,差分改了似然定义,跨 d 用持出误差。自动网格把季节滞后当普通 q 搜到 12,先问 m。AICc 在月度短序列把胖子罚得更狠,n-k-1 接近 0 说明贪了,应减阶。常数有无先看领域再让准则在两个合法设定里选,潮位显著漂移也可用物理否决。报告四列加 n 和 k,避免后人把不同差分的 AIC 贴一张表。准则淘汰胖子,持出拍板,冲突时报两个数加值班成本,不要平均预报来调和。
口令:同一 d、同一变换、残差已白,才能比准则。AIC 罚 2k,BIC 罚 ln(n)k,n 大听 BIC。跨 d 用持出。自动搜锁死 d、D,网格非季节 0~2、季节 0~1。看见 (0,1,12) 先问季节槽。AICc 在 n 近 k 时加重惩罚,公式将炸说明贪了。常数先领域后准则。四列报告加 n、k。准则淘汰胖子,滚动拍板,冲突不加平均。跨软件 AIC 绝对值无意义。把「残差不白不准参赛」写成表头,防止最小 AIC 的未白模型混进决赛。
原文给出 AIC=-2ln(L)+2(p+q+1) 一类形式,BIC 把 2 换成 ln(n),对复杂度惩罚更重,大样本更朴素,值越小越好。注意实现里 k 是否含常数与方差,以软件为准,但比较必须同一样本同一差分。原文把准则放在「多个 (p,q) 都看起来合理」之后,顺序是先图先诊断再准则。自动最小化 AIC 的函数不知道季节 m,可能吐出普通 MA(12)。跨 d 比较 AIC 不合法,应把预测还原到原尺度用持出误差比。把原文公式里的 (p+q+1) 理解成「参数个数的示意」,报告时写明 n 与 k,避免后人把不同差分的 AIC 贴一张历史表。
| 比较场景 | 可不可以比 | 原因 |
|---|---|---|
| 同一 d、同一对数、同一样本 | 可以 | 似然定义相同 |
| d=0 对 d=1 | 不可以 | 序列被差分,似然不在同一层 |
| 残差未白的模型 | 不准参赛 | 准则不管白噪声 |
| 自动搜到普通 MA(12) | 先问季节 | 准则不懂 m |
| 小样本 | 看 AICc | 胖子罚得更狠 |
| 大样本上线 | 偏 BIC | ln(n) 大于 2 |
| 跨软件绝对值 | 不要比 | k 的计数可能不同 |
| AIC 冠军与 BIC 冠军不同 | 都送滚动 | 用持出拍板 |
| 有无常数 | 先领域再准则 | 潮位漂移可用物理否决 |
| 报告 | 四列加 n 与 k | 防止历史表污染 |
示意 n=100、k=3、ln(L)=-139.8:AIC 约 285.6,BIC 约 293.4。同一表里 k=2、ln(L)=-142 的 AIC 288、BIC 293.2,BIC 会觉得简单模型接近,AIC 更爱多一个参数的那个。不要拿 d=1 的 AIC 去和 d=0 比,差分改了序列。自动搜若吐出 q=12,先在残差 ACF 看是不是年季节,是则改季节槽,不是才允许普通高阶 MA。AICc 在 n 只比 k 大一点时再加重惩罚,月度四年还加季节阶时值得看;分母接近零说明参数已经对样本太贪。把这张示意账和「残差不白不准参赛」写在同一页,准则就不会单独决定上线。
同一张表必须写明样本长度、参数个数、差分次数、变换。缺这四列,历史表会把不可比的对数似然混在一起。残差未白的行不准参赛。两个冠军都送滚动,用持出段拍板,不要在准则上提前宣布上线。跨差分次数比较时改用持出误差,准则只在同一地形上发言。
下一节把模型真正推到「还没发生」的日子:滚动原点、多步预测,以及 MAE/RMSE/MAPE 各自会骗你的方式。