用Python实现时间序列模型实战——Day 6: ARIMA 模型的理论基础

一、学习内容
1. ARIMA 模型的定义与公式推导

ARIMA 模型

  • ARIMA 模型全称为自回归积分滑动平均模型 (AutoRegressive Integrated Moving Average),用于分析和预测单变量时间序列数据。ARIMA 模型结合了自回归 (AR) 模型、差分 (I) 和移动平均 (MA) 模型的特点,能够处理非平稳时间序列。

ARIMA 模型的公式

  • ARIMA 模型通常表示为 ARIMA(p, d, q),其中:

    • p 表示自回归 (AR) 项的阶数。
    • d 表示差分 (I) 的次数,用于将非平稳序列转换为平稳序列。
    • q 表示移动平均 (MA) 项的阶数。
  • ARIMA(p, d, q) 模型的数学表达式

\nabla^d y_t = \mu + \phi_1 \nabla^d y_{t-1} + \dots + \phi_p \nabla^d y_{t-p} + \epsilon_t + \theta_1 \epsilon_{t-1} + \dots + \theta_q \epsilon_{t-q}

其中:

  • y_t​ 是时间 t 的原始序列值。
  • \nabla^d y_t表示经过 d 次差分后的平稳序列。
  • \mu 是常数项。
  • \phi_1, \dots, \phi_p 是 AR 项的系数。
  • \epsilon_t 是白噪声项。
  • \theta_1, \dots, \theta_q​ 是 MA 项的系数。
2. ARIMA 模型的参数识别 (p, d, q)

差分次数 d

  • 差分次数 d 的选择基于序列的平稳性。通过进行差分,可以消除趋势和季节性,使时间序列变为平稳。一般通过观察时间序列图或进行平稳性检验(如 ADF 检验)来判断是否需要差分以及差分的次数。

自回归阶数 p 和 移动平均阶数 q

  • 自回归阶数 p 和移动平均阶数 q 的选择基于自相关函数 (ACF) 和偏自相关函数 (PACF) 的图形分析。
    • ACF 图:用于识别 MA 项的阶数。MA 模型的 ACF 图在阶数 q 之后通常会出现截尾。
    • PACF 图:用于识别 AR 项的阶数。AR 模型的 PACF 图在阶数 p 之后通常会出现截尾。
3. 使用 ACF 和 PACF 选择 ARIMA 模型的参数
  • 通过绘制差分序列的 ACF 和 PACF 图,可以帮助我们确定 ARIMA 模型的参数 p 和 q。
  • d 的选择通常先通过差分序列的平稳性来确定,之后根据差分后的平稳序列来选择 p 和 q。
二、实战案例

我们将使用 statsmodels 库对某时间序列数据进行 ARIMA 模型的参数选择与拟合。

程序解释
1. 数据加载与原始数据可视化
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from statsmodels.tsa.arima.model import ARIMA
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
from statsmodels.tsa.stattools import adfuller

# 加载时间序列数据集
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/airline-passengers.csv"
data = pd.read_csv(url, parse_dates=['Month'], index_col='Month')

# 绘制原始数据的时间序列图
plt.figure(figsize=(12, 6))
plt.plot(data['Passengers'], label='Original')
plt.title('Original Time Series')
plt.xlabel('Date')
plt.ylabel('Number of Passengers')
plt.legend()
plt.grid(True)
plt.show()

程序解释: 

  • 载入航空乘客数据集,并绘制原始时间序列图,以观察乘客数量的趋势和季节性波动。

输出结果:

原始数据的时间序列图:图表显示了航空乘客数量随时间的变化,呈现出上升趋势和季节性波动,这表明序列是非平稳的。 

2. 平稳性检验(ADF 检验)
# 进行ADF平稳性检验
adf_test = adfuller(data['Passengers'])
print('ADF Statistic:', adf_test[0])
print('p-value:', adf_test[1])

程序解释:  

  • 使用 adfuller 进行 ADF 平稳性检验,以确定是否需要进行差分。ADF 检验的 p 值大于 0.05 表明序列是非平稳的,需进一步差分处理。

输出结果:

ADF Statistic: 0.8153688792060597
p-value: 0.9918802434376411

ADF 平稳性检验结果:ADF 检验的 p 值通常较大(大于 0.05),说明原始时间序列是非平稳的,需要进行差分处理。 

3. 一阶差分
# 一阶差分
data_diff = data.diff().dropna()

# 绘制差分后的时间序列图
plt.figure(figsize=(12, 6))
plt.plot(data_diff['Passengers'], label='Differenced')
plt.title('Differenced Time Series')
plt.xlabel('Date')
plt.ylabel('Differenced Passengers')
plt.legend()
plt.grid(True)
plt.show()

程序解释:  

  • 对时间序列进行一阶差分,以消除趋势,使其成为平稳序列。差分后的序列应表现为围绕零线的随机波动。

输出结果:

差分后的时间序列图:差分后的序列消除了趋势,呈现出围绕零线的随机波动,表明序列趋于平稳。 

4. ACF 和 PACF 图的绘制
# 绘制 ACF 和 PACF 图
plt.figure(figsize=(12, 6))
plt.subplot(121)
plot_acf(data_diff['Passengers'], lags=40, ax=plt.gca())
plt.title('ACF')

plt.subplot(122)
plot_pacf(data_diff['Passengers'], lags=40, ax=plt.gca(), method='ywm')
plt.title('PACF')

plt.tight_layout()
plt.show()

程序解释:  

  • 绘制差分后序列的 ACF 和 PACF 图,用于识别 ARIMA 模型的参数 p 和 q。通常,ACF 图用于确定 MA 项的阶数 q,而 PACF 图用于确定 AR 项的阶数 p。

输出结果:

ACF 和 PACF 图:ACF 图和 PACF 图帮助识别 ARIMA 模型的阶数。本例中,ACF 图显示了滞后期的自相关性消失较快,而 PACF 图的截尾现象表明可以选择 AR(2) 和 MA(2) 作为模型参数。 

5. ARIMA 模型拟合
# ARIMA 模型拟合 (p, d, q) = (2, 1, 2)
model = ARIMA(data['Passengers'], order=(2, 1, 2))
results = model.fit()

# 输出模型摘要
print(results.summary())

程序解释:  

  • 根据 ACF 和 PACF 图选择的 p、d 和 q 值,使用 ARIMA 函数拟合 ARIMA 模型。本例中,选择 p=2d=1(差分一次)和 q=2 来拟合 ARIMA(2, 1, 2) 模型。
  • 输出模型的摘要信息,包括模型参数的估计、标准误差、t 统计量等。

输出结果:

ARIMA 模型的摘要:ARIMA(2, 1, 2) 模型的拟合结果摘要包括模型参数的估计值、标准误差、t 统计量和 p 值。模型摘要还包括 AIC(赤池信息准则)和 BIC(贝叶斯信息准则)等指标,用于评估模型的优劣。通过模型摘要,我们可以了解每个参数在模型中的贡献,并评估模型的总体拟合效果。 

6. 模型残差分析
# 绘制模型残差
residuals = results.resid
plt.figure(figsize=(12, 6))
plt.plot(residuals)
plt.title('ARIMA Model Residuals')
plt.xlabel('Date')
plt.ylabel('Residuals')
plt.grid(True)
plt.show()

 输出结果:

SARIMAX Results                                
==============================================================================
Dep. Variable:             Passengers   No. Observations:                  144
Model:                 ARIMA(2, 1, 2)   Log Likelihood                -671.673
Date:                Thu, 29 Aug 2024   AIC                           1353.347
Time:                        20:46:55   BIC                           1368.161
Sample:                    01-01-1949   HQIC                          1359.366
                         - 12-01-1960                                         
Covariance Type:                  opg                                         
==============================================================================
                 coef    std err          z      P>|z|      [0.025      0.975]
------------------------------------------------------------------------------
ar.L1          1.6850      0.020     83.059      0.000       1.645       1.725
ar.L2         -0.9548      0.017    -55.419      0.000      -0.989      -0.921
ma.L1         -1.8432      0.125    -14.790      0.000      -2.087      -1.599
ma.L2          0.9953      0.135      7.371      0.000       0.731       1.260
sigma2       665.9552    114.140      5.835      0.000     442.245     889.665
===================================================================================
Ljung-Box (L1) (Q):                   0.30   Jarque-Bera (JB):                 1.84
Prob(Q):                              0.59   Prob(JB):                         0.40
Heteroskedasticity (H):               7.38   Skew:                             0.27
Prob(H) (two-sided):                  0.00   Kurtosis:                         3.14
===================================================================================

输出结果: 

  • 模型残差分析:模型残差图展示了 ARIMA 模型拟合后的残差序列。如果模型拟合良好,残差应该是白噪声,这意味着残差序列应表现为零均值、无自相关的随机波动。 

# 残差的 ACF 图
plot_acf(residuals, lags=40)
plt.title('Residuals ACF')
plt.show()

 程序解释: 

  • 绘制模型残差序列,检查残差是否为白噪声。如果残差没有显著的自相关性(ACF 图显示大部分自相关系数接近于零),则说明模型拟合效果较好。

输出结果:

进一步绘制残差的 ACF 图,以检查残差是否存在显著的自相关性。如果残差的 ACF 图中,大部分滞后期的自相关系数接近于零,且没有明显的模式,则说明模型残差是白噪声,模型拟合效果较好 。

三、结果分析
1. 差分处理
  • 差分后的序列消除了原始数据中的趋势成分,表现为平稳的随机波动。差分是将非平稳序列转化为平稳序列的关键步骤,使得后续的 ARIMA 模型可以有效应用。
2. ACF 和 PACF 图
  • ACF 图显示了差分后序列的自相关结构,帮助确定 MA 模型的阶数 q。
  • PACF 图显示了差分后序列的偏自相关结构,帮助确定 AR 模型的阶数 p。
  • 在本例中,选择 AR(2) 和 MA(2) 是基于 PACF 截尾和 ACF 减弱的特点。
3. ARIMA 模型拟合
  • ARIMA(2, 1, 2) 模型结合了自回归项、差分项和移动平均项,通过最大似然估计(MLE)方法拟合模型参数。模型摘要提供了各参数的统计显著性,以及 AIC、BIC 指标,表明模型的拟合效果。
4. 残差分析
  • 模型残差图显示,残差序列表现为白噪声,没有显著的自相关性,这说明 ARIMA 模型已经很好地捕捉了时间序列的结构,剩余的误差部分是随机的。
  • 如果残差的 ACF 图显示滞后期的自相关性较弱,则表明模型拟合充分,没有漏掉显著的序列信息。
5. 模型的评价
  • 通过 AIC 和 BIC 等信息准则,评估模型的优劣,并与其他候选模型进行比较。AIC 和 BIC 越低,模型的表现通常越好。
  • ARIMA(2, 1, 2) 模型在本案例中的表现良好,残差是白噪声,模型能够有效地对时间序列进行建模。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值