用python做时间序列预测六:相关函数图、偏相关函数图、滞后图
经典的时间序列预测方法都是假设如果一个时间序列有显著的自相关性,那么历史值对预测当前值会很有帮助,但是究竟取多少阶的历史值,就需要通过分析相关函数图和偏相关函数图来得到。本文介绍如何什么是相关函数图和偏相关函数图,另外还会介绍一下滞后图。
什么是自相关和偏自相关函数?
- 先来解释下滞后阶数n,如果当前值和前2期的值有关,则n=2,那么可以用时间序列和它的2阶滞后序列来训练一个自回归模型,预测未来的值。
- 自相关函数(ACF)表达了时间序列和n阶滞后序列之间的相关性(考虑了中间时刻的值的影响,比如t-3对t的影响中,就同时考虑了t-2,t-1对t的影响)。
- 偏自相关函数(PACF)表达了时间序列和n阶滞后序列之间的纯相关性(不考虑中间时刻的值的影响,比如t-3对t的影响中,不会考虑t-2,t-1对t的影响)。如果用自回归方程来预测t时刻的值,则各滞后阶数的系数就是各滞后阶数下的偏自相关值,比如下面方程的α1,α2,α3,分别是1阶滞后,2阶滞后,3阶滞后下的偏自相关值。
ACF 和 PACF 可视化
from statsmodels.tsa.stattools import acf, pacf
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
df = pd.read_csv('https://raw.githubusercontent.com/selva86/datasets/master/a10.csv')
# Calculate ACF and PACF upto 50 lags# acf_50 = acf(df.value, nlags=50)# pacf_50 = pacf(df.value, nlags=50)
# Draw Plot
fig, axes = plt.subplots(1,2,figsize=(16,3), dpi= 100)
plot_acf(df.value.tolist(), lags=50, ax=axes[0])
plot_pacf(df.value.tolist(), lags=50, ax=axes[1])

- 如果ACF表现为长拖尾(如上左图),说明带有趋势,需要做差分。
- 如果ACF的1阶滞后就截尾,则可能是过度差分了(差分会降低相关性)。
- 如果ACF拖尾一点点,然后截尾的情况下,选择的差分阶数是比较合适的。此时可以用前n个历史时刻的值做自回归来预测当前值,关于n的取值则可以参考PACF的截尾处,假设上右图是差分后的pacf图,在第2个滞后阶数后(从第0开始,0阶滞后下就是原序列和原序列相比,相关性为1)就骤然降到了相关性置信区间内,则表示95%的概率不具有相关性,所以该序列可以做2阶滞后自回归。
什么是相关性置信区间?
对于白噪声序列,按理说不会有任何自相关性,我们期望的自相关性为0,但是由于随机扰动的存在,自相关性不会为0,而通常假设随机扰动符合标准正态分布(均值为0,标准差为1),那么这个随机扰动的95%置信区间(一般都取95%,当然也可以调整这个概率)可以通过如下算式计算

标准正态分布的z分数表示距离均值有几个标准差,σ除以根号T表示有偏样本标准差,
这里95%置信度下z分数=1.96,标准差σ=1,T是序列长度,则置信区间计算如下:

表示对于白噪声序列,95%的自相关性落在这个置信区间内。
而这个置信区间就是上面acf和pacf图中的相关性区间了,也就是说如果滞后阶数与原序列的相关性落在这个区间内,就表示不相关。
滞后图
滞后图是用时间序列和相应的滞后阶数序列做出的散点图。可以用于观测自相关性。
from pandas.plotting import lag_plot
plt.rcParams.update({'ytick.left' : False, 'axes.titlepad':10})
# Import
ss = pd.read_csv('https://raw.githubusercontent.com/selva86/datasets/master/sunspotarea.csv')
a10 = pd.read_csv('https://raw.githubusercontent.com/selva86/datasets/master/a10.csv')
# Plot
fig, axes = plt.subplots(1, 4, figsize=(10,3), sharex=True, sharey=True, dpi=100)for i, ax in enumerate(axes.flatten()[:4]):
lag_plot(ss, lag=i+1, ax=ax, c='firebrick')
ax.set_title('Lag ' + str(i+1))
fig.suptitle('Lag Plots of Sun Spots Area \n(Points get wide and scattered with increasing lag -> lesser correlation)\n', y=1.15)
fig, axes = plt.subplots(1, 4, figsize=(10,3), sharex=True, sharey=True, dpi=100)for i, ax in enumerate(axes.flatten()[:4]):
lag_plot(a10, lag=i+1, ax=ax, c='firebrick')
ax.set_title('Lag ' + str(i+1))
fig.suptitle('Lag Plots of Drug Sales', y=1.05)
plt.show()


ok,本篇就这么多内容啦~,感谢阅读O(∩_∩)O。

用python做时间序列预测六:相关函数图、偏相关函数图、滞后图的更多相关文章
- 用python做时间序列预测一:初识概念
利用时间序列预测方法,我们可以基于历史的情况来预测未来的情况.比如共享单车每日租车数,食堂每日就餐人数等等,都是基于各自历史的情况来预测的. 什么是时间序列? 时间序列,是指同一个变量在连续且固定的时 ...
- 用python做时间序列预测九:ARIMA模型简介
本篇介绍时间序列预测常用的ARIMA模型,通过了解本篇内容,将可以使用ARIMA预测一个时间序列. 什么是ARIMA? ARIMA是'Auto Regressive Integrated Moving ...
- 基于 Keras 用 LSTM 网络做时间序列预测
目录 基于 Keras 用 LSTM 网络做时间序列预测 问题描述 长短记忆网络 LSTM 网络回归 LSTM 网络回归结合窗口法 基于时间步的 LSTM 网络回归 在批量训练之间保持 LSTM 的记 ...
- 用 LSTM 做时间序列预测的一个小例子(转自简书)
问题:航班乘客预测 数据:1949 到 1960 一共 12 年,每年 12 个月的数据,一共 144 个数据,单位是 1000 下载地址 目标:预测国际航班未来 1 个月的乘客数 import nu ...
- python做中学(六)os.getcwd() 的用法
概述 os.getcwd() 方法用于返回当前工作目录. 语法 getcwd()方法语法格式如下: os.getcwd() 参数 无 返回值 返回当前进程的工作目录. 实例 以下实例演示了 getcw ...
- Python学习日记(六)——内置函数和文件操作(lambda)
lambda表达式 学习条件运算时,对于简单的 if else 语句,可以使用三元运算来表示,即: # 普通条件语句 if 1 == 1: name = 'prime' else: name = 'c ...
- Python中利用LSTM模型进行时间序列预测分析
时间序列模型 时间序列预测分析就是利用过去一段时间内某事件时间的特征来预测未来一段时间内该事件的特征.这是一类相对比较复杂的预测建模问题,和回归分析模型的预测不同,时间序列模型是依赖于事件发生的先后顺 ...
- 【转】用Python做股市量化策略投资数据分析
金融量化分析介绍 本文摘要; 金融量化分析介绍 1.什么是金融量化分析 2.金融量化分析可以干什么 3.为什么将python运用于金融 4.常用库简介 1.什么是金融量化分析 从标题中我们可以 ...
- python做量化交易干货分享
http://www.newsmth.NET/nForum/#!article/Python/128763 最近程序化交易很热,量化也是我很感兴趣的一块. 国内量化交易的平台有几家,我个人比较喜欢用的 ...
- 用Python做股市数据分析(一)
本文由 伯乐在线 - 小米云豆粥 翻译.未经许可,禁止转载!英文出处:Curtis Miller.欢迎加入翻译组. 这篇博文是用Python分析股市数据系列两部中的第一部,内容基于我犹他大学 数学39 ...
随机推荐
- Codeforces Round 642 (Div3)
K-periodic Garland 给定一个长度位\(n\)的\(01\)串,每次操作可以将\(1\)变为\(0\)或者将\(0\)变为\(1\),现在你需要通过操作使得所有\(1\)之间的距离为\ ...
- docker环境一个奇怪的问题,容器进程正常运行,但是docker ps -a却找不到容器,也找不到镜像
一: 问题: docker环境一个奇怪的问题,使用容器跑的进程正常提供服务,在服务器上也能看到对应的端口正在监听,但是docker ps -a却找不到容器,也找不到镜像. 查看我使用docker容器启 ...
- 20号CSS学习
前面部分笔记丢失(呜呜有机会补) 一.盒子模型 1.4表格的细线边框 border-collapse: collapse;表示相邻边框合并在一起. 1.5边框会影响盒子的实际大小 测量时不测边框. 1 ...
- 使用 .NET 的 Dev Proxy 构建和测试弹性应用
使用 .NET 的 Dev Proxy 构建和测试弹性应用 https://devblogs.microsoft.com/dotnet/build-test-resilient-apps-dotnet ...
- merging rhino 哈哈
- 【服务器安全问题】双防火墙有什么意义?SSH暴力破解如何防范
发现我的服务器有大量的陌生IP尝试SSH登录,似乎想暴力破解. 我个人习惯是服务器提供商开放了所有端口的,同时也没有开启运维软件提供的防火墙emm 这倒是让我想到了 一般服务器提供商(比如阿里云.华为 ...
- go语言签发和验证license
https://www.cnblogs.com/guangdelw/p/18328342 生成非对称密钥 package main import ( "crypto/rand" & ...
- 实践解决:IDEA2022版本创建Maven项目时没有出现src目录
问题:IDEA创建Maven项目时没有出现src目录 创建Maven项目 新版本的IDEA创建是选用的是Maven Archetype,选择这个也是和Maven一样的.按照这样流程创建完成之后的的架构 ...
- Qt/C++地图轨迹回放/自定义图标/动态平滑移动/导入轨迹数据/支持各种地图包括天地图
一.前言说明 这个轨迹回放的功能迭代过很多个版本,最初的版本是轨迹点的坐标每次都是删除折线再重新生成折线,后面发现有内存泄漏,地图js中并不会及时的释放没有用的对象,哪怕是用地图提供的clearove ...
- Qt编写音频播放示例(带音频曲线/振幅/传输/录制等)
一.功能特点 自动计算音频振幅,绘制音频振幅曲线和音频数据曲线. 支持音频录制,可选音频输入设备.采样频率.通道等参数,Qt5默认保存wav格式,Qt6默认保存mp3格式,Qt6可选wma.aac等格 ...
