日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

算法模型---时间序列模型

發(fā)布時(shí)間:2024/3/26 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 算法模型---时间序列模型 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章來(lái)源

時(shí)間序列

時(shí)間序列是時(shí)間間隔不變的情況下收集的不同時(shí)間點(diǎn)數(shù)據(jù)集合,這些集合被分析用來(lái)了解長(zhǎng)期發(fā)展趨勢(shì)及為了預(yù)測(cè)未來(lái)。
時(shí)間序列與常見(jiàn)的回歸問(wèn)題的不同點(diǎn)在于:
1、時(shí)間序列是跟時(shí)間有關(guān)的;而線性回歸模型的假設(shè):觀察結(jié)果是獨(dú)立的在這種情況下是不成立的。
2、隨著上升或者下降的趨勢(shì),更多的時(shí)間序列出現(xiàn)季節(jié)性趨勢(shì)的形式;

常用的時(shí)間序列模型有AR模型(Autoregressive model:自回歸模型)、MA模型(moving average model:滑動(dòng)平均模型)、ARMA模型(Auto-Regressive and Moving Average Model:自回歸滑動(dòng)平均模型)和ARIMA模型(Autoregressive Integrated Moving Average Model:自回歸積分滑動(dòng)平均模型)等。

時(shí)間序列的預(yù)處理(使數(shù)據(jù)平穩(wěn)化和隨機(jī)化)

拿到一個(gè)觀察值序列之后,首先要對(duì)它的平穩(wěn)性和純隨機(jī)性進(jìn)行檢驗(yàn),這兩個(gè)重要的檢驗(yàn)稱為序列的預(yù)處理。根據(jù)檢驗(yàn)的結(jié)果可以將序列分為不同的類(lèi)型,對(duì)不同類(lèi)型的序列我們會(huì)采用不同的分析方法。

平穩(wěn)化處理

平穩(wěn) 就是圍繞著一個(gè)常數(shù)上下波動(dòng)且波動(dòng)范圍有限,即有常數(shù)均值和常數(shù)方差。如果有明顯的趨勢(shì)或周期性,那它通常不是平穩(wěn)序列。序列平穩(wěn)不平穩(wěn),一般采用三種方法檢驗(yàn):

時(shí)序圖檢驗(yàn)

看看上面這個(gè)圖,很明顯的增長(zhǎng)趨勢(shì),不平穩(wěn)。

利用自相關(guān)系數(shù)和偏相關(guān)系數(shù)

自相關(guān)系數(shù)和偏相關(guān)系數(shù)的概念可參考《算法模型— 概率論基礎(chǔ)—相關(guān)系數(shù)相關(guān)》
下面是不平穩(wěn)數(shù)據(jù)的自相關(guān)和偏相關(guān)系數(shù)的一種情形。

左邊第一個(gè)為自相關(guān)圖(Autocorrelation),第二個(gè)偏相關(guān)圖(Partial Correlation)。
平穩(wěn)的序列的自相關(guān)圖和偏相關(guān)圖要么拖尾,要么是截尾。截尾就是在某階之后,系數(shù)都為 0 。怎么理解呢,看上面偏相關(guān)的圖,當(dāng)階數(shù)為 1 的時(shí)候,系數(shù)值還是很大, 0.914;二階長(zhǎng)的時(shí)候突然就變成了 0.050. 后面的值都很小,認(rèn)為是趨于 0 ,這種狀況就是截尾。什么是拖尾,拖尾就是有一個(gè)緩慢衰減的趨勢(shì),但是不都為 0 。
自相關(guān)圖既不是拖尾也不是截尾。以上的圖的自相關(guān)是一個(gè)三角對(duì)稱的形式,這種趨勢(shì)是單調(diào)趨勢(shì)的典型圖形,說(shuō)明這個(gè)序列不是平穩(wěn)序列。
平穩(wěn)序列的自相關(guān)系數(shù)會(huì)快速衰減。

單位根檢驗(yàn)

單位根檢驗(yàn)是指檢驗(yàn)序列中是否存在單位根,如果存在單位根就是非平穩(wěn)時(shí)間序列。
單位根檢驗(yàn):ADF是一種常用的單位根檢驗(yàn)方法,他的原假設(shè)為序列具有單位根,即非平穩(wěn),對(duì)于一個(gè)平穩(wěn)的時(shí)序數(shù)據(jù),就需要在給定的置信水平上顯著,拒絕原假設(shè)。ADF只是單位根檢驗(yàn)的方法之一,如果想采用其他檢驗(yàn)方法,可以安裝第三方包arch,里面提供了更加全面的單位根檢驗(yàn)方法,個(gè)人還是比較鐘情ADF檢驗(yàn)。以下為檢驗(yàn)結(jié)果,其p值大于0.99,說(shuō)明并不能拒絕原假設(shè)。

利用差分將序列數(shù)據(jù)轉(zhuǎn)換為平衡序列

差分可以將數(shù)據(jù)轉(zhuǎn)換為平穩(wěn)序列。
一階差分指原序列值相距一期的兩個(gè)序列值之間的減法運(yùn)算;k階差分就是相距k期的兩個(gè)序列值之間相減。如果一個(gè)時(shí)間序列經(jīng)過(guò)差分運(yùn)算后具有平穩(wěn)性,則該序列為差分平穩(wěn)序列,可以使用ARIMA模型進(jìn)行分析。
確定不平穩(wěn)后,依次進(jìn)行1階、2階、3階…差分,直到平穩(wěn)為止。

隨機(jī)化處理

對(duì)于純隨機(jī)序列,又稱白噪聲序列,序列的各項(xiàng)數(shù)值之間沒(méi)有任何相關(guān)關(guān)系,序列在進(jìn)行完全無(wú)序的隨機(jī)波動(dòng),可以終止對(duì)該序列的分析。白噪聲序列是沒(méi)有信息可提取的平穩(wěn)序列。對(duì)于平穩(wěn)非白噪聲序列,它的均值和方差是常數(shù)。通常是建立一個(gè)線性模型來(lái)擬合該序的發(fā)展,借此提取該序列的有用信息。ARMA模型是最常用的平穩(wěn)序列擬合模型。

平穩(wěn)時(shí)間序列建模

某個(gè)時(shí)間序列經(jīng)過(guò)預(yù)處理,被判定為平穩(wěn)非白噪聲序列,就可以進(jìn)行時(shí)間序列建模。
建模步驟:
(1)計(jì)算出該序列的自相關(guān)系數(shù)(ACF)和偏相關(guān)系數(shù)(PACF);
(2)模型識(shí)別,也稱模型定階。根據(jù)系數(shù)情況從AR§模型、MA(q)模型、ARMA(p,q)模型、ARIMA(p,d,q)模型中選擇合適模型,其中p為自回歸項(xiàng),d為差分階數(shù),q為移動(dòng)平均項(xiàng)數(shù)。
若平穩(wěn)序列的偏相關(guān)函數(shù)是截尾的,而自相關(guān)函數(shù)是拖尾的,可斷定序列適合AR模型;若平穩(wěn)序列的偏相關(guān)函數(shù)是拖尾的,而自相關(guān)函數(shù)是截尾的,則可斷定序列適合MA模型;若平穩(wěn)序列的偏相關(guān)函數(shù)和自相關(guān)函數(shù)均是拖尾的,則序列適合ARMA模型。(截尾是指時(shí)間序列的自相關(guān)函數(shù)(ACF)或偏自相關(guān)函數(shù)(PACF)在某階后均為0的性質(zhì)(比如AR的PACF);拖尾是ACF或PACF并不在某階后均為0的性質(zhì)(比如AR的ACF)。)
(3)估計(jì)模型中的未知參數(shù)的值并對(duì)參數(shù)進(jìn)行檢驗(yàn);
(4)模型檢驗(yàn);
(5)模型優(yōu)化;
(6)模型應(yīng)用:進(jìn)行短期預(yù)測(cè)。

混合自回歸移動(dòng)平均過(guò)程(公式表達(dá))

差分方程
所謂差分方程即將變量 yty_tyt?與它的滯后期聯(lián)系起來(lái)的表達(dá)式。
研究變量在第t期的值記為yty_tyt?。假定給出的動(dòng)態(tài)方程將變量y第t期的值與另外的變量wtw_twt?以及y的前一期聯(lián)系起來(lái):
yt=?yt?1+wty_t=?y_{t?1}+w_tyt?=?yt?1?+wt?
上述稱為一階差分方程是因?yàn)閮H僅只有變量的一階滯后(yt?1)(y_t?1)(yt??1)出現(xiàn)在方程中。
移動(dòng)平均
“移動(dòng)平均”的含義源于YtY_tYt?是最近兩期的?\epsilon?的加權(quán)平均。
?t{\epsilon_t}?t?是一個(gè)白噪聲序列。
Yt=μ+?t+θ?t?1Y_t=μ+\epsilon_t+θ\epsilon_{t?1}Yt?=μ+?t?+θ?t?1?
其中μ和θ可以是任意的常數(shù)。這個(gè)時(shí)間序列稱為一階移動(dòng)平均過(guò)程,記為MA(1)MA(1)MA(1)
自回歸過(guò)程
一階自回歸過(guò)程
一個(gè)一階自回歸,記作AR(1)AR(1)AR(1)滿足下面的差分方程
Yt=c+?Yt?1+?tY_t=c+?Y_{t?1}+\epsilon_tYt?=c+?Yt?1?+?t?
?t{\epsilon_t}?t?是一個(gè)白噪聲序列。
p階自回歸過(guò)程
一個(gè)p階自回歸,記作AR(p)AR(p)AR(p)滿足下式
Yt=c+?1Yt?1+?2Yt?2+...+?pYt?p+?tY_t=c+?_1Y_{t?1}+?_2Y_{t?2}+...+?_pY{t?p}+\epsilon_tYt?=c+?1?Yt?1?+?2?Yt?2?+...+?p?Yt?p+?t?
混合自回歸移動(dòng)平均過(guò)程
一個(gè)ARMA(p,q)ARMA(p,q)ARMA(p,q)過(guò)程包括自回歸和移動(dòng)平均項(xiàng):
Yt=c+?1Yt?1+?2Yt?2+...+?pYt?p+?t+θ1?t?1+θ2?t?2+...+θq?t?qY_t=c+?_1Y_{t?1}+?_2Y_{t?2}+...+?_pY{t?p}+\epsilon_t+θ_1?_{t?1}+θ_2?{t?2}+...+θ_q?_{t?q}Yt?=c+?1?Yt?1?+?2?Yt?2?+...+?p?Yt?p+?t?+θ1??t?1?+θ2??t?2+...+θq??t?q?

利用statsmodels庫(kù)實(shí)現(xiàn)時(shí)間序列的分析處理

Time Series analysis tsa
statsmodels.tsa.arima_model.ARIMA
AR(I)MA時(shí)間序列建模過(guò)程——步驟和python代碼
Seasonal ARIMA with Python
Python 3中使用ARIMA進(jìn)行時(shí)間序列預(yù)測(cè)的指南
Python_Statsmodels包_時(shí)間序列分析_ARIMA模型
時(shí)間序列實(shí)戰(zhàn)(一)
How to Make Predictions for Time Series Forecasting with Python
How to Use and Remove Trend Information from Time Series Data in Python
時(shí)間序列分析之ARIMA上手-Python
[python] 時(shí)間序列分析之ARIMA

python中有專(zhuān)門(mén)的庫(kù)statsmodels可以用來(lái)作時(shí)間序列分析,但spark中則沒(méi)有現(xiàn)成的。

#-*- coding: utf-8 -*- import matplotlib.pyplot as plt import pandas as pd data=pd.read_csv('./HIS_MONTH.csv') b=data['fData'] plt.plot(data['fData']) plt.show()

數(shù)據(jù)結(jié)構(gòu)如下

#自相關(guān)圖 from statsmodels.graphics.tsaplots import plot_acf plot_acf(data['fData']).show()

如下所示

從圖上可以自相關(guān)系數(shù)基本是拖尾的,稍做調(diào)整就可以使用。

#偏自相關(guān)圖 from statsmodels.graphics.tsaplots import plot_pacf plot_pacf(data['fData']).show()

如下圖所示

偏相關(guān)系數(shù)也基本符合拖尾。

#平穩(wěn)性檢測(cè) from statsmodels.tsa.stattools import adfuller as ADF print('原始序列的ADF檢驗(yàn)結(jié)果為:') print(ADF(data['fData'])) #返回值依次為adf、pvalue、usedlag、nobs、critical values、icbest、regresults、resstore

如下所示

原始序列的ADF檢驗(yàn)結(jié)果為: (-6.561077625309946, 8.378411469638636e-09, 0L, 47L, {'5%': -2.925338105429433, '1%': -3.5778480370438146, '10%': -2.6007735310095064}, 273.5266547319719)

p值遠(yuǎn)小于0.05,拒絕原假設(shè)(原假設(shè)認(rèn)為存在單位根),所以該序列為平衡時(shí)間序列。

#白噪聲檢驗(yàn) from statsmodels.stats.diagnostic import acorr_ljungbox print('差分序列的白噪聲檢驗(yàn)結(jié)果為:') print(acorr_ljungbox(data['fValueData'], lags=1))

結(jié)果如下

差分序列的白噪聲檢驗(yàn)結(jié)果為: (array([0.05198092]), array([0.81965149]))

P=0.81965149,統(tǒng)計(jì)量的P值大于顯著性水平0.05,則接受原假設(shè)(原假設(shè)認(rèn)為為白噪聲序列)。

下面對(duì)原序列做一階差分運(yùn)算

#差分后的結(jié)果 D_data = data['fValueData'].diff().dropna() D_data.columns = ['fValueData'] #時(shí)序圖 D_data.plot()

結(jié)果如下:

從圖上看,一階差分后,感覺(jué)數(shù)據(jù)分布更對(duì)稱為隨機(jī)了。

#自相關(guān)圖 plot_acf(D_data).show() plt.show()

結(jié)果如下

從圖上看,一階差分對(duì)數(shù)據(jù)有改善,振蕩衰減更明顯

#偏自相關(guān)圖 plot_pacf(D_data).show()

結(jié)果如下

從圖上看,偏相關(guān)系數(shù)雖然沒(méi)有自相關(guān)系數(shù)好,但基本能滿足平穩(wěn)序列的要求。

#平穩(wěn)性檢測(cè) print('差分序列的ADF檢驗(yàn)結(jié)果為:') print( ADF(D_data))

結(jié)果如下

差分序列的ADF檢驗(yàn)結(jié)果為: (-4.595500765524432, 0.0001316587309452837, 10L, 36L, {'5%': -2.9459512825788754, '1%': -3.626651907578875, '10%': -2.6116707716049383}, 270.35268975914374)

p值遠(yuǎn)小于0.05,拒絕原假設(shè)(原假設(shè)認(rèn)為存在單位根),所以該序列為平衡時(shí)間序列。

#白噪聲檢驗(yàn) from statsmodels.stats.diagnostic import acorr_ljungbox #返回統(tǒng)計(jì)量和p值 print('差分序列的白噪聲檢驗(yàn)結(jié)果為:') print(acorr_ljungbox(D_data, lags=1))

結(jié)果如下:

差分序列的白噪聲檢驗(yàn)結(jié)果為: (array([12.35619393]), array([0.00043953]))

P=0.00043953,統(tǒng)計(jì)量的P值小于顯著性水平0.05,則拒絕原假設(shè)(原假設(shè)認(rèn)為為白噪聲序列),所以一階差分后該序列為非白噪聲序列,有進(jìn)一步分析的價(jià)值。

Holt-Winters模型原理及python實(shí)現(xiàn)

本部分來(lái)源,也可以參考該文

原理分析

公式前面也寫(xiě)過(guò),這里再表述一下,有時(shí)間再來(lái)整理
假設(shè)隨機(jī)時(shí)間序列為:
xt(t=1,2,…,N,N=n)x_t(t=1,2,\ldots,N,N=n)xt?(t=1,2,,N,N=n)
時(shí)間序列數(shù)據(jù)一般有以下幾種特點(diǎn):1.趨勢(shì)(Trend) 2. 季節(jié)性(Seasonality)。
趨勢(shì)描述的是時(shí)間序列的整體走勢(shì),比如總體上升或者總體下降。下圖所示的時(shí)間序列是總體上升的:

季節(jié)性描述的是數(shù)據(jù)的周期性波動(dòng),比如以年或者周為周期,如下圖:

三次指數(shù)平滑算法可以對(duì)同時(shí)含有趨勢(shì)和季節(jié)性的時(shí)間序列進(jìn)行預(yù)測(cè),該算法是基于一次指數(shù)平滑和二次指數(shù)平滑算法的。

移動(dòng)平均(The simple moving average (MA))

直觀上,最簡(jiǎn)單的平滑時(shí)間序列的方法是實(shí)現(xiàn)一個(gè)無(wú)權(quán)重的移動(dòng)平均,目前已知的方法是用窗口函數(shù),平滑統(tǒng)計(jì)量 StS_tSt?就是最近k個(gè)觀察值的均值。公式如下:

st=1k∑n=0k?1xt?n=xt+xt?1+…+xt?k+1k=st?1+xt?xt?kks_t=\frac{1}{k} \sum_{n=0}^{k-1} x_{t-n}=\frac{x_t+x_{t-1}+\ldots + x_{t-k+1}}{k}=s_{t-1}+\frac{x_t -x_{t-k}}{k} st?=k1?n=0k?1?xt?n?=kxt?+xt?1?++xt?k+1??=st?1?+kxt??xt?k??

這樣的方法存在明顯的缺陷,當(dāng)k比較小時(shí),預(yù)測(cè)的數(shù)據(jù)平滑效果不明顯,而且突出反映了數(shù)據(jù)最近的變化;當(dāng)k較大時(shí),雖然有較好的平滑效果,但是預(yù)測(cè)的數(shù)據(jù)存在延遲。而且最少需要k個(gè)值(窗口有限)。

加權(quán)移動(dòng)平均

一種稍微復(fù)雜的方法是先選擇一組權(quán)重因子來(lái)計(jì)算加權(quán)移動(dòng)平均
ω1,ω2,…,ωk,滿足∑n=1kωn=1{\omega_1,\omega_2,\ldots,\omega_k},滿足\sum_{n=1}^{k}\omega_n=1 ω1?,ω2?,,ωk?,滿n=1k?ωn?=1
然后用這些權(quán)重來(lái)計(jì)算這些平滑統(tǒng)計(jì)量:
st=∑n=1kωnxt?n+1=ω1xt+ω2xt?1+…+ωkxt?k+1s_t=\sum_{n=1}^{k}\omega_n x_{t-n+1}=\omega_1x_t+\omega_2 x_{t-1}+\ldots+\omega_{k}x_{t-k+1} st?=n=1k?ωn?xt?n+1?=ω1?xt?+ω2?xt?1?++ωk?xt?k+1?
在實(shí)踐中,通常在選擇權(quán)重因子時(shí),賦予時(shí)間序列中的最新數(shù)據(jù)更大的權(quán)重,并減少對(duì)舊數(shù)據(jù)的權(quán)重。這個(gè)方法也需要最少k個(gè)值,并且計(jì)算復(fù)雜。

簡(jiǎn)單指數(shù)平滑法

幸運(yùn)地是有一種方法可以避免上述問(wèn)題,它叫做指數(shù)平滑法。最簡(jiǎn)單的指數(shù)平滑法如下:
si=αxi+(1?α)si?1s_i = \alpha x_i + (1-\alpha)s_{i-1} si?=αxi?+(1?α)si?1?
其中α\alphaα是平滑因子,0<α<10 < \alpha < 10<α<1sis_isi?是當(dāng)前時(shí)刻的平滑值。換句話說(shuō),平滑統(tǒng)計(jì)值SiS_iSi?是當(dāng)前統(tǒng)計(jì)值XtX_tXt?與上一時(shí)間平滑值Si?1S_{i-1}Si?1?加權(quán)平均。這個(gè)簡(jiǎn)單指數(shù)平滑是很容易被應(yīng)用的,因?yàn)橹灰袃蓚€(gè)觀察值就能計(jì)算了。這里α的選取,我們可以采用最小二乘來(lái)決定α\alphaα(最小化(st?xt)2(s_t-x_t)^2(st??xt?)2)。
一次指數(shù)平滑算法進(jìn)行預(yù)測(cè)的公式為:
xi+h=six_{i+h}=s_ixi+h?=si?
其中i為當(dāng)前最后的一個(gè)數(shù)據(jù)記錄的坐標(biāo),亦即預(yù)測(cè)的時(shí)間序列為一條直線,不能反映時(shí)間序列的趨勢(shì)和季節(jié)性。

為什么被稱為“指數(shù)”平滑法
從它的遞推公式就能發(fā)現(xiàn):

簡(jiǎn)單指數(shù)平滑法適用于沒(méi)有總體趨勢(shì)的時(shí)間序列。如果用來(lái)處理有總體趨勢(shì)的序列,平滑值將往往滯后于原始數(shù)據(jù),除非α的值接近1,但這樣一來(lái)就會(huì)造成不夠平滑。

二次指數(shù)平滑(HoltWinters-無(wú)季節(jié)趨勢(shì))

為了解決上述問(wèn)題,于是引出了二次指數(shù)平滑,能夠保留總體趨勢(shì)信息。因?yàn)閷⒅笖?shù)平滑應(yīng)用了兩次,所以被稱為二次指數(shù)平滑。與簡(jiǎn)單指數(shù)平滑相比,二次指數(shù)平滑加入了時(shí)間趨勢(shì)統(tǒng)計(jì)量tit_iti?,公式如下:
si=αxi+(1?α)(si?1+ti?1)ti=β(si?si?1)+(1?β)ti?1s_i=\alpha x_i + (1-\alpha)(s_{i-1}+t_{i-1})\\ t_i=\beta (s_i-s_{i-1}) + (1-\beta)t_{i-1} si?=αxi?+(1?α)(si?1?+ti?1?)ti?=β(si??si?1?)+(1?β)ti?1?
sis_isi?添加了與一次指數(shù)平滑相比,添加了一個(gè)新的趨勢(shì)項(xiàng)tit_iti?;而tit_iti?的表達(dá)式與一次指數(shù)平滑形式上是一樣的,只不過(guò)用將xix_ixi?換成(si?si?1)(s_i-s_{i-1})(si??si?1?),趨勢(shì)可以想像成增量,就是在此刻與上一刻的差值,趨勢(shì)當(dāng)然應(yīng)該用平滑后的數(shù)據(jù)的差值;同時(shí)將一次平滑中的si?1s_{i-1}si?1?換成ti?1t_{i-1}ti?1?
二次指數(shù)平滑的預(yù)測(cè)公式為
xi+h=si+htix_{i+h}=s_i+h \ t_i xi+h?=si?+h?ti?
二次指數(shù)平滑的預(yù)測(cè)結(jié)果是一條斜的直線

三次指數(shù)平滑

三次指數(shù)平滑將時(shí)間序列的季節(jié)性這一特征也考慮進(jìn)去了。
季節(jié)性被定義為時(shí)間序列數(shù)據(jù)的趨勢(shì),它表現(xiàn)出每一個(gè)周期重復(fù)自身的行為,就像任何周期函數(shù)一樣。“季節(jié)”這個(gè)詞用來(lái)表示行為每隔時(shí)間段L就開(kāi)始自我重復(fù)。在自然界中有不同類(lèi)型的季節(jié)性“累加性”(additive)和“累乘性“(multiplicative),就像加法和乘法是數(shù)學(xué)的基本運(yùn)算。
如果每個(gè)12月都比每個(gè)11月多賣(mài)出1000套公寓,我們就說(shuō)這樣的季節(jié)趨勢(shì)是“累加性”的。可以用絕對(duì)增?來(lái)表示。如果我們?cè)谙募颈榷径噘u(mài)出10%的公寓,那么季節(jié)趨勢(shì)在自然中是“累乘性”的。
累乘性公式如下:
下面的式子中kkk表示季節(jié)頻率,這個(gè)還需要查資料進(jìn)行理解
si=αxipi?k+(1?α)(si?1+ti?1)ti=β(si?si?1)+(1?β)ti?1pi=γxisi+(1?γ)pt?ks_i=\alpha \frac{x_i }{p_{i-k}} +(1-\alpha)(s_{i-1}+t_{i-1})\\ t_i=\beta (s_i-s_{i-1}) + (1-\beta)t_{i-1}\\ p_i=\gamma \frac{x_i}{s_i} + (1-\gamma)p_{t-k}\\ si?=αpi?k?xi??+(1?α)(si?1?+ti?1?)ti?=β(si??si?1?)+(1?β)ti?1?pi?=γsi?xi??+(1?γ)pt?k?
上式中k為周期, 累乘三次指數(shù)平滑的預(yù)測(cè)公式為:
xi+h=(si+hti)pi?k+(hmodk)x_{i+h}=(s_i+h\ t_i)p_i-k+(h\ mod\ k) xi+h?=(si?+h?ti?)pi??k+(h?mod?k)
或者
xi+h=(si+hti)pi?k+1+(h?1)modkx_{i+h}=(s_i+h\ t_i)p_{i-k+1+(h-1) \ mod \ k} xi+h?=(si?+h?ti?)pi?k+1+(h?1)?mod?k?
兩個(gè)公式還需要確認(rèn)下
累乘性公式初始值的計(jì)算
sk=1k(s1+s2+?+sk)tk=1k[xk+1?x1k+xk+2?x2k+?+xk+k?xkk]p1=x1sk,p2=x2sk,?,pk=xksks_k=\frac{1}{k} (s_1+s_2+\cdots+s_k)\\ t_k=\frac{1}{k}\left[ \frac{x_{k+1}-x_1}{k}+\frac{x_{k+2}-x_2}{k}+\cdots+\frac{x_{k+k}-x_k}{k} \right]\\ p_1=\frac{x_1}{s_k},p_2=\frac{x_2}{s_k},\cdots,p_k=\frac{x_k}{s_k} sk?=k1?(s1?+s2?+?+sk?)tk?=k1?[kxk+1??x1??+kxk+2??x2??+?+kxk+k??xk??]p1?=sk?x1??,p2?=sk?x2??,?,pk?=sk?xk??

累加性公式如下:
si=α(xi?pi?k)+(1?α)(si?1+ti?1)ti=β(si?si?1)+(1?β)ti?1pi=γ(xi?si)+(1?γ)pi?kxi+h=si+hbi+pi?k+hmodks_i=\alpha (x_i-p_{i-k} )+(1-\alpha)(s_{i-1}+t_{i-1})\\ t_i=\beta (s_i-s_{i-1}) + (1-\beta)t_{i-1}\\ p_i=\gamma (x_i-s_i) + (1-\gamma)p_{i-k}\\ x_{i+h}=s_i+hb_i + p_{i-k+h \ mod \ k} si?=α(xi??pi?k?)+(1?α)(si?1?+ti?1?)ti?=β(si??si?1?)+(1?β)ti?1?pi?=γ(xi??si?)+(1?γ)pi?k?xi+h?=si?+hbi?+pi?k+h?mod?k?
或者
xi+h=si+hbi+pi?k+1+(h?1)modkx_{i+h}=s_i+hb_i + p_{i-k+1+(h-1) \ mod \ k} xi+h?=si?+hbi?+pi?k+1+(h?1)?mod?k?
兩個(gè)公式還需要確認(rèn)下
累加性公式初始值的計(jì)算
sk=1k(s1+s2+?+sk)tk=1k[xk+1?x1k+xk+2?x2k+?+xk+k?xkk]p1=x1?sk,p2=x2?sk,?,pk=xk?sks_k=\frac{1}{k} (s_1+s_2+\cdots+s_k)\\ t_k=\frac{1}{k}\left[ \frac{x_{k+1}-x_1}{k}+\frac{x_{k+2}-x_2}{k}+\cdots+\frac{x_{k+k}-x_k}{k} \right]\\ p_1=x_1-s_k,p_2=x_2-s_k,\cdots,p_k=x_k-s_k sk?=k1?(s1?+s2?+?+sk?)tk?=k1?[kxk+1??x1??+kxk+2??x2??+?+kxk+k??xk??]p1?=x1??sk?,p2?=x2??sk?,?,pk?=xk??sk?
其中 α\alphaα是數(shù)據(jù)平滑因子, 0<α<10 < \alpha < 10<α<1;β\betaβ是趨勢(shì)平滑因子,0<β<10 < \beta < 10<β<1; γ\gammaγ是季節(jié)改變平滑因子0<γ<10 < \gamma < 10<γ<1
α,β,γ\alpha,\beta,\gammaαβγ的值都位于[0,1]之間,可以多試驗(yàn)幾次以達(dá)到最佳效果。

s,t,ps,t,ps,t,p初始值的選取對(duì)于算法整體的影響不是特別大,通常的取值為s0=x0,t0=x1?x0s_0=x_0,t_0=x_1-x_0s0?=x0?,t0?=x1??x0?,累加時(shí)p=0p=0p=0,累乘時(shí)p=1p=1p=1.
對(duì)三次指數(shù)平滑法而言,我們必須初始化一個(gè)完整的“季節(jié)”pip_ipi?的值,不過(guò)我們可以簡(jiǎn)單地設(shè)置為全1(針對(duì)累乘式)或全0(針對(duì)累加式)。只有當(dāng)序列的?度較短時(shí),我們才需要慎重考慮初始值的選取。
我們這里講的Holt-Winters模型就是三次指數(shù)平滑法。哇,終于切入正題了。
所有的指數(shù)平滑法都要更新上一時(shí)間步?的計(jì)算結(jié)果,并使用當(dāng)前時(shí)間步?的數(shù)據(jù)中包含的新信息。它們通過(guò)“混合”新信息和舊信息來(lái)實(shí)現(xiàn),而相關(guān)的新舊信息的權(quán)重由一個(gè)可調(diào)整的拌和參數(shù)來(lái)控制。各種方法的不同之處在于它們跟蹤的量的個(gè)數(shù)和對(duì)應(yīng)的拌和參數(shù)的個(gè)數(shù)。三次指數(shù)平滑法,功能最強(qiáng)大,既能體現(xiàn)趨勢(shì)性又能體現(xiàn)季節(jié)性,所以三次指數(shù)平滑法的參數(shù)最多,有三個(gè)。
下圖為使用累加三次指數(shù)平滑進(jìn)行預(yù)測(cè)的效果:其中紅色為源時(shí)間序列,藍(lán)色為預(yù)測(cè)的時(shí)間序列,α,β,γ\alpha,\beta,\gammaαβγ的取值為0.45,0.2,0.95:

下圖為累乘三次指數(shù)平滑進(jìn)行預(yù)測(cè)的效果,α,β,γ\alpha,\beta,\gammaαβγ的取值為0.4,0.05,0.9:

可以看到三次指數(shù)平滑算法可以很好的保存時(shí)間序列數(shù)據(jù)的趨勢(shì)和季節(jié)性信息,在International Airline Passengers數(shù)據(jù)集上累乘平滑指數(shù)算法的效果更好。

python代碼實(shí)現(xiàn)

我們知道HoltWinters模型有三個(gè)可調(diào)參數(shù),我們的目的就是訓(xùn)練出有效的α,β, γ
。我們有兩種方法,一種就是自己取值來(lái)試試,一種就是采用數(shù)值優(yōu)化的思想,比如
前面我們提到的最小二乘來(lái)最小化誤差來(lái)求參數(shù)(注意不一定能全局收斂!這個(gè)問(wèn)題
實(shí)在是讓人頭痛。。。)我們就采用最小二乘法(L-BFGS)。

RMSE的實(shí)現(xiàn)

statsmodels中的holtwinters

statsmodels.tsa模塊
statsmodels.tsa.holtwinters源碼
statsmodels.tsa.holtwinters.ExponentialSmoothing
ExponentialSmoothing - 指數(shù)平滑算法

基于SVM作短期時(shí)間序列的預(yù)測(cè)

傳統(tǒng)的做法是提取1、2、3、4、5、7、9、13個(gè)單位時(shí)間的數(shù)據(jù)作為特征進(jìn)行預(yù)測(cè);
舉個(gè)例子進(jìn)行分析,比如每天都有口香糖的銷(xiāo)量,那么如何通過(guò)幾周的數(shù)據(jù)預(yù)測(cè)明天的數(shù)據(jù),
就可以選擇前1、2、3、4、5、7、14天的數(shù)據(jù)作為特征,從而預(yù)測(cè)明天的數(shù)據(jù),
通過(guò)構(gòu)建特征,再選擇核函數(shù)進(jìn)行預(yù)測(cè),其中調(diào)參的參數(shù)盡量要進(jìn)行最優(yōu)化,
參考方法:如果選擇RBF核函數(shù),那么其中就會(huì)有三個(gè)參數(shù),固定兩個(gè),然后不停的優(yōu)化另外一個(gè),直到得到最優(yōu)解。

具體應(yīng)用的例子:

(1)SVM預(yù)測(cè)風(fēng)場(chǎng):http://wenku.baidu.com/link?url=SCCIJJe8tXLbTjLMZ81x5Qy6elsceAKIOwtkZ0QxfSCQQ4KaWKwo8Biepjs3Ss2LJ2ewhisNR0ixrDY4kV1Rd7BcqWRenuTaG85K80E-30y
(2)SVM預(yù)測(cè)股票指數(shù):基于SVM修正的模糊時(shí)間序列模型在滬指預(yù)測(cè)中的應(yīng)用
(3)SVM預(yù)測(cè)時(shí)間序列其他方面:http://www.docin.com/p-233353900.html

LSTM模型分析及對(duì)時(shí)序數(shù)據(jù)預(yù)測(cè)的具體實(shí)現(xiàn)(python實(shí)現(xiàn))

來(lái)源:2017年09月30日 10:28:08

如何用LSTM自編碼器進(jìn)行極端事件預(yù)測(cè)?(含Python代碼)

時(shí)間序列的并行實(shí)現(xiàn)

spark里面的庫(kù)是沒(méi)有時(shí)間序列算法的,但是國(guó)外有人已經(jīng)寫(xiě)好了相應(yīng)的算法。其github網(wǎng)址是:https://github.com/sryza/spark-timeseries
sryza/spark-timeseries
Spark-TimeSeries使用方法
A New Library for Analyzing Time-Series Data with Apache Spark
【Spark Summit East 2017】使用Spark進(jìn)行時(shí)間序列分析

基于小波變換的時(shí)間序列預(yù)測(cè),Python實(shí)現(xiàn),來(lái)自雪球

清華AIOps算法:KPI聚類(lèi)

其他資料

時(shí)間序列挖掘-預(yù)測(cè)算法-三次指數(shù)平滑法(Holt-Winters)
Holt-Winters原理和初始值的確定
時(shí)間序列模型Prophet使用詳細(xì)講解

NeuralProphet:基于神經(jīng)網(wǎng)絡(luò)的時(shí)間序列建模庫(kù)

總結(jié)

以上是生活随笔為你收集整理的算法模型---时间序列模型的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。