ARIMA 模型
一、直观理解:先把趋势“扒掉”,再对平稳部分建模
现实中的序列常常带趋势或随机游走特征,直接套 ARMA 会失败。ARIMA 的策略是:
- 做 阶差分,使序列变平稳;
- 对差分后的序列建立 ARMA();
- 预测时再把差分“积分”回去,得到原尺度路径。
模型记为 ARIMA():
例如日价格常近似随机游走,收益率(一阶差分或对数差分)才接近平稳——这就是 的典型动机。
二、适用场景与优缺点
| 类型 | 说明 |
|---|---|
| 适用场景 | 单变量、有趋势/单位根但差分后可 ARMA;需要标准短中期预测与区间;作为竞赛时间序列题的主基线。 |
| 核心优点 | 处理非平稳的标准框架;工具链完整;可解释差分阶数;便于自动/半自动选阶。 |
| 局限与缺点 | 不强建模复杂季节(要用 SARIMA);外生变量需 ARIMAX;结构断点需人工处理; 过大损失信息并可能过度差分。 |
三、核心原理
1. 差分算子
消除随机游走型非平稳; 有时用于“斜坡”更强的情况,但竞赛中 要非常谨慎。
对数差分 近似增长率,兼具稳定方差的作用。
2. 常数项含义
在 时,常数项与漂移有关:差分后的均值对应原序列的线性漂移。是否保留常数可用信息准则与残差均值检验。
3. 预测
对差分序列做出 ARMA 预测后,经过 cumulative sum 还原。多步预测区间通常随 增宽;若 ,长期不确定性往往比平稳 ARMA 更大。
四、如何选择
选 :
- 时序图是否有趋势/水平漂移;
- ACF 是否极慢衰减;
- ADF/KPSS 等检验(注意功效与设定);
- 差分后相关图是否“正常”;
- 避免过度差分:过度差分会出现 MA 强负相关、方差变大。
选 : 在差分后的序列上按 ARMA 网格 + AIC/BIC + 残差诊断 + 测试误差。
常用小网格:,。
五、MATLAB 示例
%% 带漂移的随机游走 + 观测噪声,再拟合 ARIMA
rng(8);
n = 360;
e = randn(n,1);
y = cumsum(0.05 + e); % 含漂移单位根
T0 = 300;
yTrain = y(1:T0); yTest = y(T0+1:end);
figure;
subplot(2,1,1); plot(yTrain); title("原序列");
subplot(2,1,2); plot(diff(yTrain)); title("一阶差分");
[h0,p0] = adftest(yTrain);
[h1,p1] = adftest(diff(yTrain));
fprintf("ADF 原序列 h=%d p=%.4f; 差分后 h=%d p=%.4f\n", h0,p0,h1,p1);
% 网格
best = struct("aic",Inf);
for d = 0:1
for p = 0:3
for q = 0:3
if p==0 && q==0 && d==0, continue; end
try
md = arima(p,d,q);
est = estimate(md, yTrain, "Display","off");
[~,~,logL] = infer(est, yTrain);
k = p+q+1+(d>=0); % 粗略参数计数
aic = -2*logL + 2*(p+q+2);
if aic < best.aic
best = struct("aic",aic,"p",p,"d",d,"q",q,"est",est);
end
catch
end
end
end
end
fprintf("选用 ARIMA(%d,%d,%d)\n", best.p,best.d,best.q);
summarize(best.est);
res = infer(best.est, yTrain);
[hLB,pLB] = lbqtest(res,"Lags",12);
fprintf("残差 LB p=%.4f\n", pLB);
h = numel(yTest);
[yf,yMSE] = forecast(best.est, h, "Y0", yTrain);
rmse = sqrt(mean((yTest-yf).^2));
% 基线:随机游走(带最后漂移估计)
drift = mean(diff(yTrain));
yf0 = yTrain(end) + drift*(1:h)';
rmse0 = sqrt(mean((yTest-yf0).^2));
fprintf("测试 RMSE ARIMA=%.4f, 漂移RW=%.4f\n", rmse, rmse0);
figure;
plot(T0+1:T0+h,yTest,"k"); hold on;
plot(T0+1:T0+h,yf,"r","LineWidth",1.2);
plot(T0+1:T0+h,yf0,"b--");
legend("真实","ARIMA","漂移RW"); title("训练期外预测");
实际题目中务必把 forecast 的区间一并画出,并检查残差平方的 ACF(波动聚集时接 GARCH)。
六、如何解释结果
报告清单:
- 为何需要差分(图 + 检验 + 差分前后 ACF);
- 选择表(AIC/BIC/测试 RMSE);
- 参数与常数项(漂移)解释;
- 残差白噪声与异方差检查;
- 训练期外误差、对比随机游走/季节朴素;
- 预测路径与 95% 区间;
- 适用期限:ARIMA 对短中期更可靠,超长外推需谨慎。
七、常见误区
1. 看见趋势就
多数情况 或先去线性势足够。过度差分有害。
2. 全样本选阶再“预测”全样本
阶数与参数只能基于训练期;可用滚动原点做更稳的比较。
3. 只报告很高的拟合
非平稳序列拟合 虚高。必须看差分后残差与测试误差。
4. 忽视季节
月数据若 12 期相关突出,应 SARIMA,而不是把 加到 12 的纯 ARIMA。
5. 预测前忘记还原变换
对 建模后要指数还原;若需要均值无偏还原,注意 Jensen 修正(竞赛中至少说明变换)。
八、小结
ARIMA 的核心是:
通过适度差分获得平稳序列,再以 ARMA 刻画短期相关,并把预测积分回原尺度。
它是数学建模时间序列题的“默认基线”之一。规范流程是:图诊断 → 定 → 定 → 残差检验 → 训练期外与朴素模型比较。不要只看 ;能稳定打败随机游走/季节朴素,才有说服力。