(Python)时序预测的七种方法
摘要:?大多數(shù)人都聽(tīng)說(shuō)過(guò)關(guān)于Cryptocurrency,許多人也許會(huì)投資他們的加密貨幣。但是,投資這種不穩(wěn)定的貨幣安全嗎?怎樣才能確保現(xiàn)投資這些硬幣未來(lái)一定能帶來(lái)穩(wěn)定的收益呢?我們不能確定,但肯定能根據(jù)以前的價(jià)格產(chǎn)生一個(gè)近似值。時(shí)序模型是預(yù)測(cè)的一種方法。
介紹
大多數(shù)人都聽(tīng)說(shuō)過(guò)關(guān)于Cryptocurrency,許多人也許會(huì)投資他們的加密貨幣。但是,投資這種不穩(wěn)定的貨幣安全嗎?怎樣才能確保現(xiàn)投資這些硬幣未來(lái)一定能帶來(lái)穩(wěn)定的收益呢?我們不能確定,但肯定能根據(jù)以前的價(jià)格產(chǎn)生一個(gè)近似值。時(shí)序模型是預(yù)測(cè)的一種方法。
除了加密貨幣,還有許多重要的應(yīng)用時(shí)序預(yù)測(cè)的領(lǐng)域,例如:銷(xiāo)售預(yù)測(cè),呼叫中心的通話量,太陽(yáng)的活動(dòng),海潮,股市行為等等。
目錄
- 理解問(wèn)題描述和數(shù)據(jù)集
- 安裝庫(kù)
- 方法?1 –以簡(jiǎn)單的方式開(kāi)始
- 方法2 –?簡(jiǎn)單平均數(shù)
- 方法3 –?移動(dòng)平均數(shù)
- 方法?4 –指數(shù)平滑法
- 方法5 – Holt線性趨勢(shì)法
- 方法6 – Holt冬季季節(jié)法
- 方法7 –綜合自回歸移動(dòng)平均法(ARIMA)
理解問(wèn)題描述和數(shù)據(jù)集
提供了涉及預(yù)測(cè)JetRail通勤人數(shù)的時(shí)序問(wèn)題,一個(gè)新的高速鐵路服務(wù)。我們提供了2年的數(shù)據(jù),并利用這些數(shù)據(jù)預(yù)測(cè)未來(lái)7個(gè)月的通勤人數(shù)。
在本文中,只使用訓(xùn)練數(shù)據(jù)集。
從以上的報(bào)表上看到,我們有2年的按小時(shí)計(jì)的通勤數(shù)據(jù)(2012-2014),需要預(yù)估未來(lái)的通勤數(shù)量。
在本文中,我構(gòu)造子集和匯總數(shù)據(jù)集以便講解不同的方法。
- 構(gòu)造數(shù)據(jù)集的子集?(2012/08 – 2013/12)
- 為建模構(gòu)造訓(xùn)練和測(cè)試文件。前14個(gè)月的數(shù)據(jù)被用作訓(xùn)練數(shù)據(jù)(2012/08 - 2013/10),后兩個(gè)月的被用作測(cè)試數(shù)據(jù)(2013/11 - 2013/12)。
- 每天匯總數(shù)據(jù)集。
把數(shù)據(jù)(用于訓(xùn)練的和測(cè)試的)可視化,以了解在一段時(shí)間內(nèi)是如何變化的。
安裝庫(kù)(statsmodels)
用來(lái)進(jìn)行時(shí)序預(yù)測(cè)的庫(kù)是statsmodels。在應(yīng)用很少的給定方法之前,需要安裝一下。statsmodels可能已經(jīng)安裝在你的Python開(kāi)發(fā)環(huán)境了,但它不支持的預(yù)測(cè)方法。我們將從存儲(chǔ)庫(kù)克隆一下并進(jìn)行源碼安裝。按照如下步驟?:
1.使用PIP凍結(jié)檢查statsmodels是否已經(jīng)安裝在你的環(huán)境中;
2.如果已經(jīng)存在,使用“conda remove statsmodels”?刪除;
3.用?“git clone git://github.com/statsmodels/statsmodels.git”克隆statsmodels的存儲(chǔ)庫(kù),在克隆前用“git init”初始化Git;
4.用“cd statsmodels”進(jìn)入到statsmodels目錄;
5.用“python setup.py build”建安裝文件;
6.用“python setup.py install”進(jìn)行安裝;
7.退出bash/terminal;
8.重啟bash/terminal,打開(kāi)python并執(zhí)行“from statsmodels.tsa.api import ExponentialSmoothing”進(jìn)行驗(yàn)證;
方法1:?用Naive方法開(kāi)始
考慮下面的曲線圖:
從圖中我們可以看出,從一開(kāi)始,硬幣的價(jià)格是穩(wěn)定的。大多時(shí)候我們都有一個(gè)在整個(gè)時(shí)間段都比較穩(wěn)定的數(shù)據(jù)集。如果想預(yù)測(cè)第二天的價(jià)格,可以簡(jiǎn)單地用前一天的價(jià)格數(shù)據(jù),估計(jì)第二天的價(jià)格。這種假定下一個(gè)期望點(diǎn)等于最后一個(gè)觀測(cè)點(diǎn)的預(yù)測(cè)技術(shù)稱為?Naive方法。
現(xiàn)在我們采用Naive?方法來(lái)預(yù)測(cè)測(cè)試數(shù)據(jù)的價(jià)格。
現(xiàn)在我們將計(jì)算均方根誤差(RMSE)以檢查測(cè)試數(shù)據(jù)集上模型的精度。
可以從RMSE值和上面的圖推斷,Naive方法不適合變化頻繁的數(shù)據(jù)集,它最適合穩(wěn)定的數(shù)據(jù)集。
方法2?簡(jiǎn)單均值法
考慮下面的圖。
可以從圖中推斷,硬幣的價(jià)格是以微小的幅度隨機(jī)上升和下降的,平均值不變。很多時(shí)候,我們得到了一個(gè)數(shù)據(jù)集,雖然它在整個(gè)時(shí)間段內(nèi)有一個(gè)較小的變化,但是每個(gè)時(shí)間段的平均值保持不變。在這種情況下,我們可以預(yù)測(cè)第二天的價(jià)格與之前每天的平均值相近。
這種預(yù)測(cè)期望值等于所有觀測(cè)點(diǎn)平均值的預(yù)測(cè)技術(shù)稱為簡(jiǎn)單均值法。
我們?nèi)∏懊嬉阎乃兄?#xff0c;計(jì)算平均值,并將其作為下一個(gè)值。當(dāng)然,它并不精確,而是稍微接近。作為一種預(yù)測(cè)方法,實(shí)際情況是這個(gè)技術(shù)最有效。
現(xiàn)在將計(jì)算均方根誤差檢查模型的準(zhǔn)確性
可以看出這種模式?jīng)]有提高我們的分?jǐn)?shù)。因此,我們能從得分推斷,這種方法在每個(gè)時(shí)間段的平均值保持不變的時(shí)候效果最好。雖然Naive法的得分優(yōu)于均值法,但這并不意味著Naive法在所有數(shù)據(jù)集上都優(yōu)于均值法。
方法3?移動(dòng)均值法
考慮下面曲線圖,
從圖中可以推斷,硬幣的價(jià)格在一段時(shí)間以前大幅度地提高了,但現(xiàn)在是穩(wěn)定的。很多時(shí)候,我們得到了一個(gè)數(shù)據(jù)集,其中一段時(shí)間以前對(duì)象的價(jià)格/銷(xiāo)售量急劇增加/急劇下降。使用初期的價(jià)格會(huì)對(duì)下一個(gè)時(shí)間段的預(yù)測(cè)產(chǎn)生很大影響。所以相對(duì)于簡(jiǎn)單均值法的改進(jìn),只計(jì)算最后幾個(gè)時(shí)間段的平均價(jià)格。顯然,只有最近的值才是重要的。這種利用時(shí)間窗計(jì)算平均值的預(yù)測(cè)技術(shù)稱為移動(dòng)均值法。
利用一個(gè)簡(jiǎn)單的移動(dòng)均值模型,根據(jù)一個(gè)不變的有限數(shù)p的平均值來(lái)預(yù)測(cè)時(shí)間序列中的下一個(gè)或多個(gè)值。因此,對(duì)所有的?i > p。
移動(dòng)均值法實(shí)際上是非常有效的,尤其是當(dāng)你給序列選擇正確的p值時(shí)。
我們只選擇了過(guò)去2個(gè)月的數(shù)據(jù)。現(xiàn)在將計(jì)算均方根誤差來(lái)檢查模型的準(zhǔn)確性。
可以看到,Naive方法對(duì)于數(shù)據(jù)集要優(yōu)于均值法和移動(dòng)均值法。現(xiàn)在來(lái)看一下簡(jiǎn)單指數(shù)平滑法,看看它是如何執(zhí)行的。
移動(dòng)均值法的改進(jìn)方法——加權(quán)移動(dòng)均值法。在上述移動(dòng)均值法中,我們同樣權(quán)衡過(guò)去的N個(gè)觀測(cè)值。但我們可能遇到的情況是,過(guò)去的每一次觀察都以不同的方式影響預(yù)測(cè)。這種以不同的方式權(quán)衡過(guò)去觀測(cè)值的技術(shù)稱為加權(quán)移動(dòng)均值技術(shù)。
加權(quán)移動(dòng)均值是一個(gè)移動(dòng)平均值,在滑動(dòng)窗口的值中賦予不同的權(quán)重。
選擇窗口的大小,需要一個(gè)權(quán)重列表。例如,如果選擇[ 0.40,0.25,0.20,0.15 ]作為權(quán)重,將分別給出40%,25%,20%和15%。
方法4?簡(jiǎn)單指數(shù)平滑法
在理解了上述方法之后,可以注意到,簡(jiǎn)單均值法和加權(quán)移動(dòng)均值法是完全相反的。我們需要在這兩個(gè)方法之間采取某種方法,這兩個(gè)方法在用不同的方式權(quán)衡數(shù)據(jù)點(diǎn)的同時(shí)要考慮所有數(shù)據(jù)。這種技術(shù)稱為簡(jiǎn)單指數(shù)平滑法。預(yù)測(cè)是用加權(quán)平均來(lái)計(jì)算的,之前觀測(cè)值的權(quán)重是指數(shù)遞減的,最小的權(quán)重與最早的觀測(cè)值相關(guān):
?0≤ α ≤1是參數(shù)。
先一步預(yù)測(cè)時(shí)間T + 1是一個(gè)序列中的所有觀測(cè)值的加權(quán)平均值Y1,…,YT。權(quán)重下降的速率由參數(shù)α決定。
如果觀察足夠長(zhǎng)的時(shí)間,你會(huì)看到,期望y?x是α?YT和(1?α)?Y?T-1的和。
也可以寫(xiě)成?:
所以基本上我們已經(jīng)有了一個(gè)1?α和α的加權(quán)移動(dòng)平均值:。
可以看到,1?α乘以之前預(yù)期的表達(dá)遞歸的值y?x?1。這就是為什么這種方法被稱為Exponential。在時(shí)間t + 1的預(yù)測(cè)等于最近觀察值yt?和最近預(yù)測(cè)值?y??t|t?1之間的加權(quán)平均值。
現(xiàn)在將計(jì)算均方根誤差檢查模型的準(zhǔn)確性。
可以看到,用alpha值為0.6的簡(jiǎn)單指數(shù)模型形成一個(gè)更好的模型,到現(xiàn)在為止,生成一個(gè)更好的模型。
方法?5?霍爾特線性趨勢(shì)法
我們現(xiàn)在已經(jīng)學(xué)會(huì)了幾種預(yù)測(cè)方法,但可以看到,這些模型在變化較大數(shù)據(jù)上不是太好。
趨勢(shì)是在一段時(shí)間內(nèi)觀察到的價(jià)格的一般模式。如Naive方法會(huì)假定最后兩點(diǎn)之間的趨勢(shì)將保持不變,或者可以在所有點(diǎn)之間的平均斜率得到一個(gè)平均趨勢(shì),使用移動(dòng)趨勢(shì)均值或指數(shù)平滑法。
但我們需要一種方法,能準(zhǔn)確無(wú)誤地繪制趨勢(shì)圖。考慮數(shù)據(jù)集趨勢(shì)的這種方法稱為霍爾特線性趨勢(shì)法。每個(gè)時(shí)間序列的數(shù)據(jù)集可以被分解為不同趨勢(shì)的組成部分,季節(jié)性和剩余。任何跟隨趨勢(shì)的數(shù)據(jù)集都可以使用Holt線性趨勢(shì)法進(jìn)行預(yù)測(cè)。
從圖表可以看出,該數(shù)據(jù)集呈增長(zhǎng)趨勢(shì)。因此,可以用Holt的線性趨勢(shì)來(lái)預(yù)測(cè)未來(lái)的價(jià)格。
霍爾特?cái)U(kuò)展簡(jiǎn)單指數(shù)平滑方法,允許有趨勢(shì)的數(shù)據(jù)預(yù)測(cè)。它只適用于兩個(gè)等級(jí)(多個(gè)序列的平均值)和趨勢(shì)的指數(shù)平滑方法。用數(shù)學(xué)符號(hào)表示,現(xiàn)在需要三個(gè)等式:一個(gè)用于等級(jí),一個(gè)用于趨勢(shì),一個(gè)結(jié)合等級(jí)與得到預(yù)測(cè)值Y?的趨勢(shì)
我們?cè)谏鲜鏊惴ㄖ蓄A(yù)測(cè)的值稱為等級(jí)。在上面的三個(gè)等式中,可以注意到我們?cè)黾恿说燃?jí)和趨勢(shì)來(lái)生成預(yù)測(cè)等式。
作為簡(jiǎn)單指數(shù)平滑法,這里的等級(jí)等式表明它是一個(gè)觀察數(shù)的加權(quán)平均值和樣本內(nèi)前步預(yù)測(cè)。趨勢(shì)等式表明,這是一個(gè)基于?(t)??(t?1)和和b(t?1)的時(shí)間t的預(yù)測(cè)趨勢(shì)的加權(quán)平均值。
我們將添加這些等式來(lái)生成預(yù)測(cè)等式。也可以通過(guò)乘以趨勢(shì)和等級(jí)而不是增加,來(lái)生成乘法預(yù)測(cè)等式。當(dāng)趨勢(shì)呈線性上升或下降時(shí),則采用加法等式,而當(dāng)趨勢(shì)呈指數(shù)下降時(shí),則采用乘法等式。實(shí)踐表明乘法是一種更穩(wěn)定的預(yù)測(cè),但加性方法更容易理解。
現(xiàn)在將計(jì)算均方根誤差檢查模型的準(zhǔn)確性
方法6 Holt-Winters方法
考慮一個(gè)位于山上的旅館。在夏季期間有很高的訪問(wèn)量,而今年余下時(shí)間的游客相對(duì)較少。因此,業(yè)主的利潤(rùn)在夏季比其他季節(jié)都要好得多。而且每年都一樣,是季節(jié)性的。數(shù)據(jù)集在一段固定的時(shí)間間隔內(nèi)顯示出相似性。
源碼
由于季節(jié)性因素,使用霍爾特冬季方法將是其它模型中最好的選擇。霍爾特-溫特斯季節(jié)性方法包括預(yù)測(cè)等式和三個(gè)平滑等式-一個(gè)似乎等級(jí)?t,一個(gè)是趨勢(shì)bt,一個(gè)是季節(jié)組成部分?st,平滑參數(shù)α,β和γ。
源碼
其中S是季節(jié)性周期的長(zhǎng)度,0≤α≤1, 0≤β≤1和0≤γ≤1。
現(xiàn)在將計(jì)算均方根誤差檢查模型的準(zhǔn)確性
從圖中可以看出,正確的趨勢(shì)和季節(jié)性的映射提供了一個(gè)更好的解決方案。
方法7 ARIMA
另一個(gè)在數(shù)據(jù)科學(xué)家中非常流行的時(shí)間序列模型是ARIMA。它代表自回歸積分移動(dòng)平均(Autoregressive Integrated Moving average)。指數(shù)平滑模型是基于對(duì)趨勢(shì)和季節(jié)性數(shù)據(jù)的描述,ARIMA模型的目的是描述數(shù)據(jù)之間的相關(guān)性。ARIMA的改進(jìn)考慮到數(shù)據(jù)集的季節(jié)性,就像Holt-Winters方法一樣。
現(xiàn)在將計(jì)算均方根誤差檢查模型的準(zhǔn)確性。
可以看到,使用季節(jié)性ARIMA生成一個(gè)類(lèi)似Holt’s Winter的解決方案。我們選擇的參數(shù)為ACF和PACF圖。
可以在RMSE分?jǐn)?shù)的基礎(chǔ)上比較這些模型。
?以上為譯文。
文章原標(biāo)題《7 methods to perform Time Series forecasting (with Python codes)》,
譯者:Mags,審校:袁虎。
原文鏈接
干貨好文,請(qǐng)關(guān)注掃描以下二維碼:
總結(jié)
以上是生活随笔為你收集整理的(Python)时序预测的七种方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 儿童节,5岁宝宝写给程序员爸爸的一封信!
- 下一篇: websocket python爬虫_p