在时间序列分析中,两个重要的统计工具——自相关函数(ACF)和偏自相关函数(PACF)——被广泛应用于模型选择和数据解释。理解它们的区别和各自的用途,是构建和优化时间序列模型(如ARIMA模型)的基础。
什么是自相关函数(ACF)?
自相关函数(Autocorrelation Function, ACF)描述了时间序列与其自身滞后值之间的相似性。它是计算不同滞后期(Lag)下的序列值之间的相关性,以观察随时间延迟变化的依赖性。
什么是偏自相关函数(PACF)?
偏自相关函数(Partial Autocorrelation Function, PACF)是 ACF 的延伸,用来捕捉特定滞后值上的“纯”自相关,剔除了其他中间滞后值的影响。
ACF 和 PACF 的用途
-
模型选择:在ARIMA模型中,ACF和PACF的形状能够帮助我们确定参数 p、d、q 的值。特别是当序列差分后,ACF和PACF能清晰地展现哪些滞后项应该被纳入模型。
-
数据依赖性和周期性识别:通过 ACF 图,观察到显著相关的滞后项通常能帮助识别季节性或循环性模式。这些模式可能表明该时间序列受周期性因素(如季节或工作日)影响。
-
预测精度提升:通过对时间序列的ACF和PACF分析,可以在模型中剔除无关项,从而简化模型结构,提高模型的预测精度和稳定性。
ACF详解
自相关函数(ACF,Autocorrelation Function)用于衡量时间序列在不同滞后之间的相关性,反映序列中的周期性或依赖性。给定时间序列,ACF 在滞后 k 的值(记作
)可以通过以下公式计算:
其中:
- N 是序列的总长度。
是序列在时间 t 的值。
是序列的均值,即
。
- k 表示滞后阶数。
- 分子部分
计算在滞后 k 时序列的协方差。
- 分母部分
是序列的方差,使得
被标准化在
之间。
PACF详解
偏自相关函数(PACF,Partial Autocorrelation Function)用于测量时间序列中滞后之间的直接相关性。PACF 是自相关函数(ACF)的扩展,但它只考虑滞后项之间的直接关系,排除了中间项的影响。PACF的计算公式如下:
对于给定滞后阶数 k,PACF的值(记为 )可以通过多元线性回归模型来求解,具体步骤如下:
-
构造线性回归模型:令时间序列为
,则对于滞后阶数 k,我们可以通过以下多元回归模型估计 PACF:
其中,
表示误差项,
表示第 j 个滞后对当前时间点的直接影响系数。
-
解线性方程组:通过回归模型估计得到系数
,其中的
就是 PACF 的值。
-
Yule-Walker 方程:对于 AR(p) 模型,可以通过递归的 Yule-Walker 方程求解 PACF。
用例
下面我们尝试用ACF和PACF分析微软的股票价格:
import yfinance as yf
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
# download msft stock data
tickerSymbol = 'MSFT'
tickerData = yf.Ticker(tickerSymbol)
tickerDf = tickerData.history(period='1mo', start='2010-1-1', end='2020-1-1')
tickerDf = tickerDf[['Close']]
# plot stock price
plt.figure(figsize=(10,4))
plt.plot(tickerDf.Close)
plt.title('Stock Price over Time (%s)'%tickerSymbol, fontsize=20)
plt.ylabel('Price', fontsize=16)
for year in range(2015,2021):
plt.axvline(pd.to_datetime(str(year)+'-01-01'), color='k', linestyle='--', alpha=0.2)
# take first difference
first_diffs = tickerDf.Close.values[1:] - tickerDf.Close.values[:-1]
first_diffs = np.concatenate([first_diffs, [0]])
tickerDf['FirstDifference'] = first_diffs
# plot difference
plt.figure(figsize=(10,4))
plt.plot(tickerDf.FirstDifference)
plt.title('First Difference over Time (%s)'%tickerSymbol, fontsize=20)
plt.ylabel('Price Difference', fontsize=16)
for year in range(2015,2021):
plt.axvline(pd.to_datetime(str(year)+'-01-01'), color='k', linestyle='--', alpha=0.2)
MSFT 股票价格与价差图如下:
ACF 相关性分析:
acf_plot = plot_acf(tickerDf.FirstDifference)
PACF相关性分析:
pacf_plot = plot_pacf(tickerDf.FirstDifference)
从上图ACF与PACF相关性图表可以看出:
- 横轴(Lag):表示滞后期数,即滞后值的时间间隔。
- 纵轴(ACF 值):表示每个滞后期的自相关系数,范围从 -1 到 1,纵轴绝对值越大代表相关性越强。
- 置信区间:图表中蓝色区域称为置信区间,通常落在置信区间内的滞后期数可以被忽略。
- 从ACF/PACF的结果分析,MSFT的价格与Lag(1, 2, 5, 7)有一定的相关性。
- 在选择AR/MA等模型拟合MSFT价格时,可以首先尝试1,2,5,7等参数。
ACF 与 PACF 图的解释
在分析 ACF 和 PACF 图时,有几种常见的形状值得注意:
- ACF 快速衰减而 PACF 截尾:可能表示AR模型适合;
- PACF 快速衰减而 ACF 截尾:可能表示MA模型适合;
- ACF 和 PACF 都逐步衰减:可能表示ARMA模型适合。
例如,当观察到 ACF 在滞后2之后逐步衰减,而 PACF 在滞后2之后显著下降至不显著水平,则该时间序列可能符合一个AR(2)模型。
总结
ACF和PACF是时间序列分析中极为重要的工具,它们帮助我们识别序列中的依赖关系和周期性,从而为模型选择提供依据。通过结合ACF和PACF图,我们能够有效构建适合的AR/MA模型,提高时间序列预测的准确性。