跳到正文

ARIMA 与 Box-Jenkins 方法论

完整的 Box-Jenkins 流程:识别、估计、诊断、预测。季节 ARIMA,为什么差分能修复非平稳性,以及什么时候会失效。

第 8 篇 · 共 12 篇 约 11 分钟

Box 和 Jenkins (1976) 给应用统计学家一个流程:认真走下来,不靠深理论也能做出像样的时间序列预测。流程分四步——识别、估计、诊断、预测。它能用不是靠运气:ARMA 模型在(纯非确定性)平稳过程空间里稠密(Wold 分解,见随机过程那篇),而积分扩展处理最常见的非平稳形式。理论保证覆盖面,流程保证纪律,这篇文章就把这个流程从头走到尾,顺便标出每一步最容易走错的地方。

严格参考是 Hamilton (1994, 第 4–5 章),应用预测参考 Hyndman & Athanasopoulos (2018, 第 8–9 章),金融应用看 Tsay (2010, 第 3 章)。

ARIMA 解决的问题

ARMA 假设平稳。现实里很多序列不平稳:GDP 增长、价格漂移、交通量上升。ARMA 处理不了的最简单的非平稳形式是单位根——水平序列里含有随机游走分量。

如果 yt=yt−1+εty_t = y_{t-1} + \varepsilon_t,那么 Var(yt)=tσ2→∞\text{Var}(y_t) = t \sigma^2 \to \infty,滞后 hh 的自相关在 h,T→∞h, T \to \infty 时 ρh→1\rho_h \to 1。经典 ARMA 机器在这里输出垃圾:标准误错、预测忽略单位根、识别图很怪(ACF 衰减非常慢)。

修复很朴素:差分。定义 Δyt=yt−yt−1\Delta y_t = y_t - y_{t-1}。如果 yty_t 有单位根,Δyt=εt\Delta y_t = \varepsilon_t 就是白噪声(或 ARMA),可以照常拟合。这就是 ARIMA(p,d,qp, d, q) 模型:

Φ(L)(1−L)dyt=c+Θ(L)εt\Phi(L) (1 - L)^d y_t = c + \Theta(L) \varepsilon_t

其中 (1−L)d(1 - L)^d 是 dd 阶差分。d=1d = 1 时 Δyt\Delta y_t 服从 ARMA(p,qp, q);d=2d = 2 差分两次。

什么时候差分

实际问题是 dd 怎么选。单位根检验(下一篇)给形式化答案:ADF、Phillips-Perron、KPSS。但 Box 和 Jenkins 给了一个更视觉化的流程:

  1. 看序列本身。有趋势,差分一次;方差随时间增长,先取对数。
  2. 看 yty_t 的 ACF。自相关衰减慢(长滞后值还大),序列非平稳,差分。
  3. 差分后再看。Δyt\Delta y_t 的 ACF 衰减得快,搞定;还不行,再差分一次。
  4. 避免过度差分。差分超过需要会在差分序列里诱发负的 MA(1) 结构。差分后 θ^1≈−0.5\hat{\theta}_1 \approx -0.5,多半是差多了——接近单位根的 MA 项就是信号。

对季节序列还要季节差分:Δsyt=yt−yt−s\Delta_s y_t = y_t - y_{t-s}。年度周期的月度数据常常需要 s=12s = 12。常规差分和季节差分可以同时做。

Box-Jenkins 流程

第一步:识别。

画出 yty_t。需要的话做变换(对数、平方根、Box-Cox)稳定方差,差分引入平稳性。然后画(变换后、差分后)序列的 ACF 和 PACF,用图形模式提示 (p,q)(p, q):PACF 在滞后 pp 后截尾、ACF 拖尾,是 AR(pp);ACF 在滞后 qq 后截尾、PACF 拖尾,是 MA(qq);两个都拖尾,是 ARMA(p,qp, q)(p,q≥1p, q \geq 1),这时早期滞后上的尖峰暗示 pp 和 qq 的量级。拿不准时宁可稍微过度参数化:多几个参数带来的小偏差,通常比漏掉结构的大偏差便宜。

现代实践中,信息准则替代肉眼判断:

AIC=−2ℓ+2k,BIC=−2ℓ+klog⁡T\text{AIC} = -2\ell + 2k, \quad \text{BIC} = -2\ell + k \log T

其中 ℓ\ell 是极大对数似然,kk 是参数个数。AIC 倾向于过度参数化;BIC 在大 TT 时更精简;Hannan-Quinn 和小样本修正的 AICc 是备选。

第二步:估计。

用 CSS(条件平方和)给初值,再用精确 MLE 通过卡尔曼滤波或创新算法精修。季节 ARIMA 要整体联合拟合,不要把常规部分和季节部分分开估计。另外记账:d≥1d \geq 1 的差分损失 dd 个观测,d=1d = 1 加 s=12s = 12 的季节差分损失 13 个。通常不是问题,除非 TT 很小。

第三步:诊断检验。

用 ARMA 那篇的套件:残差 ACF、Ljung-Box、正态性、ARCH-LM。残差应该看起来像白噪声。诊断不过的时候有三条路,按改动幅度从小到大排:重新识别(换一组 (p,d,q)(p, d, q)、加季节项、再查);加结构(残差还有自相关就提高 pp 或 qq,有 ARCH 效应就叠一层 GARCH,非正态就换肥尾创新分布);换模型类(差分后单位根检验仍拒绝平稳,考虑 ARFIMA、结构突变模型、状态切换模型)。走哪条路取决于诊断具体怎么挂的——这也是为什么诊断不是走过场。

第四步:预测。

把模型向前迭代,实际值还没到的地方代入滞后预测。hh 步前:

y^T+h=E[yT+h∣yT,yT−1,…,εT,εT−1,…]\hat{y}_{T+h} = E[y_{T+h} \mid y_T, y_{T-1}, \ldots, \varepsilon_T, \varepsilon_{T-1}, \ldots]

预测误差方差随 hh 增长:单位根过程按 hσ2h \sigma^2 增长,平稳过程渐近到无条件方差。95% 预测区间:

y^T+h±1.96Var(yT+h−y^T+h)\hat{y}_{T+h} \pm 1.96 \sqrt{\text{Var}(y_{T+h} - \hat{y}_{T+h})}

实践中这些区间偏窄,因为它们假设模型设定正确且创新项高斯。Bootstrap 预测区间能处理第二个问题;第一个问题没有免费解法,只能靠诊断和留出样本。

季节 ARIMA(SARIMA)

很多序列有季节模式:月度零售、季度营收、日流量。ARIMA 类自然延伸:

Φ(L)Φ~(Ls)(1−L)d(1−Ls)Dyt=c+Θ(L)Θ~(Ls)εt\Phi(L) \tilde{\Phi}(L^s) (1 - L)^d (1 - L^s)^D y_t = c + \Theta(L) \tilde{\Theta}(L^s) \varepsilon_t

其中 ss 是季节周期(月度 12、季度 4),DD 是季节差分阶数,Φ~,Θ~\tilde{\Phi}, \tilde{\Theta} 是季节 AR 和 MA 多项式。

季节差分 (1−Ls)(1 - L^s) 干掉频率 1/s1/s 处的季节单位根。(p,d,q)×(P,D,Q)s(p, d, q) \times (P, D, Q)_s 可以从季节滞后上的 ACF/PACF 读出来:ρ12\rho_{12} 又大又正但 ρ6\rho_6 小,你需要季节差分;ACF 在滞后 12、24、36 上有尖峰但之间衰减,你需要季节 MA(1)。

对航空旅客数据(Box-Jenkins 的经典例子),正确的模型是 ARIMA(0, 1, 1)(0, 1, 1)12_{12}:

(1−L)(1−L12)yt=(1+θ1L)(1+Θ1L12)εt(1 - L)(1 - L^{12}) y_t = (1 + \theta_1 L)(1 + \Theta_1 L^{12}) \varepsilon_t

θ1≈−0.4\theta_1 \approx -0.4,Θ1≈−0.6\Theta_1 \approx -0.6。产生的预测能同时抓住线性趋势和乘积季节模式。

为什么叫”乘积”?SARIMA 用乘积季节因子而不是加性,直觉是季节性常常随水平放大——十二月尖峰随着序列增长越来越大。如果对 log⁡(yt)\log(y_t) 差分而不是 yty_t,乘积结构变成加性,模型退回差分 log 序列上的 ARMA。这也点出一个常见坑:季节性在水平上是乘积的,你却用了加性季节模型,那预测误差在序列最大的地方(零售的十二月)也最大——最不该错的地方错得最狠。

差分 vs. 去趋势

去掉趋势有两种方法,给出的是不同的模型,不是同一个模型的两种写法。确定性趋势:yt=α+βt+uty_t = \alpha + \beta t + u_t,utu_t 平稳,趋势永远线性地预测下去。随机趋势:yt=yt−1+εty_t = y_{t-1} + \varepsilon_t,水平是随机游走。两种都有的序列也存在:yt=α+βt+∑s=1tεs+uty_t = \alpha + \beta t + \sum_{s=1}^t \varepsilon_s + u_t。

对长期预测,选错代价不对称。确定性趋势下预测区间宽度收敛到常数;单位根下按 h\sqrt{h} 增长;近单位根介于两者之间——短水平期像单位根一样变宽,水平期够长后封顶在无条件方差。如果真实是确定性趋势而你差分了,得到过度差分加 θ≈−0.5\theta \approx -0.5 的 MA(1):浪费,但不是灾难。如果真实是单位根而你没差分,预测会在转折点系统性滞后、置信区间过窄:这是灾难。两种错不等价,所以拿不准时宁可差分。

单位根检验(下一篇)就是为这件事设计的,但它们对近单位根备择检验力低,别只信一次检验。看序列、看 ACF、看确定性趋势拟合的残差,然后做判断。

一个 Box-Jenkins 完整例子

序列:1992–2020 年美国月度零售销售,对数水平。走一遍四步。

识别。 图上有明显上升趋势和年度季节性,二者幅度都在变大;取对数,幅度稳定下来;应用 ΔΔ12log⁡yt\Delta \Delta_{12} \log y_t(常规 + 季节差分),图上看大致在零附近平稳。ACF 在滞后 12 有大尖峰、24 和 36 较小,季节滞后之间在滞后 1 后截尾;PACF 在季节滞后上衰减慢。暂定 ARIMA(0, 1, 1)(0, 1, 1)12_{12}——和航空模型同型,不是巧合,这个形状在”趋势 + 放大的季节性”数据上反复出现。

估计。 MLE 拟合,得到 θ^1≈−0.35\hat{\theta}_1 \approx -0.35,Θ^1≈−0.62\hat{\Theta}_1 \approx -0.62,σ^≈0.012\hat{\sigma} \approx 0.012。

诊断。 残差 ACF 在滞后 1 到 36 都无显著自相关;Ljung-Box 在滞后 12、24 的 p 值 0.42、0.31,不能拒绝白噪声;残差直方图略肥尾但无模式;ARCH-LM 滞后 5 给 p=0.08p = 0.08,临界——想更讲究就在上面叠 GARCH。

预测。 12 步前预测延伸近期趋势加阻尼季节周期,80% 和 95% 区间随 hh 变宽,留出样本回测 MAPE 约 1.5%。对月度宏观序列,这个水平算称职。

如果要给一篮子序列做这件事,识别可以自动化:auto.arima(Hyndman & Khandakar, 2008)用 AICc 做准则对 (p,d,q)×(P,D,Q)s(p, d, q) \times (P, D, Q)_s 逐步搜索。速度快、站得住脚,而且极少比时间压力下的手工拟合更差。

代码:Auto-ARIMA

import pandas as pd
from pmdarima import auto_arima


model = auto_arima(
    y,
    seasonal=True,
    m=12,                      # 月度季节周期
    d=1, D=1,                  # 固定差分阶数;留空则由单位根/季节检验自动选
    max_p=3, max_q=3,
    max_P=2, max_Q=2,
    information_criterion='aic',
    stepwise=True,             # 更快;False 用完整网格
    suppress_warnings=True,
)
print(model.summary())
print(model.order, model.seasonal_order)

forecast, conf_int = model.predict(n_periods=24, return_conf_int=True)

ARIMA 的边界

Box-Jenkins ARIMA 的甜蜜区是月度或季度宏观序列:单一主导季节模式、噪声适中。离开甜蜜区它掉得很快。高频金融数据上,方差动态占主导——对收益率跑 ARIMA 没问题但没意思,对价格跑 ARIMA 是单位根主导。有结构突变的序列上,ARIMA 的常参数假设意味着突变后预测一直错到你重新估计为止。状态切换的序列(衰退 vs. 扩张、低波 vs. 高波)要马尔可夫切换模型。长记忆序列(自相关双曲衰减:波动率聚集、河流流量、互联网流量)要 ARFIMA 或 FIGARCH。非线性动态则有门槛 AR、平滑转换 AR 和神经网络扩展这一族。

统一的判断标准:如果诊断显示残差有持续结构,ARIMA 就是错的模型。别一直加 pp 和 qq 直到残差看起来白——有时候数据生成过程根本不是 ARMA,加参数只是在把误设藏进方差里。

Box-Jenkins 为什么活了这么久

这套方法论做时间序列预测的主流已经接近 50 年,机器学习的浪潮也没把它拍下去。原因值得展开,因为每一条都对应一个实际约束。

它精简:T=100T = 100 个观测拟合 5 个参数没问题,成千参数的网络在这个样本量上只会背题。它可解释:系数直接对应自相关结构、对冲击的反应、持续性。它的统计推断成熟:标准误、置信区间、假设检验都有站得住的渐近性质,正确设定下预测区间有有效覆盖。它计算便宜:MLE 很快,预测 O(p),选型可以交给 auto.arima。它有理论兜底:Wold 分解保证 ARMA 的覆盖面,差分处理最常见的非平稳,合起来吃下现实序列的很大一部分。

经验证据来自 M-竞赛(Makridakis 时间序列预测竞赛):简单统计方法(ARIMA、指数平滑)在月度、季度序列的短期预测上一直非常能打,纯机器学习方法整体反而不敌统计基准;M4 的冠军是统计与机器学习的混合方法,而”组合”本身是最稳定的赢家。对日频或更高频数据,情况另说:收益率上 ARIMA 没意思,波动率上被 GARCH 压,tick 数据上没指望。

模型平均与组合

与其挑一个 (p,d,q)×(P,D,Q)s(p, d, q) \times (P, D, Q)_s 模型,不如对多个模型的预测做平均。Bates & Granger (1969) 就表明预测组合常常胜过单个预测,即便单个模型本身设定有误。简单等权平均就能用;AIC 加权按 exp⁡(−AICi/2)\exp(-\text{AIC}_i / 2) 加权归一化;贝叶斯模型平均给模型先验、算后验加权预测。大型预测竞赛里,ARIMA、指数平滑加几个结构模型的组合通常胜过任何单一方法——跨模型类做平均,对冲的正是任何单一类不可避免的设定失误。

离群点问题

真实数据有离群点,而 ARIMA 假设残差 iid 来自高斯(或其他轻尾)分布。一个离群点就能让参数估计有偏(优化器去迁就它)、扭曲残差诊断(看起来像模型误设)、并给出糟糕的预测(模型学会了”预测”那个离群点)。

检测很简单:算标准化残差 z^t=ε^t/σ^t\hat{z}_t = \hat{\varepsilon}_t / \hat{\sigma}_t,∣z^t∣>3|\hat{z}_t| > 3 或 4 的就是嫌疑对象。处理手段按侵入程度排:给离群点加虚拟变量回归子,让它吸收对参数估计的影响(Chen & Liu 1993 是这条路的系统化版本);一次性数据错误(笔误、记录失误)直接替换成模型隐含值;粗暴一点就截断或缩尾到第 1/99 百分位;或者干脆换稳健损失函数,用绝对偏差替代平方偏差,自动降权。对高频金融数据,离群点是常态(闪崩、交易所宕机、肥尾),处理方式的选择会实质性影响预测和 VaR 估计——这不是收尾时的清洁工作,是建模决策。

关于神经网络的预测

神经网络做时间序列预测很流行,但在 M-竞赛里没有稳定击败 ARIMA。原因和前面”为什么活了这么久”是同一枚硬币:网络要几千甚至百万级观测,ARIMA 50–100 就能用;参数多数据少时网络背下训练集、样本外崩盘,ARIMA 的小参数量在这里是优势不是劣势;网络性能严重依赖架构、学习率、正则化这些超参,ARIMA 的旋钮少得多;网络预测难解释,ARIMA 系数有清晰含义;数据生成过程一变,在历史上训练的网络常常失效,而 ARIMA 周期性重估、有适应能力。

时间序列 transformer 和预训练基础模型的进展可能改变这个格局。但至少到目前,ARIMA 及其变体仍然是大多数应用预测任务的主力——不是因为它聪明,是因为它便宜、稳、可审计,而多数预测任务要的恰恰是这三样。

参考文献

  • Box, G. E. P., & Jenkins, G. M. (1976). Time Series Analysis: Forecasting and Control. Holden-Day.
  • Box, G. E. P., Jenkins, G. M., & Reinsel, G. C. (2015). Time Series Analysis: Forecasting and Control (5th ed.). Wiley.
  • Hamilton, J. D. (1994). Time Series Analysis. Princeton University Press. Ch. 4-5.
  • Hyndman, R. J., & Athanasopoulos, G. (2018). Forecasting: Principles and Practice (2nd ed.). OTexts.
  • Hyndman, R. J., & Khandakar, Y. (2008). Automatic time series forecasting: The forecast package for R. Journal of Statistical Software, 27(3), 1-22.
  • Tsay, R. S. (2010). Analysis of Financial Time Series (3rd ed.). Wiley. Ch. 3.
  • Bates, J. M., & Granger, C. W. J. (1969). The combination of forecasts. Operations Research Quarterly, 20(4), 451-468.
  • Makridakis, S., Spiliotis, E., & Assimakopoulos, V. (2020). The M4 Competition: 100,000 time series and 61 forecasting methods. International Journal of Forecasting, 36(1), 54-74.
  • Chen, C., & Liu, L.-M. (1993). Joint estimation of model parameters and outlier effects in time series. Journal of the American Statistical Association, 88(421), 284-297.