ARIMa--時間序列模型


一、概述

  在生產和科學研究中,對某一個或者一組變量 x(t)x(t) 進行觀察測量,將在一系列時刻 t1,t2,⋯,tnt1,t2,⋯,tn 所得到的離散數字組成的序列集合,稱之為時間序列。
時間序列分析是根據系統觀察得到的時間序列數據,通過曲線擬合和參數估計來建立數學模型的理論和方法。時間序列分析常用於國民宏觀經濟控制、市場潛力預測、氣象預測、農作物害蟲災害預報等各個方面。

  ARIMA模型,全稱為自回歸積分滑動平均模型(Autoregressive Integrated Moving Average Model),是由博克思(Box)和詹金斯(Jenkins)於20世紀70年代初提出的一種時間序列預測方法。ARIMA模型是指在將非平穩時間序列轉化為平穩時間序列過程中,將因變量僅對它的滯后值以及隨機誤差項的現值和滯后值進行回歸所建立的模型。

  注意:時間序列模型適用於做短期預測,即統計序列過去的變化模式還未發生根本性變化。

二、原理

  ARIMA(p,d,q) 稱為差分自回歸移動平均模型,根據原序列是否平穩以及回歸中所含部分的不同,包括移動平均過程(MA)、自回歸過程(AR)、自回歸移動平均過程(ARMA)和自回歸滑動平均混合過程(ARIMA)。

  AR是自回歸,p為自回歸項;MA為移動平均,q為移動平均項數,d為時間序列變為平穩時間序列時所做的差分次數。

三、時間序列建模步驟

  1.數據的准備,准備帶觀測系統的時間序列數據

  2.數據可視化,觀測是否為平穩時間序列,若是非平穩時間序列,則需要進行d階差分運算,將其化為平穩時間序列

  3.得到平穩時間序列后,要對其分別求得自相關系數ACF,偏自相關系數PACF,通過對自相關圖和偏自相關圖的分析,得到最佳的階層P,階數q

  4.由以上得到d,p,q,得到ARIMA模型,然后對模型進行模型檢驗

四、典例解析

  1.數據的准備

  這里我們已經備好了數據,截圖如下。

  

 

   2.數據繪圖展示

1 data=pd.read_excel(r".\arima_data.xls",index_col=0)
2 data.plot(figsize=(12, 8))
3 plt.show()

 

   3.d階差分分析

  ARIMA模型的要求是平穩性的時間序列,但是上圖很明顯是一個非平穩的時間序列,數據有很明顯的線性相關性,這時首先要做的就是差分了,得到一個平穩的時間序列。

如果你對時間序列做d次差分才能得到一個平穩序列,那么可以使用ARIMA(p,d,q)模型,其中d是差分次數。

  一階差分

1 fig = plt.figure(figsize=(8, 5))
2 # 參數111,指的是將圖像分成1行1列,此子圖占據從左到右從上到下的1位置。
3 ax1 = fig.add_subplot(111)
4 #做一階差分
5 diff1 = data.diff(1)
6 diff1.plot(ax=ax1)
7 plt.show()

 

   一階差分的時間序列並不很平穩,我們看一下二階差分

 

   這是我們發現二階差分明顯不如一階差分,所以這里我們就選定一階差分,則參數的 d 定為 1.

  4.確定合適的p,q的值

   繪制平穩時間序列的自相關圖和偏自相關圖

 

   分析自相關系數圖和偏自相關系數圖,確定P,q的值的依據

  

   可以看出倆個圖都在1階后衰減趨於0,所以我們就確定了p,q,均為1

  5.模型檢測

  一般模型 是用來檢測我們前面幾個參數的優劣性的,但是我們這邊只有個一個選擇,所以就不做測試,給出方法。

  采用AIC法則對ARIMA模型進行檢測,我們知道:增加自由參數的數目提高了擬合的優良性,AIC鼓勵數據擬合的優良性但是盡量避免出現過度擬合(Overfitting)的情況。所以優先考慮的模型應是AIC值最小的那一個。

  目前常用的准則:

  * AIC=-2 ln(L) + 2 k 中文名字:赤池信息量 akaike information criterion
  * BIC=-2 ln(L) + ln(n)*k 中文名字:貝葉斯信息量 bayesian information criterion
  * HQ=-2 ln(L) + ln(ln(n))*k hannan-quinn criterion

1 arma_mod20 = sm.tsa.ARMA(dta,(7,0)).fit()
2 print(arma_mod20.aic,arma_mod20.bic,arma_mod20.hqic)

  5.模型預測

1 arma_mod20 = ARIMA(data['銷量'].astype(float), (1, 1, 1)).fit()
2 # 返回未來n天的結果,預測誤差,置信區間
3 print(arma_mod20.forecast(20))

  

 

  截圖只顯示了結果,預測誤差和置信區間沒有展示

   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM