用python做时间序列预测八:Granger causality test(格兰杰因果检验)
如果想知道一个序列是否对预测另一个序列有用,可以用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。
本文来自博客园,作者:AI粉嫩特攻队,转载请注明原文链接:https://www.cnblogs.com/anai/p/13083048.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」