当前位置:   article > 正文

时间序列 ACF 和 PACF 理解、代码、可视化

acf值公式

我们说时间序列可以被预测,主要基于以下事实:我们可以部分掌握影响该时间序列的因素的变化情况。换句话说,对时间序列进行预测,其实就是利用各种理论和工具,对观察到的时间序列进行“抽丝剥茧”,以试图掌握其变化的本质,从而对未来的表现进行预测。

而自相关性是时序预测的基础,对于时序的平稳性、白噪声检测、确定 模型中的阶数(p/q)有着重要的作用。本篇将着重介绍自相关的概念 和 。

ACF 自相关函数

概念理解

ACF(Autocorrelation Function)就是用来计算时间序列自身的相关性的函数。

对于同一时间 的计算,,这个很好理解。

如果是不同的时间,比如 ,该如何计算呢?

实际上,在应用自相关函数时,其输入分别为原始的时间序列 及其 阶滞后序列 ,于是 就变成了:

,这里两个序列的长度是一致的,如下图所示:

35b359b3261800a437a3113c31b4d4a8.png

计算和代码

ACF的公式定义为:

(无偏)

(有偏)

Python代码实现可以直接使用statsmodels包进行计算,当然也可以自己通过Numpy复现一遍公式,结果是一样的。

  1. import numpy as np
  2. # statsmodels包计算acf
  3. import statsmodels.tsa.stattools as stattools
  4. def default_acf(ts, k):
  5.     return statools.acf(ts, nlags=k, unbiased=False)
  6. # 手撸公式计算acf,有偏
  7. def acf(ts, k):
  8.     """ Compute autocorrelation coefficient, biased
  9.     """
  10.     x = np.array(ts) - np.mean(ts)
  11.     coeff = np.zeros(k+1, np.float64) # to store acf
  12.     coeff[0] = x.dot(x) # N*c(0)
  13.     for i in range(1, k+1):
  14.         coeff[i] = x[:-i].dot(x[i:]) # (N-k)*c(i)
  15.         
  16.     return coeff / coeff[0]

可视化

通过可视化可以更清楚的看出不同lag的系数值和趋势变化,通过statsmodels函数的直接绘制,以下是示例。

  1. import pandas as pd
  2. import matplotlib.pyplot as plt
  3. from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
  4. df = pd.read_excel('data.xlsx',engine='openpyxl')
  5. df['price'].plot()
  6. plot_acf(df['price'], lags=40, adjusted=False)
  7. plt.show()
095e450929691e79a3f7b7621651d894.png 9d24fad9ffc520ae2b3269a6f9ae9cdc.png

第一个图是一组时间序列的数据。第二个图是计算的ACF相关系数图。

ACF图的横坐标表示滞后的阶数,纵坐标表示对应的滞后序列与原始序列的相关系数。可以看出,随着滞后阶数的增加,滞后序列与原始序列的相关性也在不断地降低。图中的蓝色区域表示置信区间,用来标识相关系数是否具有统计显著性。简单来说,如果相关系数落在置信区间内,表明对应的两个序列的相关系数并不能代表其真实相关性。

即使是两个完全不相干的白噪声序列,由于随机性的影响,其相关系数也不可能全都为0,因此,需要使用置信区间来过滤掉那些由于随机性造成的“伪相关”。

PACF 偏自相关函数

概念理解

我们知道求导是对所有项都求导,求偏导只对某一个求导忽略其他项。 和 也可以理解为这样的关系。

前面我们计算 自相关函数时,得到的并不是 与 之间单纯的相关关系。因为 同时还会受到中间 个随机变量 、... 的影响,而这 个随机变量又都和 具有相关关系,所以自相关系数里面实际掺杂了其他变量对 与 的影响。

为了得到  对 的直接影响,引入了偏自相关系数 的概念。滞后 偏自相关系数是指,对于平稳时间序列 ,在剔除了中间 个随机变量 、... 的干扰之后, 对 影响的纯相关程度

计算和代码

的计算比 要复杂很多。这里我们借助AR模型来说明,对于AR(p)模型,一般会有如下假设:

其中, 是线性相关系数, 是噪声,即我们假设点 与前 个点 是线性相关的。而 所要表示的就是点 与点 的相关性,所以,

序列的偏相关系数PACF

有几种方法可以求解相关系数,方法包括最小二乘法(MLS)、尤尔-沃克方程(Yule-Walker equation)、伯格算法(Burg"s method。由于公式推导内容较多,本篇对求解方法不做详细介绍。

Python计算代码如下:

  1. import numpy as np
  2. from scipy.linalg import toeplitz
  3. # 使用statsmodels
  4. import statsmodels.tsa.stattools as stattools
  5. def default_pacf(ts, k):
  6.     return statools.pacf(ts, nlags=k, unbiased=True)
  7. # 尤尔-沃克方程公式复现
  8. def yule_walker(ts, order):
  9.     ''' Solve yule walker equation
  10.     '''
  11.     x = np.array(ts) - np.mean(ts)
  12.     n = x.shape[0]
  13.     r = np.zeros(order+1, np.float64) # to store acf
  14.     r[0] = x.dot(x) / n # r(0)
  15.     for k in range(1, order+1):
  16.         r[k] = x[:-k].dot(x[k:]) / (n - k) # r(k)
  17.     R = toeplitz(r[:-1])
  18.     return np.linalg.solve(R, r[1:]) # solve `Rb = r` to get `b`
  19. def pacf(ts, k):
  20.     ''' Compute partial autocorrelation coefficients for given time series,unbiased
  21.     '''
  22.     res = [1.]
  23.     for i in range(1, k+1):
  24.         res.append(yule_walker(ts, i)[-1])
  25.     return np.array(res)

可视化

使用statsmodels函数直接绘制,methond可以选择合适的方法求解,下面使用最小二乘法ols进行求解。b5e3dc47f81777dbb292c16c8f4bcf8a.png

  1. # 使用最小二乘法ols求解
  2. plot_pacf(df['price'], lags=40,  method='ols')
  3. plt.show()
75866184f7522d42180a67e6eec748dc.png

以上就是对 和 的介绍,理解自相关的概念对于学习时间序列非常重要,下一篇将介绍它们的应用场景。

参考链接

[1].https://blog.csdn.net/SunJW_2017/article/details/126993853,芳樽里的歌
[2].https://www.jianshu.com/p/811f9ea0b52d,洪于祥 [3].https://zhuanlan.zhihu.com/p/59089924,gwave [4].https://www.statsmodels.org/ [5].https://mp.weixin.qq.com/s/llMZaMkhoXLRDlFxoFlXiw,seriesc

--end--

 
 

04505045df2bb219224816ad246754a1.jpeg

 
 
 
 
 
 
 
 
 
 
 
 
  1. 往期精彩回顾
  2. 适合初学者入门人工智能的路线及资料下载(图文+视频)机器学习入门系列下载机器学习及深度学习笔记等资料打印《统计学习方法》的代码复现专辑
  • 交流群

欢迎加入机器学习爱好者微信群一起和同行交流,目前有机器学习交流群、博士群、博士申报交流、CV、NLP等微信群,请扫描下面的微信号加群,备注:”昵称-学校/公司-研究方向“,例如:”张小明-浙大-CV“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~(也可以加入机器学习交流qq群772479961)

869906dd57d71faf75a9edc388c96b39.png

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/656121
推荐阅读
相关标签
  

闽ICP备14008679号