【时序】M4竞赛冠军方案:一种用于时间序列预测的指数平滑和递归神经网络的混合方法
論文名稱:A hybrid method of exponential smoothing and recurrent neural networks for time series forecasting
論文下載:https://www.sciencedirect.com/science/article/pii/S0169207019301153
論文年份:2020
論文被引:273(2022/04/30)
論文代碼:https://github.com/M4Competition/M4-methods
論文總結
論文組織
【時間序列預測的兩種建模方法】:
- 交叉學習:使用多個序列訓練單個模型。
- 標準的統計時間序列算法:為每個序列訓練一個單獨的模型。
【本文提出的方法概述?】
本文提出的是一種混合方法,將指數平滑模型和LSTM相結合,其中預處理參數來自(略微簡化)指數平滑族中一些模型的更新公式。ES 方程使該方法能夠有效地捕獲單個序列的主要成分,例如季節性和水平,而 LSTM 網絡允許非線性趨勢和交叉學習。在這方面,以分層方式利用數據,這意味著同時利用局部和全局組件來提取和組合序列或數據集級別的信息,從而提高預測準確性。該方法具有以下兩個特殊特征:
- 它是混合的,從某種意義上說,統計建模(ES 模型)與 ML 算法(LSTM 網絡)同時結合。
- 它本質上是分層的,從某種意義上說,全局(適用于所有序列的大子集)和局部(分別適用于每個序列)參數被用來實現交叉學習,同時也強調被預測時間序列的特殊性。
這種混合預測方法具有三個主要要素:
-
i)去季節化和自適應標準化(deseasonalization and adaptive normalization)
-
ii)預測的生成(generation of forecasts)
-
iii)集成(ensembling)
【本文提出的方法細節?】
使用指數平滑模型進行去季節性,因為數據沒有給出各時間序列。另外,神經網絡對于輸入數據的微小變化不敏感,在兩個差異比較大的區間,歸一化后相差無幾,這導致丟失趨勢。因此,歸一化應該是自適應和局部的。其實現也很簡單,即使用每一個時間窗口內水平的最后一個值最為被除數,將窗口內的每個值除以它即可。至于去季節性,是假設乘法季節性,將時間序列除以指數平滑學習到的季節性分量實現。
本文使用的 LSTM 有三種,分別為一般LSTM,膨脹LSTM和注意力LSTM。
同時使用了不同的模型集成策略,稱為專家組合,其主要思想是,當數據集包含來自未知來源的大量序列時,有理由假設這些序列可能被分組為子集,這樣,如果對每個組使用單獨的模型而不是對整個數據集使用單一模型,則整體預測準確性將會提高。專家集成算法同時訓練多個模型 (神經網絡和每序列參數),并迫使它們專注于序列的子集。該算法在 3.2.2 介紹。此外,還是使用不同epoch得到的模型進行集成,例如使用最后五個epoch訓練得到模型進行集成。
Abstract
This paper presents the winning submission of the M4 forecasting competition. The submission utilizes a dynamic computational graph neural network system that enables a standard exponential smoothing model to be mixed with advanced long short term memory networks into a common framework. The result is a hybrid and hierarchical forecasting method.
本文介紹了 M4 預測競賽的獲獎作品。該提交利用動態計算圖神經網絡系統,使標準指數平滑模型能夠與先進的長期短期記憶網絡混合到一個通用框架中。結果是一種混合和分層的預測方法。
1. Introduction
近幾十年來,神經網絡 (NN) 和其他機器學習 (ML) 算法在各個領域取得了顯著成功,包括圖像和語音識別、自然語言處理 (NLP)、自動駕駛汽車和游戲 (Makridakis, 2017) 等。它們成功的關鍵在于,在給定大型代表性數據集的情況下,ML 算法可以學習識別復雜的非線性模式并探索非結構化關系,而無需先驗地假設它們。因此,ML 算法不受假設或預定義的數據生成過程的限制,這允許數據自己說話。
然而,在預測方面,ML 的優勢并不明顯。雖然 ML 算法在能源預測 (Dimoulkas, Mazidi, & Herre, 2019) 等一些應用中取得了成功 (Weron, 2014),在這些應用中,被預測的(extrapolated)序列通常很多、很長并且伴隨著解釋變量,但 ML 算法的性能在更典型的時間序列預測中,數據可用性通常有限且回歸量不可用,往往低于預期(Makridakis、Spiliotis 和 Assimakopoulos,2018b)。尚未為時間序列預測創建流行的 ML 算法,并且需要對時間序列數據進行預處理才能將它們用于預測。
ML 算法的優勢,實際上是它們成功使用的要求,是交叉學習(cross-learning),即使用許多序列來訓練單個模型。這與標準的統計時間序列算法不同,后者為每個序列開發了一個單獨的模型。但是,為了跨多個時間序列學習,需要仔細考慮預處理。 NNs 在這方面特別敏感,稍后將進行擴展。
關于預處理有很多好的規則,但它仍然是一門實驗密集型的藝術。這種方法在 M4 比賽中取得成功的最重要因素之一是動態預處理,這是訓練過程的固有部分。至關重要的是,這種預處理的參數正在通過與 NN 的權重相同的整體優化程序(隨機梯度下降)進行更新,其總體目標是準確預測(最小化預測誤差)。
實際上,預處理參數來自(略微簡化)指數平滑族中一些模型的更新公式。因此,這里介紹的是一種混合預測方法,它將指數平滑 (ES) 模型與高級長短期記憶 (LSTM) 神經網絡混合在一個通用框架中。 ES 方程使該方法能夠有效地捕獲單個序列的主要成分,例如季節性和水平,而 LSTM 網絡允許非線性趨勢和交叉學習。在這方面,以分層方式利用數據,這意味著同時利用局部和全局組件來提取和組合序列或數據集級別的信息,從而提高預測準確性。
本文的其余部分安排如下。第 2 節介紹了該方法并在一般意義上對其進行了描述,而第 3 節給出了更多的實現細節。第 4 節最后概述了最近 NN 系統和概率編程語言提供的一些通用建模可能性,并在此背景下追溯了本文中描述的模型的發展。
2. Methodology
2.1. Intuition and overview of the hybrid method
該方法有效地將 ES 模型與 LSTM 網絡相結合,從而提供比純統計或 ML 方法生成的預測更準確的預測,從而在利用它們的優勢的同時避免它們的缺點。這種混合預測方法具有三個主要要素:
-
i)去季節化和自適應標準化(deseasonalization and adaptive normalization)
-
ii)預測的生成(generation of forecasts)
-
iii)集成(ensembling)
第一個元素是用狀態空間 ESstyle 公式實現的。初始季節性分量(例如,季度序列設置為 4)和平滑系數(在單個季節性系統的情況下,設置為 2)是每個序列的參數,并通過隨機梯度下降 (SGD) 與全局 NN 權重一起擬合。了解這些參數和序列的值可以計算季節性成分和水平,并將其用于去季節性化和標準化。季節性序列的去季節化在 M4 比賽中非常重要,因為序列是作為沒有任何時間戳的數字向量提供的,因此無法結合星期幾或月份數字等日歷特征。此外,該序列來自許多來源,因此它們的季節性模式各不相同。
第二個元素是一個神經網絡(NN),它對去季節化和標準化數據進行操作,提供未來的視野步長(例如,在每月序列的情況下為 18 個點)輸出,這些輸出隨后被重新標準化和重新季節性化以產生預測。 NN 是全局的,可以跨多個時間序列進行學習。
最后一個元素是集成上一步中的預測。這包括集成由多個獨立運行的單個模型產生的預測,有時由同時訓練的模型的一個子集產生,以及對最近訓練時期產生的預測進行平均。該過程進一步增強了該方法的穩健性,減輕了模型和參數的不確定性(Petropoulos, Hyndman, & Bergmeir, 2018),同時還利用了組合的有益效果(Chan & Pauwels, 2018)。
基于以上所述,可以說該方法具有以下兩個特殊特征:
- 它是混合的,從某種意義上說,統計建模(ES 模型)與 ML 算法(LSTM 網絡)同時結合。
- 它本質上是分層的,從某種意義上說,全局(適用于所有序列的大子集)和局部(分別適用于每個序列)參數被用來實現交叉學習,同時也強調被預測時間序列的特殊性。
2.2. Method description
2.2.1. Deseasonalization and normalization
M4 時間序列,即使在同一頻率(例如每月)子集中,也來自許多不同的來源,并表現出季節性模式。此外,沒有提供該序列的開始日期。在這種情況下,NN 無法學習如何有效地處理季節性問題。一個標準的補救措施是在預處理時應用去季節化。該解決方案足夠但并不理想,因為它將預處理與預測完全分開,并且分解的質量可能在接近序列末尾時最差,在該序列中它對預測最重要。人們還可以觀察到,去季節化算法,無論多么復雜和強大,都不是為 NN 設計的好的預處理器。經典統計模型,例如來自指數平滑序列的統計模型,展示了一種更好的方法:預測模型具有處理季節性的組成部分。
在包括 LSTM 在內的大多數 NN 變體中,權重 wij 的更新大小與最終誤差成正比,但也與相關信號強度的絕對值(從當前層的神經元 i 到下一層的神經元 j)成正比。因此,NN 的行為類似于模擬設備,即使在數字計算機上實現也是如此:小值輸入在學習過程中的影響很小。將每個序列全局標準化為 [0-1] 之類的區間也是有問題的,因為要預測的值可能位于此范圍之外,更重要的是,對于在其生命周期內變化很大的序列,序列中具有小的值將被忽略。最后,關于趨勢強度的信息丟失了:兩個序列的長度和形狀相似,但一個從 100 增長到 110,另一個從 100 增長到 200,在 [0-1] 標準化后看起來非常相似。因此,雖然歸一化是必要的,但它應該是自適應的和局部的,其中“歸一化器”遵循序列值。
2.2.2. Exponential smoothing formulas
請記住,M4 序列都具有正值,因此選擇了具有乘法季節性的 Holt (Gardner, 2006) 和 Holt and Winters (Hyndman, Koehler, Ord, & Snyder, 2008) 模型。然而,這些通過消除線性趨勢得到了簡化:NN 的任務是產生一個最有可能是非線性的趨勢。此外,根據數據的頻率,使用了非季節性(年度和每日數據)、單季節(每月、每季度和每周數據)或雙季節(每小時數據)模型(Taylor,2003)。每種情況的更新公式如下:
參數說明:
- yty_tyt? :序列在點 ttt 處的值
- ltl_tlt? :水平分量
- sts_tst? :季節性分量
- utu_tut? :第二季節性分量
- KKK :每個季節期間的觀察次數,即對于季度,其值為 4,對于每月,其值為 12,對于每周,其值為 52。
- LLL 是季節性周期內每秒的觀察次數(對于每小時數據,為 168)。
- sts_tst? 和 utu_tut? 始終為正,而平滑系數 ααα、βββ 和 γγγ 取值介于 0 和 1 之間。通過將 exp()exp()exp() 應用于初始季節性分量的基礎參數,并將 sigmoid()sigmoid()sigmoid() 應用于平滑系數的基礎參數,可以輕松實現這些限制。
2.2.3. On-the-fly preprocessing
上述公式允許為每個序列的所有點計算水平和季節性分量。然后,這些組件在動態預處理期間用于去季節化和自適應歸一化。此步驟是該方法的關鍵部分,在本節中進行了描述。
每個序列都針對每個訓練時期重新進行預處理,因為參數(初始季節性分量和平滑系數)以及結果水平和季節性分量在每個時期都不同。
應用了恒定大小、滾動輸入和輸出窗口的標準方法,如圖 1 所示,對于每月序列的情況。輸出窗口的大小始終等于預測范圍(例如,每周序列為 13),而輸入窗口的大小由一個規則確定,對于季節性序列,它應該至少覆蓋一個完整的季節性周期(例如,在季度序列的情況下 ≥ 4),而對于非季節性序列,輸入窗口的大小應接近預測范圍。但是,確切的大小是在進行實驗(回測)之后定義的。請注意,與許多其他基于循環神經網絡 (RNN) 的序列處理系統不同,輸入大小大于 1。這效果更好,因為它允許 NN 直接接觸該序列的直接歷史。
預處理相當簡單:在每一步中,輸入和輸出窗口中的值通過將它們除以輸入窗口中水平的最后一個值(圖 1 上的粗藍點)進行歸一化,然后,在這種情況下季節性時間序列,進一步除以相關的季節性成分。這導致輸入和輸出值接近 1,而與序列的原始幅度及其歷史無關。最后,應用了一個壓縮函數 log()。壓縮函數可防止異常值對學習產生過大且令人不安的影響。
此外,時間序列的域(例如金融或宏觀)被獨熱編碼為六長向量,并附加到時間序列派生的特征上。域信息是唯一可用的元信息,我認為將 NN 暴露給它是謹慎的。
在對 NN 進行預處理時,通常值得增加輸入窗口的大小并提取更復雜的特征,例如季節性強度或可變性,但由于多種原因,這里沒有采用這種方法。最重要的是,許多序列太短而無法提供大的輸入窗口,這意味著它們不能用于回測。另一個原因是,創建有效總結序列特征的特征(無論其長度如何)并不簡單。直到比賽結束后,我才注意到一個名為 tsfeatures 的有前途的 R 包(Hyndman, Wang, & Laptev, 2015; Kang, Hyndman, & Smith-Miles, 2017)。
2.2.4. Forecast by NNs
如上所述,NNs 在去季節化、自適應歸一化和壓縮值上運行。他們的輸出需要通過以下方式“展開”:
對于非季節性模型:
其中 x 是預處理的輸入(向量),NN(x) 是 NN 輸出(向量),lt 是時間 t(最后一個已知數據點)的水平值,h 是預測范圍。所有操作都是元素級的。以上總結在圖 2 中。
請注意,最終預測實際上是許多此類預測的集合,該過程將在本文后面解釋。
2.2.5. Architectures of neural networks
為了更好地理解實現,將預測系統的參數分為以下三組:
- 局部常數:這些參數反映了單個序列的行為;在我們瀏覽該序列時,它們不會改變。例如,ES 模型的平滑系數以及初始季節性分量是局部不變(恒定)參數。
- 局部狀態:這些參數隨著時間的推移而變化。例如,水平和季節成分,以及循環的 NN 狀態,都是局部狀態。
- 全局常數:這些參數反映了在大序列集合中學習到的模式,并且是常數;它們不會在我們瀏覽序列內容時發生變化。例如,用于 NN 系統的權重是全局常數。
典型的統計時間序列方法是在單個序列上訓練的,這意味著它們只涉及局部常數和局部狀態參數。另一方面,標準 ML 方法通常在大型數據集上進行訓練,僅涉及全局參數。這里描述的混合方法使用所有三種類型的參數,部分是全局的,部分是特定于時間序列的。通過使用動態計算圖 (dynamic computation graph, DCG) 系統,這種類型的建模成為可能,例如 DyNet (Neubig, Dyer, Goldberg, Matthews, Ammar, Anastasopoulos, et al., 2017), PyTorch (Paszke, Gross, Chintala, Chanan , Yang, DeVito, et al., 2017) 和 TensorFlow 在“急切模式”(Abadi, Agarwal, Barham, Brevdo, Chen, Citro, et al., 2015)。靜態和動態計算圖系統之間的區別在于后者能夠為每個樣本重新創建計算圖(由 NN 系統在幕后構建),這里是每個時間序列。因此,每個序列可能具有部分唯一和部分共享的模型。對于每種頻率和輸出類型(點預測或預測間隔),部署的架構都不同。
在高層次上,模型的神經網絡是 dilated (膨脹的) LSTM-based 堆棧 (Chang, Zhang, Han, Yu, Guo, Tan, et al., 2017),有時后跟一個非線性層,并且總是后跟一個線性“適配器 (adapter)”層,其目標是使最后一層的狀態大小適應輸出層的大小 (預測范圍,或者在預測區間 (PI) 模型的情況下是預測范圍的兩倍)。LSTM堆棧由許多塊 (這里是1–2) 組成。在兩個 (理論上更多) 塊的情況下,使用 Resnet 風格的快捷方式將一個塊的輸出添加到下一個塊的輸出。每個塊都是一到四層的序列,屬于三種類型的膨脹 LSTMs之一:標準 (Chang et al., 2017),具有注意機制 (Qin, Song, Chen, Cheng, Jiang, & Cottrell, 2017) 和特殊殘差版本 (Kim, El-Khamy, & Lee, 2017)。
膨脹 LSTM 使用來自先前(但不一定是最新)步驟的隱藏狀態作為其輸入的一部分。在標準LSTMs和相關單元中,t 時刻的部分輸入是來自步驟 t-1 的隱藏狀態。在膨脹因子為 k 的單元中,隱藏狀態取自步驟 t-k,例如 k=3,這里是 t-3。這提高了長期記憶性能。按照膨脹 LSTM 的慣例 (Chang et al., 2017),它們被部署在具有不斷增加的擴張的單元堆棧中。類似的標準非膨脹 LSTM 塊的表現稍差。如果將循環神經網絡替換為非循環神經網絡,性能會出現更大的下降,這表明循環神經網絡狀態對于更一般地處理時間序列和序列很有用。
循環 NN 注意力機制的一般思想是,不是像標準 LSTM 中那樣使用先前的隱藏狀態,也不是像擴張 LSTM 那樣使用延遲狀態,而是計算應用于多個過去隱藏狀態的權重為了創建一個人為的加權平均狀態。這允許系統動態地 “關注” 特定的單個狀態或一組過去的狀態。我的實現是膨脹 LSTM 的擴展,因此最大后視范圍等于擴張。在每周序列的情況下,網絡由具有兩層的單個塊組成,編碼為注意力 (1,52)。第一層膨脹等于 1,因此它是標準 LSTM,但第二層計算過去 52 個隱藏狀態的權重(當它們變得可用時,因此在第 53 點或更晚的時候逐步通過一序列時)。權重是使用嵌入到 LSTM 中的單獨的標準兩層 NN 計算的;它的輸入是 LSTM 輸入和最后一個隱藏狀態的串聯,它的權重通過對所有其他參數進行操作的相同梯度下降機制進行調整。
圖 3 顯示了三個配置示例:
第一個生成季度序列的點預測 (PF)
第二個生成月序列的 PF
第三個生成年度序列的預測區間 (PI)
- a)NN 由兩個塊組成,每個塊都包含兩個膨脹 LSTM,它們通過第二個塊周圍的快捷方式連接。最后一個元素是“適配器層”,它只是一個標準線性層(傳遞函數等于恒等式),它將來自第四層(膨脹 = 8 的層)的隱藏輸出(通常為 30-40 長)調整為預期的輸出大小(此處為 8)。
- b)NN 由一個由四個擴張的 LSTM 組成的單個塊組成,具有根據 (Kim et al., 2017) 的殘差連接。請注意,快捷箭頭正確指向殘差 LSTM 單元的內部;這是一個非標準的殘差捷徑。
- c)NN 由一個單個塊組成,該塊由兩個具有注意機制的擴張 LSTM 組成,然后是一個密集的非線性層(使用 tanh() 激活),然后是一個輸出兩倍大小的線性適配器層,以便同時生成下限和上限的預測。注意機制 (Qin et al., 2017) 顯著減慢了計算速度,但有時表現最好。
后來,我提供了一個表格,列出了所有案例的架構和超參數,而不僅僅是這三個。請記住,雖然圖表僅顯示模型的全局部分,但每個序列的部分同樣重要。
3. Implementation details
本節提供了關于混合方法的更多實現細節。這包括關于損失函數、模型的超參數和集合過程的信息。
3.1. Loss function
3.1.1. Point forecasts
M4競賽中針對 PFs 案例使用的誤差測量是對稱平均絕對誤差 (symmetric mean absolute error, sMAPE) 和平均標度誤差 (mean scaled error , MASE) 的組合 (Makridakis、Spiliotis和Assimakopoulos,2018a)。這兩個指標在本質上非常相似,因為它們都是序列的預測值和實際值之間的標準化絕對差值。回想一下,該系統中神經網絡的輸入已經去季節化和歸一化,我假設訓練損失函數不需要包括歸一化:它可能只是目標值和預測值之間的簡單絕對差。然而,在回溯測試期間,很明顯模型傾向于具有正偏差,這可能是由于對神經網絡的時間序列導出輸入和輸出應用了壓縮函數 log() 的結果。系統在對數空間中學習,但是最終的預測誤差在線性空間中計算。為了應對這種情況,使用了 τ 值略小于 0.5 (通常為0.45–0.49) 的 pinball loss。pinball loss 定義如下:
因此,pinball 函數是不對稱的,對分位數以上和分位數以下的實際值進行不同的懲罰,以便允許該方法處理偏差。它本身就是一個重要的損失函數;最小化它會產生分位數回歸 (Takeuchi,Le,Sears,&Smola,2006)。
3.1.2. Prediction intervals
彈球損失函數也可以用于生成 PI。要求的覆蓋率為95%,因此可以嘗試預測 2.5% 和 97.5% 的間隔。然而,PI 的競爭度量并不是基于上下彈球的單獨損失;相反,它是一個稱為平均刻度間隔分數 (mean scaled interval score, MSIS) 的單一公式 (Makridakis et al., 2018a)。再一次省略了MSIS的分母,因為神經網絡的輸入已經不再是季節性的和標準化的。應當指出的是,盡管該方法在所有提交的方法中提供了最精確的指標值,但在指標值的情況下仍然可以觀察到上述正偏差,超過上限區間的頻率比超過下限區間的頻率低。
在這一點上,我想提請讀者注意基于神經網絡的系統的偉大實用特征:創建與商業/科學目標一致的損失函數的簡便性。對于此應用程序,損失函數與 M4 競賽中使用的精度指標保持一致。
3.1.3. Level wiggliness penalty
直觀上,該水平應該是時間序列的平滑版本,沒有季節性模式。人們會認為這是次要的,更多的是審美層面的要求。然而,事實證明,水平的平滑度對預測精度有很大影響。似乎當神經網絡的輸入平滑時,神經網絡集中于預測趨勢,而不是過度擬合一些虛假的季節性相關模式。平穩的水平也意味著季節性成分適當地吸收了季節性。在函數數據分析中,二階導數平方的平均值是對曲線波動的一種普遍懲罰(Ramsay & Silverman,2002)。然而,這種懲罰可能過于嚴格,在應用于偶爾有較大偏移的時間序列時不夠穩健。在這方面,使用了這一懲罰的修改版本,計算如下:
該懲罰,乘以50-100范圍內的常數參數,稱為水平可變性懲罰 (level variability penalty, LVP),被添加到 PFs 和 PIs 損失函數中。水平擺動罰分顯著影響了該方法的性能,可以想象,如果沒有它,該提交物就不會贏得M4競賽。
3.2. Ensembling and data subsetting
為六個單頻率子集 (每日、每周等) 中的每一個建立了兩個模型(一個用于PFS,一個用于PI)。每一個模型實際上都是幾個層次的集成,如下所示。
3.2.1. Independent runs
一次運行包括模型的完整訓練以及為子集中的所有序列生成預測。然而,由于參數初始化是隨機的,所以對給定序列的每次運行都會產生稍微不同的預測。由不同運行構建的集成模型可以減輕隨機性的影響,降低不確定性。回溯測試表明,將運行次數增加到6–9以上并不能提高預測的準確性,因此,獨立運行的次數也相應地受到了限制。
3.2.2. Ensemble of specialists or simple ensemble
當它在計算上可行時,除了月度和季度序列之外,結果是所有的模型都是這樣的,使用幾個同時訓練的模型,從不同的序列子集學習,而不是訓練一個單一的模型。這種方法被稱為**“專家集合”**,最初是由 Smyl (2017) 提出的,現總結如下。
主要思想是,當數據集包含來自未知來源的大量序列時,有理由假設這些序列可能被分組為子集,這樣,如果對每個組使用單獨的模型而不是對整個數據集使用單一模型,則整體預測準確性將會提高。但是,沒有直接執行分組任務的方法,因為來自不同來源的序列可能看起來和行為類似。此外,使用通用度量對序列進行聚類可能對提高預測準確性沒有幫助。在這方面,專家集成算法同時訓練多個模型 (神經網絡和每序列參數),并迫使它們專注于序列的子集。該算法總結如下:
- (a) 在分配的子集上執行單個訓練。
- (b) 記錄整個訓練集的表現 (樣本內,一個序列訓練部分所有點的平均值)。
因此,特定序列的最終預測是前 N 個模型產生的預測的平均值。這里的主要假設是連續性:如果特定模型擅長預測序列的樣本內部分,那么它也有望在序列的樣本外部分顯示準確的結果。用于各個模型的架構和輸入保持不變。不同時期之間的不同并被積極操縱的是每個模型的訓練數據集的組成。圖 4 顯示了十個序列在總共七個模型和兩個頂級模型中的分配示例。
一種更簡單的方法,這里稱為簡單集合,用于月度和季度數據,而不是專家集合。在這種情況下,數據在每次運行開始時被分成兩個不重疊的集合,然后對模型進行訓練并對兩半進行預測。這是一種裝袋,而且效果也很好。
值得一提的是,在 Smyl (2017) 的工作中,專家團隊將 M3 月度數據集的預測準確度提高了約 3%。然而,報告的差異并不穩定,這取決于數據和所用模型的質量。因此,需要做更多的工作來清楚地描述每種方法的優勢領域。
3.2.3. Stage of training
由最近訓練時期中的幾個(例如 4-5 個)生成的預測被集成以提供單一預測。整個訓練通常使用 10-30 個 epoch;因此,以 20 個 epoch 為例,最終預測實際上是 16、17、18、19 和 20 epoch 產生的預測的平均值。
3.3. Backtesting
回測通常是通過從每個序列中刪除最后一個水平點數中的一個,但有時是兩個(例如,每月數據為 18 或 36 個),并在具有此類縮短序列的集合上訓練系統。然而,雖然訓練步驟從未暴露于移除的值,但系統在每個 epoch 之后都在驗證(移除)區域進行了測試,結果指導了架構和超參數的選擇。在實踐中,在最后一個水平點數和倒數第二個水平點數上進行測試時,驗證結果之間存在非常強的相關性,通常使用前一種方法,因為它也承認更大數量的序列(許多也是如果刪除了一個以上的水平點數,則用于回測)。
雖然許多序列很短,但也有許多非常長,例如代表 300 多年的月度數據。此類序列的早期部分對預測準確性的用處并不明顯,但它們涉及明顯的計算需求。因此,長序列被縮短,只保留最近的“最大長度”點。最大長度超參數經過測試并從一個相對較小的值增加,直到在回測中沒有觀察到準確度的進一步有意義的提高。它與其他超參數一起列在表 1 中。
3.4. Hyperparameters
所有超參數都是使用推理、直覺和回測的某種組合來選擇的。用于防止過擬合的主要工具是提前停止:在訓練期間,驗證區域的平均準確率(通常是最后輸出水平的點數,參見圖 1)在每個訓練時期后計算。在進行最終(使用所有數據)學習和預測時,記錄具有最低驗證錯誤的時期并用作最大時期數。學習率計劃也是通過觀察每個 epoch 后的驗證錯誤來決定的。
表 1 列出了所有使用的 NN 架構和超參數。如果 PI 模型使用與 PF 模型相同的值,則不會重復這些值。關于每個的一些評論:
集成(ensembling)
簡單的集成或專家的集成。在后一種情況下,它被詳細描述為 topN/numberOfAllModels,例如4/5,見第 3.2.2 節。在年度數據的情況下,兩種集成方法都進行了嘗試,但在每日、每周和每小時數據的情況下,專家的集成是在沒有實驗的情況下選擇的,因為相信它應該會提供更好的結果。
NN 架構
它被編碼為一個塊序列,在括號中,參見第 2.2.5 節。塊周圍的殘差捷徑,或在根據 Kim (2017) 的LSTMs 的特殊情況下,層周圍的剩余快捷方式。每種序列的架構:
- 月度序列使用單個塊的特殊殘差層。
- 每季度、每天和每小時的序列使用了可能應該是標準架構的東西(因為它似乎在 M4 競賽之外的其他環境中也能很好地工作):兩個擴展的 LSTM 層的兩個塊。
- 年度序列的點預測模型使用單個帶有注意力的擴張 LSTM 塊,編碼為注意力 (1,6),而預測間隔模型添加了一個標準的帶 tanh() 激活的密集層,我稱之為非線性層 (NL ),因此這被編碼為attentive (1,6), NL。
- 如上所述,每周序列的架構使用了細心的 LSTM。
- 與表中的其他情況一樣,所選擇的架構是一些推理/信念和實驗的結果。我認為,在季節性序列的情況下,至少一個膨脹應該等于季節性,而另一個應該在預測范圍的范圍內。架構很可能過度擬合回測結果;例如,更標準的架構 (1,3)– (6,12) 或 (1,3,12) 幾乎肯定也適用于月度序列(沒有特殊的剩余架構)。
LVP
LVP 代表水平可變性懲罰,是應用于水平擺動懲罰的乘數。它僅適用于季節性車型。該值不是很敏感,因為即使更改 50% 也不會產生太大影響。但是,它仍然很重要。
- 時期數(Number of epochs):最終訓練和預測運行的訓練時期數是通過實驗選擇的,以使驗證區域的誤差最小化。學習率和 epoch 數之間存在明顯的相互作用:更高的學習率需要更少的 epoch。影響它們的另一個因素是子集的計算要求:子集中的大量序列迫使偏好更少的時期(因此更高的學習率)。
- 學習率:第一個數字是初始學習率,在訓練期間通常會降低。例如,在年度 PI 模型的情況下,它從 1e-4 開始,但在第 17 期減少到 3e-5,在第 22 期再次減少到 1e-5。時間表是觀察驗證行為的結果每個訓練時期后的錯誤。當他們在大約兩個 epoch 上趨于平穩時,學習率降低了 3-10 倍。
- 最大長度:該參數列出了所用系列的最大長度,請參見第 3.3 節。在每小時系列的情況下,沒有截斷,所有系列都以原始長度使用。
- 訓練百分比:見第 3.1.1 節。
- LSTM 的狀態大小:LSTM 單元維護一個數字向量,稱為狀態,它是它們的記憶。狀態的大小不是一個敏感參數,大于 30 的值運行良好。較大的值會減慢計算速度,但會略微減少所需的時期數。使用更大的狀態對準確性沒有好處。
3.5. Implementation
該方法通過四個程序實現:兩個使用專家集成,兩個使用簡單集成,如前所述。每對包含一個用于生成 PF 的程序和另一個用于估計 PI 的程序。如果比賽今天發生,可能只需要兩個程序,一個使用專家集成,另一個使用簡單集成,因為 PI 和 PF 可以通過修改損失函數和架構從單個程序生成。該方法是用 C++ 編寫的,依賴于 DyNet 庫 (Neubig et al., 2017)。它可以在Windows、Linux或Mac上編譯運行,并且可以選擇寫入關系數據庫,如 SQL Server 或 MySQL,方便分析回測結果,在實踐中非常有用。這些程序使用 CPU,而不是 GPU,并且旨在并行運行。該代碼可在 M4 GitHub 存儲庫 (https://github.com/M4Competition/M4-methods) 上公開獲得,以促進可復制性并支持未來的研究 (Makridakis, Assimakopoulos, & Spiliotis, 2018)。代碼注釋很好,是對方法的最終描述。
3.6. What did not work well and recent changes
該方法對大多數頻率產生了準確的預測,尤其是每月、每年和每季度的預測。然而,對于每日和每周數據的情況,準確性并不理想。這可以部分解釋為作者專注于“三大”子集:月度、年度和季度,因為它們涵蓋了 95% 的數據,并且在它們上表現出色是競爭成功的關鍵。然而,隨后對每日和每周數據的研究證實,在這些頻率上表現不佳是一個真正的問題。
自比賽結束以來,已經嘗試了幾項改進。其中一項嘗試在每日和每周數據的準確性上取得了顯著提高,使性能達到最佳基準的水平如下。在分析平滑系數的值時,由于它們隨著經過的訓練時期而變化,很明顯它們似乎并沒有在后期時期趨于平穩,因為梯度下降似乎沒有足夠強烈地推動它們。因此,為它們分配了一個單獨的、更大的學習率,它是主學習率的三倍數,這具有所需的效果。 nts 變化很快,最終在后期趨于穩定。
4. Hybrid, hierarchical, and understandable ML models
本節首先總結模型的主要特征,然后概述其技術和方法的概括和更廣泛的含義。同樣在這種情況下,我回顧了導致本文描述的模型制定的步驟。
獲勝的解決方案是一種混合預測方法,它混合了受指數平滑啟發的公式,用于對序列進行去季節化和標準化,并使用先進的神經網絡來推斷序列。同樣重要的是該方法的層次結構,它將通過許多時間序列(NN 的權重)學習的全局部分與時間序列的特定部分(平滑系數和初始季節性分量)相結合。該方法的第三個主要組成部分是在多個層次上廣泛使用集成。前兩個功能是由現代神經網絡自動微分系統和動態計算圖提供的強大功能實現的(Paszke et al., 2017)。
自動微分允許構建使用由兩組組成的表達式的模型:一個相當廣泛的基本函數列表,如 sin()、exp() 等,以及一個運算符列表,如矩陣和元素乘法、加法,倒數等。使用矩陣運算和一些非線性函數的神經網絡只是允許的表達式的示例。梯度下降機制適合所有這些表達式的參數。在這里描述的模型中,既有 NN 部分也有 nonNN 部分(受指數平滑啟發的公式)。構建對復雜的技術或業務知識進行編碼的模型是非常可行的。
動態計算圖允許構建具有全局和局部(此處為每個時間序列)表達式和參數的層次模型。也可以有每組部分。模型可以很籠統;例如以經典的統計方式:
Student performance = School impact + Teacher impact + Individual impact.
請注意,每個組件都可以是一個單獨的 NN,一個難以理解的黑匣子。但是,我們可以觀察和量化每個黑匣子的影響,無論是一般情況下還是在每種情況下,我們都會得到一個部分可理解的 ML 模型。
自動微分也是概率編程語言 Stan 的一個基本特征(Carpenter, Hoffman, Brubaker, Lee, Li, & Betancourt, 2015)。它主要使用 Hamiltonian Markov chain Monte Carlo 擬合模型,因此優化是不同的,但底層的自動微分感覺非常相似。 Stan 和 DyNet 之間建模能力的相似性導致了所提出模型的制定,如下文更詳細描述的那樣。
到 2016 年年中,我和我的合作者在 Stan 中成功地創建了 Holt 和 Holt-Winters 模型的擴展和推廣(我將這個模型家族稱為 LGT:局部和全局趨勢模型;參見 Smyl & Zhang,2015 和 Smyl , Bergmeir, Wibowo, & Ng, 2019),并嘗試將它們與 NN 模型一起使用 (Smyl & Kuber, 2016)。后來,我還嘗試為 M3 Competition 數據集構建 NN 模型(Smyl,2017)。我能夠在年度(因此非季節性)子集上擊敗經典統計算法,但無法在月度子集上做到這一點。對于季節性系列,我使用 STL 分解作為預處理的一部分,因此顯然它效果不佳。此外,在 M3 數據的每個類別中,我的 LGT 模型都比我的 NN 模型更準確。因此,當我意識到 DyNet 和 Stan 一樣,允許對廣泛的模型進行自由編碼時,我決定將 LGT 的想法(例如處理季節性)應用于 NN 模型。這就是 M4 獲勝解決方案的誕生方式。
總結
以上是生活随笔為你收集整理的【时序】M4竞赛冠军方案:一种用于时间序列预测的指数平滑和递归神经网络的混合方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 十八、可视化任务调度系统airflow
- 下一篇: 均匀分布的点估计量