機器學(xué)習(xí)和深度學(xué)習(xí)已越來越多應(yīng)用在時序預(yù)測中。ARIMA 或指數(shù)平滑等經(jīng)典預(yù)測方法正在被 XGBoost、高斯過程或深度學(xué)習(xí)等機器學(xué)習(xí)回歸算法所取代。
盡管時序模型越來越復(fù)雜,但人們對時序模型的性能表示懷疑。有研究表明,復(fù)雜的時序模型并不一定會比時序分解模型有效(Makridakis, 2018)。
技術(shù)提升
技術(shù)要學(xué)會分享、交流,不建議閉門造車。
好的文章離不開粉絲的分享、推薦,資料干貨、資料分享、數(shù)據(jù)、技術(shù)交流提升,均可加交流群獲取,群友已超過2000人,添加時最好的備注方式為:來源+興趣方向,方便找到志同道合的朋友。
方式①、添加微信號:dkl88191,備注:來自CSDN
方式②、微信搜索公眾號:Python學(xué)習(xí)與數(shù)據(jù)挖掘,后臺回復(fù):加群
為什么時序預(yù)測很難?
時間序列是按時間排序的值,但時序預(yù)測具有很大的挑戰(zhàn)性。從模型難度和精度角度考慮,時序模型的比常規(guī)的回歸和分類任務(wù)更難。
原因1:序列是非平穩(wěn)的
平穩(wěn)性是時間序列的核心概念,如果時間序列的趨勢(例如平均水平)不隨時間變化,則該時間序列是平穩(wěn)的。許多現(xiàn)有方法都假設(shè)時間序列是平穩(wěn)的,但是趨勢或季節(jié)性會打破平穩(wěn)性。
原因2:依賴外部數(shù)據(jù)
除了時間因素之外,時間序列通常還有額外的依賴性。時空數(shù)據(jù)是一個常見的例子,每個觀察值都在兩個維度上相關(guān),因此數(shù)據(jù)具有自身的滯后(時間依賴性)和附近位置的滯后(空間依賴性)。
原因3:噪音和缺失值
現(xiàn)實世界受到噪音和缺失值的困擾,設(shè)備故障可能會產(chǎn)生噪音和缺失值。傳感器故障導(dǎo)致數(shù)據(jù)丟失,或者存在干擾,都會帶來數(shù)據(jù)噪音。
原因4:樣本量有限
時間序列往往都只包含少量的觀察值,可能沒有足夠的數(shù)據(jù)來構(gòu)建足夠的模型。數(shù)據(jù)采集的頻率影響了樣本量,同時也會遇到數(shù)據(jù)冷啟動問題。
樣本量與模型精度
時序模型往往無法進(jìn)行完美預(yù)測,這可能和時序數(shù)據(jù)的樣本量相關(guān)。在使用較大的訓(xùn)練集時,具有大模型往往比參數(shù)較少的模型表現(xiàn)更好。在時序序列長度小于1000時,深度模型往往并不會比時序分類模型更好。
下面對比了模型精度與樣本個數(shù)的關(guān)系,這里嘗試了五種經(jīng)典方法(ARIMA、ETS、TBATS、Theta 和 Naive)和五種機器學(xué)習(xí)方法(高斯過程、M5、LASSO、隨機森林和 MARS)。預(yù)測任務(wù)是來預(yù)測時間序列的下一個值。
結(jié)果如下圖所示,軸表示訓(xùn)練樣本大小,即用于擬合預(yù)測模型的數(shù)據(jù)量。軸表示所有時間序列中每個模型的平均誤差,使用交叉驗證計算得出。
當(dāng)只有少數(shù)觀測值可用時,基礎(chǔ)方法表現(xiàn)出更好的性能。然而,隨著樣本量的增加,機器學(xué)習(xí)方法優(yōu)于經(jīng)典方法。
進(jìn)一步可以得出以下結(jié)論:
-
機器學(xué)習(xí)方法擁有很強的預(yù)測能力,前提是它們具有足夠大的訓(xùn)練數(shù)據(jù)集;
-
當(dāng)只有少量觀測值可用時,推薦首選 ARIMA 或指數(shù)平滑等經(jīng)典方法;
-
可以將指數(shù)平滑等經(jīng)典方法與機器學(xué)習(xí)相結(jié)合可以提高預(yù)測準(zhǔn)確性。
時序多步預(yù)測
大多數(shù)預(yù)測問題都被定義為單步預(yù)測,根據(jù)最近發(fā)生的事件預(yù)測系列的下一個值。時間序列多步預(yù)測需要預(yù)測未來多個值, 提前預(yù)測許多步驟具有重要的實際優(yōu)勢,多步預(yù)測減少了長期的不確定性。 但模型試圖預(yù)測更遠(yuǎn)的未來時,模型的誤差也會逐漸增加。
方法1:遞歸預(yù)測
多步預(yù)測最簡單的方法是遞歸形式,訓(xùn)練單個模型進(jìn)行單步預(yù)測,然后將模型與其先前的預(yù)測結(jié)果作為輸入得到后續(xù)的輸出。
from sklearn.linear_model import LinearRegression
# using a linear regression for simplicity. any regression will do.
recursive = LinearRegression()
# training it to predict the next value of the series (t+1)
recursive.fit(X_tr, Y_tr['t+1'])
# setting up the prediction data structure
predictions = pd.DataFrame(np.zeros(Y_ts.shape), columns=Y_ts.columns)
# making predictions for t+1
yh = recursive.predict(X_ts)
predictions['t+1'] = yh
# iterating the model with its own predictions for multi-step forecasting
X_ts_aux = X_ts.copy()
for i in range(2, Y_tr.shape[1] + 1):
X_ts_aux.iloc[:, :-1] = X_ts_aux.iloc[:, 1:].values
X_ts_aux['t-0'] = yh
yh = recursive.predict(X_ts_aux)
predictions[f't+{i}'] = yh
上述代碼邏輯在sktime中也可以找到相應(yīng)的實現(xiàn):https://www.sktime.org/en/stable/api_reference/auto_generated/sktime.forecasting.compose.RecursiveTimeSeriesRegressionForecaster.html
遞歸方法只需要一個模型即可完成整個預(yù)測范圍,且無需事先確定預(yù)測范圍。
但此種方法用自己的預(yù)測作為輸入,這導(dǎo)致誤差逐漸累計,對長期預(yù)測的預(yù)測性能較差。
方法2:多目標(biāo)回歸
多目標(biāo)回歸為每一個預(yù)測結(jié)果構(gòu)建一個模型,如下是一個使用案例:
from sklearn.multioutput import MultiOutputRegressor
direct = MultiOutputRegressor(LinearRegression())
direct.fit(X_tr, Y_tr)
direct.predict(X_ts)
scikit-learn的MultiOutputRegressor
為每個目標(biāo)變量復(fù)制了一個學(xué)習(xí)算法。在這種情況下,預(yù)測方法是LinearRegression
。
此種方法避免了遞歸方式中錯誤傳播,但多目標(biāo)預(yù)測需要更多的計算資源。此外多目標(biāo)預(yù)測假設(shè)每個點是獨立的,這是違背了時序數(shù)據(jù)的特點。
方法3:遞歸多目標(biāo)回歸
遞歸多目標(biāo)回歸結(jié)合了多目標(biāo)和遞歸的思想。為每個點建立一個模型。但是在每一步的輸入數(shù)據(jù)都會隨著前一個模型的預(yù)測而增加。
from sklearn.multioutput import RegressorChain
dirrec = RegressorChain(LinearRegression())
dirrec.fit(X_tr, Y_tr)
dirrec.predict(X_ts)
這種方法在機器學(xué)習(xí)文獻(xiàn)中被稱為chaining
。scikit-learn 通過 RegressorChain 類為其提供了一個實現(xiàn)。文章來源:http://www.zghlxwxcb.cn/news/detail-607608.html
參考文獻(xiàn)
Makridakis, Spyros, Evangelos Spiliotis, and Vassilios Assimakopoulos. “Statistical and Machine Learning forecasting methods: Concerns and ways forward.” PloS one 13.3 (2018): e0194889.文章來源地址http://www.zghlxwxcb.cn/news/detail-607608.html
到了這里,關(guān)于分享三種時間序列多步預(yù)測的方法的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!