一、学习内容
1. 移动平均模型 (MA) 的原理与公式
移动平均模型 (MA):
- 移动平均模型 (MA) 是时间序列模型的一种,用于描述当前值与之前若干个白噪声项的线性组合。MA 模型捕捉了序列中的短期依赖关系,常用于处理白噪声较为明显的序列。
- MA(q) 模型的数学表达式为:
其中:
- 是时间 的观测值。
- 是序列的均值。
- 是白噪声项,均值为 0,方差为 。
- 是 MA 模型的参数,表示白噪声项的系数。
- 是滞后项的阶数。
2. 自回归模型 (AR) 的原理与公式
自回归模型 (AR):
- 自回归模型 (AR) 是时间序列模型的一种,用于描述当前值与之前若干个自身值的线性组合。AR 模型捕捉了序列中的长期依赖关系,适合于平稳时间序列。
- AR(p) 模型的数学表达式为:
其中:
- 是时间 的观测值。
- 是序列的均值。
- 是 AR 模型的参数,表示自回归项的系数。
- 是白噪声项。
- 是滞后项的阶数。
3. ARMA 模型的概念与组合方法
ARMA 模型:
- ARMA 模型结合了自回归 (AR) 模型和移动平均 (MA) 模型的特点,用于描述当前值与之前若干个自身值及白噪声项的线性组合。ARMA 模型适用于平稳时间序列。
- ARMA(p, q) 模型的数学表达式为:
其中:
- 是时间 的观测值。
- 是序列的均值。
- 是 AR 模型的参数。
- 是 MA 模型的参数。
- 是白噪声项。
- 和 分别是 AR 和 MA 的滞后项阶数。
二、实战案例
我们将使用 statsmodels
库对时间序列数据进行 AR、MA 和 ARMA 模型的拟合,并比较各模型的拟合效果。
1. 数据加载与原始数据可视化
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from statsmodels.tsa.arima.model import ARIMA
from statsmodels.tsa.stattools import acf, pacf
# 加载时间序列数据集
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. 一阶差分
# 进行一阶差分,使时间序列平稳
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()
程序解释:
- 对时间序列进行一阶差分以消除趋势,使其成为平稳序列。绘制差分后的时间序列图以观察差分效果。
结果输出:
3. ACF 和 PACF 计算与可视化
# 计算 ACF 和 PACF
acf_vals = acf(data_diff, nlags=20)
pacf_vals = pacf(data_diff, nlags=20)
# 绘制 ACF 和 PACF 图
plt.figure(figsize=(12, 6))
plt.subplot(121)
plt.stem(acf_vals, use_line_collection=True)
plt.title('ACF')
plt.xlabel('Lags')
plt.ylabel('ACF Value')
plt.subplot(122)
plt.stem(pacf_vals, use_line_collection=True)
plt.title('PACF')
plt.xlabel('Lags')
plt.ylabel('PACF Value')
plt.tight_layout()
plt.show()
程序解释:
- 计算并绘制差分后的时间序列的自相关函数 (ACF) 和偏自相关函数 (PACF),帮助确定 AR 和 MA 模型的阶数。
结果输出:
4. AR 模型拟合
# AR 模型拟合
model_ar = ARIMA(data_diff, order=(2, 0, 0))
results_ar = model_ar.fit()
print("AR(2) Model Summary:")
print(results_ar.summary())
程序解释:
使用 ARIMA
函数拟合自回归模型 (AR),设置 order=(2, 0, 0)
表示使用 AR(2) 模型。输出模型的摘要信息。
结果输出:
AR(2) Model Summary:
SARIMAX Results
==============================================================================
Dep. Variable: Passengers No. Observations: 143
Model: ARIMA(2, 0, 0) Log Likelihood -694.988
Date: Wed, 28 Aug 2024 AIC 1397.975
Time: 21:27:30 BIC 1409.827
Sample: 02-01-1949 HQIC 1402.791
- 12-01-1960
Covariance Type: opg
==============================================================================
coef std err z P>|z| [0.025 0.975]
------------------------------------------------------------------------------
const 2.4075 3.125 0.770 0.441 -3.717 8.532
ar.L1 0.3792 0.088 4.331 0.000 0.208 0.551
ar.L2 -0.2314 0.064 -3.627 0.000 -0.357 -0.106
sigma2 973.3675 111.006 8.769 0.000 755.801 1190.934
===================================================================================
Ljung-Box (L1) (Q): 0.17 Jarque-Bera (JB): 0.50
Prob(Q): 0.68 Prob(JB): 0.78
Heteroskedasticity (H): 8.24 Skew: -0.06
Prob(H) (two-sided): 0.00 Kurtosis: 3.26
===================================================================================
5. MA 模型拟合
# MA 模型拟合
model_ma = ARIMA(data_diff, order=(0, 0, 2))
results_ma = model_ma.fit()
print("\nMA(2) Model Summary:")
print(results_ma.summary())
程序解释:
- 使用
ARIMA
函数拟合移动平均模型 (MA),设置order=(0, 0, 2)
表示使用 MA(2) 模型。输出模型的摘要信息。
结果输出:
MA(2) Model Summary:
SARIMAX Results
==============================================================================
Dep. Variable: Passengers No. Observations: 143
Model: ARIMA(0, 0, 2) Log Likelihood -695.193
Date: Wed, 28 Aug 2024 AIC 1398.386
Time: 21:27:36 BIC 1410.237
Sample: 02-01-1949 HQIC 1403.201
- 12-01-1960
Covariance Type: opg
==============================================================================
coef std err z P>|z| [0.025 0.975]
------------------------------------------------------------------------------
const 2.4331 2.890 0.842 0.400 -3.230 8.097
ma.L1 0.3735 0.072 5.161 0.000 0.232 0.515
ma.L2 -0.2830 0.061 -4.670 0.000 -0.402 -0.164
sigma2 974.2968 110.557 8.813 0.000 757.608 1190.985
===================================================================================
Ljung-Box (L1) (Q): 0.03 Jarque-Bera (JB): 1.12
Prob(Q): 0.86 Prob(JB): 0.57
Heteroskedasticity (H): 7.24 Skew: -0.19
Prob(H) (two-sided): 0.00 Kurtosis: 3.22
===================================================================================
6. ARMA 模型拟合
# ARMA 模型拟合
model_arma = ARIMA(data_diff, order=(2, 0, 2))
results_arma = model_arma.fit()
print("\nARMA(2, 2) Model Summary:")
print(results_arma.summary())
程序解释:
- 使用
ARIMA
函数拟合 ARMA 模型,设置order=(2, 0, 2)
表示使用 ARMA(2, 2) 模型。输出模型的摘要信息。
结果输出:
ARMA(2, 2) Model Summary:
SARIMAX Results
==============================================================================
Dep. Variable: Passengers No. Observations: 143
Model: ARIMA(2, 0, 2) Log Likelihood -666.022
Date: Wed, 28 Aug 2024 AIC 1344.044
Time: 21:27:36 BIC 1361.821
Sample: 02-01-1949 HQIC 1351.267
- 12-01-1960
Covariance Type: opg
==============================================================================
coef std err z P>|z| [0.025 0.975]
------------------------------------------------------------------------------
const 2.5314 0.735 3.444 0.001 1.091 3.972
ar.L1 1.6478 0.028 58.897 0.000 1.593 1.703
ar.L2 -0.9095 0.025 -36.756 0.000 -0.958 -0.861
ma.L1 -1.9092 0.814 -2.344 0.019 -3.506 -0.313
ma.L2 0.9990 0.852 1.173 0.241 -0.671 2.669
sigma2 610.8383 534.405 1.143 0.253 -436.576 1658.252
===================================================================================
Ljung-Box (L1) (Q): 1.21 Jarque-Bera (JB): 2.78
Prob(Q): 0.27 Prob(JB): 0.25
Heteroskedasticity (H): 7.02 Skew: 0.33
Prob(H) (two-sided): 0.00 Kurtosis: 3.18
===================================================================================
三、结果分析
1. 原始数据的时间序列图
- 图表显示了航空乘客数量随时间的变化,呈现出上升趋势和季节性波动。
2. 差分后的时间序列图
- 差分后的序列消除了趋势,表现出围绕零线波动的特点,序列趋于平稳。
3. ACF 和 PACF 图
- ACF 图展示了不同滞后时间下的自相关性,PACF 图展示了不同滞后时间下的偏自相关性。通过这些图可以帮助确定 AR 和 MA 模型的阶数。
4. AR 模型的摘要
- 输出 AR(2) 模型的拟合结果,包括模型的系数估计、标准误差、t 统计量等。AR 模型适合捕捉序列中的长期依赖关系。
5. MA 模型的摘要
- 输出 MA(2) 模型的拟合结果,MA 模型擅长捕捉序列中的短期依赖和白噪声项。
6. ARMA 模型的摘要
- 输出 ARMA(2, 2) 模型的拟合结果,ARMA 模型结合了 AR 和 MA 的特点,提供了更灵活的