龙空技术网

自回归:模型、自相关性与 Python 实现

BigQuant 1661

前言:

现在同学们对“自相关函数 例题”可能比较讲究,同学们都想要知道一些“自相关函数 例题”的相关内容。那么小编同时在网摘上汇集了一些有关“自相关函数 例题””的相关知识,希望朋友们能喜欢,朋友们一起来学习一下吧!

摘要

时间序列建模是预测基于时间的数据未来价值的一个非常有力的工具。基于时间的数据是在不同时间戳(时间间隔)观察到的数据,称为时间序列。这些时间间隔可以是有规律的,也可以是不规律的。时间序列模型根据过去数据中观测到的模式、趋势等,预测下一时期的价值。

时间序列模型根据过去的数据分析和训练模型,以便做出未来的预测。有许多时间序列模型可以做出这些预测。在本文中,您将了解一个这样的模型,自回归模型或 AR 模型。

目录自回归模型简介2阶自回归模型及推广到 p 阶自相关与部分自相关自相关函数(ACF)曲线和部分自相关函数(PACF)曲线在 Python 中实现 ACF 图和 PACF 图的可视化自回归模型的局限性自回归模型的 Python 实现自回归模型

在了解什么是自回归之前,让我们回想一下什么是回归模型。

回归模型是一种估计因变量(y)和自变量(X)之间关系的统计技术。因此,在使用回归模型时,需要处理两个变量。

例如,您有美国银行(称为 BAC)的股票价格和摩根大通(称为 JPM)的股票价格。

现在您希望根据 BAC 的股票价格来预测 JPM 的股票价格。这里,摩根大通的股票价格将成为因变量,y 和 BAC 的股票价格将成为自变量 X。假设 X 和 Y 之间存在线性关系,估计 X 和 Y 之间关系的回归模型是这样的:

其中m是方程式和c的斜率是常数。

现在,假设您只有一系列数据,例如JPM的股价。将根据JPM的过去股票估算,而不是使用第二次级别序列(BAC的股票价格),而是估算了JPM的股票价格。在任何时间点T,将观察结果表示为yt。您可以在任何点t,yt和任何点(T-1)的值(t-1),yt-1的值估计值之间的关系之间的关系,如下所示。

其中 Φ1是模型的参数,c 是常数。这是1阶的自回归模型。术语“自回归”是指变量对其自身过去的值进行回归。

与线性回归模型一样,自回归模型假设 yt 和 yt-1之间存在线性关系。这就是所谓的自相关。

P 阶自回归模型

在上面的示例中,您看到了如何使用过去的一个值(滞后项) yt-1来估计 yt 的值。您可以使用多个过去的术语来预测时间 t 的值。当模型中使用两个滞后值时,让我们看看模型的形式。

其中 Φ1和 Φ2是模型的参数,c 是常数。这是2阶的自回归模型。这里假设 yt 与过去的两个值有相关性,并预测为过去两个值的线性组合。

这个模型可以推广到下面的 p 阶。

P(p = 1,2,...,p)是模型的参数,C是常数。这是订单p的自动估计模型。在这里,YT被认为与其过去的P值有着相关性,并被预测为过去P值的线性组合。

有多种计算参数P的方法。

一些常用的技术是普通的最小平方技术和Yule-Walker方程。在数学上确定这些系数几乎没有复杂,并且超出了本文的范围。稍后,您将学习如何使用Python中的“ statsmodel”库估算这些参数。

您一定想知道,如何确定自动性模型的顺序P?

请记住,在了解AR(1)模型时,您遇到了一个术语 - 自相关。这是自动进度模型中非常重要的概念,也用于确定自动估计模型的顺序P。让我们看看如何。

自相关与部分自相关

正如您已经看到的,自回归模型根据过去的值预测当前值。这意味着该模型假定时间序列的过去值正在影响其当前值。这就是所谓的自相关。

换句话说,自相关只不过是一个相关系数。但这里的相关性不是在两个变量之间测量的。它是在一个时间序列之间测量的,在连续的时间间隔内有自己的滞后值。

顾名思义,自相关意味着与自身的相关性。有时,自相关也称为序列相关或滞后相关。

与相关系数一样,自相关也衡量变量的当前值与其过去值之间的关系程度。自相关的值在 -1和 + 1之间。

-1表示完全负自相关,

+ 1意味着一个完美的正相关

0表示没有自相关性。

由于自相关性度量了数据的当前值和过去值之间的关系,因此它在度量数据的随机性方面非常有用。数据中的这种随机性可以通过使用自相关函数(ACF)图来检测。

让我们来理解什么是偏自相关。

偏自相关是变量与其滞后值之间的条件相关。这意味着,时间序列的当前值 yt 和它的滞后值 yt-h 之间的部分自相关性将是 yt 和 yt-h 之间的条件相关性,条件是 t 和 t-h 之间的所有滞后项,即 yt-1,yt-2,... ,yt-h + 1。这意味着,不同于自相关值,部分自相关值控制其他滞后阶,并忽略其影响。

利用部分自相关函数(PACF)图识别自回归模型的阶次。

现在让我们继续探索 ACF 图和 PACF 图。

自相关函数(ACF)曲线和部分自相关函数(PACF)曲线

自相关函数图是不同滞后值的自相关图。R1测量变量与其第一个滞后值(即 yt 和 yt-1)之间的相关性。类似地,r2测量变量与其第二个滞后值(即 yt 和 yt-2)之间的相关性。诸如此类。

ACF 图将绘制 r0,r1,r2,... 对应于各个滞后阶数0,1,2的值... 这些值用置信区间绘制,这有助于我们确定一个值是否具有统计显着性。在用 Python 可视化 ACF 情节时,也说明了同样的问题。

注意,r0是变量与其自身之间的相关性,因此总是等于1。

ACF 图是数据随机性的一个很好的指示器。对于非随机数据,至少一个滞后项的自相关值在统计学上是显著的(显著的非零)。然而,这并不是衡量随机性的唯一标准。所有滞后项的零自相关并不一定意味着随机数据,反之亦然。

与自相关函数图一样,偏自相关函数图是不同滞后项偏自相关的图。它们还用一个置信区间作图,这个置信区间可以帮助我们识别重要的滞后项,然后这些滞后项就成为自回归模型的顺序。您可以阅读更多关于自相关和自协方差的内容

接下来您将学习如何在 Python 中可视化 ACF 和 PACF 情节。

在 Python 中实现 ACF 图和 PACF 图的可视化

为了使图形可视化,我们将使用 yfinance 图书馆下载2019年1月至2020年4月期间摩根大通的股价数据。

# Import yfinanceimport yfinance as yf# Import pandasimport pandas as pd# Download the datafile from yfinancedata = yf.download("JPM", start="2019-01-02", end="2020-04-30")[['Close']]data.index = pd.to_datetime(data.index)

可以分别使用 statsmodel 库中的 plot _ ACF 和 plot _ PACF 方法绘制 ACF 和 PACF 图。

# Import matplotlib and set the styleimport matplotlib.pyplot as plt%matplotlib inlineplt.style.use('seaborn-darkgrid')# Import plot_acf from statsmodelsfrom statsmodels.graphics.tsaplots import plot_acfplt.rc("figure", figsize=(10, 7))# Plot ACF of JPM stock prices for past 40 lagsplot_acf(data.Close, lags=40)plt.xlabel('Lags', fontsize=12)plt.ylabel('Autocorrelation', fontsize=12)plt.title('Autocorrelation of JPM stock price', fontsize=14)plt.show()

图1. 摩根大通股票价格的 ACF 图

从上面的图中,您可以看到滞后0处的自相关值为1(因为它是变量与其自身的相关性)。你所看到的蓝色区域是置信带和自相关性最高达到滞后20位于这个蓝色区域之外。

这意味着滞后20的价值在统计学上是显著的,也就是说,它们影响当前的价格。同时,随着滞后项的增加,自相关逐渐趋近于零。这意味着我们走得越远,相关性就越小。

# Import plot_pacf from statsmodelsfrom statsmodels.graphics.tsaplots import plot_pacf# Plot PACF of JPM stock price of past 40 lagsplot_pacf(data.Close, lags=40)plt.xlabel('Lags', fontsize=12)plt.ylabel('Partial Autocorrelation', fontsize=12)plt.title('Partial Autocorrelation of JPM stock price', fontsize=14)plt.show()

图2摩根大通股票价格的 PACF 图

从上面的图表中你可以看到滞后1,2,3,4等位于置信区域(蓝色区域)之外,因此具有统计学意义。

最后,您将学习估计自回归模型的参数。但在此之前,让我们看看是否有任何挑战。

自回归模型的局限性

需要注意的一点是,自回归模型假设基础数据来自平稳过程。平稳时间序列是一个时间序列,其统计特性,如均值和方差,是独立的时间点,它是观察。你可以在这里了解更多关于平稳性的信息。

由于现实生活中的大多数时间序列是非平稳的,如果不对数据进行变换,AR 模型就不能用于这些时间序列。

自回归模型的 Python 实现

由于 AR 模型只能用于平稳数据,我们首先检验 JPM 股票价格是否是平稳的。您可以使用 statsmodel 库中的 adfuller 方法来检查这一点。

# Import adfullerfrom statsmodels.tsa.stattools import adfullerresult = adfuller(data.Close)print('p-value: %.2f' % result[1])

下面代码的输出如下:

p-value: 0.21

由于 p 值大于0.05,时间序列不是平稳的。让我们计算序列的一阶差,并再次检验平稳性。

# Plot PACF of JPM stock price of past 40 lagsplot_pacf(data.Difference, lags=40)plt.xlabel('Lags', fontsize=12)plt.ylabel('Partial Autocorrelation', fontsize=12)plt.title('Partial Autocorrelation of First Order Differenced Series', fontsize=14)plt.show()

图3.第一顺序差异的PACF图

从上面的图中,你可以看到滞后1、2、3、4等位于置信区域(蓝色区域)之外,因此具有统计学意义。此外,该图表明,我们可以拟合一个1阶的自回归模型的差异系列。

您可以使用 statsmodel 库中的 ARIMA 方法来适应模型。

# Import ARIMAfrom statsmodels.tsa.arima_model import ARIMA# Train autoregression model of order 1model_fit = ARIMA(data['Close'][:int(len(data)*0.70)], (1, 0, 0)).fit()print(model_fit.params.round(2))

下面代码的输出如下:

从上面的输出,你可以看到拟合的模型是:

类似地,您可以在上面的代码中替换 p 的值,并适合不同顺序的 AR 模型。

结论

自回归是时间序列分析中最常用的工具之一。自回归模型的工作原理是任何时间序列在任何给定时间点的值与其过去的值相关。

在这个博客中,您已经了解了自回归模型的结构、顺序和局限性。Python中的statsmodel 库有一个名为 ARIMA 的方法。ARIMA 方法可以用来拟合具有适当参数的 AR 模型。

时间序列分析中另一个非常常用的模型是移动平均模型。自回归模型与移动平均模型一起构成自回归移动平均(ARMA)模型。

不仅 ARMA 模型,而且自回归也是许多其他时间序列模型的基础。关于时间序列分析和各种时间序列模型,小Q会在往后几期进行讲解。

标签: #自相关函数 例题