利用python進行時間序列分析——數據挖掘

轉自:Eureka

來源:https://zhuanlan.zhihu.com/p/35128342

1.時間序列常用模型

2. 時間序列預處理

2.1 平穩性檢驗

2.2 純隨機性檢驗

3 .平穩時間序列分析

3.1 AR模型

3.2 MA模型

3.3 ARMA模型

3.4 平穩時間序列建模

4. 非平穩時間序列分析

4.1 差分運算

4.2 ARIMA模型

5.案例

上證指數2020-04-14日內分時圖

#時序圖
close.plot()

                                                                      (有明顯的趨勢,可以判斷是非平穩的)

#自相關圖
plot_acf(close,lags=180).show()

                                                            (自相關圖顯示時間序列有很強的相關性)

#平穩性檢測
print(u'原始序列的ADF檢驗結果爲:', ADF(close))
'''
ADF(close))
原始序列的ADF檢驗結果爲: (0.26832158954528323, 0.9758434956447575, 0, 239, {'1%': -3.458010773719797, '5%': -2.8737103617125186, '10%': -2.5732559963936206}, 554.5186351858798)
'''

                 (單位根統計量對應的p的值顯著大於0.05,最終判斷該序列是非平穩序列的(非平穩不一定不是白噪聲))

#1階差分後的結果
D_data = data.diff().dropna()   #1階差分,丟棄na值
D_close = D_data['close'].ix['2020-04-14'].reset_index(drop=True)
#時序圖
D_close.plot()

#自相關圖
plot_acf(D_close,lags=180).show() 

                                                                                        (在零附近波動)

#平穩性檢測
print(u'差分序列的ADF檢驗結果爲:', ADF(D_close))
'''
差分序列的ADF檢驗結果爲: (-18.45521664517621, 2.1508169037396976e-30, 0, 239, {'1%': -3.458010773719797, '5%': -2.8737103617125186, '10%': -2.5732559963936206}, 554.520649247294)
'''

(1階差分後時序圖在均值附近平穩的波動、自相關圖有較強的短期相關性、單位根檢驗p值小於0.05,所以1階差分後的序列是平穩序列)

#返回統計量和p值
print(u'差分序列的白噪聲檢驗結果爲:', acorr_ljungbox(D_close,lags=1))
'''
差分序列的白噪聲檢驗結果爲: (array([0.20060231]), array([0.65423511]))
'''

(輸出p值遠大於0.05,所以1階差分之後是平穩白噪聲序列)

#返回統計量和p值
print(u'差分序列的白噪聲檢驗結果爲:', acorr_ljungbox(D_close.diff().dropna(),lags=1))
'''
差分序列的白噪聲檢驗結果爲: (array([39.43026453]), array([3.39986541e-10]))
'''

(輸出p值遠小於0.05,所以2階差分之後是平穩非白噪聲序列)

擬合ARMA模型:一種人爲識別,看差分後的ACF\PACF,第二種方法是相對最有模型

#AR模型,PACF p階截尾
plot_pacf(D_close.diff().dropna(),lags=180).show() 

#MA模型,ACF p階截尾
plot_acf(D_close.diff().dropna(),lags=180).show()

2階差分後的自相關圖顯示出一階截尾,偏自相關顯示拖尾性,所以考慮MA(1)模型進行擬合1階差分後的序列,即對原序列建立ARIMA(0,2,1)模型

#建立ARIMA(0, 2, 1)模型
model = ARIMA(close, (0,2,1)).fit() 
#給出一份模型報告
model.summary2() 
"""
                          Results: ARIMA
==================================================================
Model:              ARIMA            BIC:                 617.8660
Dependent Variable: D2.close         Log-Likelihood:      -300.72 
Date:               2020-04-26 14:10 Scale:               1.0000  
No. Observations:   238              Method:              css-mle 
Df Model:           2                Sample:              2       
Df Residuals:       236                                   0       
Converged:          1.0000           S.D. of innovations: 0.846   
No. Iterations:     41.0000          HQIC:                611.647 
AIC:                607.4492                                      
------------------------------------------------------------------
                   Coef.  Std.Err.    t     P>|t|   [0.025  0.975]
------------------------------------------------------------------
const              0.0007   0.0008   0.8941 0.3722 -0.0008  0.0023
ma.L1.D2.close    -1.0000   0.0120 -83.5519 0.0000 -1.0234 -0.9765
---------------------------------------------------------------------------
               Real           Imaginary          Modulus          Frequency
---------------------------------------------------------------------------
MA.1          1.0000             0.0000           1.0000             0.0000
==================================================================

"""
model.forecast(3) #作爲期3min的預測,返回預測結果、標準誤差、置信區間。
'''
(array([2827.50465589, 2827.7300212 , 2827.95609594]),
 array([0.846307  , 1.19688515, 1.46591118]),
 array([[2825.84592466, 2829.16338712],
        [2825.38416942, 2830.07587299],
        [2825.08296282, 2830.82922905]]))
'''
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章