ARIMA时间序列预测模型详解
ARIMA(Autoregressive Integrated Moving Average)是一种广泛应用于时间序列分析的经典统计方法,特别适用于处理非平稳的时间序列数据。该模型融合了三个核心组件:自回归(AR)、差分(I)和移动平均(MA),能够通过差分技术将原始序列转换为平稳序列后进行建模与预测。
ARIMA模型通常表示为 ARIMA(p, d, q),其中:
- p:自回归项的阶数,表示当前值依赖于前p个历史观测值;
- d:差分的阶数,即需要对序列进行d次差分以实现平稳性;
- q:移动平均项的阶数,代表当前值受过去q个误差项的影响程度。
平稳性检验与差分变换
在构建时间序列模型之前,必须首先判断序列是否具有平稳性。常用的检验方法是增强型迪基-福勒检验(ADF检验,Augmented Dickey-Fuller Test)。其原假设为“时间序列是非平稳的”。若检验得到的p值小于设定的显著性水平(如0.05),则拒绝原假设,认为序列是平稳的。
对于不满足平稳性的序列,可通过差分操作进行转换。一阶差分定义如下:
Xt = Xt - Xt-1
更高阶的差分(d阶)可通过递归方式计算:
dXt = d-1Xt - d-1Xt-1
自回归部分(AR)
自回归模型AR(p)表明当前时刻的值可由其前p个时间点的观测值线性组合表示,表达式为:
Xt = c + Σi=1p φiXt-i + εt
其中,φi 是待估计的自回归系数,εt 表示白噪声误差项,c为常数偏移量。
移动平均部分(MA)
移动平均模型MA(q)描述的是当前值与过去q个随机误差项之间的线性关系,公式如下:
Xt = μ + εt + Σi=1q θiεt-i
这里,θi 为移动平均系数,μ 是整个序列的均值,εt 同样为白噪声项。
ARIMA模型综合形式
将上述三部分整合后,ARIMA(p,d,q)的一般表达式为:
dXt = c + Σi=1p φidXt-i + εt + Σi=1q θiεt-i
引入滞后算子L(定义为 LXt = Xt-1),模型可简化为更紧凑的形式:
(1 - Σi=1p φiLi)(1 - L)dXt = c + (1 + Σi=1q θiLi)εt
模型识别与参数定阶
初步确定p和q的常用方法是观察自相关函数(ACF)图与偏自相关函数(PACF)图的特征:
- 对于AR(p)过程:ACF呈拖尾衰减,PACF在第p阶后截断;
- 对于MA(q)过程:ACF在第q阶后截断,PACF呈拖尾;
- 对于ARMA(p,q)或ARIMA模型:ACF与PACF均呈现拖尾现象。
为了更精确地选择最优阶数,可以采用信息准则法,例如AIC(赤池信息准则)和BIC(贝叶斯信息准则),目标是选取使AIC或BIC最小的模型组合。具体公式如下:
AIC = 2k - 2ln(L)
BIC = k·ln(n) - 2ln(L)
其中,k为模型中待估参数总数,n为样本容量,L为最大似然函数值。
参数估计与残差诊断
参数通常使用极大似然估计(MLE)或最小二乘法进行求解。模型拟合完成后,需对残差序列进行严格检验,确保其符合以下条件:
- 残差为白噪声——可通过Ljung-Box检验验证;
- 残差无显著自相关——借助ACF图检查;
- 残差服从正态分布——可利用Q-Q图或Shapiro-Wilk检验判断。
预测与置信区间计算
基于已训练的ARIMA模型,可对未来h步进行点预测,预测值为条件期望:
t+h = E(Xt+h | Xt, Xt-1, ...)
同时,可构造预测区间以反映不确定性,其计算公式为:
t+h ± zα/2 × √(Σi=0h-1 ψiσ)
其中,ψi 来自模型的MA(∞)表示形式,σ 为残差方差,zα/2 为标准正态分布的分位数。
Python代码实现示意
以下是使用Python进行ARIMA建模的基本流程框架(仅展示结构逻辑,不含完整执行代码):
import pandas as pd
from statsmodels.tsa.arima.model import ARIMA
from statsmodels.tsa.stattools import adfuller, acf, pacf
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
# 数据加载与预处理
data = pd.read_csv('time_series_data.csv')
ts = data['value']
# ADF平稳性检验
result = adfuller(ts)
print('ADF Statistic:', result[0])
print('p-value:', result[1])
# 差分处理
diff_ts = ts.diff().dropna()
# 绘制ACF与PACF图辅助定阶
plot_acf(diff_ts)
plot_pacf(diff_ts)
# 拟合ARIMA模型
model = ARIMA(ts, order=(p, d, q))
fitted_model = model.fit()
print(fitted_model.summary())
# 残差检验
residuals = fitted_model.resid
plot_acf(residuals)
# 进行未来h步预测
forecast = fitted_model.forecast(steps=h)
[此处为图片2]数据加载与平稳性检验是时间序列分析的重要步骤。首先通过 pandas 读取包含日期列的 CSV 文件,并将日期设置为索引:
import statsmodels.api as sm
from statsmodels.tsa.stattools import adfuller
data = pd.read_csv('time_series.csv', parse_dates=['date'], index_col='date')
接着使用 ADF(Augmented Dickey-Fuller)检验判断时间序列是否平稳:
result = adfuller(data['value'])
print(f'ADF p-value: {result[1]}')
若检验结果显示序列非平稳(如 p 值大于显著性水平),则可进行一阶差分处理以增强平稳性:
data['diff'] = data['value'].diff().dropna()
[此处为图片1]
在完成数据预处理后,构建 ARIMA 模型进行拟合。以下示例采用 (1,1,1) 阶参数:
model = sm.tsa.ARIMA(data['value'], order=(1,1,1))
results = model.fit()
print(results.summary())
模型训练完成后,可以对未来若干期进行预测。例如,预测未来 10 个时间点的值:
forecast = results.get_forecast(steps=10)
print(forecast.predicted_mean)
[此处为图片2]
预测精度评估指标
为了衡量模型预测效果,常用以下两个统计指标:
均方根误差(RMSE):
该指标反映预测值与实际值之间的偏差大小,计算公式如下:
RMSE = \sqrt{\frac{1}{n}\sum_{t=1}^n (X_t - \hat{X}_t)^2}
平均绝对百分比误差(MAPE):
用于表示相对误差水平,适合不同量纲的数据比较,其表达式为:
MAPE = \frac{100\%}{n}\sum_{t=1}^n \left| \frac{X_t - \hat{X}_t}{X_t} \right|
季节性ARIMA模型扩展(SARIMA)
当时间序列呈现明显的周期性波动时,应使用 SARIMA 模型进行建模。该模型在传统 ARIMA 的基础上引入季节性参数,完整形式为 SARIMA(p,d,q)(P,D,Q)s,其中:
- s:季节周期长度(如月度数据中年度周期 s=12)
- P:季节性自回归阶数
- D:季节性差分阶数
- Q:季节性移动平均阶数
对应的模型方程可表示为:
\Phi_P(L^s)\phi_p(L)(1-L^s)^D(1-L)^d X_t = \Theta_Q(L^s)\theta_q(L)\varepsilon_t
其中,\Phi_P 和 \Theta_Q 分别代表季节性自回归和移动平均的多项式函数。
[此处为图片3]


雷达卡


京公网安备 11010802022788号







