跳到主要内容

AR / MA / ARIMA 模型

:::info 学习目标 你将能读懂 (p,d,q)(p,d,q) 三个阶数,使用 AIC/BIC 做候选模型比较,并通过残差诊断和滚动样本外预测判断模型是否真的有用。先修:平稳性、ACF/PACF。 :::

直觉

ACF 告诉我们「有没有结构」。ARIMA 把这个结构参数化:AR(自回归)用过去的值预测现在,MA(滑动平均)用过去的冲击预测现在,I(差分)把非平稳变平稳。三者组合(p, d, q)就是 ARIMA。

模型形式

ARIMA(p,d,q):Δdxt=c+i=1pϕiΔdxti+εt+j=1qθjεtj\text{ARIMA}(p,d,q):\quad \Delta^d x_t = c + \sum_{i=1}^{p}\phi_i\,\Delta^d x_{t-i} + \varepsilon_t + \sum_{j=1}^{q}\theta_j\,\varepsilon_{t-j}
  • pp:AR 阶数(用几个过去值);
  • dd:差分阶数(d=1d=1 即对价格取一阶差分=收益);
  • qq:MA 阶数(用几个过去冲击)。

可识别性与诊断

AR 参数需要满足平稳条件,MA 参数需要满足可逆条件;否则同一随机过程可能被多组参数表示。定阶也不能只看最小 AIC:候选模型拟合后还应检查残差 ACF、Ljung–Box p 值、参数显著性和预测区间覆盖率。AIC 偏向预测,BIC 对参数数量惩罚更强;两者意见不同时,优先比较滚动样本外误差。

「人话」解释:怎么定阶 p, d, q?

dd:差分到平稳为止(价格 d=1d=1,收益 d=0d=0),用 ADF 判断。 p,qp,q:看 ACF/PACF 的截尾形态,或更实用地——扫几个组合,选 AIC/BIC 最小的。 AIC 在「拟合好」和「参数少」之间平衡,越小越好。

可运行案例:拟合 AR(1) 并对真实收益建模

先用构造的 AR(1) 验证能还原参数;再用 AIC 定阶;最后对真实收益拟合——你会发现系数接近 0,说明收益近似白噪声、很难预测

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.tsa.arima.model import ARIMA

# 1) 构造 AR(1): x_t = 0.6 x_{t-1} + noise
rng = np.random.default_rng(3)
n = 1000
x = np.zeros(n); phi = 0.6
for t in range(1, n):
  x[t] = phi * x[t-1] + rng.standard_normal()

m = ARIMA(x, order=(1, 0, 0)).fit()
print(f"真值 phi=0.6   估计 phi={m.params['ar.L1']:.3f}")

print("\nAIC 定阶(越小越好):")
for p in range(4):
  print(f"  AR({p}): AIC = {ARIMA(x, order=(p,0,0)).fit().aic:.1f}")

# 2) 真实收益: 近似白噪声
df = pd.read_csv('/data/spy_daily.csv', parse_dates=['date']).set_index('date')
ret = np.log(df['adj_close'] / df['adj_close'].shift(1)).dropna()
mr = ARIMA(ret, order=(1, 0, 0)).fit()
fc = mr.forecast(30)
print(f"\n真实收益 AR(1) phi={mr.params['ar.L1']:.3f}  → 接近0,近似白噪声")

plt.figure(figsize=(8, 3.2))
plt.plot(range(200), ret.values[-200:], lw=0.8, label='历史(末 200 日)')
plt.plot(range(200, 230), fc, color='crimson', lw=1.6, label='30 步预测')
plt.axhline(ret.mean(), color='gray', ls='--', lw=0.8, label='长期均值')
plt.title('收益 AR(1) 预测:很快收敛到均值(水平线)'); plt.legend(fontsize=8)
plt.tight_layout(); plt.show()

小结

  • ARIMA(p,d,q):AR 用过去值、MA 用过去冲击、I 差分到平稳;
  • 定阶:dd 看 ADF,p,qp,q 看 AIC/BIC;
  • 真实收益的 AR 系数≈0 → 近似白噪声,均值类模型难以预测收益本身(这铺垫了下一节:波动率却有结构)。

实践与延伸

  1. 扫描 p,q[0,3]p,q\in[0,3],同时报告 AIC、BIC 与测试集 RMSE,观察“样本内最好”是否等于“样本外最好”。
  2. 给收益加入一个微弱 AR(1) 结构,逐步减小 ϕ\phi,找出样本长度不足时模型开始无法识别的区域。

延伸阅读:Box、Jenkins、Reinsel 与 Ljung《Time Series Analysis》;Hyndman 的滚动预测评估章节。

章末自测

检查核心概念

1. 关于本章主题,哪项说法更准确?