如果想知道一個序列是否對預測另一個序列有用,可以用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,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/45313.html
標籤:其他
