在時(shí)間序列預(yù)測(cè)中,臟亂數(shù)據(jù)的存在會(huì)影響最終的預(yù)測(cè)結(jié)果。這是肯定的,尤其是在這個(gè)領(lǐng)域,因?yàn)闀r(shí)間依賴性在處理時(shí)間序列時(shí)起著至關(guān)重要的作用。
噪音或異常值必須按照特別的解決方案小心處理。在這種情況下,tsmoothie包可以幫助我們節(jié)省大量時(shí)間來準(zhǔn)備用于分析的時(shí)間序列。Tsmoothie是一個(gè)用于時(shí)間序列平滑和離群值檢測(cè)的Python庫(kù),它可以以向量化的方式處理多個(gè)序列。它很有用,因?yàn)樗梢蕴峁┪覀冃枰念A(yù)處理步驟,如去噪或離群值去除,保留原始數(shù)據(jù)中的時(shí)間模式。
在這篇文章中,我們使用這些小工具來改進(jìn)預(yù)測(cè)任務(wù)。更準(zhǔn)確地說,我們?cè)噲D預(yù)測(cè)太陽(yáng)能電池板的日發(fā)電量。最后,我們期望能從去噪過程中獲益,并產(chǎn)生比未進(jìn)行預(yù)處理的情況更好的預(yù)測(cè)。
數(shù)據(jù)
Kaggle上有一個(gè)真實(shí)的數(shù)據(jù)集。這些數(shù)據(jù)存儲(chǔ)了安裝在私人住宅屋頂上的太陽(yáng)能電池板每天的發(fā)電量。數(shù)據(jù)記錄自2011年,以時(shí)間序列的形式呈現(xiàn)3個(gè)不同的來源:
· 房子每天的煤氣消耗量。
· 房屋的日常耗電量。當(dāng)值為負(fù)值時(shí),表示太陽(yáng)能超過當(dāng)?shù)氐碾娏ο摹?/p>
· 功率表在直流到交流轉(zhuǎn)換器上的日值。這是當(dāng)前累積的太陽(yáng)能。我們不需要累積值,相反,我們需要絕對(duì)的日值,因此,我們做了一個(gè)簡(jiǎn)單的區(qū)分。這是我們要預(yù)測(cè)的目標(biāo)。

正如我們可以從原始系列的情節(jié)中注意到的,有很多噪音存在。這是正常的數(shù)據(jù)登記的傳感器。如果我們的數(shù)據(jù)源受到外部氣象條件的影響,或者傳感器質(zhì)量不佳,位置不理想,情況會(huì)更糟。
幸運(yùn)的是,我們有知識(shí)和工具來實(shí)現(xiàn)我們的預(yù)測(cè)任務(wù)的良好結(jié)果。
時(shí)間序列平滑
我們工作流程中的第一步是時(shí)間序列預(yù)處理。我們的戰(zhàn)略非常直觀和有效。我們?nèi)∧繕?biāo)時(shí)間序列(發(fā)電量),并用一種奇妙的工具使其平滑:卡爾曼濾波器,這是每個(gè)數(shù)據(jù)科學(xué)家都必須知道的。
一般來說,在時(shí)間序列任務(wù)中,使用卡爾曼濾波的最大優(yōu)點(diǎn)是可以使用狀態(tài)空間形式來表示未觀察到的組件模型。以狀態(tài)空間形式表示時(shí)間序列模型的范圍是可用性的一套通用算法(包括卡爾曼濾波),用于計(jì)算高斯似然,可以在數(shù)值上最大化,得到模型參數(shù)的最大似然估計(jì)。著名的軟件使用這種表示來匹配像ARIMA這樣的模型并非偶然。在我們的特殊情況下,我們使用卡爾曼濾波器和狀態(tài)空間表示來構(gòu)建一個(gè)未觀察組件模型。
到目前為止所解釋的一切聽起來可能很棘手,但我想向您保證……Tsmoothie可以輕松地構(gòu)建未觀察到的組件模型,以非常簡(jiǎn)單和有效的方式操作定制的Kalman平滑。在這個(gè)階段,我們可以釋放我們的想象力,從水平、趨勢(shì)、季節(jié)性、長(zhǎng)季節(jié)性中發(fā)現(xiàn)哪些成分有助于創(chuàng)建我們正在觀察的時(shí)間序列。365天的水平和漫長(zhǎng)的季節(jié)對(duì)我們來說很好。我們只需為每個(gè)組件假設(shè)添加一個(gè)"置信度",就完成了。

卡爾曼平滑的可視化展示
結(jié)果平滑的時(shí)間序列保持相同的時(shí)間模式存在于原始數(shù)據(jù),但具有一致和合理的降噪。
專業(yè)提示:如果我們的系列中包含nan,這不是一個(gè)問題,卡爾曼平滑會(huì)工作得非常好,它是一個(gè)非常強(qiáng)大的工具,以填補(bǔ)我們的數(shù)據(jù)空白……這是卡爾曼平滑的美麗。
時(shí)間序列預(yù)測(cè)
第二步是建立一個(gè)神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)來預(yù)測(cè)未來幾天的發(fā)電量。首先對(duì)原始數(shù)據(jù)擬合模型,然后對(duì)平滑后的序列進(jìn)行擬合。平滑數(shù)據(jù)僅作為目標(biāo)變量使用,所有輸入序列保持原始格式。使用平滑標(biāo)簽的目的是為了幫助模型更好地捕捉真實(shí)模式和去除噪聲。
我們選擇一個(gè)LSTM自動(dòng)編碼器來預(yù)測(cè)接下來的5個(gè)日發(fā)電量值。訓(xùn)練程序使用keras-hypetune進(jìn)行。該框架以非常直觀的方式提供了神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)的超參數(shù)優(yōu)化。我們對(duì)一些參數(shù)組合進(jìn)行網(wǎng)格搜索。

我們可以想象,預(yù)測(cè)誤差與時(shí)間范圍有關(guān)。對(duì)第二天的預(yù)測(cè)比對(duì)未來五天的預(yù)測(cè)更準(zhǔn)確。重要的一點(diǎn)是,平滑過程提供了很大的好處,在預(yù)測(cè)精度的所有時(shí)間跨度。

總結(jié)
在這篇文章中,我們利用了預(yù)測(cè)場(chǎng)景中的時(shí)間序列平滑。應(yīng)用卡爾曼濾波平滑使得原始數(shù)據(jù)和減少噪聲的存在。這種選擇在預(yù)測(cè)精度方面被證明是有利的。我還想指出卡爾曼濾波在這個(gè)應(yīng)用程序中的威力,以及它在構(gòu)建未觀察組件模型時(shí)是一個(gè)很好的工具的能力。
本文代碼:github/cerlymarco/MEDIUM_NoteBook
作者:Marco Cerliani
deephub翻譯組