曹丹陽,馬金鋒
(北方工業(yè)大學(xué)信息學(xué)院,北京 100144)
時(shí)間序列作為一種常見的數(shù)據(jù)形式,在氣象,金融,零售,水文和電力等很多領(lǐng)域有著廣泛的應(yīng)用,也是一個(gè)備受關(guān)注的研究熱點(diǎn)。時(shí)間序列的研究領(lǐng)域主要包括異常檢測,分類,聚類,可視化和預(yù)測。我們關(guān)注的重點(diǎn)是時(shí)間序列的預(yù)測。一個(gè)準(zhǔn)確的時(shí)間序列模型有著巨大的經(jīng)濟(jì)價(jià)值,比如對氣象數(shù)據(jù)的預(yù)測,能夠幫助人們防災(zāi)減災(zāi),對經(jīng)濟(jì)數(shù)據(jù)的預(yù)測,能夠幫助政府提前制定經(jīng)濟(jì)政策。
由于時(shí)間序列的復(fù)雜性,學(xué)者通常使用分解方法是將原始信號分解為幾個(gè)分量,以便更好的分類和回歸[1-3]。這個(gè)想法可以作為借鑒在大多數(shù)時(shí)間序列預(yù)測中,通過將原始時(shí)間序列分解為一組相對簡單的子模態(tài)平穩(wěn)波動(dòng),多尺度集成預(yù)報(bào)能夠增強(qiáng)預(yù)報(bào)能力性能[4]。
學(xué)者們提出了一種“分解與集成”的“分治”框架有效地提高了預(yù)測精度,特別是對具有非線性的序列數(shù)據(jù)和非平穩(wěn)[5]。“分解和集成”框架的主要思想是將原來復(fù)雜的預(yù)測任務(wù)分解為幾個(gè)相對簡單的子任務(wù),然后,每一個(gè)子任務(wù)用單一預(yù)測方法對子任務(wù)進(jìn)行預(yù)測,最后將預(yù)測結(jié)果進(jìn)行匯總作為最終預(yù)測結(jié)果[6-7]。因此,“分解與集成”的框架可以有效地簡化建模的復(fù)雜性。此外,據(jù)報(bào)道,這一框架能達(dá)到更高的預(yù)測精度,更好的方向性預(yù)測和更高的魯棒性,顯示它對復(fù)雜時(shí)間序列的預(yù)測很有前景[8-9]。
STL(Seasonal-Trend decomposition procedure based on Loess)是用于將時(shí)間序列分解為趨勢子序列,季節(jié)子序列和殘差子序列組成部分的過濾算法。 STL算法包括一系列LOESS 平滑。STL對很長的時(shí)間序列中的趨勢和季節(jié)可以做到快速分解。
STL包括內(nèi)部循環(huán)和外部循環(huán),其中內(nèi)部循環(huán)負(fù)責(zé)趨勢成分和周期成分的計(jì)算。
內(nèi)部循環(huán)的步驟如下。
經(jīng)驗(yàn)?zāi)B(tài)分解(EMD)是一種自適應(yīng)方法,可通過反復(fù)減去包絡(luò)線來連續(xù)消除振蕩。對于信號xt,EMD算法包括以下步驟。
(1)使用三次樣條連接順序局部最大值(分別為最小值)以得出上部(相應(yīng)為下部)包絡(luò)線。
(2)通過平均上下包絡(luò),得出包絡(luò)的中值mt。
(3)提取臨時(shí)局部振蕩ht=xt-mt。
(4)對臨時(shí)局部振蕩ht重復(fù)步驟(1)-(3),直到mt接近零。那么,ht是記為ct的IMF。
(5)計(jì)算殘差rt=xt-ct。
(6)使用xt的rt重復(fù)步驟(1)至(5),以生成下一個(gè)IMF和殘差。因此,原始信號xt可以通過以下公式重建。
其中xt是第i個(gè)IMF,xt是第n個(gè)殘差(即本地趨勢)。
我們提出的模型主要包括時(shí)間序列分解和時(shí)間序列預(yù)測兩部分,其中時(shí)間序列分解基于STL分解和EMD分解。針對STL方法分解得到的周期項(xiàng)是固定振幅的周期項(xiàng),以及對于EMD分解的多個(gè)IMF,無法準(zhǔn)確區(qū)分趨勢項(xiàng)和周期項(xiàng),我們先使用STL方法進(jìn)行分解時(shí)間序列得到趨勢項(xiàng),周期項(xiàng)和殘差項(xiàng),對分解后的周期項(xiàng)和殘差項(xiàng)使用EMD方法再次分解,最后對分解得到的時(shí)間序列使用LSTM方法進(jìn)行時(shí)間序列建模預(yù)測。
算法的流程圖如下。
為了驗(yàn)證我們提出的STL-EMD分解方法的有效性以及對后續(xù)預(yù)測模型的影響,我們設(shè)計(jì)了如下的實(shí)驗(yàn)。
構(gòu)造一條由三種基本成分組成的時(shí)間序列。
對時(shí)間序列使用STL-EMD分解方法進(jìn)行分解,然后建立時(shí)間序列模型。
對時(shí)間序列只使用STL和EMD方法進(jìn)行時(shí)間序列分解,然后建立時(shí)間序列模型,作為對照實(shí)驗(yàn)。
我們按照公式5構(gòu)造仿真數(shù)據(jù),仿真數(shù)據(jù)的效果如圖2所示。
如圖3所示,我們使用STL-EMD分解方法將時(shí)間序列數(shù)據(jù)分解為趨勢項(xiàng)、周期項(xiàng)和殘差項(xiàng)。然后對趨勢項(xiàng),周期項(xiàng)和殘差項(xiàng)分別使用Keras構(gòu)建32層的LSTM網(wǎng)絡(luò)。LSTM的訓(xùn)練樣本和測試樣本形式均為前10個(gè)數(shù)據(jù)預(yù)測第11個(gè)數(shù)據(jù)。在進(jìn)行500次迭代訓(xùn)練后,三個(gè)模型均收斂,預(yù)測結(jié)果和定標(biāo)參數(shù)時(shí)間序列的對比結(jié)果如圖4所示。
圖3 使用STL-EMD分解效果
圖4 使用LSTM預(yù)測效果
如表1所示,為了更精準(zhǔn)的評估模型,我們使用均方誤差,平均絕對誤差來精確衡量模型的效果。相較于STLLSTM,EEMD-LSTM,我們提出的STL-EEMD-LSTM預(yù)測模型有較好的預(yù)測效果。
表1 模型誤差
使用我們提出的STL-EMD-LSTM模型比單一的使用LSTM模型能夠得到更高的準(zhǔn)確度。這說明時(shí)間序列的分解方法有利于構(gòu)建時(shí)間序列的預(yù)測模型。
STL分解方法可以得到較為準(zhǔn)確的趨勢項(xiàng),但不能得到具有變動(dòng)振幅特征的周期項(xiàng),使用EMD分解方法再次分解可以一定程度上解決這個(gè)問題。