本文詳細(xì)說明了進(jìn)行時間序列預(yù)測的步驟。

我們被隨處可見的模式所包圍,人們可以注意到四季與天氣的關(guān)系模式,以交通量計算的交通高峰期的模式,你的心跳或者是股票市場和某些產(chǎn)品的銷售周期。
分析時間序列數(shù)據(jù)對于發(fā)現(xiàn)這些模式和預(yù)測未來非常有用。有幾種方法可以創(chuàng)建這類預(yù)測,在本文中,我將介紹最基本且最傳統(tǒng)的方法概念。
所有代碼都是用Python編寫的,并且,在我的 GitHub 上可以看到所有的附加信息。
那么讓我們開始談?wù)劮治?strong>時間序列的初始條件:
平穩(wěn)序列
平穩(wěn)時間序列是指統(tǒng)計特性,如均值、方差和自相關(guān)系數(shù),隨時間相對恒定的序列。因此,非平穩(wěn)序列是統(tǒng)計特性隨時間變化的序列。
在開始任何預(yù)測建模之前,都有必要驗證這些統(tǒng)計屬性是否是常量,我將一一解釋下面的每個點:
· 常數(shù)均值
· 常數(shù)方差
· 自相關(guān)
常數(shù)均值
平穩(wěn)序列在時間上具有一個相對穩(wěn)定的均值,這個值沒有減少或者增加的趨勢。圍繞常數(shù)均值的小的變化,使我們更容易推測未來。 在某些情況下,相對于平均值的變量比較小,使用它可以很好地預(yù)測未來。下圖顯示了變量與該常數(shù)平均值相對于時間變化的關(guān)系:

在這種情況下,如果序列不是平穩(wěn)的,對未來的預(yù)測將是無效的,因為平均值周圍的變量會顯著偏離,如下圖所示:

在上圖中,我們可以明顯看到上升的趨勢,均值正在逐漸上升。在這種情況下,如果使用均值進(jìn)行未來值的預(yù)測,誤差將非常大,因為預(yù)測價格會總是低于實際價格。
常數(shù)方差
當(dāng)序列的方差為常數(shù)時,我們知道均值和標(biāo)準(zhǔn)差之間存在一種關(guān)系。當(dāng)方差不為常數(shù)時(如下圖所示),預(yù)測在某些時期可能會有較大的誤差,而這些時期是不可預(yù)測的??梢灶A(yù)測到,隨著時間的推移直到未來,方差會保持不穩(wěn)定。

為了減小方差效應(yīng),可以采用對數(shù)變換。在本例中,也可以使用指數(shù)變換,如Box-Cox方法,或者使用膨脹率調(diào)整。
自相關(guān)序列
當(dāng)兩個變量在時間上的標(biāo)準(zhǔn)差有相似的變化時,可以說這些變量是相關(guān)的。例如,體重會隨著心臟疾病而增加,體重越大,心臟問題的發(fā)生率就越大。在這種情況下,相關(guān)性是正的,圖形應(yīng)該是這樣的:

負(fù)相關(guān)的情況類似于這樣:對工作安全措施的投入越多,工作相關(guān)的事故數(shù)量就越少。
下面是幾個相關(guān)級別的散點圖的例子:

當(dāng)談到自相關(guān)時,意思是某些先前時期與當(dāng)前時期存在相關(guān)性,這種相關(guān)性是滯后的。例如,在以小時為單位的測量值序列中,今天12:00的溫度與24小時前的12:00的溫度非常相似。 如果你比較24小時內(nèi)的溫度變化,就會存在自相關(guān),在本例中,我們將與第24小時前的時間存在自相關(guān)關(guān)系。
自相關(guān)是使用單個變量創(chuàng)建預(yù)測的一種情況,因為如果沒有相關(guān)性,就不能使用過去的值來預(yù)測未來;當(dāng)有多個變量時,則可以驗證因變量和獨立變量的滯后之間是否存在相關(guān)性。
如果一個序列不存在自相關(guān)關(guān)系,那么它就是隨機(jī)且不可預(yù)測的,做預(yù)測的最佳方法通常是使用前一天的值。我將在下面使用更詳細(xì)的圖表來解釋。
從這里開始我將分析Esalq上的每周含水乙醇價格(這是巴西談判含水乙醇的價格參考),數(shù)據(jù)可以在這里(https://www.cepea.esalq.usp.br/br/indicador/etanol.aspx)下載。
價格單位是巴西雷亞爾每立方米(BRL/m3)。
在開始任何分析之前,要將數(shù)據(jù)劃分為訓(xùn)練集和測試集。
劃分訓(xùn)練集和測試集數(shù)據(jù)
當(dāng)我們要創(chuàng)建時序預(yù)測模型時,將數(shù)據(jù)劃分為兩部分至關(guān)重要:
訓(xùn)練集:這些數(shù)據(jù)將是定義模型系數(shù)/參數(shù)的主要依據(jù);
測試集:這些數(shù)據(jù)將被分離且對模型不可見,用于測試模型是否有效(通常將這些值與模型結(jié)果進(jìn)行比較,最后測量平均誤差)。
測試集的大小通常約為總樣本的20%,盡管這個百分比取決于你擁有的樣本大小以及你希望提前多少時間進(jìn)行預(yù)測。理想情況下,測試集應(yīng)至少與所需預(yù)測的最大范圍相同。
與其他如分類和回歸等不受時間影響的預(yù)測方法不同,在時間序列中,不可以將訓(xùn)練和測試數(shù)據(jù)從數(shù)據(jù)中隨機(jī)抽樣取出,我們必須遵循序列的時間標(biāo)準(zhǔn),訓(xùn)練數(shù)據(jù)應(yīng)該始終是在測試數(shù)據(jù)之前。
在本例中,我們有Esalq 含水乙醇的856周的價格數(shù)據(jù),使用前700周的數(shù)據(jù)作為訓(xùn)練集,后156周(3年,18%)的數(shù)據(jù)用作測試集:

從現(xiàn)在開始,我們只使用訓(xùn)練集來做研究,測試集僅用于驗證我們的預(yù)測。
每一個時間序列可以分為三個部分:趨勢、季節(jié)性和殘差,殘差是將前兩部分從序列中去除后剩下的部分,使用這種分割方法之后:

顯然,該序列具有上升趨勢,在每一年的年底到年初之間達(dá)到峰值,在4月和9月之間達(dá)到最低值(此時在巴西中南部開始甘蔗的壓榨)。
仍然建議使用統(tǒng)計測試來確認(rèn)序列是否平穩(wěn),這里將使用兩個測試:Dickey-Fuller測試和KPSS測試。
首先,我們將使用Dickey-Fuller檢驗,我將使用5%的基礎(chǔ)P值,也就是說,如果P值低于5%這意味著這個序列在統(tǒng)計上是平穩(wěn)的。
此外,還有模型的統(tǒng)計檢驗,可以將檢驗值與1%、5%、10%的臨界值進(jìn)行比較,如果統(tǒng)計檢驗低于選定的某個臨界值,就認(rèn)為序列是平穩(wěn)的:

在本例中,Dickey-Fuller檢驗結(jié)果表明序列不是平穩(wěn)的(P值36%,臨界值5%小于統(tǒng)計檢驗)。
現(xiàn)在我們要用KPSS檢驗分析序列。與Dickey-Fuller檢驗不同,KPSS檢驗已經(jīng)假設(shè)序列是平穩(wěn)的,只有當(dāng)P值小于5%或統(tǒng)計檢驗小于某個臨界值時,序列才不是平穩(wěn)的:

KPSS檢驗證實了Dickey-Fuller檢驗的正確性,同時也表明該序列不是平穩(wěn)的,因為P值為1%,統(tǒng)計檢驗高于任何臨界值。
接下來,我將演示如何將序列轉(zhuǎn)換為平穩(wěn)狀態(tài)。
將序列轉(zhuǎn)換為平穩(wěn)狀態(tài)
差分
差分法用來移除趨勢信號,也可以用來減少方差,它只是T周期的值與前一個T-1周期值的差值。
為了更容易理解,下面我們只用一小部分的乙醇價格,以便更好地可視化,可以看到從2005年5月開始價格上漲,直到2006年5月中旬,價格每周都在上漲,這就累積了一個上升的趨勢,這種情況下,屬于非平穩(wěn)序列。

當(dāng)進(jìn)行一階微分時(如下圖),我們?nèi)コ诵蛄械睦鄯e效應(yīng),并且僅顯示了整個系列中時段T相對于時段T-1的變化,因此如果3天前的價格為800 BRL且已漲到850.00 BRL,差價將是50.00 BRL,如果今天的價格是860.00 BRL,那么差價將是 - 10.00 BRL。

通常只需要一階微分就足夠?qū)⑿蛄修D(zhuǎn)換為平穩(wěn)狀態(tài),但如果需要,可以應(yīng)用二階微分,在這種情況下,將對一階微分的值進(jìn)行求導(dǎo)(幾乎沒有二階以上微分的情況)。
同樣的例子,要進(jìn)行二次微分,我們必須取T時刻減去T-1時刻的微分:2.9 BRL -5.5 BRL = - 2.6 BRL等等。

做一下Dickey-Fuller測試,看看這個序列是否會在一階微分后是平穩(wěn)的:

在這種情況下,我們確定該序列是平穩(wěn)的,P值為零,并且當(dāng)我們比較統(tǒng)計檢驗的值時,它遠(yuǎn)遠(yuǎn)低于臨界值。
在下一個例子中,我們將嘗試調(diào)整通貨膨脹率將一個序列轉(zhuǎn)換到平穩(wěn)狀態(tài)。
膨脹率調(diào)整
價格是相對于交易時間的,2002年乙醇的價格是680.00 BRL,如果現(xiàn)在產(chǎn)品的價格是這個價格,很多工廠肯定會倒閉,因為這個價格非常低。
為了讓序列平穩(wěn),我將基于當(dāng)前值使用巴西IPCA索引(巴西的CPI指數(shù))調(diào)整整個序列,從訓(xùn)練區(qū)間的結(jié)尾(2016年4月)到研究的開始,數(shù)據(jù)的來源是IBGE網(wǎng)站。

現(xiàn)在我們來看序列如何能變平穩(wěn)以及是否變平穩(wěn)。

如圖所示,上升趨勢已經(jīng)消失,只剩下季節(jié)性振蕩,Dickey-Fuller測試也證實了這個序列現(xiàn)在是穩(wěn)定的。
如果好奇,可以參閱下面的圖表,其中調(diào)整后的價格與原始系列的通貨膨脹率相對應(yīng)。

減小方差
對數(shù)變換
對數(shù)變換通常用于將指數(shù)增長的序列轉(zhuǎn)換為具有更趨于線性增長的序列,在本例中,我們將使用自然對數(shù)(Natural Logarithm,NL),其底數(shù)為2.718,這種對數(shù)類型在經(jīng)濟(jì)模型中被廣泛使用。
轉(zhuǎn)換成NL值的差值近似等于原始序列值的百分比變化,作為降低不同價格序列的方差的基礎(chǔ)是很有效的,如下例:
如果我們有一個產(chǎn)品在2000年價格上漲,從 50.00 BRL到 52.50 BRL,幾年后(2019年),價格已經(jīng)是 100.00 BRL,已經(jīng)上漲到105.00 BRL,價格之間的絕對差分別是2.50 BRL和5.00 BRL,但兩者的百分比差為5%。
當(dāng)我們對這些價格中使用NL時,我們得到:NL (52.50) - NL(50.00) = 3.96 - 3.912 = 0.048或4.8%,同樣地,在第二個價格序列中使用LN時,我們得到:NL (105) - NL(100) = 4.654-4.605 = 0.049或4.9%。
在這個例子中,我們可以通過把幾乎所有的東西都放到相同的基上來減少差異值。
下面還是同一個例子:
price1 = np.log(52.5) - np.log(50)
price2 = np.log(105) - np.log(100)
printf('The percentage variation of the first example is {round(price1*100,1)} and the second is {round(price2*100,1)}')

原始序列與NL序列變換的對比圖:

Box-Cox變換(指數(shù)變換)
Box-Cox轉(zhuǎn)換也是一種轉(zhuǎn)換序列的方法,lambda(λ)的值是用于轉(zhuǎn)換序列的參數(shù)。
簡而言之,這個函數(shù)是幾個指數(shù)變換函數(shù)的結(jié)合,我們需要找到轉(zhuǎn)換序列的lambda的最佳值,使其分布更接近正態(tài)高斯分布。使用此轉(zhuǎn)換的一個條件是序列只有正值,公式為:

接下來我將繪制原始序列及其分布圖,然后用lambda最佳值繪制新的轉(zhuǎn)換序列及其分布圖,為了找到lambda的值,我們將使用庫Scipy的boxcox函數(shù)生成轉(zhuǎn)換的序列和理想lambda值:

下面是一個交互式圖表,在圖中可以更改lambda值和檢查更改:

此工具通常用于提高模型的性能,因為它使模型更趨于正態(tài)分布,記住在完成模型的預(yù)測后,必須根據(jù)以下公式反轉(zhuǎn)轉(zhuǎn)換到原始的基數(shù):

尋找相關(guān)時滯
為了便于預(yù)測,具有單一變量的序列必須具有自相關(guān)性,即,當(dāng)前時段必須是能夠基于較早的時段(滯后)而解釋的。
由于這個序列每周為一周期,1年大約52周,我將使用60的滯后期的自相關(guān)函數(shù)來驗證當(dāng)前周期與這些滯后的相關(guān)性。

通過對上述自相關(guān)圖的分析,似乎所有的滯后都可以用來為未來事件創(chuàng)建預(yù)測,因為它們的正相關(guān)接近1,而且都在置信區(qū)間之外,但這一特征屬于非平穩(wěn)序列。
另一個非常重要的函數(shù)是部分自相關(guān)函數(shù),其中消除了先前的滯后對當(dāng)前區(qū)間的影響,只保留了當(dāng)前區(qū)間滯后的影響來分析,例如:第四個滯后的偏自相關(guān)將消除第一、第二和第三個滯后的影響。
部分自相關(guān)圖如下:

可以看到,幾乎沒有滯后對當(dāng)前周期有影響,但是正如前面所演示的,沒有微分的序列不是平穩(wěn)的,我們現(xiàn)在用一階微分的序列繪制這兩個函數(shù)來展示原理:

自相關(guān)曲線變化顯著,表明該序列僅在第一個滯后期具有顯著相關(guān),在第26個滯后(半年)左右具有負(fù)相關(guān)的季節(jié)效應(yīng)。
為了做出預(yù)測,我們必須注意一個找到相關(guān)的滯后現(xiàn)象的非常重要的細(xì)節(jié),重要的是這種關(guān)聯(lián)背后的原因,因為如果沒有邏輯上的原因,就有可能是偶然的,當(dāng)包含更多的數(shù)據(jù)時,這種關(guān)聯(lián)就會消失。
另一個重點是自相關(guān)和部分自相關(guān)圖對異常值非常敏感,因此分析時間序列本身并與兩個自相關(guān)圖進(jìn)行對比非常重要。
在這個例子中,第一個滯后與當(dāng)前周期具有高度相關(guān)性,因為前一周的價格歷史上沒有顯著變化,在相同的情況下,第26個滯后呈現(xiàn)負(fù)相關(guān),表明與當(dāng)前時期相反的趨勢,可能原因是一年內(nèi)不同時期供需不同。
隨著膨脹率調(diào)整后的序列已經(jīng)趨于平穩(wěn),我們將使用它來創(chuàng)建我們的預(yù)測,下圖是調(diào)整后序列的自相關(guān)和部分自相關(guān)圖:

我們將只使用前兩個滯后作為自回歸序列的預(yù)測因子。
想要了解更多信息的話,杜克大學(xué)教授Robert Nau的網(wǎng)站是與此主題相關(guān)的最佳網(wǎng)站之一。(http://people.duke.edu/~rnau/411home.htm)
模型評價指標(biāo)
為了分析預(yù)測值是否接近當(dāng)前值,必須對誤差進(jìn)行測量,此種情況下的誤差(或殘差)基本上是 Yreal-YpredYreal-Ypred。
對訓(xùn)練數(shù)據(jù)中的錯誤進(jìn)行評估以驗證模型是否具有良好的確定性,然后通過檢查測試數(shù)據(jù)中的誤差(模型未“看到”的數(shù)據(jù))來驗證模型。
當(dāng)將訓(xùn)練數(shù)據(jù)與測試數(shù)據(jù)進(jìn)行對比時,檢查誤差對于驗證你的模型是否過擬合或欠擬合非常重要。
以下是一些用于評估時間序列模型的關(guān)鍵指標(biāo):
平均預(yù)測誤差——偏差(bias)
它只是被評估序列的平均誤差,值可以是正的也可以是負(fù)的。該指標(biāo)表明,模型傾向于預(yù)測實際值以上(負(fù)誤差)還是實際值以下(正誤差),因此也可以說平均預(yù)測誤差是模型的偏差。
MAE——平均絕對誤差
這個指標(biāo)與上面提到的預(yù)測的平均誤差非常相似,唯一的區(qū)別是將誤差的負(fù)值轉(zhuǎn)化為正值,然后計算平均值。
這個指標(biāo)在時間序列中被廣泛使用,因為在一些情況下,負(fù)誤差可以抵消正誤差,使人誤以為模型是準(zhǔn)確的,而在用MAE的情況下不會發(fā)生,因為這個指標(biāo)顯示預(yù)測距離實際值有多遠(yuǎn),不管數(shù)值大還是小,示例如下:
a = np.array([1,2,3,4,5])
b = np.array([5,4,3,2,1])
?error = a - b
? MFE = error.mean()
MAE = np.abs(error).mean()
?print(f'The error of each model value looks like this: {error}')
print(f'The MFE error was {MFE}, the MAE error was {MAE}')</pre>
與MAE和MFE不同,MSE值是平方單位,而不是模型單位。
RMSE——均方根誤差
這個指標(biāo)只是MSE的平方根,使誤差返回到模型的度量單位(BRL/m3),因為它對時間序列在平方過程中產(chǎn)生的較大誤差更為敏感而非常有用。
MAPE——平均絕對百分誤差
這是另一個可用的有趣的指標(biāo),它通常在管理報告中使用,因為誤差是以百分比度量的,所以產(chǎn)品X的錯誤可以與產(chǎn)品Y的誤差進(jìn)行比較。
該指標(biāo)的計算取誤差的絕對值除以當(dāng)前價格,然后計算平均值:

我們來創(chuàng)建一個函數(shù),用幾個評估指標(biāo)來評估訓(xùn)練數(shù)據(jù)和測試數(shù)據(jù)的誤差:
#Libraries to create the function:
from math import sqrt
from sklearn.metrics import mean_squared_error,mean_absolute_error, mean_absolute_error
?
def check_error(orig, pred, name_col='', index_name=''):
bias = np.mean(orig - pred)
mse = mean_squared_error(orig, pred)
rmse = sqrt(mean_squared_error(orig, pred))
mae = mean_absolute_error(orig, pred)
mape = np.mean(np.abs((orig - pred) / orig)) * 100 error_group = [bias, mse, rmse, mae, mape]
serie = pd.DataFrame(error_group, index=['BIAS','MSE','RMSE','MAE', 'MAPE'], columns=[name_col])
serie.index.name = index_name
return serie</pre>
殘差與預(yù)測值(散點圖):
分析這個圖是非常重要的,因為在這個圖中我們可以檢查模式,它可以告訴我們是否需要對模型進(jìn)行一些修改,理想的情況是誤差沿著預(yù)測序列線性分布。
殘差的QQ圖(散點圖):(https://en.wikipedia.org/wiki/Q
總的來說這是一個顯示了殘差在理論上應(yīng)該如何分布的圖形,遵循高斯分布,而不是實際情況。
殘差自相關(guān)(序列圖):
如果沒有置信區(qū)間的值,或者說模型不包含信息。
需要創(chuàng)建另一個函數(shù)來繪制這些圖:
def plot_error(data, figsize=(18,8)):
# Creating the column error
data['Error'] = data.iloc[:,0] -data.iloc[:,1]
plt.figure(figsize=figsize)
ax1 = plt.subplot2grid((2,2), (0,0))
ax2 = plt.subplot2grid((2,2), (0,1))
ax3 = plt.subplot2grid((2,2), (1,0))
ax4 = plt.subplot2grid((2,2), (1,1))
#Plotting actual and predicted values
ax1.plot(data.iloc[:,0:2])
ax1.legend(['Real','Pred'])
ax1.set_title('Real Value vs Prediction')
# Error vs Predicted value
ax2.scatter(data.iloc[:,1], data.iloc[:,2])
ax2.set_xlabel('Predicted Values')
ax2.set_ylabel('Residual')
ax2.set_title('Residual vs Predicted Values')
## Residual QQ Plot
sm.graphics.qqplot(data.iloc[:,2], line='r', ax=ax3)
# Autocorrelation Plot of residual
plot_acf(data.iloc[:,2], lags=60, zero=False, ax=ax4)
plt.tight_layout()
plt.show()
與實際值相比,誤差往往會增加。
許多人還使用這種方法作為基線(baseline),試圖用更復(fù)雜的模型來改進(jìn)。
下面我們將使用訓(xùn)練數(shù)據(jù)和測試數(shù)據(jù)來進(jìn)行模擬:

QQ圖顯示了有一些比理論上要大些(包括正負(fù)值)的殘差,這些是所謂的異常值,但在第一,第六和第七個滯后中仍然存在明顯的自相關(guān),這可以用于改進(jìn)模型。
同樣地,我們現(xiàn)在將在測試數(shù)據(jù)中進(jìn)行預(yù)測。 預(yù)測序列的第一個值將是訓(xùn)練數(shù)據(jù)的最后一個值,然后這些值將按照測試的當(dāng)前值逐步更新,依此類推:

RMSE和MAE的誤差與訓(xùn)練數(shù)據(jù)相似,QQ圖與殘差更符合理論值,可能是由于與訓(xùn)練數(shù)據(jù)相比樣本值較少。
在對比殘差與預(yù)測值的圖表中,我們注意到當(dāng)價格上漲時,誤差絕對值有增加的趨勢,可能用對數(shù)調(diào)整會減少誤差的擴(kuò)大并完成殘差相關(guān)圖,表明由于第一個滯后有很強(qiáng)的相關(guān)性,因此仍有改進(jìn)的空間,可能添加基于第一個滯后的回歸來改進(jìn)預(yù)測。下一個模型是簡單平均值:
簡單平均
另一種預(yù)測方法是使用序列平均值,通常當(dāng)數(shù)值在平均值附近振蕩時,具有常數(shù)的方差,沒有上升或下降趨勢時,這種預(yù)測形式是好的,但是也能使用更好的方法,其中可以使用季節(jié)模式進(jìn)行預(yù)測。
此模型使用數(shù)據(jù)首端直到分析的前一個時期的平均值,并且按天擴(kuò)展到數(shù)據(jù)結(jié)束,最后,趨勢是一條直線,我們現(xiàn)在將此模型與第一個模型的誤差進(jìn)行比較:

在測試數(shù)據(jù)中,我將繼續(xù)使用訓(xùn)練數(shù)據(jù)一開始的均值,并展開添加到測試數(shù)據(jù)上:

簡單均值模型無法捕獲序列的相關(guān)信息,如真實值和預(yù)測值圖中所示,也可以在相關(guān)性和殘差和預(yù)測圖中看到。
簡單滑動平均:
滑動平均是針對給定周期(例如5天)計算的平均值,它是滑動的并始終使用此特定時段進(jìn)行計算,在這種情況下,我們將始終使用過去5天的平均值來預(yù)測下一天的值。

誤差低于簡單平均,但仍高于簡單模型,以下是測試模型:

與訓(xùn)練數(shù)據(jù)相似,滑動平均模型優(yōu)于簡單平均模型,但尚未比簡單模型基礎(chǔ)有所增益。
預(yù)測具有2個時滯的自相關(guān)性,并且相對于預(yù)測值有很大的方差誤差。
指數(shù)滑動平均:
上述簡單滑動平均模型具有同等地處理最后X個觀測值并完全忽略所有先前觀測值的特性。 直觀地說,過去的數(shù)據(jù)應(yīng)該逐漸打折,例如,理論上最近的觀測結(jié)果應(yīng)該比第二近的更重要,而第二近的觀測應(yīng)該比第三近的數(shù)據(jù)更重要,等等, 指數(shù)滑動平均(Exponential Moving Average,EMM)模型就是這樣做的。
由于α(alpha)是一個常數(shù),其值介于0和1之間,因此我們將使用以下公式計算預(yù)測值:

如果預(yù)測的第一個值是相應(yīng)的當(dāng)前值,其他值將更新為實際值與前一個時段的預(yù)測之差的α倍。 當(dāng)α為零時,我們根據(jù)第一個預(yù)測值得到一個常數(shù),當(dāng)α為1時,我們有一個簡單方法的模型,因為結(jié)果是前一個實際周期的值。
下面是幾個α值的圖表:

EMM預(yù)測中的平均數(shù)據(jù)周期為1 /α。 例如,當(dāng)α= 0.5時,滯后相當(dāng)于2個周期; 當(dāng)α= 0.2時,滯后是5個周期; 當(dāng)α= 0.1時,滯后是10個周期,依此類推。
在這個模型中,我們將任意選用α值為0.5,而你可以通過網(wǎng)格搜索算法查找在訓(xùn)練集和驗證集中都中減少了錯誤的α,數(shù)據(jù)大概應(yīng)是這樣:

這個模型的誤差與滑動平均的誤差相似,但是我們需要在測試集對模型進(jìn)行驗證:

在驗證數(shù)據(jù)中,目前為止的誤差在我們已經(jīng)訓(xùn)練過的模型中排名第二,而殘差圖的特征與5天滑動平均模型的特征非常相似。
自回歸
自回歸模型基本上是一個具有顯著相關(guān)滯后的線性回歸,首先要繪制自相關(guān)圖和部分自相關(guān)圖來驗證是否存在相關(guān)關(guān)系。
下面是訓(xùn)練序列的自相關(guān)圖和部分自相關(guān)圖,顯示了自回歸模型的特征為具有2個時滯的顯著相關(guān)性:

接下來我們將根據(jù)訓(xùn)練數(shù)據(jù)創(chuàng)建模型,得到模型的系數(shù)后,將其乘以測試數(shù)據(jù)將要執(zhí)行的值:

這個模型與我們所訓(xùn)練的其他模型相比,誤差最小,現(xiàn)在我們用它的系數(shù)對訓(xùn)練數(shù)據(jù)進(jìn)行逐步預(yù)測:

注意,在測試數(shù)據(jù)中,誤差不會保持穩(wěn)定,甚至?xí)群唵文P透?,可以看到圖中的預(yù)測值幾乎總是低于當(dāng)前值,偏差測量顯示實際值比預(yù)測值高 50.19 BRL, 也許在訓(xùn)練模型中調(diào)整一些參數(shù),這種差異會減小。
要改進(jìn)這些模型,你可以應(yīng)用多個轉(zhuǎn)換,例如本文中介紹的轉(zhuǎn)換,也可以添加外部變量作為預(yù)測源,但是,這已然超出本文內(nèi)容了。
結(jié)束語
每個時間序列模型都有自己的特點,應(yīng)該分別單獨分析,這樣我們就可以提取盡可能多的信息來做出好的預(yù)測,減少未來的不確定性。
檢驗平穩(wěn)度、轉(zhuǎn)換數(shù)據(jù)、在訓(xùn)練數(shù)據(jù)中建立模型、驗證測試數(shù)據(jù)、檢驗殘差是建立良好時間序列預(yù)測的關(guān)鍵步驟。
也可以看看我有關(guān)ARIMA模型的文章。(https://www.kaggle.com/leandrovrabelo/climate-change-forecast-sarima-model)
原文來源: https://medium.com/predict/the-beginners-self-starter-guide-to-ml-6ed40f4df4de
譯文首發(fā)于wx公眾號 @python數(shù)據(jù)之道