時間序列分析

一,什麼是時間序列?

時間序列簡單的說就是各時間點上形成的數值序列,時間序列分析就是通過觀察歷史數據預測未來的值

時間序列分析並不是關於時間的迴歸,它主要是研究自身的變化規律的

二,時間序列的類別

1,純隨機序列

又稱為白噪聲序列,序列的各項之間沒有任何相關關係,完全是無序的隨機波動,這樣的序列沒有任何信息可以提取

2,平穩非白噪聲序列

他的均值和方差是常數,對於這樣的序列,現在已經有成熟的建模方法,通常是建立一個線性模型來擬合該序列的發展,藉此提出有用的信息,ARMA 模型是最常用的平穩序列擬合模型(線性擬合併不是和時間的擬合,而是和本身的擬合)

3,非平穩非白噪聲序列

對於非平穩序列,他的方差和均值不穩定,一般是先將其轉換成平穩序列,這樣就可以使用平穩時間序列的方法來分析,如ARMA模型;如果一個時間序列可以經差分後具有平穩性,則該序列是差分平穩序列,可以使用ARIMA模型

三:平穩性檢驗

1,為何要求序列平穩?

我們知道序列平穩性是進行時間序列分析的前提條件,很多人都會有疑問,為什麼要滿足平穩性的要求呢?

在統計學中,每一個問題我們都要有一個初始的基本假設,就像一些假設檢驗就要求數據符合正態分佈,一個迴歸方程,要求Xi完全獨立不相關,而且誤差要符合均值為0的正態分佈,而在時間序列分析上,最重要的假設前提就是序列的平穩性(來自一個知乎的牛叉解讀),所以平穩的基本思想是:時間序列行為不能隨著時間改變而改變,

2,平穩時間序列的定義:

平穩有強平穩和弱平穩之分,這裡我們主要說弱平穩。ps:強平穩條件限制太強,難以驗證

對於隨機變量 X ,可以計算期均值也就是數學期望 μ ,方差 σ^2,對於兩個隨機變量X 和 Y,可以計算 X,Y的協方差cov(X,Y)=E[(X- μx)(Y-μy)]和相關係數ρ(X,Y)=cov(X,Y)/σXσY,他們度量了兩個不同事件之間的相互影響程度。

對時間序列{Xt,t∈T},任意時刻的序列值Xt都是一個隨機變量,每一個隨機變量都會有均值和方差,任意取 t,s∈T,則他的自相關協方差函數 γ(t,s) = E[(X- μt)(Y-μs)] 和自相關係數ρ(t,s) = cov(Xt,Xs)/σtσs,之所以是自協方差函數和自相關係數,就是因為他們衡量的是同一件事在兩個不同時期(時刻 t 和時刻 s )之間的相關程度,簡單講就是度量自己過去的行為對自己現在的影響!

如果時間序列{Xt,t∈T}在某一個常數附近波動且波動範圍有限,即有常數均值和常數方差,並且延遲 k 期的序列變量的自協方差和自相關係數不變,或者說延遲 k 期的序列變量之間的影響程度一樣,則稱時間序列{Xt,t∈T}為平穩序列!

總結就是:

  • 常數均值
  • 常數方差
  • 常數自協方差和自相關係數

3,平穩性檢測

對序列的平穩性檢驗有兩種檢驗方法:

  • 根據時序圖和自相關圖的特徵做出的圖檢驗,操作簡單,但是帶有主觀性

1)時序圖檢驗:根據平穩時間序列的均值和方差為常數,平穩序列的時序圖顯示該序列應該在一個常數附件波動,而且波動範圍有限,如果有明顯的趨勢性和週期性,則不是平穩序列

2)自相關圖檢驗:平穩序列具有短期相關性,這個表明通常只有近期德爾序列值對現在的值影響比較明顯,間隔越遠的過去值對現在值影響越小。隨著延遲期數 k 的增加,平穩性的自相關係數 ρk會比較快的衰減趨向於零,並在0附件波動,而非平穩序列的自相關係數衰減的速度比較慢,這是利用自相關圖進行平穩檢驗的依據。

  • 構造檢驗統計量進行檢驗,常用的是單位根檢驗,還有 kpss 檢驗

單位根ADF檢驗指檢驗序列中是否存在單位根,如果存在,就是非平穩時間序列

ADF方法:原假設:序列有一個單位根(a=1的值),備則假設:該序列沒有單位根如果接受原假設,則該序列是非平穩的,是可以差分平穩的

KPSS檢驗的作者將原假設定義為趨勢平穩,並將備擇假設定義為單位根序列

from statsmodels.tsa.stattools import adfuller,kpss
adf = adfuller(data['銷量']) #print(dftest)
adfout = pd.Series(adf[0:4],index=['Test statistic','p-value','lag Users',\
'Number of Observations Used'])
print('ADF檢測:',adfout)
kpsstest=kpss(data['銷量'])
print('KPSS檢測:',kpsstest)

四:序列隨機性檢驗

如果一個序列是純隨機序列,那麼他的序列值之間完全沒有任何關係,這是一種理想的狀態,實際上純隨機序列的樣本自相關係數不會為零,但是接近於零,在零附件波動。

純隨機性檢驗也叫白噪聲檢驗,一般是構造檢驗統計量來檢驗序列的隨機性,常用的統計量有Q統計量,LB統計量等。有樣本各延期數的自相關係數可以計算得到統計檢驗量,然後計算出對應的p值,如果p值顯著大於顯著性水平α,則表示該序列不能拒絕純隨機的原假設,可以停止對該序列分析了。

from statsmodels.stats.diagnostic import acorr_ljungbox
print('白噪聲檢測結果:',acorr_ljungbox(diff1,lags=1)) #返回結果:[統計量,pvalue]
from statsmodels.tsa import stattools
stattools.q_stat #返回Ljung-Box Q統計量,用來做隨機性檢測

五:常用的時間序列模型

1,平穩時間序列分析

ARMA模型的全稱是自迴歸移動平均模型,他是目前最常用的擬合模型平穩序列的模型,他又可以細分為AR模型,MA模型和ARMA模型,都可以看成是多元線性模型

1)自相關係數(ACF)

平穩AR(P)模型的自相關係數ρ(k) = cov(Xt,Xt-k)/σtσt-k 呈指數的速度衰減,始終有非零值,不會在k大於某個常數之後就恆等於零,這個就是平穩AR(P)模型的自相關係數ρ(k) 具有拖尾性

2)偏自相關係數(PACF)

對於平穩AR(P)模型,求出延遲k 期自相關係數ρ(k)時,實際上得到的並不是Xt與Xt-k之間單純的相關關係,因為Xt還會受到中間k-1個隨機變量Xt-1,Xt-2,... ,Xt-k的影響,所以ρ(k)實際上摻雜了其他變量對Xt與Xt-k的相關影響,為了單純測算Xt-k 對 Xt的影響,引進了偏自相關係數。

平穩AR(P)模型偏自相關係數具有p階截尾性,這個和自相關係數的拖尾性是AR(P)模型重要的識別依據!

1.1 AR模型

能夠以以下結構表示的模型統稱為p階自迴歸模型,簡稱為AR(p)

xt = φ0+ φ1xt-1 +φ2xt-2+...+ φpxt-p + εt

即,在 t 時刻的隨機變量Xt的取值 xt 是前 p 期xt-1,xt-1 , ... , xt-p的多元線性迴歸,認為xt主要受過去p期的序列值的影響,誤差是當前的隨機誤差 εt,為零均值的白噪聲序列-

時間序列分析

AR模型性質

1.2 MA模型

具有一下結構的模型稱為q階移動平均模型MA(q)

xt = μ +εt - θ1εt-1 - θ2εt-2 - ...- θqεt-q

在t時刻的隨機變量Xt的取值xt 是前 q 期的隨機誤差εt-1 ,εt-2 ,...,εt-q的多元線性函數,誤差項是當期的隨機誤差εt ,為零均值的白噪聲序列,μ 是 序列{Xt}的均值,這裡認為xt 主要是受過去q 期的誤差項影響。

性質如下:

時間序列分析

1.3 ARMA模型

如果滿足以下結構的模型,則稱為自迴歸平均模型ARMA(p,q)

xt = φ0+ φ1xt-1 +φ2xt-2+...+ φpxt-p + εt - θ1εt-1 - θ2εt-2 - ...- θqεt-q

在t時刻的隨機變量Xt的取值xt 是前 p 期xt-1,xt-1 , ... , xt-p和前 q 期的隨機誤差εt-1 ,εt-2 ,...,εt-q的多元線性函數,誤差項是當期的隨機誤差εt ,為零均值的白噪聲序列,認為xt 主要是受過去p期的序列值和q 期的誤差項的共同影響影響

ps:當q=0時,是模型;當p=0時,是MA(q)模型

平穩 ARMA模型性質如下:

時間序列分析

六:平穩時間序列建模過程

1,計算ACF,PACF,自相關圖和偏自相關圖

2,ARMA模型識別,也稱為模型定階,由自相關係數和偏自相關係數性質,選擇合適的模型

ARMA模型識別原則:

時間序列分析

這樣識別主觀性比較大.

可以通過AIC,BIC來準則來得到p和q,這兩個指標越小越好

很多參數估計問題均採用似然函數作為目標函數,當訓練數據足夠多時,可以不斷提高模型精度,但是以提高模型複雜度為代價的,同時帶來一個機器學習中非常普遍的問題——過擬合。所以,模型選擇問題在模型複雜度與模型對數據集描述能力(即似然函數)之間尋求最佳平衡。

人們提出許多信息準則,通過加入模型複雜度的懲罰項來避免過擬合問題,此處我們介紹一下常用的兩個模型選擇方法——赤池信息準則(Akaike Information Criterion,AIC)和貝葉斯信息準則(Bayesian Information Criterion,BIC)。

AIC是衡量統計模型擬合優良性的一種標準,它建立在熵的概念上,提供了權衡估計模型複雜度和擬合數據優良性的標準。

通常情況下,AIC定義為:2K-Zln(L)

其中k是模型參數個數,L是似然函數。從一組可供選擇的模型中選擇最佳模型時,通常選擇AIC最小的模型。

當兩個模型之間存在較大差異時,差異主要體現在似然函數項,當似然函數差異不顯著時,上式第一項,即模型複雜度則起作用,從而參數個數少的模型是較好的選擇。

一般而言,當模型複雜度提高(k增大)時,似然函數L也會增大,從而使AIC變小,但是k過大時,似然函數增速減緩,導致AIC增大,模型過於複雜容易造成過擬合現象。目標是選取AIC最小的模型,AIC不僅要提高模型擬合度(極大似然),而且引入了懲罰項,使模型參數儘可能少,有助於降低過擬合的可能性。

BIC貝葉斯信息準則與AIC相似,用於模型選擇。訓練模型時,增加參數數量,也就是增加模型複雜度,會增大似然函數,但是也會導致過擬合現象,針對該問題,AIC和BIC均引入了與模型參數個數相關的懲罰項,BIC的懲罰項比AIC的大,考慮了樣本數量,樣本數量過多時,可有效防止模型精度過高造成的模型複雜度過高。

通常情況下,BIC = kln(n)-zln(L)

其中,

k為模型參數個數,n為樣本數量,L為似然函數。kln(n)懲罰項在維數過大且訓練樣本數據相對較少的情況下,可以有效避免出現維度災難現象

參考:https://blog.csdn.net/lynnucas/article/details/47947943

#定階,一般p,q最大值都不會超過數據長度的十分之一
pmax=int(len(data)/10)
qmax=int(len(data)/10)
bic_matrix=[]
for p in range(pmax+1):
tmp=[]
for q in range(qmax+1):
try:
tmp.append(ARMA(data,(p,q)).fit().bic)
except:
tmp.append(None)
bic_matrix.append(tmp)
bic_data = pd.DataFrame(bic_matrix)
p,q = bic_data.stack().idxmin()
print('BIC最小的p和q值為:%s,%s'%(p,q))

3,模型檢驗

殘差為白噪聲序列

from statsmodels.stats.diagnostic import acorr_ljungbox
#需要對模型進行殘差檢測是否為白噪聲序列,滿足才可以接著進行預測
resids = model.resid #模型殘差

#要求殘差為純隨機序列,也就是白噪聲序列
print('殘差的白噪聲檢測結果:',acorr_ljungbox(resids,lags=1))
#殘差獨立性檢測,durbin_watson結果在2附近說明滿足殘差獨立性
print('durbin_watson檢測結果:',sm.stats.durbin_watson(resids))
# qq圖,檢測是否符合正態分佈
qqplot(resids)

4,模型優化

5,模型應用,用來預測接下來短時間的數據序列

七:非平穩時間序列分析過程

我們上面說了平穩序列的分析過程,但是實際上在,我們遇到的大部分的序列大都是非平穩的,因此對非平穩序列分析更加普遍,真正項目中用到的也是如此。

對於非平穩時間序列,一般常用的模型有ARIMA模型,殘差自迴歸模型,異方差模型。一般使用ARIMA更為普遍。

1,差分運算,對於非平穩時間序列,可以通過差分運算來變成差分平穩序列

  • 相距一期的兩個序列之間的值相減運算稱之為1階差分運算
  • 相距 k 期的兩個序列之間的值相減運算稱之為k 步差分運算

2,ARIMA模型

差分運算具有強大的確定性信息提取能力,許多非平穩序列差分後會顯示出平穩序列的性質,這時的非平穩序列稱之為差分平穩序列。對差分平穩序列就可以使用ARMA模型進行擬合。ARIMA模型實質上就是差分運算和ARMA模型的組合。如果你對時間序列做d次差分才能得到一個平穩序列,

那麼可以使用ARIMA(p,d,q)模型,其中d是差分次數。對於差分後的平穩序列,分析方法同平穩序列一樣。


分享到:


相關文章: