天堂国产午夜亚洲专区-少妇人妻综合久久蜜臀-国产成人户外露出视频在线-国产91传媒一区二区三区

當(dāng)前位置:主頁(yè) > 論文百科 > 大學(xué)課程 >

[python] 時(shí)間序列分析之ARIMA

發(fā)布時(shí)間:2017-09-17 23:22

  本文關(guān)鍵詞:時(shí)間序列分析


  更多相關(guān)文章: python 時(shí)間序列 分析 ARIMA


1 時(shí)間序列與時(shí)間序列分析

在生產(chǎn)和科學(xué)研究中,對(duì)某一個(gè)或者一組變量 所得到的離散數(shù)字組成的序列集合,稱之為時(shí)間序列。
時(shí)間序列分析是根據(jù)系統(tǒng)觀察得到的時(shí)間序列數(shù)據(jù),通過(guò)曲線擬合和參數(shù)估計(jì)來(lái)建立數(shù)學(xué)模型的理論和方法。時(shí)間序列分析常用于國(guó)民宏觀經(jīng)濟(jì)控制、市場(chǎng)潛力預(yù)測(cè)、氣象預(yù)測(cè)、農(nóng)作物害蟲災(zāi)害預(yù)報(bào)等各個(gè)方面。

2 時(shí)間序列建;静襟E 3 ARIMA實(shí)戰(zhàn)解剖

原理大概清楚,實(shí)踐卻還是會(huì)有諸多問(wèn)題。相比較R語(yǔ)言,Python在做時(shí)間序列分析的資料相對(duì)少很多。下面就通過(guò)Python語(yǔ)言詳細(xì)解析后三個(gè)步驟的實(shí)現(xiàn)過(guò)程。
文中使用到這些基礎(chǔ)庫(kù): 。 對(duì)其調(diào)用如下

from __future__ import print_function import pandas as pd import numpy as np from scipy import stats import matplotlib.pyplot as plt import statsmodels.api as sm from statsmodels.graphics.api import qqplot 3.1 獲取數(shù)據(jù)

這里我們使用一個(gè)具有周期性的測(cè)試數(shù)據(jù),進(jìn)行分析。
數(shù)據(jù)如下:

dta=[10930,10318,10595,10972,7706,6756,9092,10551,9722,10913,11151,8186,6422,
6337,11649,11652,10310,12043,7937,6476,9662,9570,9981,9331,9449,6773,6304,9355,
10477,10148,10395,11261,8713,7299,10424,10795,11069,11602,11427,9095,7707,10767,
12136,12812,12006,12528,10329,7818,11719,11683,12603,11495,13670,11337,10232,
13261,13230,15535,16837,19598,14823,11622,19391,18177,19994,14723,15694,13248,
9543,12872,13101,15053,12619,13749,10228,9725,14729,12518,14564,15085,14722,
11999,9390,13481,14795,15845,15271,14686,11054,10395]

dta=pd.Series(dta) dta.index = pd.Index(sm.tsa.datetools.dates_from_range('2001','2100')) dta.plot(figsize=(12,8))

數(shù)據(jù)形狀

3.2 時(shí)間序列的差分

ARIMA 模型對(duì)時(shí)間序列的要求是平穩(wěn)型。因此,當(dāng)你得到一個(gè)非平穩(wěn)的時(shí)間序列時(shí),首先要做的即是做時(shí)間序列的差分,直到得到一個(gè)平穩(wěn)時(shí)間序列。如果你對(duì)時(shí)間序列做d次差分才能得到一個(gè)平穩(wěn)序列,那么可以使用ARIMA(p,d,q)模型,其中d是差分次數(shù)。

fig = plt.figure(figsize=(12,8)) ax1= fig.add_subplot(111) diff1 = dta.diff(1) diff1.plot(ax=ax1)

這里寫圖片描述


一階差分的時(shí)間序列的均值和方差已經(jīng)基本平穩(wěn),不過(guò)我們還是可以比較一下二階差分的效果

fig = plt.figure(figsize=(12,8)) ax2= fig.add_subplot(111) diff2 = dta.diff(2) diff2.plot(ax=ax2)

這里寫圖片描述


可以看出二階差分后的時(shí)間序列與一階差分相差不大,并且二者隨著時(shí)間推移,時(shí)間序列的均值和方差保持不變。因此可以將差分次數(shù)d設(shè)置為1。
其實(shí)還有針對(duì)平穩(wěn)的檢驗(yàn),叫“ADF單位根平穩(wěn)型檢驗(yàn)”,以后再更。

3.3 合適的

現(xiàn)在我們已經(jīng)得到一個(gè)平穩(wěn)的時(shí)間序列,接來(lái)下就是選擇合適的ARIMA模型,即ARIMA模型中合適的。
第一步我們要先檢查平穩(wěn)時(shí)間序列的自相關(guān)圖和偏自相關(guān)圖。

dta= dta.diff(1)#我們已經(jīng)知道要使用一階差分的時(shí)間序列,之前判斷差分的程序可以注釋掉 fig = plt.figure(figsize=(12,8)) ax1=fig.add_subplot(211) fig = sm.graphics.tsa.plot_acf(dta,lags=40,ax=ax1) ax2 = fig.add_subplot(212) fig = sm.graphics.tsa.plot_pacf(dta,lags=40,ax=ax2)

其中l(wèi)ags 表示滯后的階數(shù),以上分別得到acf 圖和pacf 圖

這里寫圖片描述


通過(guò)兩圖觀察得到:
* 自相關(guān)圖顯示滯后有三個(gè)階超出了置信邊界;
* 偏相關(guān)圖顯示在滯后1至7階(lags 1,2,…,7)時(shí)的偏自相關(guān)系數(shù)超出了置信邊界,從lag 7之后偏自相關(guān)系數(shù)值縮小至0
則有以下模型可以供選擇:
1. ARMA(0,1)模型:即自相關(guān)圖在滯后1階之后縮小為0,且偏自相關(guān)縮小至0,則是一個(gè)階數(shù)q=1的移動(dòng)平均模型;
2. ARMA(7,0)模型:即偏自相關(guān)圖在滯后7階之后縮小為0,且自相關(guān)縮小至0,則是一個(gè)階層p=3的自回歸模型;
3. ARMA(7,1)模型:即使得自相關(guān)和偏自相關(guān)都縮小至零。則是一個(gè)混合模型。
4. …還可以有其他供選擇的模型
現(xiàn)在有以上這么多可供選擇的模型,我們通常采用ARMA模型的AIC法則。我們知道:增加自由參數(shù)的數(shù)目提高了擬合的優(yōu)良性,AIC鼓勵(lì)數(shù)據(jù)擬合的優(yōu)良性但是盡量避免出現(xiàn)過(guò)度擬合(Overfitting)的情況。所以優(yōu)先考慮的模型應(yīng)是AIC值最小的那一個(gè)。赤池信息準(zhǔn)則的方法是尋找可以最好地解釋數(shù)據(jù)但包含最少自由參數(shù)的模型。不僅僅包括AIC準(zhǔn)則,目前選擇模型常用如下準(zhǔn)則:
* 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
構(gòu)造這些統(tǒng)計(jì)量所遵循的統(tǒng)計(jì)思想是一致的,就是在考慮擬合殘差的同時(shí),依自變量個(gè)數(shù)施加“懲罰”。但要注意的是,這些準(zhǔn)則不能說(shuō)明某一個(gè)模型的精確度,也即是說(shuō),對(duì)于三個(gè)模型A,B,C,我們能夠判斷出C模型是最好的,但不能保證C模型能夠很好地刻畫數(shù)據(jù),因?yàn)橛锌赡苋齻(gè)模型都是糟糕的。

arma_mod20 = sm.tsa.ARMA(dta,(7,0)).fit() print(arma_mod20.aic,arma_mod20.bic,arma_mod20.hqic) arma_mod30 = sm.tsa.ARMA(dta,(0,1)).fit() print(arma_mod30.aic,arma_mod30.bic,arma_mod30.hqic) arma_mod40 = sm.tsa.ARMA(dta,(7,1)).fit() print(arma_mod40.aic,arma_mod40.bic,arma_mod40.hqic) arma_mod50 = sm.tsa.ARMA(dta,(8,0)).fit() print(arma_mod50.aic,arma_mod50.bic,arma_mod50.hqic)

這里寫圖片描述


可以看到ARMA(7,0)的aic,bic,hqic均最小,因此是最佳模型。

3.4 模型檢驗(yàn)

在指數(shù)平滑模型下,觀察ARIMA模型的殘差是否是平均值為0且方差為常數(shù)的正態(tài)分布(服從零均值、方差不變的正態(tài)分布),同時(shí)也要觀察連續(xù)殘差是否(自)相關(guān)。

3.4.1 我們對(duì)ARMA(7,0)模型所產(chǎn)生的殘差做自相關(guān)圖 fig = plt.figure(figsize=(12,8)) ax1 = fig.add_subplot(211) fig = sm.graphics.tsa.plot_acf(resid.values.squeeze(), lags=40, ax=ax1) ax2 = fig.add_subplot(212) fig = sm.graphics.tsa.plot_pacf(resid, lags=40, ax=ax2)

這里寫圖片描述

3.4.2 做D-W檢驗(yàn)

德賓-沃森(Durbin-Watson)檢驗(yàn)。德賓-沃森檢驗(yàn),簡(jiǎn)稱D-W檢驗(yàn),是目前檢驗(yàn)自相關(guān)性最常用的方法,但它只使用于檢驗(yàn)一階自相關(guān)性。因?yàn)樽韵嚓P(guān)系數(shù)ρ的值介于-1和1之間,所以 0≤DW≤4。并且DW=O=>ρ=1   即存在正自相關(guān)性
DW=4<=>ρ=-1 即存在負(fù)自相關(guān)性
DW=2<=>ρ=0  即不存在(一階)自相關(guān)性
因此,當(dāng)DW值顯著的接近于O或4時(shí),則存在自相關(guān)性,而接近于2時(shí),則不存在(一階)自相關(guān)性。這樣只要知道DW統(tǒng)計(jì)量的概率分布,在給定的顯著水平下,根據(jù)臨界值的位置就可以對(duì)原假設(shè)H0進(jìn)行檢驗(yàn)。

print(sm.stats.durbin_watson(arma_mod20.resid.values))

檢驗(yàn)結(jié)果是2.02424743723,說(shuō)明不存在自相關(guān)性。

3.4.3 觀察是否符合正態(tài)分布

這里使用QQ圖,它用于直觀驗(yàn)證一組數(shù)據(jù)是否來(lái)自某個(gè)分布,或者驗(yàn)證某兩組數(shù)據(jù)是否來(lái)自同一(族)分布。在教學(xué)和軟件中常用的是檢驗(yàn)數(shù)據(jù)是否來(lái)自于正態(tài)分布。QQ圖細(xì)節(jié),下次再更。

resid = arma_mod20.resid#殘差 fig = plt.figure(figsize=(12,8)) ax = fig.add_subplot(111) fig = qqplot(resid, line='q', ax=ax, fit=True)

這里寫圖片描述

3.4.4 Ljung-Box檢驗(yàn)

Ljung-Box test是對(duì)randomness的檢驗(yàn),或者說(shuō)是對(duì)時(shí)間序列是否存在滯后相關(guān)的一種統(tǒng)計(jì)檢驗(yàn)。對(duì)于滯后相關(guān)的檢驗(yàn),我們常常采用的方法還包括計(jì)算ACF和PCAF并觀察其圖像,但是無(wú)論是ACF還是PACF都僅僅考慮是否存在某一特定滯后階數(shù)的相關(guān)。LB檢驗(yàn)則是基于一系列滯后階數(shù),判斷序列總體的相關(guān)性或者說(shuō)隨機(jī)性是否存在。
時(shí)間序列中一個(gè)最基本的模型就是高斯白噪聲序列。而對(duì)于ARIMA模型,其殘差被假定為高斯白噪聲序列,所以當(dāng)我們用ARIMA模型去擬合數(shù)據(jù)時(shí),擬合后我們要對(duì)殘差的估計(jì)序列進(jìn)行LB檢驗(yàn),,判斷其是否是高斯白噪聲,如果不是,那么就說(shuō)明ARIMA模型也許并不是一個(gè)適合樣本的模型。

r,q,p = sm.tsa.acf(resid.values.squeeze(), qstat=True) data = np.c_[range(1,41), r[1:], q, p] table = pd.DataFrame(data, columns=['lag', "AC", "Q", "Prob(>Q)"]) print(table.set_index('lag'))

這里寫圖片描述


檢驗(yàn)的結(jié)果就是看最后一列前十二行的檢驗(yàn)概率(一般觀察滯后1~12階),如果檢驗(yàn)概率小于給定的顯著性水平,比如0.05、0.10等就拒絕原假設(shè),其原假設(shè)是相關(guān)系數(shù)為零。就結(jié)果來(lái)看,如果取顯著性水平為0.05,那么相關(guān)系數(shù)與零沒(méi)有顯著差異,即為白噪聲序列。

3.5 模型預(yù)測(cè)

模型確定之后,就可以開(kāi)始進(jìn)行預(yù)測(cè)了,我們對(duì)未來(lái)十年的數(shù)據(jù)進(jìn)行預(yù)測(cè)。

predict_sunspots = arma_mod20.predict('2090', '2100', dynamic=True) print(predict_sunspots) fig, ax = plt.subplots(figsize=(12, 8)) ax = dta.ix['2001':].plot(ax=ax) predict_sunspots.plot(ax=ax)

這里寫圖片描述


前面90個(gè)數(shù)據(jù)為測(cè)試數(shù)據(jù),最后10個(gè)為預(yù)測(cè)數(shù)據(jù);從圖形來(lái),預(yù)測(cè)結(jié)果較為合理。至此,本案例的時(shí)間序列分析也就結(jié)束了。

參考文獻(xiàn)與推薦閱讀



本文編號(hào):871998

資料下載
論文發(fā)表

本文鏈接:http://sikaile.net/wenshubaike/dxkc/871998.html


Copyright(c)文論論文網(wǎng)All Rights Reserved | 網(wǎng)站地圖 |

版權(quán)申明:資料由用戶d54fd***提供,本站僅收錄摘要或目錄,作者需要?jiǎng)h除請(qǐng)E-mail郵箱bigeng88@qq.com