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γiyt−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γiyt−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σYcov(X,Y)=σXσYE[(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模型參數選擇:
-
檢查序列是否平穩
若不平穩,使用差分平穩化序列,确定差分階數d
-
ARMA定階
通過PACF确定AR的階數p
通過ACF确定MA的階數q
- 根據參數偏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))
運作:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0TPn1ENZpWT1MGVNBDOsJGcohVYsR2MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZwpmL4kTMyAzM0cTM5IDNwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
利用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)