异步社区

异步社区是国内领先的IT专业图书社区,由人民邮电出版社主办,致力于优质学习内容的出版和分享。

34篇博客

使用正确的图表理解数据(八):自相关的重要性

异步社区2018-12-28 14:06
7.9自相关的重要性


自相关表示一个给定的时间序列在一个连续的时间间隔上与自身的延迟(也就是时间上的延迟)之间的相似度。它发生在一个时间序列研究中,指在一个给定的时间周期内的错误在未来的时间周期上会继续存在。例如,如果我们在预测股票红利的走势,某一年红利过高估计往往会导致对接下来年份红利的过高估计。


时间序列分析数据引出了许多不同的科学应用和财务流程,例如生成的财务绩效报表、一段时间的价格、波动性计算等。在分析未知数据时,自相关可以帮助我们检测数据是否是随机的。对此我们可以使用相关图。它可以提供如下问题的答案:数据是随机的吗?这个时间序列数据是一个白噪声信号吗?它是正弦曲线形的吗?它是自回归的吗?这个时间序列数据的模型是什么?


7.9.1 准备工作
我们将使用matplotlib来比较两组数据。一组是某个关键字一年(365天)的Google每日搜索量的趋势。另一组是符合正态分布的365个随机测量值(生成的随机数据)。


接下来我们将分析两个数据集合的自相关性,并比较相关图是如何可视化数据中的模式的。


7.9.2 操作步骤
本小节的步骤如下。
(1)导入matplotlib.pyplot模块。
(2)导入numpy包。
(3)使用一个干净的Google一年搜索量的数据集合。
(4)绘制数据和其自相关图表。
(5)用NumPy生成一个相同长度的随机数据集合。
(6)在相同图表上绘制随机数据集合和其自相关图表。
(7)添加合适的标签和网格以更好地理解图表。


下面是代码部分。
import matplotlib.pyplot as plt
import numpy as np
# import the data
from ch07_search_data import DATA as d
total = sum(d)
av = total / len(d)
z = [i - av for i in d]
fig = plt.figure()
# plt.title('Comparing autocorrelations')
# Search trend volume
ax1 = fig.add_subplot(221)
ax1.plot(d)
ax1.set_xlabel('Google Trends data for "flowers"')
# Is there a pattern in search trend for this keyword?
ax2 = fig.add_subplot(222)
ax2.acorr(z, usevlines=True, maxlags=None, normed=True, lw=2)
ax2.grid(True)
ax2.set_xlabel('Autocorrelation')
# Now let's generate random data for the same period
d1 = np.random.random(365)
assert len(d) == len(d1)
total = sum(d1)
av = total / len(d1)
z = [i - av for i in d1]
# Random: "search trend volume"
ax3 = fig.add_subplot(223)
ax3.plot(d1)
ax3.set_xlabel('Random data')
# Is there a pattern in search trend for this keyword?
ax4 = fig.add_subplot(224)
ax4.set_xlabel('Autocorrelation of random data')
ax4.acorr( z, usevlines=True, maxlags=None, normed=True, lw=2)
ax4.grid(True)
plt.show()


上述代码将生成图7-12所示的图表。


7.9.3 工作原理
通过观察左手边的图表,我们能很容易地识别出搜索量数据的模式;左下方的图表是正态分布的随机数据,其模式不是很明显,但仍然有可能。在随机数据上计算自相关性并绘制自相关图表,可以看到在0处的相关性很高,这是我们所期望的,数据在没有任何时间延迟的时候和自身是相关的。但在无时间延迟之前和之后,信号几乎为0。因此我们可以安全地推断初始时间的信号和任何时间延迟上的信号没有相关性。


再看一下真实的数据—Google搜索量趋势,我们可以看到在0s时间延迟上有相同的表现,我们也可以预料对于任何自相关信号都会有相同的表现。但是我们看到在0s时间延迟之后的大约20、60和110天存在很强的信号。这表明在Google搜索引擎上这个特殊的搜索关键字以及人们搜索它的方式之间存在一个模式。


我们把为什么这里会存在一个很大差异的解释工作留给读者。请记住相关和因果关系是两个非常不同的概念。


7.9.4 补充说明
自相关通常应用在当我们想要识别未知数据的模式和试图把数据匹配到一个模型的时候。识别给定数据集合模型的第一步,就是查看数据与自身的相关性。这需要Python以外的知识,它需要数学建模和各种统计测试(Ljung-Box测试、Box-Pierce测试等)的知识,这些知识能帮助我们解答可能遇到的问题。


内容来源:异步社区;版权属【人民邮电出版社 异步社区】所有,转载已获得授权;未经授权,不得以任何方式复制和传播本书内容,如需转载请联系异步社区。