ARMA 模型
一、直观理解:惯性 + 短时冲击
ARMA 把 AR 与 MA 放在同一方程里:
用滞后算子 :
含义是:序列既有自身滞后的持续影响,也有近期新息的短暂影响。许多平稳序列用较低的 就能比纯 AR 或纯 MA 更省参数。
前提是:序列已经平稳。有单位根或强趋势时,应先差分,进入 ARIMA。
二、适用场景与优缺点
| 类型 | 说明 |
|---|---|
| 适用场景 | 平稳单变量序列;ACF 与 PACF 均拖尾;需要紧凑的短中期预测模型。 |
| 核心优点 | 比高阶纯 AR/MA 更灵活;理论完备;MATLAB 支持成熟;易做区间预测。 |
| 局限与缺点 | 识别比纯 AR/MA 难; 可能不唯一;不含季节与外生变量;非平稳时误用后果严重。 |
三、核心原理
1. 平稳与可逆
- 平稳: 的根在单位圆外;
- 可逆: 的根在单位圆外。
两者同时满足时,模型有良好的因果/可逆表示,便于预测与新息解释。
2. 相关图特征
ARMA() 的 ACF、PACF 都拖尾,没有干净截尾。因此实践中更多靠:
- 从小到大的 网格;
- AIC/BIC;
- 残差白噪声;
- 训练期外误差。
3. 与 AR、MA 的关系
- → AR()
- → MA()
- 过度参数化:某些 ARMA 可与更低阶模型等价,导致识别困难,故优先简约。
四、建模流程(Box–Jenkins 精简版)
- 平稳化:去势/差分/对数,使训练期平稳;
- 识别:相关图 + 候选阶数集合;
- 估计:
estimate极大似然; - 诊断:残差 ACF、Ljung-Box、正态性、ARCH 效应;
- 选用:信息准则与测试集误差一致时最理想;冲突时以测试误差与简约性为准;
- 预测:
forecast,报告点预测与 MSE 区间。
若残差有 ARCH 效应(平方残差自相关),均值模型可用 ARMA,波动另建 GARCH。
五、MATLAB 示例
rng(5);
md0 = arima("Constant",0.2,"AR",0.5,"MA",-0.4,"Variance",0.8);
y = simulate(md0, 400);
T0 = 320; yTrain=y(1:T0); yTest=y(T0+1:end);
% 平稳性
[h,p] = adftest(yTrain);
fprintf("ADF: h=%d p=%.4f\n", h, p);
% 网格搜索 (p,q)
pMax=3; qMax=3;
best = struct("aic",Inf);
for p=0:pMax
for q=0:qMax
if p==0 && q==0, continue; end
try
md = arima(p,0,q);
est = estimate(md, yTrain, "Display","off");
[~,~,logL] = infer(est, yTrain);
k = p+q+2;
aic = -2*logL + 2*k;
bic = -2*logL + k*log(numel(yTrain));
if aic < best.aic
best = struct("aic",aic,"bic",bic,"p",p,"q",q,"est",est);
end
catch
end
end
end
fprintf("AIC 最优 ARMA(%d,%d), AIC=%.2f BIC=%.2f\n", ...
best.p, best.q, best.aic, best.bic);
summarize(best.est);
res = infer(best.est, yTrain);
figure; autocorr(res); title("ARMA 残差 ACF");
[hLB,pLB] = lbqtest(res,"Lags",12);
fprintf("Ljung-Box p=%.4f\n", pLB);
% 平方残差:是否需要 GARCH
figure; autocorr(res.^2); title("平方残差 ACF");
h = numel(yTest);
[yf,yMSE] = forecast(best.est, h, "Y0", yTrain);
rmse = sqrt(mean((yTest-yf).^2));
% 朴素:随机游走一步重复最后值的多步(示意)
rmse_naive = sqrt(mean((yTest-yTrain(end)).^2));
fprintf("测试 RMSE=%.4f, 朴素末值 RMSE=%.4f\n", rmse, rmse_naive);
figure;
plot(yTest,"k"); hold on; plot(yf,"r","LineWidth",1.2);
plot(yf+1.96*sqrt(yMSE),"r--"); plot(yf-1.96*sqrt(yMSE),"r--");
legend("真实","ARMA","95%"); title("训练期外预测");
六、如何解释结果
完整结果应包含:
- 平稳化步骤;
- 选定的 与准则值;
- 参数估计、标准误、平稳/可逆根;
- 残差与平方残差诊断;
- 测试集 RMSE/MAE 及基线;
- 预测区间;
- 模型局限(样本长度、是否忽略季节等)。
避免逐个“强行解释”每一个 的业务故事;更应解释模型整体的记忆结构与预测行为。
七、常见误区
1. 未平稳就拟合 ARMA
这是最常见错误。先看图与单位根检验。
2. 同时堆高 与
参数冗余,表面 AIC 好、样本外差。优先低阶。
3. 用训练 选模型
ARMA 的似然/AIC 与训练期外误差才是正道。
4. 残差有季节峰仍满意
应引入季节项(SARIMA)或季节差分。
5. 把置信区间当成未来一定会落入的范围
区间依赖高斯新息与模型正确,结构突变时覆盖率会崩溃。
八、小结
ARMA 的核心是:
对已平稳的单变量序列,联合使用自回归与滑动平均结构,以简约参数刻画自相关并做短中期预测。
工作流是平稳化 → 定阶 → 估计 → 残差诊断 → 训练期外评价。掌握 ARMA 后,只需把差分写进模型,就是 ARIMA;再加上季节算子,就是 SARIMA。始终记住:不要只看 ,要看平稳性、白噪声检验和测试集误差。