时间序列相关算法与分析步骤
1.純隨機(jī)序列(白噪聲序列),這時(shí)候可以停止分析,因?yàn)榫拖耦A(yù)測(cè)下一次硬幣哪一面朝上一樣毫無(wú)規(guī)律。
2.平穩(wěn)非白噪聲序列,它們的均值和方差是常數(shù),對(duì)于這類(lèi)序列,有成熟的模型來(lái)擬合這個(gè)序列在未來(lái)的發(fā)展?fàn)顩r,如AR,MA,ARMA等(具體模型算法及實(shí)現(xiàn)在后面)
3.非平穩(wěn)序列,一般做法是把他們轉(zhuǎn)化為平穩(wěn)的序列,在按照平穩(wěn)序列的算法進(jìn)行擬合。如果經(jīng)過(guò)差分后平穩(wěn),則應(yīng)使用ARIMA模型進(jìn)行擬合。
注:本文模型采用的數(shù)據(jù)為某餐廳一個(gè)多月內(nèi)的銷(xiāo)量數(shù)據(jù),包含兩個(gè)特征:時(shí)間和銷(xiāo)量
Q1:序列的平穩(wěn)性用什么來(lái)衡量呢?
方法1:
根據(jù)時(shí)序圖和自相關(guān)圖的特征做出主觀的判斷,如下圖:
時(shí)序圖:
自相關(guān)圖:
從上圖可以基本看出,自相關(guān)系數(shù)的絕對(duì)值長(zhǎng)期都保持了較大的值,所以可以判斷上述時(shí)間序列存在自相關(guān)性。
平穩(wěn)的序列自相關(guān)圖和偏自相關(guān)圖不是拖尾就是截尾。
截尾就是在某階之后,系數(shù)都為 0 。
拖尾就是有一個(gè)衰減的趨勢(shì),但是不都為 0 。
從自相關(guān)圖來(lái)看,呈現(xiàn)三角對(duì)稱(chēng)形式,不存在截尾或拖尾,屬于單調(diào)序列的典型表現(xiàn)形式,原始數(shù)據(jù)屬于不平穩(wěn)序列。
注:
如果自相關(guān)是拖尾,偏相關(guān)截尾,則用 AR 算法
如果自相關(guān)截尾,偏相關(guān)拖尾,則用 MA 算法
如果自相關(guān)和偏相關(guān)都是拖尾,則用 ARMA 算法, ARIMA 是 ARMA 算法的擴(kuò)展版,用法類(lèi)似 。
相關(guān)系數(shù)的計(jì)算方法:
VAR表示方差
方法2:
根據(jù)單位根檢驗(yàn)
如果存在單位根,則此序列為隨機(jī)非平穩(wěn)序列
Q2:平穩(wěn)序列應(yīng)該怎么分析呢?
目前最常用的擬合平穩(wěn)序列的模型為ARMA(Autoregressive moving average)模型,全稱(chēng)是自回歸移動(dòng)平均模型,他又可以分為AR模型,MA模型和ARMA模型三大類(lèi)。
1.自回歸AR(p)模型
自回歸模型描述的是當(dāng)前值與歷史值之間的關(guān)系。
2.移動(dòng)平均MA(q)模型
移動(dòng)平均模型描述的是自回歸部分的誤差累計(jì)。
3.ARMA(p,q)模型
ARMA(p,q)模型中包含了p個(gè)自回歸項(xiàng)和q個(gè)移動(dòng)平均項(xiàng),ARMA(p,q)模型可以表示為:
當(dāng)q=0時(shí),是AR(p)模型
當(dāng)p=0時(shí),是MA(q)模型
一般分析步驟:
Q3:非平穩(wěn)序列怎么分析呢?
從上面的模型中可以看出,如果是非平穩(wěn)序列,我們需要先把它轉(zhuǎn)為平穩(wěn)序列之后再進(jìn)行分析。
一般我們使用ARIMA(Autoregressive Integrated Moving Average model)進(jìn)行分析
ARIMA(p,d,q)中,AR是”自回歸”,p為自回歸項(xiàng)數(shù);MA為”滑動(dòng)平均”,q為滑動(dòng)平均項(xiàng)數(shù),d為使之成為平穩(wěn)序列所做的差分次數(shù)(階數(shù))。
“差分”一詞雖未出現(xiàn)在ARIMA的英文名稱(chēng)中,卻是關(guān)鍵步驟。
Q4:舉個(gè)栗子看下唄!
讀取數(shù)據(jù)
#-*- coding: utf-8 -*- #arima時(shí)序模型import pandas as pd#參數(shù)初始化 discfile = '../data/arima_data.xls' forecastnum = 5#讀取數(shù)據(jù),指定日期列為指標(biāo),Pandas自動(dòng)將“日期”列識(shí)別為Datetime格式 data = pd.read_excel(discfile, index_col = u'日期')自相關(guān)檢測(cè)
#時(shí)序圖 import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = ['SimHei'] #用來(lái)正常顯示中文標(biāo)簽 plt.rcParams['axes.unicode_minus'] = False #用來(lái)正常顯示負(fù)號(hào) data.plot() plt.show()#自相關(guān)圖 from statsmodels.graphics.tsaplots import plot_acf plot_acf(data).show()#平穩(wěn)性檢測(cè) from statsmodels.tsa.stattools import adfuller as ADF print(u'原始序列的ADF檢驗(yàn)結(jié)果為:', ADF(data[u'銷(xiāo)量'])) #返回值依次為adf、pvalue、usedlag、nobs、critical values、icbest、regresults、自相關(guān)圖
可以看出自相關(guān)系數(shù)的絕對(duì)值長(zhǎng)期都保持很大,多以基本判斷存在自相關(guān)性。
ADF檢測(cè)結(jié)果p值顯著大于0.05(p=0.9983),最終判斷為非平穩(wěn)序列
一階差分后繼續(xù)檢測(cè)
#差分后的結(jié)果 D_data = data.diff().dropna() D_data.columns = [u'銷(xiāo)量差分'] D_data.plot() #時(shí)序圖 plt.show() plot_acf(D_data).show() #自相關(guān)圖 from statsmodels.graphics.tsaplots import plot_pacf plot_pacf(D_data).show() #偏自相關(guān)圖 print(u'差分序列的ADF檢驗(yàn)結(jié)果為:', ADF(D_data[u'銷(xiāo)量差分'])) #平穩(wěn)性檢測(cè)#白噪聲檢驗(yàn) from statsmodels.stats.diagnostic import acorr_ljungbox print(u'差分序列的白噪聲檢驗(yàn)結(jié)果為:', acorr_ljungbox(D_data, lags=1)) #返回統(tǒng)計(jì)量和p值
上圖是差分后的銷(xiāo)量結(jié)果
自相關(guān)圖顯示出1階截尾的性質(zhì)
偏自相關(guān)圖顯示出1階拖尾的性質(zhì)
從ADF的結(jié)果(p=0.0226)和自相關(guān)圖以及偏自相關(guān)圖中可以看出一階差分后的序列是平穩(wěn)的非白噪聲序列。
給ARIMA模型定階
從一階差分后的序列是平穩(wěn)的非白噪聲序列可以看出ARIMA模型中的d=1
定階方法:
1.人為判斷:自相關(guān)圖顯示出從第1階之后的截尾性質(zhì),偏自相關(guān)圖從第1階之后顯示出拖尾的性質(zhì),所以人為判斷使用MA(1)模型,即ARMA(0,1,1)
2.相對(duì)最優(yōu)模型識(shí)別,當(dāng)p和q均小于等于3的所有組合的BIC信息量,取其中BIC信息量達(dá)到最小的模型階數(shù)。
- 17
BIC矩陣
取其中BIC信息量達(dá)到最小的模型階數(shù)。
確定p=0,q=1
擬合模型
model = ARIMA(data, (p,1,q)).fit() #建立ARIMA(0, 1, 1)模型 model.summary2() #給出一份模型報(bào)告 model.forecast(5) #作為期5天的預(yù)測(cè),返回預(yù)測(cè)結(jié)果、標(biāo)準(zhǔn)誤差、置信區(qū)間。最終得到模型的預(yù)測(cè)結(jié)果
數(shù)據(jù)和完整代碼可以通過(guò)在留言中留下郵箱獲取哦~
版權(quán)聲明:歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明出處:土豆洋芋山藥蛋:http://blog.csdn.net/qq_33414271 https://blog.csdn.net/qq_33414271/article/details/79588126總結(jié)
以上是生活随笔為你收集整理的时间序列相关算法与分析步骤的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 一个数独引发的惨案:零知识证明(Zero
- 下一篇: Hook技术--Activity的启动过