解读:一种来自Facebook团队的大规模时间序列预测算法(附github链接)
寫在前面
下面這篇文章的內容主要是來自Facebook團隊的論文《Forecast at Scale》,這篇論文介紹了一種時間序列預測算法Prophet,該算法結合了時間序列分解以及機器學習算法,并且可以對存在缺失值和異常值的時間序列進行預測。除此之外,該算法也被Facebook用于各項業務場景中。原論文和github鏈接在文末進行獲取。
1
摘要
時間序列預測是一項常見的數據科學任務,它可以協助我們進行容量規劃、目標設置和異常檢測等。盡管通過時間序列進行預測很重要,但研制具有生產可靠和高質量的預測模型仍然存在著嚴重的挑戰——特別是對于一些多變的時間序列,并對于其先驗知識相對較少時。為了解決這些挑戰,這篇論文描述了一種“大規模”預測的實用方法,該方法將可配置模型與在循環中分析的性能分析相結合,并針對于此提出了一個高解釋性的多模塊回歸模型。
2
模型構建
由于現實中,時間序列常常是由趨勢項,季節項,節假日效應和突發事件以及殘差項組成,所以Prophet算法采用了時間序列分解的方法,它把時間序列分為了這幾個部分:
??
其中的??表示趨勢項,它體現了時間序列的非周期變化趨勢;??表示季節項,它體現了時間序列的周期性變化,如每周,每年的這種季節性變化;??表示節假日項,它體現了節假日等持續一天到幾天的無規律變化;最后的??表示殘差項,通常是正態分布的。然后各項分別被擬合,最后的累加結果即是Prophet算法的預測結果。
其中,Facebook對于Prophet算法的這種設定是一種 generalized additive model (GAM),其中GAM的形式具有很多優點,包括它容易被分解以及適應新的成分,并且與ARIMA模型不同的是,測量數據還不需要有規律的間隔,我們也不需要插入缺失的值或者刪除離群值。并且,預測模型有很容易解釋的參數,可以由分析人員更改這些參數以對預測進行假設,這樣尤其是對于一些要求高可解釋性的場景,如金融衍生品價格的預測,可以更好地提供一個可解釋性的角度。
下面對每一項的擬合進行分別的介紹:
1、趨勢項模型
其中趨勢項模型根據應用背景不同,引入了兩種不同的函數,一是邏輯回歸函數(logistic function),另一個是基于分段線性函數(piecewise linear function。
當問題背景是增長型預測時,如預測人口的增長模式,或者是一個地區Facebook用戶的增長。它會根據環境或者地區的承載力達到一定的飽和程度,所以這種情況下趨勢項是以邏輯回歸函數進行擬合的,即:?
其中,C表示承載容量,k表示增長率,m表示一個偏置參數。然而在現實情況下,承載容量和增長率不會一直保持不變,也即都不可能是常數。其中承載容量表示為C(t),即是一個時變的形式。而實際情況下,如Facebook的一些變革或者新產品的推出,可能會導致增長率的階段性變化,所以增長率的設置上加入了變點的考慮,即不同時段的增長率會發生變化。其最終形式表示如下,即是一個分段的邏輯回歸函數模型:
用于預測不出現飽和增長的問題時,分段線性函數就作為其趨勢項的模型了。其表現形式為:
2、季節項模型
商業時間序列由于會代表的人類行為,往往具有多期的季節性。例如,一周工作5天會對每周重復的時間序列產生影響,而假期計劃和學校假期則會對每年重復的時間序列產生影響。所以時間序列出現的周期性變化也必須被考慮進去。而數學中描述周期性的函數通常會使人想到正弦和余弦函數。所以原文中采用了傅里葉級數來估計季節項,即如下所示:
其中上式中P=365.25表示是年為周期的數據,P=7則表示以周為周期的數據。其中,關于參數N的選擇,作者根據先驗知識得到對于年為周期的數據N=10比較合適,對于周為周期的數據N=3比較合適。另外,關于模型參數的選擇也可以通過AIC、BIC等準則進行選取。
3、節假日效應
節假日等事件對許多業務時間序列會造成某種程度上的沖擊,并且它們通常不遵循周期性模式,因此節假日等事件的影響不能很好地用一個平穩的周期來建模。所以在Prophet中,作者提出了通過收集了各個國家的節假日信息,將加入到了模型中,如下圖表示了一個假期列表的例子。
為了描述某個節假日的影響大小和跨度范圍,文中通過一個累加的正態分布的形式來表示這個影響:
其中,Z(t)表示每個假期所有假期的集合,K表示每個假期對應的影響范圍,它服從于正態分布:
其中,這個正態分布的方差表示影響程度的大小,值越大表示影響越大,值越小表示影響越小。除此之外,用戶也可以加入自己自定義的一些節假日,如雙十一等。
至此,文章提出的模型架構的每個模塊就已經介紹完成了,下面就是如何對這個模型通過數據進行擬合了。文中是通過 L-BFGS算法來進行最大后驗估計以獲取最優參數,其中,L-BFGS是一種求解無約束非線性規劃問題最常用的方法,它具有收斂速度快、內存開銷少等優點。
3
實驗驗證
下面是Prophet模型用于Facebook事件數量的預測:
下圖表示的是Prophet模型對所有數據的預測效果,其中實線表示的樣本內預測,虛線表示的樣本外的預測。
4
結論
從前面的分析可以看出,對于具有時間周期性和趨勢性的一些領域的時間序列來說,通過Prophet進行擬合可以獲得不錯的預測效果。除此之外,Facebook將這種方法進行了開源,對于一些不明白其算法原理的人來說也可以直接通過它進行調用以解決一系列問題,同時它具有較高的可解釋性,所以可以充分利用先驗知識。雖然這個算法對于一些周期強的數據預測可獲取不錯效果,但是如果我們處理的時間序列不具有周期性而是一種多變的序列,則它可能就會失效了,所以還需要根據實際問題背景來進行選擇。
后面我們也將介紹如何使用Prophet算法,并將其應用于金融衍生品序列的預測之中。
該算法的github鏈接是:https://github.com/facebook/prophet
論文鏈接:https://peerj.com/preprints/3190.pdf
往期精彩回顧適合初學者入門人工智能的路線及資料下載機器學習在線手冊深度學習在線手冊AI基礎下載(pdf更新到25集)本站qq群1003271085,加入微信群請回復“加群”獲取一折本站知識星球優惠券,復制鏈接直接打開:https://t.zsxq.com/yFQV7am喜歡文章,點個在看總結
以上是生活随笔為你收集整理的解读:一种来自Facebook团队的大规模时间序列预测算法(附github链接)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用Numpy手写各种距离度量
- 下一篇: 【算法知识】详解快速排序算法