天天看點

Python資料分析:時序模型-ARIMAPython資料分析:時序模型-ARIMA

Python資料分析:時序模型-ARIMA

AR(Autoregressive)模型

  • 自回歸模型描述的是目前值與曆史值之間的關系
  • 滞後p階的AR模型

    A R ( p ) : y t = μ + ∑ i = 1 p γ i y t − i + ϵ t \mathrm{AR}(\mathrm{p}) : y_{t}=\mu+\sum_{i=1}^{p} \gamma_{i} y_{t-i}+\epsilon_{t} AR(p):yt​=μ+i=1∑p​γi​yt−i​+ϵt​

    μ是常數,γ是t-p時刻滞後變量的系數,ε是誤差

  • AR ⁡ ( 1 ) : y t = μ + γ y t − 1 + ϵ t \operatorname{AR}(1) : \quad y_{t}=\mu+\gamma y_{t-1}+\epsilon_{t} AR(1):yt​=μ+γyt−1​+ϵt​

MA(Moving average)模型:

  • 滑動平均模型描述的是自回歸部分的誤差累積
  • M A ( q ) : y t = μ + ϵ t + ∑ i = 1 q θ i ϵ t − i \mathrm{MA}(\mathrm{q}) : \quad y_{t}=\mu+\epsilon_{t}+\sum_{i=1}^{q} \theta_{i} \epsilon_{t-i} MA(q):yt​=μ+ϵt​+i=1∑q​θi​ϵt−i​
  • M A ( 1 ) : y t = μ + ϵ t + θ ϵ t − 1 \mathrm{MA}(1) : \quad y_{t}=\mu+\epsilon_{t}+\theta \epsilon_{t-1} MA(1):yt​=μ+ϵt​+θϵt−1​

ARNA(Autoregressive moving average)模型:

  • AR與MA的結合ARMA(p,q)

    y t = μ + ∑ i = 1 p γ i y t − i + ϵ t + ∑ i = 1 q θ i ϵ t − i y_{t}=\mu+\sum_{i=1}^{p} \gamma_{i} y_{t-i}+\epsilon_{t}+\sum_{i=1}^{q} \theta_{i} \epsilon_{t-i} yt​=μ+i=1∑p​γi​yt−i​+ϵt​+i=1∑q​θi​ϵt−i​

平穩性:

  • ARMA模型要求時間序列是平穩的
  • 一個時間序列,如果均值沒有系統的變化(無趨勢)、方差沒有系統變化,且嚴格消除了周期性變化,就稱為是平穩的

嚴平穩:

  • 序列所有的統計性質不會随時間的推移而發生變化。

弱平穩:

  • 序列均值和協方差不随時間而改變
  • 現實中所處理的時序通常是弱平穩

差分:

  • 通常非平穩序列可以經過d階差分得到弱平穩或近似弱平穩的時間序列
  • ARIMA(p,d,q):p階自回歸滞後項,q階滑動平均滞後項,d階差分

相關系數:

ρ X , Y = cov ⁡ ( X , Y ) σ X σ Y = E [ ( X − μ X ) ( Y − μ Y ) ] σ X σ Y \rho_{X, Y}=\frac{\operatorname{cov}(X, Y)}{\sigma_{X} \sigma_{Y}}=\frac{E\left[\left(X-\mu_{X}\right)\left(Y-\mu_{Y}\right)\right]}{\sigma_{X} \sigma_{Y}} ρX,Y​=σX​σY​cov(X,Y)​=σX​σY​E[(X−μX​)(Y−μY​)]​

  • 反映向量空間中兩個向量之間相關關系密切程度的統計名額
    • 兩個向量平行且同向,系數為1;平行且相反,系數為-1
    • 兩個向量垂直,不相關,系數為0
    • 向量間夾角越小,相關系數越接近1,相關性越高

自相關函數:

A C F ( k ) = ρ k = Cov ⁡ ( y t , y t − k ) Var ⁡ ( y t ) A C F(k)=\rho_{k}=\frac{\operatorname{Cov}\left(y_{t}, y_{t-k}\right)}{\operatorname{Var}\left(y_{t}\right)} ACF(k)=ρk​=Var(yt​)Cov(yt​,yt−k​)​

  • 描述随機信号在任意兩個不同時刻t1,t2的取值之間的相關程度

偏自相關函數:

ρ k ∗ = Corr ⁡ [ y t − E ∗ ( y t ∣ y t − 1 , … , y t − k + 1 ) , y t − k ) ] \rho_{k}^{*}=\operatorname{Corr}\left[y_{t}-E^{*}\left(y_{t} | y_{t-1}, \ldots, y_{t-k+1}\right), y_{t-k}\right) ] ρk∗​=Corr[yt​−E∗(yt​∣yt−1​,…,yt−k+1​),yt−k​)]

  • 階次為k的偏自相關:去除信号中所有滞後期小于k的信号影響後,目前信号與滞後k階的信号之間的關系

ARIMA模型參數選擇:

  1. 檢查序列是否平穩

    若不平穩,使用差分平穩化序列,确定差分階數d

  2. ARMA定階

    通過PACF确定AR的階數p

    通過ACF确定MA的階數q

  3. 根據參數偏p,d,q建立ARIMA(p,d,q)
AR§ MA(q) ARNA(p,q)
ACF 趨勢衰減 q階後截尾 趨勢衰減
PACF p階後截尾 趨勢衰減 趨勢衰減
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

# 構造時間時間序列
df_obj = pd.DataFrame(np.random.randn(1000, 1), 
                       index=pd.date_range('20190101', periods=1000),
                       columns=['data'])
df_obj['data'] = df_obj['data'].cumsum()

# 一階差分處理
df_obj['diff_1'] = df_obj['data'].diff(1)

# 二階差分處理
df_obj['diff_2'] = df_obj['diff_1'].diff(1)

# 檢視圖像
df_obj.plot(subplots=True, figsize=(18, 12))
           

運作:

Python資料分析:時序模型-ARIMAPython資料分析:時序模型-ARIMA

利用ACF和PACF作圖來分别求出階數q和p:

from scipy import  stats
import statsmodels.api as sm

sm.graphics.tsa.plot_acf(df_obj['data'], lags=20)
sm.graphics.tsa.plot_pacf(df_obj['data'], lags=20)