python 相关性检验怎么计算p值_收藏 | 大神教你用Python预测未来:一文看懂时间序列...
譯者?|?李潔
整理?|?Lemonbit
出品?|?Python數(shù)據(jù)之道
本文內(nèi)容較長(zhǎng),較為詳細(xì)的闡述了進(jìn)行時(shí)間序列預(yù)測(cè)的步驟,有些內(nèi)容可能暫時(shí)用不到或者看不懂,但不要緊,知道有這么一個(gè)概念,后續(xù)碰到的時(shí)候,繼續(xù)深入學(xué)習(xí)以及使用就可以。
一文弄懂時(shí)間序列預(yù)測(cè)的基本原理
我們被隨處可見(jiàn)的模式所包圍,人們可以注意到四季與天氣的關(guān)系模式,以交通量計(jì)算的交通高峰期的模式,你的心跳或者是股票市場(chǎng)和某些產(chǎn)品的銷(xiāo)售周期。
分析時(shí)間序列數(shù)據(jù)對(duì)于發(fā)現(xiàn)這些模式和預(yù)測(cè)未來(lái)非常有用。有幾種方法可以創(chuàng)建這類(lèi)預(yù)測(cè),在本文中,我將介紹最基本且最傳統(tǒng)的方法概念。
所有代碼都是用 Python 編寫(xiě)的,并且在 GitHub 上可以看到所有的信息。
https://nbviewer.jupyter.org/github/leandrovrabelo/tsmodels/blob/master/notebooks/english/Basic Principles for Time Series Forecasting.ipynb
那么讓我們開(kāi)始談?wù)劮治鰰r(shí)間序列的初始條件:
1
平穩(wěn)序列
平穩(wěn)時(shí)間序列是指統(tǒng)計(jì)特性,如均值、方差和自相關(guān)系數(shù),隨時(shí)間相對(duì)恒定的序列。因此,非平穩(wěn)序列是統(tǒng)計(jì)特性隨時(shí)間變化的序列。
在開(kāi)始任何預(yù)測(cè)建模之前,都有必要驗(yàn)證這些統(tǒng)計(jì)屬性是否是常量,我將一一解釋下面的每個(gè)點(diǎn):
- 常數(shù)均值
- 常數(shù)方差
- 自相關(guān)
常數(shù)均值
一個(gè)平穩(wěn)序列在時(shí)間上具有一個(gè)相對(duì)穩(wěn)定的均值,這個(gè)值沒(méi)有減少或者增加的趨勢(shì)。圍繞常數(shù)均值的小的變化,使我們更容易推測(cè)未來(lái)。在某些情況下,相對(duì)于平均值的變量比較小,使用它可以很好地預(yù)測(cè)未來(lái)。下圖顯示了變量與該常數(shù)平均值相對(duì)于時(shí)間變化的關(guān)系:
在這種情況下,如果序列不是平穩(wěn)的,對(duì)未來(lái)的預(yù)測(cè)將是無(wú)效的,因?yàn)槠骄抵車(chē)淖兞繒?huì)顯著偏離,如下圖所示:
在上圖中,我們可以明顯看到上升的趨勢(shì),均值正在逐漸上升。在這種情況下,如果使用均值進(jìn)行未來(lái)值的預(yù)測(cè),誤差將非常大,因?yàn)轭A(yù)測(cè)價(jià)格會(huì)總是低于實(shí)際價(jià)格。
常數(shù)方差
當(dāng)序列的方差為常數(shù)時(shí),我們知道均值和標(biāo)準(zhǔn)差之間存在一種關(guān)系。當(dāng)方差不為常數(shù)時(shí)(如下圖所示),預(yù)測(cè)在某些時(shí)期可能會(huì)有較大的誤差,而這些時(shí)期是不可預(yù)測(cè)的。可以預(yù)測(cè)到,隨著時(shí)間的推移直到未來(lái),方差會(huì)保持不穩(wěn)定。
為了減小方差效應(yīng),可以采用對(duì)數(shù)變換。在本例中,也可以使用指數(shù)變換,如 Box-Cox 方法,或者使用膨脹率調(diào)整。
自相關(guān)序列
當(dāng)兩個(gè)變量在時(shí)間上的標(biāo)準(zhǔn)差有相似的變化時(shí),你可以說(shuō)這些變量是相關(guān)的。例如,體重會(huì)隨著心臟疾病而增加,體重越大,心臟問(wèn)題的發(fā)生率就越大。在這種情況下,相關(guān)性是正的,圖形應(yīng)該是這樣的:
負(fù)相關(guān)的情況類(lèi)似于這樣:對(duì)工作安全措施的投入越多,工作相關(guān)的事故數(shù)量就越少。
下面是幾個(gè)相關(guān)級(jí)別的散點(diǎn)圖的例子:
當(dāng)談到自相關(guān)時(shí),意思是某些先前時(shí)期與當(dāng)前時(shí)期存在相關(guān)性,這種相關(guān)性是滯后的。例如,在以小時(shí)為單位的測(cè)量值序列中,今天 12:00 的溫度與 24 小時(shí)前的 12:00 的溫度非常相似。如果你比較 24 小時(shí)內(nèi)的溫度變化,就會(huì)存在自相關(guān),在本例中,我們將與第 24 小時(shí)前的時(shí)間存在自相關(guān)關(guān)系。
自相關(guān)是使用單個(gè)變量創(chuàng)建預(yù)測(cè)的一種情況,因?yàn)槿绻麤](méi)有相關(guān)性,就不能使用過(guò)去的值來(lái)預(yù)測(cè)未來(lái);當(dāng)有多個(gè)變量時(shí),則可以驗(yàn)證因變量和獨(dú)立變量的滯后之間是否存在相關(guān)性。
如果一個(gè)序列不存在自相關(guān)關(guān)系,那么它就是隨機(jī)且不可預(yù)測(cè)的,做預(yù)測(cè)的最佳方法通常是使用前一天的值。我將在下面使用更詳細(xì)的圖表來(lái)解釋。
從這里開(kāi)始我將分析 Esalq 上的每周含水乙醇價(jià)格(這是巴西談判含水乙醇的價(jià)格參考),數(shù)據(jù)可以在這里(https://www.cepea.esalq.usp.br/br/indicador/etanol.aspx)下載。
價(jià)格單位是巴西雷亞爾每立方米(BRL/m3)。
在開(kāi)始任何分析之前,要將數(shù)據(jù)劃分為訓(xùn)練集和測(cè)試集。
劃分訓(xùn)練集和測(cè)試集數(shù)據(jù)
當(dāng)我們要?jiǎng)?chuàng)建時(shí)序預(yù)測(cè)模型時(shí),將數(shù)據(jù)劃分為兩部分至關(guān)重要:
訓(xùn)練集:這些數(shù)據(jù)將是定義模型系數(shù)/參數(shù)的主要依據(jù);
測(cè)試集:這些數(shù)據(jù)將被分離且對(duì)模型不可見(jiàn),用于測(cè)試模型是否有效(通常將這些值與模型結(jié)果進(jìn)行比較,最后測(cè)量平均誤差)。
測(cè)試集的大小通常約為總樣本的20%,盡管這個(gè)百分比取決于你擁有的樣本大小以及你希望提前多少時(shí)間進(jìn)行預(yù)測(cè)。理想情況下,測(cè)試集應(yīng)至少與所需預(yù)測(cè)的最大范圍相同。
與其他如分類(lèi)和回歸等不受時(shí)間影響的預(yù)測(cè)方法不同,在時(shí)間序列中,不可以將訓(xùn)練和測(cè)試數(shù)據(jù)從數(shù)據(jù)中隨機(jī)抽樣取出,我們必須遵循序列的時(shí)間標(biāo)準(zhǔn),訓(xùn)練數(shù)據(jù)應(yīng)該始終是在測(cè)試數(shù)據(jù)之前。
在本例中,我們有Esalq 含水乙醇的 856 周的價(jià)格數(shù)據(jù),使用前 700 周的數(shù)據(jù)作為訓(xùn)練集,后 156 周(3年,18%)的數(shù)據(jù)用作測(cè)試集:
從現(xiàn)在開(kāi)始,我們只使用訓(xùn)練集來(lái)做研究,測(cè)試集僅用于驗(yàn)證我們的預(yù)測(cè)。
每一個(gè)時(shí)間序列可以分為三個(gè)部分:趨勢(shì)、季節(jié)性和殘差,殘差是將前兩部分從序列中去除后剩下的部分,使用這種分割方法之后:
顯然,該序列具有上升趨勢(shì),在每一年的年底到年初之間達(dá)到峰值,在4月和9月之間達(dá)到最低值(此時(shí)在巴西中南部開(kāi)始甘蔗的壓榨)。
我們?nèi)匀唤ㄗh使用統(tǒng)計(jì)測(cè)試來(lái)確認(rèn)序列是否是平穩(wěn)的,這里將使用兩個(gè)測(cè)試:Dickey-Fuller 測(cè)試和 KPSS 測(cè)試。
首先,我們將使用 Dickey-Fuller 檢驗(yàn),我將使用 5% 的基礎(chǔ) P 值,也就是說(shuō),如果 P 值低于 5% 這意味著這個(gè)序列在統(tǒng)計(jì)上是平穩(wěn)的。
此外,還有模型的統(tǒng)計(jì)檢驗(yàn),可以將檢驗(yàn)值與 1%、5%、10% 的臨界值進(jìn)行比較,如果統(tǒng)計(jì)檢驗(yàn)低于選定的某個(gè)臨界值,就認(rèn)為序列是平穩(wěn)的:
在本例中,Dickey-Fuller 檢驗(yàn)結(jié)果表明序列不是平穩(wěn)的( P 值 36%,臨界值 5% 小于統(tǒng)計(jì)檢驗(yàn))。
現(xiàn)在我們要用 KPSS 檢驗(yàn)分析序列,與 Dickey-Fuller 檢驗(yàn)不同,KPSS 檢驗(yàn)已經(jīng)假設(shè)序列是平穩(wěn)的,只有當(dāng) P 值小于 5% 或統(tǒng)計(jì)檢驗(yàn)小于某個(gè)臨界值時(shí),序列才不是平穩(wěn)的:
KPSS 檢驗(yàn)證實(shí)了 Dickey-Fuller 檢驗(yàn)的正確性,同時(shí)也表明該序列不是平穩(wěn)的,因?yàn)?P 值為 1%,統(tǒng)計(jì)檢驗(yàn)高于任何臨界值。
接下來(lái),我將演示如何將序列轉(zhuǎn)換為平穩(wěn)狀態(tài)。
2
將序列轉(zhuǎn)換為平穩(wěn)狀態(tài)
差分
差分法用來(lái)移除趨勢(shì)信號(hào),也可以用來(lái)減少方差,它只是 T 周期的值與前一個(gè) T-1 周期值的差值。
為了更容易理解,下面我們只用一小部分的乙醇價(jià)格,以便更好地可視化,可以看到從 2005 年 5 月開(kāi)始價(jià)格上漲,直到 2006 年 5 月中旬,價(jià)格每周都在上漲,這就累積了一個(gè)上升的趨勢(shì),這種情況下,屬于非平穩(wěn)序列。
當(dāng)進(jìn)行一階微分時(shí)(如下圖),我們?nèi)コ诵蛄械睦鄯e效應(yīng),并且僅顯示了整個(gè)系列中時(shí)段 T 相對(duì)于時(shí)段 T-1 的變化,因此如果 3 天前的價(jià)格為 800 BRL 且已漲到 850.00 BRL,差價(jià)將是 50.00 BRL,如果今天的價(jià)格是 860.00 BRL,那么差價(jià)將是 - 10.00 BRL。
通常只需要一階微分就足夠?qū)⑿蛄修D(zhuǎn)換為平穩(wěn)狀態(tài),但如果需要,可以應(yīng)用二階微分,在這種情況下,將對(duì)一階微分的值進(jìn)行求導(dǎo)(幾乎沒(méi)有二階以上微分的情況)。
同樣的例子,要進(jìn)行二次微分,我們必須取 T 時(shí)刻減去 T-1 時(shí)刻的微分:2.9 BRL -5.5 BRL = - 2.6 BRL 等等。
我們來(lái)做一下 Dickey-Fuller 測(cè)試,看看這個(gè)序列是否會(huì)在一階微分后是平穩(wěn)的:
在這種情況下,我們確定該序列是平穩(wěn)的,P 值為零,并且當(dāng)我們比較統(tǒng)計(jì)檢驗(yàn)的值時(shí),它遠(yuǎn)遠(yuǎn)低于臨界值。
在下一個(gè)例子中,我們將嘗試調(diào)整通貨膨脹率將一個(gè)序列轉(zhuǎn)換到平穩(wěn)狀態(tài)。
膨脹率調(diào)整
價(jià)格是相對(duì)于交易時(shí)間的,2002 年乙醇的價(jià)格是 680.00 BRL,如果現(xiàn)在產(chǎn)品的價(jià)格是這個(gè)價(jià)格,很多工廠肯定會(huì)倒閉,因?yàn)檫@個(gè)價(jià)格非常低。
為了讓序列平穩(wěn),我將基于當(dāng)前值使用巴西 IPCA 索引(巴西的 CPI 指數(shù))調(diào)整整個(gè)序列,從訓(xùn)練區(qū)間的結(jié)尾(2016年4月)到研究的開(kāi)始,數(shù)據(jù)的來(lái)源是 IBGE 網(wǎng)站。
現(xiàn)在我們來(lái)看序列如何能變平穩(wěn)以及是否變平穩(wěn)。
如圖所示,上升趨勢(shì)已經(jīng)消失,只剩下季節(jié)性振蕩, Dickey-Fuller 測(cè)試也證實(shí)了這個(gè)序列現(xiàn)在是穩(wěn)定的。
如果好奇,可以參閱下面的圖表,其中調(diào)整后的價(jià)格與原始系列的通貨膨脹率相對(duì)應(yīng)。
減小方差
對(duì)數(shù)變換
對(duì)數(shù)變換通常用于將指數(shù)增長(zhǎng)的序列轉(zhuǎn)換為具有更趨于線性增長(zhǎng)的序列,在本例中,我們將使用自然對(duì)數(shù)(Natural Logarithm,NL),其底數(shù)為 2.718 ,這種對(duì)數(shù)類(lèi)型在經(jīng)濟(jì)模型中被廣泛使用。
轉(zhuǎn)換成 NL 值的差值近似等于原始序列值的百分比變化,作為降低不同價(jià)格序列的方差的基礎(chǔ)是很有效的,如下例:
如果我們有一個(gè)產(chǎn)品在 2000 年價(jià)格上漲,從 50.00 BRL 到 52.50 BRL,幾年后(2019年),價(jià)格已經(jīng)是 100.00 BRL,已經(jīng)上漲到 105.00 BRL,價(jià)格之間的絕對(duì)差分別是 2.50 BRL 和 5.00 BRL,但兩者的百分比差為 5% 。當(dāng)我們對(duì)這些價(jià)格中使用 NL 時(shí),我們得到:NL (52.50) - NL(50.00) = 3.96 - 3.912 = 0.048 或 4.8%,同樣地,在第二個(gè)價(jià)格序列中使用 LN 時(shí),我們得到:NL (105) - NL(100) = 4.654-4.605 = 0.049 或 4.9% 。
在這個(gè)例子中,我們可以通過(guò)把幾乎所有的東西都放到相同的基上來(lái)減少差異值。
下面還是同一個(gè)例子:
1price1?=?np.log(52.5)?-?np.log(50)2price2?=?np.log(105)?-?np.log(100)3printf('The?percentage?variation?of?the?first?example?is?{round(price1*100,1)}?and?the?second?is?{round(price2*100,1)}')
原始序列與 NL 序列變換的對(duì)比圖:
Box-Cox 變換(指數(shù)變換)
Box-Cox 轉(zhuǎn)換也是一種轉(zhuǎn)換序列的方法,lambda(λ)的值是用于轉(zhuǎn)換序列的參數(shù)。
簡(jiǎn)而言之,這個(gè)函數(shù)是幾個(gè)指數(shù)變換函數(shù)的結(jié)合,我們需要找到轉(zhuǎn)換序列的 lambda 的最佳值,使其分布更接近正態(tài)高斯分布。使用此轉(zhuǎn)換的一個(gè)條件是序列只有正值,公式為:
接下來(lái)我將繪制原始序列及其分布圖,然后用 lambda 最佳值繪制新的轉(zhuǎn)換序列及其分布圖,為了找到 lambda 的值,我們將使用庫(kù) Scipy 的?boxcox?函數(shù)生成轉(zhuǎn)換的序列和理想 lambda 值:
下面是一個(gè)交互式圖表,在圖中可以更改 lambda 值和檢查更改:
此工具通常用于提高模型的性能,因?yàn)樗鼓P透呌谡龖B(tài)分布,記住在完成模型的預(yù)測(cè)后,必須根據(jù)以下公式反轉(zhuǎn)轉(zhuǎn)換到原始的基數(shù):
尋找相關(guān)時(shí)滯
為了便于預(yù)測(cè),具有單一變量的序列必須具有自相關(guān)性,即,當(dāng)前時(shí)段必須是能夠基于較早的時(shí)段(滯后)而解釋的。
由于這個(gè)序列每周為一周期,1 年大約 52 周,我將使用 60 的滯后期的自相關(guān)函數(shù)來(lái)驗(yàn)證當(dāng)前周期與這些滯后的相關(guān)性。
通過(guò)對(duì)上述自相關(guān)圖的分析,似乎所有的滯后都可以用來(lái)為未來(lái)事件創(chuàng)建預(yù)測(cè),因?yàn)樗鼈兊恼嚓P(guān)接近 1 ,而且都在置信區(qū)間之外,但這一特征屬于非平穩(wěn)序列。
另一個(gè)非常重要的函數(shù)是部分自相關(guān)函數(shù),其中消除了先前的滯后對(duì)當(dāng)前區(qū)間的影響,只保留了當(dāng)前區(qū)間滯后的影響來(lái)分析,例如:第四個(gè)滯后的偏自相關(guān)將消除第一、第二和第三個(gè)滯后的影響。
部分自相關(guān)圖如下:
可以看到,幾乎沒(méi)有滯后對(duì)當(dāng)前周期有影響,但是正如前面所演示的,沒(méi)有微分的序列不是平穩(wěn)的,我們現(xiàn)在用一階微分的序列繪制這兩個(gè)函數(shù)來(lái)展示原理:
自相關(guān)曲線變化顯著,表明該序列僅在第一個(gè)滯后期具有顯著相關(guān),在第 26 個(gè)滯后(半年)左右具有負(fù)相關(guān)的季節(jié)效應(yīng)。
為了做出預(yù)測(cè),我們必須注意一個(gè)找到相關(guān)的滯后現(xiàn)象的非常重要的細(xì)節(jié),重要的是這種關(guān)聯(lián)背后的原因,因?yàn)槿绻麤](méi)有邏輯上的原因,就有可能是偶然的,當(dāng)包含更多的數(shù)據(jù)時(shí),這種關(guān)聯(lián)就會(huì)消失。
另一個(gè)重點(diǎn)是自相關(guān)和部分自相關(guān)圖對(duì)異常值非常敏感,因此分析時(shí)間序列本身并與兩個(gè)自相關(guān)圖進(jìn)行對(duì)比非常重要。
在這個(gè)例子中,第一個(gè)滯后與當(dāng)前周期具有高度相關(guān)性,因?yàn)榍耙恢艿膬r(jià)格歷史上沒(méi)有顯著變化,在相同的情況下,第 26 個(gè)滯后呈現(xiàn)負(fù)相關(guān),表明與當(dāng)前時(shí)期相反的趨勢(shì),可能原因是一年內(nèi)不同時(shí)期供需不同。
隨著膨脹率調(diào)整后的序列已經(jīng)趨于平穩(wěn),我們將使用它來(lái)創(chuàng)建我們的預(yù)測(cè),下圖是調(diào)整后序列的自相關(guān)和部分自相關(guān)圖:
我們將只使用前兩個(gè)滯后作為自回歸序列的預(yù)測(cè)因子。
想要了解更多信息的話(huà),杜克大學(xué)教授 Robert Nau 的網(wǎng)站是與此主題相關(guān)的最佳網(wǎng)站之一。(http://people.duke.edu/~rnau/411home.htm)
3?
模型評(píng)價(jià)指標(biāo)
為了分析預(yù)測(cè)值是否接近當(dāng)前值,必須對(duì)誤差進(jìn)行測(cè)量,此種情況下的誤差(或殘差)基本上是 Yreal-YpredYreal-Ypred (這個(gè)暫時(shí)不知道怎么翻譯, real 真實(shí)值, pred 預(yù)測(cè)值)。
對(duì)訓(xùn)練數(shù)據(jù)中的錯(cuò)誤進(jìn)行評(píng)估以驗(yàn)證模型是否具有良好的確定性,然后通過(guò)檢查測(cè)試數(shù)據(jù)中的誤差(模型未“看到”的數(shù)據(jù))來(lái)驗(yàn)證模型。
當(dāng)將訓(xùn)練數(shù)據(jù)與測(cè)試數(shù)據(jù)進(jìn)行對(duì)比時(shí),檢查誤差對(duì)于驗(yàn)證你的模型是否過(guò)擬合或欠擬合非常重要。
以下是一些用于評(píng)估時(shí)間序列模型的關(guān)鍵指標(biāo):
平均預(yù)測(cè)誤差——偏差(bias)
它只是被評(píng)估序列的平均誤差,值可以是正的也可以是負(fù)的。該指標(biāo)表明,模型傾向于預(yù)測(cè)實(shí)際值以上(負(fù)誤差)還是實(shí)際值以下(正誤差),因此也可以說(shuō)平均預(yù)測(cè)誤差是模型的偏差。
MAE——平均絕對(duì)誤差
這個(gè)指標(biāo)與上面提到的預(yù)測(cè)的平均誤差非常相似,唯一的區(qū)別是將誤差的負(fù)值轉(zhuǎn)化為正值,然后計(jì)算平均值。
這個(gè)指標(biāo)在時(shí)間序列中被廣泛使用,因?yàn)樵谝恍┣闆r下,負(fù)誤差可以抵消正誤差,使人誤以為模型是準(zhǔn)確的,而在用 MAE 的情況下不會(huì)發(fā)生,因?yàn)檫@個(gè)指標(biāo)顯示預(yù)測(cè)距離實(shí)際值有多遠(yuǎn),不管數(shù)值大還是小,示例如下:
1a?=?np.array([1,2,3,4,5]) 2b?=?np.array([5,4,3,2,1]) 3 4error?=?a?-?b 5 6MFE?=?error.mean() 7MAE?=?np.abs(error).mean() 8 9print(f'The?error?of?each?model?value?looks?like?this:?{error}')10print(f'The?MFE?error?was?{MFE},?the?MAE?error?was?{MAE}')
與 MAE 和 MFE 不同,MSE 值是平方單位,而不是模型單位。
RMSE——均方根誤差
這個(gè)指標(biāo)只是 MSE 的平方根,使誤差返回到模型的度量單位(BRL/m3),因?yàn)樗鼘?duì)時(shí)間序列在平方過(guò)程中產(chǎn)生的較大誤差更為敏感而非常有用。
MAPE——平均絕對(duì)百分誤差
這是另一個(gè)可用的有趣的指標(biāo),它通常在管理報(bào)告中使用,因?yàn)檎`差是以百分比度量的,所以產(chǎn)品 X 的錯(cuò)誤可以與產(chǎn)品 Y 的誤差進(jìn)行比較。
該指標(biāo)的計(jì)算取誤差的絕對(duì)值除以當(dāng)前價(jià)格,然后計(jì)算平均值:
我們來(lái)創(chuàng)建一個(gè)函數(shù),用幾個(gè)評(píng)估指標(biāo)來(lái)評(píng)估訓(xùn)練數(shù)據(jù)和測(cè)試數(shù)據(jù)的誤差:
1#Libraries?to?create?the?function: 2from?math?import?sqrt 3from?sklearn.metrics?import?mean_squared_error,mean_absolute_error,?mean_absolute_error 4 5def?check_error(orig,?pred,?name_col='',?index_name=''): 6????bias?=?np.mean(orig?-?pred) 7????mse?=?mean_squared_error(orig,?pred) 8????rmse?=?sqrt(mean_squared_error(orig,?pred)) 9????mae?=?mean_absolute_error(orig,?pred)10????mape?=?np.mean(np.abs((orig?-?pred)?/?orig))?*?10011????error_group?=?[bias,?mse,?rmse,?mae,?mape]12????serie?=?pd.DataFrame(error_group,?index=['BIAS','MSE','RMSE','MAE',?'MAPE'],?columns=[name_col])13????serie.index.name?=?index_name14????return?serie
殘差與預(yù)測(cè)值(散點(diǎn)圖)
分析這個(gè)圖是非常重要的,因?yàn)樵谶@個(gè)圖中我們可以檢查模式,它可以告訴我們是否需要對(duì)模型進(jìn)行一些修改,理想的情況是誤差沿著預(yù)測(cè)序列線性分布。
殘差的QQ圖(散點(diǎn)圖)
https://en.wikipedia.org/wiki/Q–Q_plot
總的來(lái)說(shuō)這是一個(gè)顯示了殘差在理論上應(yīng)該如何分布的圖形,遵循高斯分布,而不是實(shí)際情況。
殘差自相關(guān)(序列圖)
如果沒(méi)有置信區(qū)間的值,或者說(shuō)模型不包含信息。
我們需要?jiǎng)?chuàng)建另一個(gè)函數(shù)來(lái)繪制這些圖:
1def?plot_error(data,?figsize=(18,8)): 2????#?Creating?the?column?error 3????data['Error']?=?data.iloc[:,0]?-data.iloc[:,1] 4 5????plt.figure(figsize=figsize) 6????ax1?=?plt.subplot2grid((2,2),?(0,0)) 7????ax2?=?plt.subplot2grid((2,2),?(0,1)) 8????ax3?=?plt.subplot2grid((2,2),?(1,0)) 9????ax4?=?plt.subplot2grid((2,2),?(1,1))10????#Plotting?actual?and?predicted?values1112????ax1.plot(data.iloc[:,0:2])13????ax1.legend(['Real','Pred'])14????ax1.set_title('Real?Value?vs?Prediction')15????#?Error?vs?Predicted?value1617????ax2.scatter(data.iloc[:,1],?data.iloc[:,2])18????ax2.set_xlabel('Predicted?Values')19????ax2.set_ylabel('Residual')20????ax2.set_title('Residual?vs?Predicted?Values')2122????##?Residual?QQ?Plot23????sm.graphics.qqplot(data.iloc[:,2],?line='r',?ax=ax3)2425????#?Autocorrelation?Plot?of?residual26????plot_acf(data.iloc[:,2],?lags=60,?zero=False,?ax=ax4)27????plt.tight_layout()28????plt.show()
與實(shí)際值相比,誤差往往會(huì)增加。
許多人還使用這種方法作為?基線(baseline),試圖用更復(fù)雜的模型來(lái)改進(jìn)。
下面我們將使用訓(xùn)練數(shù)據(jù)和測(cè)試數(shù)據(jù)來(lái)進(jìn)行模擬:
QQ 圖顯示了有一些比理論上要大些(包括正負(fù)值)的殘差,這些是所謂的異常值,但在第一,第六和第七個(gè)滯后中仍然存在明顯的自相關(guān),這可以用于改進(jìn)模型。
同樣地,我們現(xiàn)在將在測(cè)試數(shù)據(jù)中進(jìn)行預(yù)測(cè)。預(yù)測(cè)序列的第一個(gè)值將是訓(xùn)練數(shù)據(jù)的最后一個(gè)值,然后這些值將按照測(cè)試的當(dāng)前值逐步更新,依此類(lèi)推:
RMSE 和 MAE 的誤差與訓(xùn)練數(shù)據(jù)相似,QQ 圖與殘差更符合理論值,可能是由于與訓(xùn)練數(shù)據(jù)相比樣本值較少。
在對(duì)比殘差與預(yù)測(cè)值的圖表中,我們注意到當(dāng)價(jià)格上漲時(shí),誤差絕對(duì)值有增加的趨勢(shì),可能用對(duì)數(shù)調(diào)整會(huì)減少誤差的擴(kuò)大并完成殘差相關(guān)圖,表明由于第一個(gè)滯后有很強(qiáng)的相關(guān)性,因此仍有改進(jìn)的空間,可能添加基于第一個(gè)滯后的回歸來(lái)改進(jìn)預(yù)測(cè)。下一個(gè)模型是簡(jiǎn)單平均值:
簡(jiǎn)單平均
另一種預(yù)測(cè)方法是使用序列平均值,通常當(dāng)數(shù)值在平均值附近振蕩時(shí),具有常數(shù)的方差,沒(méi)有上升或下降趨勢(shì)時(shí),這種預(yù)測(cè)形式是好的,但是也能使用更好的方法,其中可以使用季節(jié)模式進(jìn)行預(yù)測(cè)。
此模型使用數(shù)據(jù)首端直到分析的前一個(gè)時(shí)期的平均值,并且按天擴(kuò)展到數(shù)據(jù)結(jié)束,最后,趨勢(shì)是一條直線,我們現(xiàn)在將此模型與第一個(gè)模型的誤差進(jìn)行比較:
在測(cè)試數(shù)據(jù)中,我將繼續(xù)使用訓(xùn)練數(shù)據(jù)一開(kāi)始的均值,并展開(kāi)添加到測(cè)試數(shù)據(jù)上:
簡(jiǎn)單均值模型無(wú)法捕獲序列的相關(guān)信息,如真實(shí)值和預(yù)測(cè)值圖中所示,也可以在相關(guān)性和殘差和預(yù)測(cè)圖中看到。
簡(jiǎn)單滑動(dòng)平均:
滑動(dòng)平均是針對(duì)給定周期(例如 5 天)計(jì)算的平均值,它是滑動(dòng)的并始終使用此特定時(shí)段進(jìn)行計(jì)算,在這種情況下,我們將始終使用過(guò)去 5 天的平均值來(lái)預(yù)測(cè)下一天的值。
誤差低于簡(jiǎn)單平均,但仍高于簡(jiǎn)單模型,以下是測(cè)試模型:
與訓(xùn)練數(shù)據(jù)相似,滑動(dòng)平均模型優(yōu)于簡(jiǎn)單平均模型,但尚未比簡(jiǎn)單模型基礎(chǔ)有所增益。
預(yù)測(cè)具有 2 個(gè)時(shí)滯的自相關(guān)性,并且相對(duì)于預(yù)測(cè)值有很大的方差誤差。
指數(shù)滑動(dòng)平均:
上述簡(jiǎn)單滑動(dòng)平均模型具有同等地處理最后 X 個(gè)觀測(cè)值并完全忽略所有先前觀測(cè)值的特性。直觀地說(shuō),過(guò)去的數(shù)據(jù)應(yīng)該逐漸打折,例如,理論上最近的觀測(cè)結(jié)果應(yīng)該比第二近的更重要,而第二近的觀測(cè)應(yīng)該比第三近的數(shù)據(jù)更重要,等等, 指數(shù)滑動(dòng)平均(Exponential Moving Average,EMM)模型就是這樣做的。
由于?α(alpha)是一個(gè)常數(shù),其值介于 0 和 1 之間,因此我們將使用以下公式計(jì)算預(yù)測(cè)值:
如果預(yù)測(cè)的第一個(gè)值是相應(yīng)的當(dāng)前值,其他值將更新為實(shí)際值與前一個(gè)時(shí)段的預(yù)測(cè)之差的 α 倍。當(dāng)α為零時(shí),我們根據(jù)第一個(gè)預(yù)測(cè)值得到一個(gè)常數(shù),當(dāng) α 為 1 時(shí),我們有一個(gè)簡(jiǎn)單方法的模型,因?yàn)榻Y(jié)果是前一個(gè)實(shí)際周期的值。
下面是幾個(gè) α 值的圖表:
EMM 預(yù)測(cè)中的平均數(shù)據(jù)周期為 1 /α。例如,當(dāng) α= 0.5 時(shí),滯后相當(dāng)于 2 個(gè)周期; 當(dāng) α= 0.2 時(shí),滯后是 5 個(gè)周期; 當(dāng) α= 0.1 時(shí),滯后是 10 個(gè)周期,依此類(lèi)推。
在這個(gè)模型中,我們將任意選用 α 值為 0.5 ,而你可以通過(guò)網(wǎng)格搜索算法查找在訓(xùn)練集和驗(yàn)證集中都中減少了錯(cuò)誤的 α,數(shù)據(jù)大概應(yīng)是這樣:
這個(gè)模型的誤差與滑動(dòng)平均的誤差相似,但是我們需要在測(cè)試集對(duì)模型進(jìn)行驗(yàn)證:
在驗(yàn)證數(shù)據(jù)中,目前為止的誤差在我們已經(jīng)訓(xùn)練過(guò)的模型中排名第二,而殘差圖的特征與 5 天滑動(dòng)平均模型的特征非常相似。
自回歸
自回歸模型基本上是一個(gè)具有顯著相關(guān)滯后的線性回歸,首先要繪制自相關(guān)圖和部分自相關(guān)圖來(lái)驗(yàn)證是否存在相關(guān)關(guān)系。
下面是訓(xùn)練序列的自相關(guān)圖和部分自相關(guān)圖,顯示了自回歸模型的特征為具有 2 個(gè)時(shí)滯的顯著相關(guān)性:
接下來(lái)我們將根據(jù)訓(xùn)練數(shù)據(jù)創(chuàng)建模型,得到模型的系數(shù)后,將其乘以測(cè)試數(shù)據(jù)將要執(zhí)行的值:
這個(gè)模型與我們所訓(xùn)練的其他模型相比,誤差最小,現(xiàn)在我們用它的系數(shù)對(duì)訓(xùn)練數(shù)據(jù)進(jìn)行逐步預(yù)測(cè):
注意,在測(cè)試數(shù)據(jù)中,誤差不會(huì)保持穩(wěn)定,甚至?xí)群?jiǎn)單模型更差,可以看到圖中的預(yù)測(cè)值幾乎總是低于當(dāng)前值,偏差測(cè)量顯示實(shí)際值比預(yù)測(cè)值高 50.19 BRL, 也許在訓(xùn)練模型中調(diào)整一些參數(shù),這種差異會(huì)減小。
要改進(jìn)這些模型,你可以應(yīng)用多個(gè)轉(zhuǎn)換,例如本文中介紹的轉(zhuǎn)換,也可以添加外部變量作為預(yù)測(cè)源,但是,這已然超出本文內(nèi)容了。
4?
結(jié)束語(yǔ)
每個(gè)時(shí)間序列模型都有自己的特點(diǎn),應(yīng)該分別單獨(dú)分析,這樣我們就可以提取盡可能多的信息來(lái)做出好的預(yù)測(cè),減少未來(lái)的不確定性。
檢驗(yàn)平穩(wěn)度、轉(zhuǎn)換數(shù)據(jù)、在訓(xùn)練數(shù)據(jù)中建立模型、驗(yàn)證測(cè)試數(shù)據(jù)、檢驗(yàn)殘差是建立良好時(shí)間序列預(yù)測(cè)的關(guān)鍵步驟。
也可以看看本文原作者的有關(guān)ARIMA模型的文章。
https://www.kaggle.com/leandrovrabelo/climate-change-forecast-sarima-model
原文來(lái)源: https://towardsdatascience.com/basic-principles-to-create-a-time-series-forecast-6ae002d177a4譯者簡(jiǎn)介::李潔,北京師范大學(xué)香港浸會(huì)大學(xué)聯(lián)合學(xué)院 數(shù)據(jù)科學(xué)系助教,香港科技大學(xué)電信學(xué)碩士。
(*本文為Python大本營(yíng)轉(zhuǎn)載文章,轉(zhuǎn)載請(qǐng)聯(lián)系原作者。原標(biāo)題:不會(huì)時(shí)間序列預(yù)測(cè)?不要緊,大神來(lái)教你)◆
精彩推薦
◆
【結(jié)果提交倒計(jì)時(shí)】PV,UV流量預(yù)測(cè)算法大賽,結(jié)果提交截止時(shí)間為 9月20日 ,還沒(méi)有提交的小伙伴抓緊時(shí)間了~~9月25日公布初賽成績(jī)。 最新排行榜請(qǐng)點(diǎn)擊 閱讀原文 查看。 推薦閱讀Python微信遠(yuǎn)程控制攝像頭-拍攝女朋友坐電腦前聊天時(shí)表情
5大必知的圖算法,附Python代碼實(shí)現(xiàn)
吐血整理!140種Python標(biāo)準(zhǔn)庫(kù)、第三方庫(kù)和外部工具都有了
如何用爬蟲(chóng)技術(shù)幫助孩子秒到心儀的幼兒園(基礎(chǔ)篇)
Python傳奇:30年崛起之路
2019年最新華為、BAT、美團(tuán)、頭條、滴滴面試題目及答案匯總
阿里巴巴楊群:高并發(fā)場(chǎng)景下Python的性能挑戰(zhàn)
總結(jié)
以上是生活随笔為你收集整理的python 相关性检验怎么计算p值_收藏 | 大神教你用Python预测未来:一文看懂时间序列...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Visual Assist X 10.9
- 下一篇: 【数据结构】树与树的表示、二叉树存储结构