ACF 与 PACF:深入了解时间序列分析的关键工具

在时间序列分析中,两个重要的统计工具——自相关函数(ACF)和偏自相关函数(PACF)——被广泛应用于模型选择和数据解释。理解它们的区别和各自的用途,是构建和优化时间序列模型(如ARIMA模型)的基础。

什么是自相关函数(ACF)?

自相关函数(Autocorrelation Function, ACF)描述了时间序列与其自身滞后值之间的相似性。它是计算不同滞后期(Lag)下的序列值之间的相关性,以观察随时间延迟变化的依赖性。

什么是偏自相关函数(PACF)?

偏自相关函数(Partial Autocorrelation Function, PACF)是 ACF 的延伸,用来捕捉特定滞后值上的“纯”自相关,剔除了其他中间滞后值的影响。

ACF 和 PACF 的用途
  1. 模型选择:在ARIMA模型中,ACF和PACF的形状能够帮助我们确定参数 p、d、q 的值。特别是当序列差分后,ACF和PACF能清晰地展现哪些滞后项应该被纳入模型。

  2. 数据依赖性和周期性识别:通过 ACF 图,观察到显著相关的滞后项通常能帮助识别季节性或循环性模式。这些模式可能表明该时间序列受周期性因素(如季节或工作日)影响。

  3. 预测精度提升:通过对时间序列的ACF和PACF分析,可以在模型中剔除无关项,从而简化模型结构,提高模型的预测精度和稳定性。

ACF详解

自相关函数(ACF,Autocorrelation Function)用于衡量时间序列在不同滞后之间的相关性,反映序列中的周期性或依赖性。给定时间序列y_t,ACF 在滞后 k 的值(记作 \rho_k)可以通过以下公式计算:

        \rho_k = \frac{\sum_{t=1}^{N-k} (y_t - \bar{y})(y_{t+k} - \bar{y})}{\sum_{t=1}^{N} (y_t - \bar{y})^2}

其中:

  • N 是序列的总长度。
  • y_t​ 是序列在时间 t 的值。
  • \bar{y} 是序列的均值,即 \bar{y} = \frac{1}{N} \sum_{t=1}^N y_t
  • k 表示滞后阶数。
  • 分子部分 \sum_{t=1}^{N-k} (y_t - \bar{y})(y_{t+k} - \bar{y}) 计算在滞后 k 时序列的协方差
  • 分母部分 \sum_{t=1}^{N} (y_t - \bar{y})^2 是序列的方差,使得\rho_k​ 被标准化在 [-1, 1]之间。

PACF详解

偏自相关函数(PACF,Partial Autocorrelation Function)用于测量时间序列中滞后之间的直接相关性。PACF 是自相关函数(ACF)的扩展,但它只考虑滞后项之间的直接关系,排除了中间项的影响。PACF的计算公式如下:

对于给定滞后阶数 k,PACF的值(记为 \phi_{k,k}​)可以通过多元线性回归模型来求解,具体步骤如下:

  1. 构造线性回归模型:令时间序列为 y_t​,则对于滞后阶数 k,我们可以通过以下多元回归模型估计 PACF:

            y_t = \alpha + \phi_{1,k} y_{t-1} + \phi_{2,k} y_{t-2} + \dots + \phi_{k,k} y_{t-k} + \epsilon_t

    其中,\epsilon_t表示误差项,\phi_{j,k} 表示第 j 个滞后对当前时间点的直接影响系数。

  2. 解线性方程组:通过回归模型估计得到系数\phi_{1,k}, \phi_{2,k}, \dots, \phi_{k,k},其中的\phi_{k,k}​ 就是 PACF 的值。

  3. 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模型,提高时间序列预测的准确性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值