如果想知道一个序列是否对预测另一个序列有用,可以用Granger causality test(格兰杰因果检验)。

Granger causality test的思想

如果使用时间序列X和Y的历史值来预测Y的当前值,比仅通过Y的历史值来预测Y的当前值得到的误差更小,并且通过了F检验,卡方检验,则X对Y的预测是有一定帮助的。

了解了Granger causality test的思想之后会发现,其实Granger causality test最多能推断出X对Y的预测是有一定帮助的,至于是否能说X和Y是因果关系,则不一定。

进一步了解可以去这里:https://www.zhihu.com/question/34787362

python代码

python的statsmodel包的grangercausalitytests函数中提供了很好的实现。

  • 该方法接收一个包含2列的2维的数组作为主要参数:

    第一列是当前要预测未来值的序列A,第二列是另一个序列B,该方法就是看B对A的预测是否有帮助。该方法的零假设是:B对A没有帮助。如果所有检验下的P-Values都小于显著水平0.05,则可以拒绝零假设,并推断出B确实对A的预测有用。
  • 第二个参数maxlag是设定测试用的lags的最大值。
  • 我们使用关于澳大利亚药物销售的数据集做预测,并利用Granger causality检测‘月份’这个序列是否对数据集的预测用。
from statsmodels.tsa.stattools import grangercausalitytests
df = pd.read_csv('https://raw.githubusercontent.com/selva86/datasets/master/a10.csv', parse_dates=['date'])
df['month'] = df.date.dt.month
grangercausalitytests(df[['value', 'month']], maxlag=2)
  • 输出结果:

    Granger Causality

    number of lags (no zero) 1

    ssr based F test: F=54.7797 , p=0.0000 , df_denom=200, df_num=1

    ssr based chi2 test: chi2=55.6014 , p=0.0000 , df=1

    likelihood ratio test: chi2=49.1426 , p=0.0000 , df=1

    parameter F test: F=54.7797 , p=0.0000 , df_denom=200, df_num=1

    Granger Causality

    number of lags (no zero) 2

    ssr based F test: F=162.6989, p=0.0000 , df_denom=197, df_num=2

    ssr based chi2 test: chi2=333.6567, p=0.0000 , df=2

    likelihood ratio test: chi2=196.9956, p=0.0000 , df=2

    parameter F test: F=162.6989, p=0.0000 , df_denom=197, df_num=2

每个检验的p值都小于5%,所以可以说月份对澳大利亚药物销售的预测有用,或者说药物的销售可能存在季节性。

ok,本篇就这么多内容啦~,下一篇将介绍时间序列预测常用的模型ARIMA,感谢阅读O(∩_∩)O。

用python做时间序列预测八:Granger causality test(格兰杰因果检验)的更多相关文章

  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做中学(八)匿名函数lambda的用法

    匿名函数,顾名思义即没有名称的函数,和def定义的函数的最大区别在于匿名函数创建后返回函数本身(即匿名函数不需要return来返回值),表达式本身结果就是返回值,而def创建后则赋值给一个变量名,在P ...

  6. Granger Causality 格兰杰因果关系

      (Granger Causality) 格兰杰(Granger)于 1969 年提出了一种基于“预测”的因果关系(格兰杰因果关系),后经西蒙斯(1972 ,1980)的发展,格兰杰因果检验作为一种 ...

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

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

  8. 漫谈格兰杰因果关系(Granger Causality)——第一章 野火烧不尽,春风吹又生

    2017年7月9日上午6点10分,先师胡三清同志--新因果关系的提出者.植入式脑部电极癫痫治疗法的提出者.IEEE高级会员,因肺癌医治无效于杭州肿瘤医院去世,享年50岁.余蒙先师厚恩数载,一朝忽闻先师 ...

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

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

  10. 如何用python将一个时间序列转化成有监督学习

    机器学习可以被用于时间序列预测. 在机器学习能使用之前,时间序列预测需要被重新转化成有监督学习.将一个序列组合成成对的输入输出序列. 在这篇教程中,你会发现如何通过使用机器学习算法将单变量和多变量的时 ...

随机推荐

  1. 光猫HS8145V6命令一部分(一)

    天翼网关说明书-HS8145V6( PON ONT ),快速入门指南 开启telnet, 登录(用户名root,密码adminHW)后可知一些命令 (部分敏感信息已替换) WAP>display ...

  2. 前端每日一知之让Chrome支持小于12px的文字

    脑图在线链接 本文内容依据[js每日一题]公众号精彩文章总结而来

  3. OS之《CPU调度》

    CPU调度层次 高级调度:是作业调度.将外村的作业加载到内存里,分配对应的资源,然后加入就绪队列 低级调度:将就绪队列中的进程调度到CPU执行 中级调度:为了提高内存的利用率和系统的吞吐量,将暂时不能 ...

  4. OS之《进程管理》

    进程同步 同步实际上是指:将多个进程,按照顺序,有序执行. 让进程有序进行的场景有很多.比如:一个进程依赖另外一个进程的计算结果:一个进程等待另外一个对临界资源的访问:还有像生产者消费者模型中的相互配 ...

  5. 解密prompt系列44. RAG探索模式?深度思考模式?

    前一阵多步RAG的风吹入了工业界,kimi推出了探索版本,各应用都推出了深度搜索,You.COM更是早就有了Genius的多步模式.其实都是类似multi-hop RAG的实现.之前学术界在讨论mul ...

  6. 【Python】【Pandas】将符合条件行的某列数值改为负数

    萌狼蓝天情景还原: 支付宝/微信导出的账单,不管支出还是收入都是正数. 我想把支出的金额改成负数,其他不变就这样. 解决办法 这里用到的是pandas.apply e--下面的写法虽然比较麻烦,但是 ...

  7. Collector的配置和使用

    目录 Collector的配置和使用 Collector配置 Receivers Processors Exporters Service Extensions 使用环境变量 Collector的使用 ...

  8. Docker Install on Ubuntu

    https://docs.docker.com/engine/install/ubuntu/ https://docs.docker.com/compose/install/linux/

  9. Qt开发经验小技巧156-160

    Qt的UI界面在resize以后有个BUG,悬停样式没有取消掉,需要主动模拟鼠标动一下. void frmMain::on_btnMenu_Max_clicked() { ...... //最大化以后 ...

  10. C#中如何将图片添加为程序的资源

    C#中将图片添加为程序的资源的步骤: 1.在C#程序的"Properties"文件夹中双击Resources.resx文件,以便打开资源文件,使其处于可编辑状态: 2.在打开后的R ...