Facebook時間序列預測演算法Prophet的研究

運籌OR帷幄發表於2019-02-19

Facebook時間序列預測演算法Prophet的研究

編者按:

這次小編給各位讀者帶來一篇關於Facebook 去年開源的時間序列預測演算法fbprophet的文章,並和大家一起學習這個演算法的原理、資料的輸入和輸出。

Prophet 簡介

Facebook 去年開源了一個時間序列預測的演算法,叫做 fbprophet,它的官方網址與基本介紹來自於以下幾個網站:

  1. Github:

    https://github.com/facebook/prophet

  2. 官方網址:

    https://facebook.github.io/prophet/

  3. 論文名字與網址:

    Forecasting at scale,https://peerj.com/preprints/3190/

從官網的介紹來看,Facebook 所提供的 prophet 演算法不僅可以處理時間序列存在一些異常值的情況,也可以處理部分缺失值的情形,還能夠幾乎全自動地預測時間序列未來的走勢。從論文上的描述來看,這個 prophet 演算法是基於時間序列分解和機器學習的擬合來做的,其中在擬合模型的時候使用了 pyStan 這個開源工具,因此能夠在較快的時間內得到需要預測的結果。除此之外,為了方便統計學家,機器學習從業者等人群的使用,prophet 同時提供了 R 語言和 Python 語言的介面。從整體的介紹來看,如果是一般的商業分析或者資料分析的需求,都可以嘗試使用這個開源演算法來預測未來時間序列的走勢。

Prophet 的演算法原理

Prophet 資料的輸入和輸出

Facebook時間序列預測演算法Prophet的研究

首先讓我們來看一個常見的時間序列場景,黑色表示原始的時間序列離散點,深藍色的線表示使用時間序列來擬合所得到的取值,而淺藍色的線表示時間序列的一個置信區間,也就是所謂的合理的上界和下界。prophet 所做的事情就是:

  1. 輸入已知的時間序列的時間戳和相應的值;

  2. 輸入需要預測的時間序列的長度;

  3. 輸出未來的時間序列走勢。

  4. 輸出結果可以提供必要的統計指標,包括擬合曲線,上界和下界等。

就一般情況而言,時間序列的離線儲存格式為時間戳和值這種格式,更多的話可以提供時間序列的 ID,標籤等內容。因此,離線儲存的時間序列通常都是以下的形式。其中 date 指的是具體的時間戳,category 指的是某條特定的時間序列 id,value 指的是在 date 下這個 category 時間序列的取值,label 指的是人工標記的標籤('0' 表示異常,'1' 表示正常,'unknown' 表示沒有標記或者人工判斷不清)。

Facebook時間序列預測演算法Prophet的研究

而 fbprophet 所需要的時間序列也是這種格式的,根據官網的描述,只要用 csv 檔案儲存兩列即可,第一列的名字是 'ds', 第二列的名稱是 'y'。第一列表示時間序列的時間戳,第二列表示時間序列的取值。透過 prophet 的計算,可以計算出 yhat,yhat_lower,yhat_upper,分別表示時間序列的預測值,預測值的下界,預測值的上界。兩份表格如下面的兩幅圖表示。

Facebook時間序列預測演算法Prophet的研究

Facebook時間序列預測演算法Prophet的研究

Facebook時間序列預測演算法Prophet的研究

Facebook時間序列預測演算法Prophet的研究

Facebook時間序列預測演算法Prophet的研究

Facebook時間序列預測演算法Prophet的研究

Facebook時間序列預測演算法Prophet的研究

Facebook時間序列預測演算法Prophet的研究

Facebook時間序列預測演算法Prophet的研究

Facebook時間序列預測演算法Prophet的研究

Facebook時間序列預測演算法Prophet的研究

Facebook時間序列預測演算法Prophet的研究

Facebook時間序列預測演算法Prophet的研究

Facebook時間序列預測演算法Prophet的研究

Facebook時間序列預測演算法Prophet的研究

Facebook時間序列預測演算法Prophet的研究

Facebook時間序列預測演算法Prophet的研究

Facebook時間序列預測演算法Prophet的研究

Facebook時間序列預測演算法Prophet的研究

Facebook時間序列預測演算法Prophet的研究

Facebook時間序列預測演算法Prophet的研究

Facebook時間序列預測演算法Prophet的研究

Facebook時間序列預測演算法Prophet的研究

Facebook時間序列預測演算法Prophet的研究

結束語

對於商業分析等領域的時間序列,Prophet 可以進行很好的擬合和預測,但是對於一些週期性或者趨勢性不是很強的時間序列,用 Prophet 可能就不合適了。但是,Prophet 提供了一種時序預測的方法,在使用者不是很懂時間序列的前提下都可以使用這個工具得到一個能接受的結果。具體是否用 Prophet 則需要根據具體的時間序列來確定。

參考文獻:

  1. https://otexts.org/fpp2/components.html

  2. https://en.wikipedia.org/wiki/Decomposition_of_time_series

  3. A review of change point detection methods, CTruong, L. Oudre, N.Vayatis

  4. https://github.com/facebook/prophet

  5. https://facebook.github.io/prophet/

相關文章