羅曉牧 弓偉 門韶洋
時間序列預(yù)測是機器學(xué)習(xí)中一個非常重要的方向。本文主要介紹了在不同領(lǐng)域中訓(xùn)練基于PyTorch 的時間序列模型中的要點,包括對問題的限定、數(shù)據(jù)的預(yù)處理、模型的選擇等,對于系統(tǒng)性能的提升有一定的指導(dǎo)作用。
時間序列預(yù)測是一個富有挑戰(zhàn)的領(lǐng)域。使用FlowForecast [1],可以用于訓(xùn)練出數(shù)百個基于 PyTorch 的時間序列預(yù)測模型,用于不同范圍的數(shù)據(jù)集,如河流的流量,COVID-19,太陽能,風(fēng)能等。本文主要討論了訓(xùn)練這些時間序列模型時的要點。
1.對問題加以限定
對于使用基于機器學(xué)習(xí)的時間序列模型,通常有不同的定義:
a)異常檢測:這是用于在時間序列中檢測出異常值的通用方法。然而“異常值”通常只出現(xiàn)在數(shù)據(jù)集中的很小一部分,但卻與其它數(shù)據(jù)點截然不同。雖然二值檢測通常那被認為是另外一個領(lǐng)域,異常檢測可以被認為是二值檢測的極端形式。大部分的異常檢測都是無監(jiān)督學(xué)習(xí),因為我們通常只有在異常數(shù)據(jù)出現(xiàn)時才有可能判別出那是異常的數(shù)據(jù)。
b)時間序列分類:與其他形式的分類問題類似,我們將時間序列中的一段拿出來,然后將它分成某一類。與異常檢測不同,通常每一類樣本的數(shù)量都更加平衡(盡管有時候有些傾斜,如 10%,80%,10%)。
c)時間序列預(yù)測:通常指的是預(yù)測時間序列數(shù)據(jù)中的下一個值,或后面的 n 個值。這也是本文分析的重點。
D)時間序列分析:這是一個可用于包括以上各個分類的詞。然而,通常可以認為是檢查整個時間序列數(shù)據(jù),比較不同的時間結(jié)構(gòu),然后設(shè)計出一個預(yù)測的模型。例如,如果設(shè)計出一個時間序列的預(yù)測模型,那么就可以得出時間序列中的因果關(guān)系因子,然后做出更深入的時間序列分析。
在開始之前,我們應(yīng)該明確問題是一個預(yù)測問題,還是一個分類問題。有時候?qū)⒁粋€預(yù)測問題變成一個分類問題更加合適。例如,預(yù)測的具體值并不重要時,可以將其分入某個區(qū)間變成一個分類的問題。更進一步,應(yīng)該明確部署的問題,并明白最終的產(chǎn)品是什么。如果是需要一個毫秒級延時的股票交易系統(tǒng),那么 20 層的 transformer 模型就一定不能滿足標(biāo)準(zhǔn)。
2.數(shù)據(jù)質(zhì)量與預(yù)處理:
a)通常要對數(shù)據(jù)歸一化:在 99%的情況下,數(shù)據(jù)歸一化或者正則化都能提高系統(tǒng)的性能。使用 FlowForecast 可以很方便地實現(xiàn)這一步。缺少了數(shù)據(jù)歸一化,會出現(xiàn)損失函數(shù)爆炸的情況,尤其當(dāng)訓(xùn)練某些 transformer 的時候。
b)重新檢查空值,不恰當(dāng)編碼或者缺失的值:由于數(shù)據(jù)的質(zhì)量問題,會導(dǎo)致浪費很多的時間。有時候缺失值會使用一種奇怪的方式進行編碼。例如,有的氣象站將缺失的降雨值設(shè)置為-9999。這會導(dǎo)致很多的問題,因為一般的缺失值檢查處理不了這個問題。FlowForecast 中提供了對缺失值進行插值的模塊,也能對可能不正確的錄入數(shù)據(jù)進行警告。
c)開始只使用少量的特征:通常開始使用較少的特征,然后根據(jù)性能增加特征是更好的做法。例如,當(dāng)預(yù)測 COVID 的變異時,開始僅僅使用死亡數(shù)據(jù)和新增數(shù)據(jù)。隨著時間的推移熟悉了超參數(shù)之后,可以增加天氣的數(shù)據(jù)。
3.模型選擇和超參數(shù)選擇
a)對于時間的滯后項進行可視化分析:在時間序列分析中,將不同的時間滯后項輸入模型將導(dǎo)致不同的結(jié)果。通過調(diào)整參數(shù),模型的結(jié)構(gòu)改變,能學(xué)習(xí)到更長的依賴關(guān)系。然而,確定初始的范圍是十分必要的。在某些情況下,長的依賴關(guān)系并沒有什么作用。
b)以 DA-RNN 開始建模:使用DA-RNN可以得到一個很強的基準(zhǔn)值。使用 transformers 可以超越 DA-RNN,但是那通常需要更多的數(shù)據(jù),以及更加仔細的調(diào)參。
c)確定預(yù)測的長度:這是一個需要使用技巧搜索的超參數(shù)調(diào)整問題。這個問題是要確定模型一次預(yù)測的時間步長。可以基于上一次的預(yù)測結(jié)果疊加出更長的預(yù)測。一方面,如果要預(yù)測出更長的時間范圍,可以直接將預(yù)測的誤差加權(quán)加入損失函數(shù);另一方面,使用太長的時間預(yù)測將使得模型的性能下降。在大部分的預(yù)測中,更短的預(yù)測時間通常效果更好。
d)以較低的學(xué)習(xí)率開始:對于大部分的時間預(yù)測模型,使用較低的學(xué)習(xí)率。
e)Adam 算法通常并不是最好的:在有的情況下,別的優(yōu)化算法表現(xiàn)更好。例如,Bertadam 對于 transformer 型的模型比較好,一般的優(yōu)化算法對DA-RNN 就足夠了。
4.魯棒性
a)在不同的實驗場景進行仿真并分析。在不同的環(huán)境下對時間序列進行預(yù)測相對簡單,例如,要預(yù)測河流的流量,可以嘗試輸入比較大的降雨量,看模型的輸出。
b)仔細檢查熱力圖和其他可解釋性度量。當(dāng)模型表現(xiàn)相對比較好的時候,要通過熱力圖檢查模型是否使用重要的特征。如果不是,模型則不是使用真實的特征之間的因果關(guān)系,而僅僅只是記住了某些特征。
5.結(jié)論
時間序列預(yù)測是一個富有挑戰(zhàn)的領(lǐng)域,尤其是基于機器學(xué)習(xí)的模型。本文所提到的要點對于提高系統(tǒng)的性能有一定幫助。
參考文獻
[1] https://github.com/AIStream-Peelout/flow-forecast
作者簡介:羅曉牧(出生年月:1980-),性別:男,廣東省廣州市(籍貫),現(xiàn)職稱:副教授,學(xué)歷:工科博士研究生畢業(yè),研究方向:機器學(xué)習(xí),無線傳感器網(wǎng)絡(luò),生物信息獲取。廣州中醫(yī)藥大學(xué)醫(yī)學(xué)信息工程學(xué)院.