ARIMA 全称是 差分整合移动平均自回归模型(Autoregressive Integrated Moving Average Model)。我们可以将其拆解为三个部分:AR(自回归)、I(差分项)和 MA(移动平均)。


1. 核心前提:平稳性 (Stationarity)

在学习 ARIMA 之前,必须理解平稳性。这是所有时间序列建模的基石。

一个平稳的时间序列具有以下特征:

  • 均值是常数(不随时间漂移)。
  • 方差是常数(不随时间剧烈波动)。
  • 自协和只与时间间隔(Lag)有关,而与所处的时间点无关。

通俗理解: 序列看起来像是在一个固定的水平线上下随机波动,没有明显的趋势(上升或下降)或季节性。


2. 模型的三大组成部分

ARIMA 模型通常表示为 $ARIMA(p, d, q)$,其中三个参数分别对应以下部分:

2.1 AR (AutoRegressive) - 自回归部分:$p$

逻辑: 认为当前的观测值 $Y_t$ 是过去若干个观测值的线性组合。

  • 公式: $Yt = c + \phi_1 Y{t-1} + \phi2 Y{t-2} + \dots + \phip Y{t-p} + \epsilon_t$
  • 其中 $\epsilon_t$ 是白噪声(均值为0,方差固定的随机干扰)。
  • 含义: 如果 $p=1$,说明今天的值很大程度上取决于昨天的值。

2.2 I (Integrated) - 差分部分:$d$

逻辑: 大多数现实中的数据(如股票、气温)是不平稳的。差分是将非平稳数据转为平稳数据的手段。

  • 一阶差分: $\Delta Yt = Y_t - Y{t-1}$
  • 含义: 如果 $d=1$,说明原始数据不平稳,但相邻两天的差值是平稳的。

2.3 MA (Moving Average) - 移动平均部分:$q$

逻辑: 认为当前的观测值是过去若干个预测误差的线性组合。它捕捉了系统受到的“冲击”效应。

  • 公式: $Yt = \mu + \epsilon_t + \theta_1 \epsilon{t-1} + \theta2 \epsilon{t-2} + \dots + \thetaq \epsilon{t-q}$
  • 含义: 如果昨天发生了一个突发新闻(误差 $\epsilon$ 很大),MA 模型会计算这个冲击对今天及之后几天的持续影响。

3. 如何确定参数 $p, d, q$?

这是 ARIMA 建模中最关键的一步,通常使用 Box-Jenkins 方法

  1. 确定 $d$: 使用 ADF 单位根检验。如果原始数据不平稳,进行差分,直到数据平稳为止。
  2. 确定 $p$ 和 $q$: 观察 ACF(自相关系数)PACF(偏自相关系数) 图像。
图像特征 AR(p) 模型 MA(q) 模型 ARMA(p, q) 模型
ACF (自相关) 拖尾(几何衰减) $q$ 阶截尾($q$阶后变为0) 拖尾
PACF (偏自相关) $p$ 阶截尾($p$阶后变为0) 拖尾 拖尾

什么是“截尾”? 图像在某个点之后突然落在置信区间(虚线)以内,趋近于 0。


4. 完整的建模流程

如果你现在要处理一份数据,你应该遵循以下步骤:

  1. 可视化: 画出时间序列图,观察是否有趋势或季节性。
  2. 平稳性处理:
    • 如果有趋势 $\rightarrow$ 差分 ($d$)。
    • 如果方差不稳定 $\rightarrow$ 取对数 ($log$)。
  3. 模型识别: 画出 ACF 和 PACF 图,初步预估 $p$ 和 $q$。
  4. 参数优化: 比较不同 $(p, d, q)$ 组合下的 AICBIC 指标(这两个值越小,模型拟合效果越好且越简洁)。
  5. 模型检验(残差分析): 检查模型的残差是否为白噪声(即残差中是否已无有用信息)。如果残差还有规律,说明模型没建好。
  6. 预测: 使用模型进行外推预测。

5. 进阶提示

可以进一步研究以下概念来深化理解:

  • 白噪声检验 (Ljung-Box Test):用于验证残差是否随机。
  • 最大似然估计 (MLE):ARIMA 参数是如何通过数学计算出来的。
  • SARIMA:如果你的数据有季节性(比如每 12 个月循环一次),需要引入季节性参数。

6.演示

R 拥有全球最顶尖的时间序列分析生态系统(如 forecastfable 包)。

下面将使用 R 内置的 Nile(尼罗河年度流量) 数据集,演示一个标准的 ARIMA 建模全流程。


6.1 环境准备与数据观察

首先,我们需要加载核心工具包 forecast

R

1
2
3
4
5
6
7
8
# 安装并加载必要的包
# install.packages("forecast")
library(forecast)
library(tseries) # 用于进行平稳性检验

# 加载数据(尼罗河 1871-1970 年的年度流量)
data <- Nile
plot(data, main="尼罗河年度流量 (1871-1970)", ylab="流量", col="blue", lwd=2)

观察: 图像显示流量随时间有下降趋势且波动较大,初步判断它可能不是平稳的。


6.2 平稳性检验与差分 (Step 1: 确定 $d$)

我们需要通过 ADF 检验 (Augmented Dickey-Fuller) 来严谨地判断平稳性。

R

1
2
3
4
5
6
7
8
# 1. ADF 检验
adf_test <- adf.test(data)
print(adf_test$p.value) # 如果 p > 0.05,说明不平稳

# 2. 进行一阶差分
diff_data <- diff(data)
plot(diff_data, main="一阶差分后的流量数据")
adf.test(diff_data) # 再次检验,此时 p 应显著小于 0.05
  • 如果原始数据 $p > 0.05$,则不平稳,需要差分。
  • 一阶差分后平稳,则参数 $d = 1$

6.3 模型识别 (Step 2: 确定 $p$ 和 $q$)

通过观察 ACFPACF 图来寻找 $p$ 和 $q$ 的蛛丝马迹。

R

1
2
3
4
# 画出自相关和偏自相关图
par(mfrow=c(1,2)) # 并排显示
Acf(diff_data, main="ACF - 确定 q")
Pacf(diff_data, main="PACF - 确定 p")
  • ACF 截尾 $\rightarrow$ 考虑 MA 模型。
  • PACF 截尾 $\rightarrow$ 考虑 AR 模型。
  • 如果都表现为拖尾(缓慢衰减),则考虑 ARIMA 混合模型。

6.4 模型拟合:手动 vs 自动

在 R 中,我们可以手动指定参数,也可以让算法自动寻找最优组合(基于 AIC/BIC 最小化原则)。

方法 A:自动寻找最优模型(推荐)

R

1
2
3
# auto.arima 会自动测试多组 p,d,q 组合
fit <- auto.arima(data, trace=TRUE)
summary(fit)

方法 B:手动指定(假设我们确定为 ARIMA(1, 1, 1))

R

1
fit_manual <- Arima(data, order=c(1, 1, 1))

6.5 模型诊断 (Step 3: 检查残差)

一个好的模型,其残差应该是白噪声(即没有任何规律的随机波动)。

R

1
2
# 残差分析
checkresiduals(fit)

合格标准:

  1. Ljung-Box 检验 的 $p$ 值大于 0.05(说明残差之间没有自相关性)。
  2. 残差图看起来像随机噪声。
  3. 残差的直方图符合正态分布。

6.6 预测未来 (Step 4)

模型通过检验后,就可以预测未来的流量了。

R

1
2
3
4
5
6
# 预测未来 10 年
forecast_values <- forecast(fit, h=10)

# 可视化预测结果
plot(forecast_values, main="尼罗河流量未来 10 年预测", xlab="年份", ylab="流量")
grid()