经典的时间序列预测方法都是假设如果一个时间序列有显著的自相关性,那么历史值对预测当前值会很有帮助,但是究竟取多少阶的历史值,就需要通过分析相关函数图和偏相关函数图来得到。本文介绍如何什么是相关函数图和偏相关函数图,另外还会介绍一下滞后图。

什么是自相关和偏自相关函数?

  • 先来解释下滞后阶数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做时间序列预测六:相关函数图、偏相关函数图、滞后图的更多相关文章

  1. 用python做时间序列预测一:初识概念

    利用时间序列预测方法,我们可以基于历史的情况来预测未来的情况.比如共享单车每日租车数,食堂每日就餐人数等等,都是基于各自历史的情况来预测的. 什么是时间序列? 时间序列,是指同一个变量在连续且固定的时 ...

  2. 用python做时间序列预测九:ARIMA模型简介

    本篇介绍时间序列预测常用的ARIMA模型,通过了解本篇内容,将可以使用ARIMA预测一个时间序列. 什么是ARIMA? ARIMA是'Auto Regressive Integrated Moving ...

  3. 基于 Keras 用 LSTM 网络做时间序列预测

    目录 基于 Keras 用 LSTM 网络做时间序列预测 问题描述 长短记忆网络 LSTM 网络回归 LSTM 网络回归结合窗口法 基于时间步的 LSTM 网络回归 在批量训练之间保持 LSTM 的记 ...

  4. 用 LSTM 做时间序列预测的一个小例子(转自简书)

    问题:航班乘客预测 数据:1949 到 1960 一共 12 年,每年 12 个月的数据,一共 144 个数据,单位是 1000 下载地址 目标:预测国际航班未来 1 个月的乘客数 import nu ...

  5. python做中学(六)os.getcwd() 的用法

    概述 os.getcwd() 方法用于返回当前工作目录. 语法 getcwd()方法语法格式如下: os.getcwd() 参数 无 返回值 返回当前进程的工作目录. 实例 以下实例演示了 getcw ...

  6. Python学习日记(六)——内置函数和文件操作(lambda)

    lambda表达式 学习条件运算时,对于简单的 if else 语句,可以使用三元运算来表示,即: # 普通条件语句 if 1 == 1: name = 'prime' else: name = 'c ...

  7. Python中利用LSTM模型进行时间序列预测分析

    时间序列模型 时间序列预测分析就是利用过去一段时间内某事件时间的特征来预测未来一段时间内该事件的特征.这是一类相对比较复杂的预测建模问题,和回归分析模型的预测不同,时间序列模型是依赖于事件发生的先后顺 ...

  8. 【转】用Python做股市量化策略投资数据分析

    金融量化分析介绍     本文摘要; 金融量化分析介绍 1.什么是金融量化分析 2.金融量化分析可以干什么 3.为什么将python运用于金融 4.常用库简介 1.什么是金融量化分析 从标题中我们可以 ...

  9. python做量化交易干货分享

    http://www.newsmth.NET/nForum/#!article/Python/128763 最近程序化交易很热,量化也是我很感兴趣的一块. 国内量化交易的平台有几家,我个人比较喜欢用的 ...

  10. 用Python做股市数据分析(一)

    本文由 伯乐在线 - 小米云豆粥 翻译.未经许可,禁止转载!英文出处:Curtis Miller.欢迎加入翻译组. 这篇博文是用Python分析股市数据系列两部中的第一部,内容基于我犹他大学 数学39 ...

随机推荐

  1. 开源 - Ideal库 - Excel帮助类,ExcelHelper实现(五)

    书接上回,我们继续来聊聊ExcelHelper的具体实现. 01.读取Excel到DataSet单元测试 在上一章我们主要讲解了读取Excel到DataSet的三个重载方法具体实现,还没来得及做单元测 ...

  2. 根据地址栏加载对应的TAB选项卡

    <script>   //左侧菜单的选中状态   $(".nav-fif-level li").each(function () {   var url = windo ...

  3. ng-alain: i18n

    https://github.com/ng-alain/delon/blob/master/packages/theme/src/services/i18n/i18n.ts interface Ala ...

  4. Springboot 指定外部配置文件启动

    <resources> <resource> <directory>src/main/resources</directory> <filteri ...

  5. Qt数据库应用11-通用数据生成器

    一.前言 有两种应用场景需要用到数据生成器,一种是需要测试数据库性能,比如在100万条和1000万条记录的时候对比查询或更新语句执行耗时,一种是随机模拟生成一堆数据,用来测试程序的性能,看下程序中到了 ...

  6. Qt编写地图综合应用7-百度离线地图

    一.前言 离线地图的核心其实就是拿到这些瓦片地图文件,并不是离线地图的代码怎么写,其实离线地图的网页代码和在线地图的网页代码几乎一致的,主要就是将对应的依赖的js文件从在线的地址改成本地的地址,然后可 ...

  7. 即时通讯技术文集(第42期):直播技术合集(Part2) [共13篇]

    为了更好地分类阅读 52im.net 总计1000多篇精编文章,我将在每周三推送新的一期技术文集,本次是第42 期. [-1-] 实时音频的混音在视频直播中的技术原理和实践总结 [链接] http:/ ...

  8. [LC1161]最大层内元素和

    题目概述 给你一个二叉树的根节点 root.设根节点位于二叉树的第 1 层,而根节点的子节点位于第 2 层,依此类推. 请返回层内元素之和 最大 的那几层(可能只有一层)的层号,并返回其中 最小 的那 ...

  9. SQL优化的这15招,真香!

    前言 sql优化是一个大家都比较关注的热门话题,无论你在面试,还是工作中,都很有可能会遇到. 如果某天你负责的某个线上接口,出现了性能问题,需要做优化.那么你首先想到的很有可能是优化sql语句,因为它 ...

  10. RPA_Robocorp

    一.RCC使用(https://robocorp.com/docs/rcc/workflow) 1. Creat a new bot :   rcc create my-robot 2. Adding ...