了解时间序列分析中的自相关性

212 阅读5分钟

了解自相关的工作原理对初学者来说是至关重要的,可以使他们的时间序列分析之旅变得更容易。

照片:Chris LiveranionUnsplash

我在两年前开始了我的时间序列分析之旅。最初,我开始通过YouTube视频学习,在那里我遇到了自相关,一个时间序列分析的基本概念。根据一些视频,自相关的定义是一个时间序列与其之前版本的关系/相关性。还有一些人说,由于我们需要两个变量来计算相关性,但在一个时间序列中,我们只有一个变量,我们需要计算时间序列与自身的'k'th滞后版本的相关性。

什么是'k'th滞后?

这是我想到的第一个问题。随着时间的推移,我知道一个具有'k'滞后的时间序列(y)是其在时间上落后于't-k'时期的版本。滞后(k=1)的时间序列是原始时间序列的一个版本,在时间上落后1个周期,即y(t-1)。

这些视频大多以股票市场的每日价格为例来解释时间序列分析。这些价格是每天记录的。他们解释说,股票价格的自相关是当前价格与落后于时间的 "k "时期的价格的相关性。因此,滞后的自相关(k=1)是与今天的价格y(t)和昨天的价格y(t-1)的相关性。同样地,对于k=2,自相关是计算y(t)和y(t-2)之间的自相关。

现在的主要问题是

我们如何计算今天的价格与昨天的价格的相关性(或甚至是协方差)?因为相关关系只能在有多个值的变量之间计算。如果我试图计算两个单一数值之间的相关性,我会得到一个 "NaN"。而且,这两个变量必须有相同的长度(值的数量),所以,我甚至不能计算y(起点到t)和y(起点到t-1)之间的相关性。

然后,我开始搜索自相关的理论解释,发现了自相关的公式,如下图所示。

图片由作者提供

图片由作者提供

了解该公式

  • 自相关的公式与相关的公式相似(但不完全相同)。
  • 分子类似于时间序列的当前版本和滞后版本之间的协方差(但没有把'N-1'作为分母)。仔细检查分子的两个组成部分可以发现,原始时间序列的平均值,mean(y),被减去了,而不是mean(y(t))和mean(y(t-k)),分别。这使得该公式的分子与协方差有些不同。
  • 分母类似于原始时间序列的标准差(又称方差)的平方(但没有把'N-1'作为分母)。

让我们通过在Python中实现来回答这个问题:如何计算自相关?

我们将使用2007年9月17日至2021年7月30日的Nifty(一个追踪50只股票的印度股票指数)收盘价数据。这些数据是以csv格式从雅虎财经下载的。我们首先准备好数据进行时间序列分析。

medium.com/media/74ec7…

Nifty时间序列图(图片由作者提供

我们将定义一个名为'autocorr'的函数,通过接收时间序列数组和'k'th滞后值作为输入,返回单个滞后期的自相关(acf)。这个函数将嵌套在另一个名为'my_auto_corr'的函数中,通过调用'autocorr'函数来计算每个滞后值的acf,从而返回滞后[k,0]的acf。

medium.com/media/84413…

让我们通过传递'nifty'时间序列数据框架和nlags=10作为参数来调用'my_auto_corr'函数。我们还将比较'my_auto_corr'函数和'statsmodels'的'acf'方法的输出。

medium.com/media/d9292…

图片由作者提供

my_auto_corr'的结果与'statsmodels'的'acf'方法的结果相同。让我们再一次看看我们之前看到的自相关公式,并尝试理解它。

图片由作者提供

  • 分母是非常简单的,它与原始时间序列的方差相似,但分母中没有'N-1'。它在代码中用'分母'变量表示。
  • 正如前面所讨论的,分子类似于时间序列的当前和滞后版本之间的协方差(没有N-1作为分母)。让我们来了解如何计算分子。

图片由作者提供

  • 棕色的矩形代表分子第一部分中的y(t)。它被减去了原始时间序列的平均值,即mean(y)第一部分在代码中用'numerator_p1'表示,在公式中用y(t)-mean(y)表示。y(t)固定在底部,滞后(k)每增加一个单位,其顶部就向下移动1。
  • 同样,绿色矩形代表分子第二部分中的y(t-k)。它也要从原始时间序列的平均值**mean(y)中减去。第二部分在代码中用'分子_p2'表示,在公式中用y(t-k)-mean(y)表示。y(**t-k)固定在顶部,滞后(k)每增加一个单位,它的底部就向上移动1。

然而,正如我们前面看到的,该公式的分子与协方差不完全相同。然而,分母与原始时间序列的方差相似,但分母中没有 "N-1"。因此,计算棕色和绿色矩形的协方差并除以原始时间序列的方差并不能得到自相关系数。

将自相关公式分解成片段并在Python中实现它,有助于我们更好地理解它。我们看到分子中的协方差是如何在时间序列的当前和滞后版本之间计算的。因此,为了更好地理解一个概念,无论是机器学习算法还是统计学中的概念,知道引擎盖下的东西是很重要的。