Forecasting at Scale論文------Prophet預測模型

預測是一項常見的數據科學任務,可幫助組織進行容量規劃,目標設置和異常檢測。 儘管它很重要,但是要生成可靠的高質量預測仍面臨着嚴峻的挑戰,尤其是在存在各種時間序列且具有時間序列建模專業知識的分析師相對較少的情況下。 爲了解決這些挑戰,描述了一種實用的“大規模”預測方法,該方法將可配置模型與環路分析員績效分析相結合。論文中提出了一種模塊化迴歸模型,該模型具有可解釋的參數,可以由具有分析能力的分析師直觀地調整有關時間序列的知識,描述績效分析以比較和評估預測程序,並自動爲預測進行人工審查和調整,幫助分析師最有效地利用其專業知識的工具可以對業務時間序列進行可靠,實用的預測。

業務時間序列的特徵

業務預測問題種類繁多,但是其中一些具有許多共同點。 下圖顯示了Facebook活動的代表性Facebook時間序列。Facebook用戶可以使用“事件”平臺以各種方式創建事件頁面,邀請其他人以及與事件進行交互。 下圖顯示了在Facebook上創建的事件數的每日數據。 在這個時間序列中,有幾個明顯的季節性影響:每週和每年的週期,以及聖誕節和新年前後的明顯下降。 這些類型的季節性影響自然而然地出現,並且可以在人類行爲產生的時間序列中預期到。 時間序列還顯示了過去六個月中趨勢的明顯變化,可能會在受新產品或市場變化影響的時間序列中出現。 最後,實際數據集通常具有離羣值,並且此時間序列也不例外。

 此時間序列的特徵代表了許多業務時間序列:多個強烈的季節性因素,趨勢變化,離羣值和假日影響。

以下顯示了R語言中預測包中幾種自動化程序對上述時間序列進行的預測結果:

 上圖中採用的方法分別是:auto.arima,它是一系列的ARIMA模型(AR,MA等)並且會自動選擇擬合數據最好的那個模型;ets,指數平滑模型;snaive,一個隨機遊走模型,可以每週進行季節性預測;tbats,一個具有每週和每年季節性的TBATS模型。

上圖中的方法通常很難產生於這些時間序列的特徵相匹配的預測,當截止期附近的趨勢發生變化,ARIMA的自動預測容易出現大的趨勢誤差且無法捕獲任何季節性趨勢。指數平滑法和snaive預測捕獲了每週的季節性,但卻錯過了長期的季節性。 所有方法對年末下降反應過度,因爲它們不能充分模擬年度季節性。

當預測不佳的時候,我們希望能夠針對當前問題調整參數,調整這些參數需要徹底瞭解基礎時間序列模型是如何工作的。例如,自動ARIMA的輸入參數是求差的最大階數,自迴歸分量和移動平均值分量。這些往往是難以擴展的專業知識類型。

Prophet預測模型

現在,描述一個時間序列預測模型----Prophet,該模型旨在處理上圖中的業務時間序列的共同特徵,並且該模型還具有直觀的參數,可以在不瞭解底層模型細節的情況下進行調整,這對於分析人員有效的的調整模型參數至關重要。

首先使用一個時間序列分解模型,將時間序列分成三個主要模型組成部分:趨勢、季節性和假日:

y(t)是我們的原始之間序列數據;g(t)是趨勢函數,可對時間序列值的非週期性變化進行建模;s(t)代表週期性變化(例如,每週和每年的季節性變化);h(t)表示假期的影響,這些假期可能在一天內或者多天之內出現不定期的時間;誤差項\epsilon _t表示任何不適應模型的特有變化,假設其爲正態分佈。

該規範與廣義加性模型(GAM)相似,該模型是一類具有潛在非線性平滑器的迴歸模型。

優點:

1). 靈活性:可以輕鬆的適應多個時期的季節性變化,並讓分析師對趨勢做出不同的假設;

2). 與ARIMA模型不同,測量結果無需規則間隔,並且不需要內插缺失值,以及處理異常值

3). 擬合非常快,允許分析師以交互方式探索許多模型規範;

4). 預測模型中的參數易於解釋,分析師可以更改這些參數以對預測施以假設,此外,分析人員通常具有迴歸經驗,能夠輕鬆擴展模型以容納新的組件。

以下介紹對分解序列中的處理。

趨勢模型g(t)

已經實現了涵蓋許多Facebook應用程序的兩個趨勢模型:飽和增長模型和分段線性模型。

1. 非線性、飽和增長模型

在Facebook上對增長進行建模通常類似於自然生態系統中的人口增長,其中非線性增長以承載能力達到飽和。例如,特定區域內Facebook中用戶量的承載能力可能是可以訪問Internet的人數,這種增長模型通常使用邏輯增長模型來建模,其最基本的形式是:

 其中C爲承載能力,k爲增長率,m爲偏移參數。

注意:承載能力不是恆定的(隨着世界上可以使用互聯網的人數增加,增長上線也會隨機增加),因此,固定容量C替換爲隨時間變化的容量C(t);另外,增長率也不是很定的,新剷平可以極大的改變一個地區的增長率,因爲,該模型必須能夠合併變化的增長率以獲取歷史數據。

通過明確定義允許增長率變化的變化點,將趨勢變化納入增長模型。則分段邏輯增長爲:

季節性變化s(t)

依靠傅里葉級數來提供週期效應的可行模型,假設P是我們希望時間序列具有的常規時間段(例如,當以天爲單位縮放時間變量時,年度數據P=365或者每週數據爲P=7)。用以下標準傅里葉級數近似任意平滑的季節性效應:

假期和活動h(t)

假期和事件給許多業務時間序列帶來了巨大的,可預測的衝擊,並且通常不遵循週期性模式,因此,其效果不能通過平穩的週期很好地建模。特定假期對時間序列的影響通常年復一年,因此將其納入預測很重要。以下爲一些節假日期。

通過假設假日的影響是獨立的,可以很容易的將該假日列表納入模型中,對於每個假期i,令D_i爲該假期的過去和將來日期。增加一個指標函數,用以表示時間t是否在假期i起見,併爲每個假期分配了一個參數\kappa _i(表示在預測中的相對變化):

並且:

 其中\kappa \sim Normal(0,v^2)

模型擬合

這裏的具體內容建議去看源代碼。

以上是擬合的結果,對比於前面幾種方法,發現Prophet預測模型更加準確。以下是上圖中預測的各個組件。

論文鏈接:https://peerj.com/preprints/3190/

源碼鏈接:https://github.com/facebook/prophet

官方網站:https://facebook.github.io/prophet/

更加詳細解釋:https://www.zhihu.com/question/56585493

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章