Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >用python做时间序列预测六:相关函数图、偏相关函数图、滞后图

用python做时间序列预测六:相关函数图、偏相关函数图、滞后图

作者头像
程序员一一涤生
发布于 2020-06-10 07:04:45
发布于 2020-06-10 07:04:45
4.6K10
代码可运行
举报
运行总次数:0
代码可运行

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

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

  • 先来解释下滞后阶数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 可视化

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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图中的相关性区间了,也就是说如果滞后阶数与原序列的相关性落在这个区间内,就表示不相关。

滞后图

滞后图是用时间序列和相应的滞后阶数序列做出的散点图。可以用于观测自相关性。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-06-08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
1 条评论
热度
最新
你好,在绘制滞后图时代码报错TypeError: unhashable type: 'numpy.ndarray',请问是怎么回事
你好,在绘制滞后图时代码报错TypeError: unhashable type: 'numpy.ndarray',请问是怎么回事
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
干货 | 20个教程,掌握时间序列的特征分析(附代码)
【导语】时间序列是指以固定时间为间隔的序列值。本篇教程将教大家用 Python 对时间序列进行特征分析。
AI科技大本营
2019/07/11
6.1K0
干货 | 20个教程,掌握时间序列的特征分析(附代码)
用python做时间序列预测九:ARIMA模型简介
c是常数项,εt是随机误差项。 对于一个AR(1)模型而言: 当 ϕ1=0 时,yt 相当于白噪声; 当 ϕ1=1 并且 c=0 时,yt 相当于随机游走模型; 当 ϕ1=1 并且 c≠0 时,yt 相当于带漂移的随机游走模型; 当 ϕ1<0 时,yt 倾向于在正负值之间上下浮动。
程序员一一涤生
2020/06/17
31.8K1
【机器学习 | ARIMA】经典时间序列模型ARIMA定阶最佳实践,确定不来看看?
🙋‍♂️声明:本人目前大学就读于大二,研究兴趣方向人工智能&硬件(虽然硬件还没开始玩,但一直很感兴趣!希望大佬带带)
计算机魔术师
2023/11/23
3080
时间序列预测模型-ARIMA原理及Python实现!
再介绍本篇的内容之前,我们先来看一下本文用到的数据。本文用到的中国银行股票数据下载:http://pan.baidu.com/s/1gfxRFbH。
石晓文
2018/12/06
14.6K1
用python做时间序列预测十:时间序列实践-航司乘客数预测
陆陆续续写了10篇时间序列相关的文章了,本系列主要是应用为主,包括初识概念、时间序列数据可视化、时间序列分解、平稳/非平稳时间序列、时间序列缺失值处理、相关函数图/偏相关函数图/滞后图、时间序列复杂度量化、Granger causality test(格兰杰因果检验)、ARIMA模型简介、时间序列实践-航司乘客数预测。 暂时先记录到这里,后续应该还会补充一些,比如基于深度学习的时间序列预测等。
程序员一一涤生
2020/06/16
4K0
时间序列 ACF 和 PACF 理解、代码、可视化
我们说时间序列可以被预测,主要基于以下事实:我们可以部分掌握影响该时间序列的因素的变化情况。换句话说,对时间序列进行预测,其实就是利用各种理论和工具,对观察到的时间序列进行“抽丝剥茧”,以试图掌握其变化的本质,从而对未来的表现进行预测。
Python数据科学
2024/02/05
2.5K0
时间序列 ACF 和 PACF 理解、代码、可视化
【机器学习 | 数据挖掘】时间序列算法
智能大数据分析是指利用先进的技术和算法对大规模数据进行深入分析和挖掘,以提取有价值的信息和洞察。它结合了大数据技术、人工智能(AI)、机器学习(ML)和数据挖掘等多种方法,旨在通过自动化的方式分析复杂数据集,发现潜在的价值和关联性,实现数据的自动化处理和分析,从而支持决策和优化业务流程。与传统的人工分析相比,智能大数据分析具有自动化、深度挖掘、实时性和可视化等特点。智能大数据分析广泛应用于各个领域,包括金融服务、医疗健康、零售、市场营销等,帮助企业做出更为精准的决策,提升竞争力。 【GitCode】专栏资源保存在我的GitCode仓库:https://gitcode.com/Morse_Chen/Intelligent_bigdata_analysis。
Francek Chen
2025/01/22
1110
【机器学习 | 数据挖掘】时间序列算法
时间序列预测全攻略(附带Python代码)
原文作者:AARSHAY JAIN 36大数据翻译,http://www.36dsj.com/archives/43811 时间序列(简称TS)被认为是分析领域比较少人知道的技能。(我也是几天前才知道它)。但是你一定知道最近的小型编程马拉松就是基于时间序列发展起来的,我参加了这项活动去学习了解决时间序列问题的基本步骤,在这儿我要分享给大家。这绝对能帮助你在编程马拉松中获得一个合适的模型。 文章之前,我极力推荐大家阅读《基于R语言的时间序列建模完整教程》A Complete Tutorial on Ti
机器学习AI算法工程
2018/03/13
15K0
时间序列预测全攻略(附带Python代码)
如何在时间序列预测中检测随机游走和白噪声
无论多么强大,机器学习都无法预测一切。例如与时间序列预测有关的领域中,表现得就不是很好。
deephub
2021/07/23
1.9K0
如何在时间序列预测中检测随机游走和白噪声
自相关和偏自相关的简单介绍
原文地址:https://machinelearningmastery.com/gentle-introduction-autocorrelation-partial-autocorrelation/
Steve Wang
2018/02/11
6.4K0
自相关和偏自相关的简单介绍
最完整的时间序列分析和预测(含实例及代码)
在生产和科学研究中,对某一个或者一组变量 进行观察测量,将在一系列时刻所得到的离散数字组成的序列集合,称之为时间序列。
润森
2022/09/22
4.2K0
最完整的时间序列分析和预测(含实例及代码)
时间序列ARIMA模型详解:python实现店铺一周销售量预测
顾名思义,时间序列是时间间隔不变的情况下收集的时间点集合。这些集合被分析用来了解长期发展趋势,为了预测未来或者表现分析的其他形式。但是是什么令时间序列与常见的回归问题的不同? 有两个原因: 1、时间序列是跟时间有关的。所以基于线性回归模型的假设:观察结果是独立的在这种情况下是不成立的。 2、随着上升或者下降的趋势,更多的时间序列出现季节性趋势的形式,如:特定时间框架的具体变化。即:如果你看到羊毛夹克的销售上升,你就一定会在冬季做更多销售。 常用的时间序列模型有AR模型、MA模型、ARMA模型和ARI
机器学习AI算法工程
2018/03/14
8.7K0
时间序列ARIMA模型详解:python实现店铺一周销售量预测
时间序列平稳性检验方法(Python)
当我们拿到时序数据后,首先要进行平稳性和纯随机性的检验,这两个重要的检验是时间序列的预处理。根据检验的结果可以判断出序列属于什么类型,然后对症下药使用相应的分析方法。
Python数据科学
2024/03/05
2.1K0
时间序列平稳性检验方法(Python)
Python中的ARIMA模型、SARIMA模型和SARIMAX模型对时间序列预测|附代码数据
根据频率,时间序列可以是每年(例如:年度预算),每季度(例如:支出),每周(例如:销售数量),每天(例如天气),每小时(例如:股票价格),分钟(例如:来电提示中的呼入电话),甚至是几秒钟(例如:网络流量)。
拓端
2023/07/17
9360
实现基于股票收盘价的时间序列的统计(用Python实现)
时间序列是按时间顺序的一组真实的数字,比如股票的交易数据。通过分析时间序列,能挖掘出这组序列背后包含的规律,从而有效地预测未来的数据。在这部分里,将讲述基于时间序列的常用统计方法。
用户1153489
2021/03/02
1.6K0
实现基于股票收盘价的时间序列的统计(用Python实现)
打开我的收藏夹 -- Python时间序列分析篇
这两天,又接收到了不少新的讯息。我是越来越佩服“梦想橡皮檫”,檫哥了(打开周榜/总榜很好找,前排),他居然能用几年的时间来打磨一个系列。别说收39块,就是原价99我也买了,不为啥,就凭人家打磨了三年的毅力,我服!!!
看、未来
2021/09/18
7850
【机器学习】--时间序列算法从初识到应用
指数平滑法对时间序列上连续的值之间的相关性没有要求。但是,如果你想使用指数平滑法计算出预测区间, 那么预测误差必须是不相关的, 且必须是服从零均值、 方差不变的正态分布。即使指数平滑法对时间序列连续数值之间相关性没有要求,在某种情况下, 我们可以通过考虑数据之间的相关性来创建更好的预测模型。 自回归移动平均模型( ARIMA)是最常用的时间序列预测模型。
LhWorld哥陪你聊算法
2018/09/13
7360
【机器学习】--时间序列算法从初识到应用
【时序预测】一文梳理时间序列预测——ARMA模型
在统计研究中,常用按时间顺序排列的一组随机变量X1​,X2​,⋯,Xt​,⋯来表示一个随机事件的时间序列,简记为{Xt,t∈T}。在时间的角度上来说,数据类型可分为两类:横截面数据和时间序列[1]。横截面数据是值在某一时间点搜集来自不同对象的数据,时间序列是一组按照时间排序的数据;横截面数据与时间序列的组合在计量经济学上构成了面板数据集。
roganhuang
2020/07/22
18.7K0
【时序预测】一文梳理时间序列预测——ARMA模型
R语言时间序列函数大全(收藏!)
包 library(zoo) #时间格式预处理 library(xts) #同上 library(timeSeires) #同上 library(urca) #进行单位根检验 library(tseries) #arma模型 library(fUnitRoots) #进行单位根检验 library(FinTS) #调用其中的自回归检验函数 library(fGarch) #GARCH模型 library(nlme) #调用其中的gls函数 library(fArma) #进行拟合和检验 基本函数 数学函数
CDA数据分析师
2018/02/08
6.2K0
一阶差分序列garch建模_时间序列分析
趋势变动:在长时期内按某种规则稳定地呈现出来的持续向上或向下或保持在某一水平。季节变动:在一个年度内重复出现的周期性波动。它是诸如气候条件、生产条件、节假日或人们的风俗习惯等各种因素影响的结果。循环波动:是时间序列呈现出得非固定长度的周期性变动。循环波动的周期可能会持续一段时间,但与趋势不同,它不是朝着单一方向的持续变动,而是涨落相同的交替波动。不规则波动(随机变动):是许多不可控的偶然因素共同作用的结果,致使时间序列产生一种波浪形或震荡式的变动。
用户7886150
2021/01/30
1.9K0
推荐阅读
相关推荐
干货 | 20个教程,掌握时间序列的特征分析(附代码)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验