Prophet(先知):非死book大規模預報框架

dbpy5819 7年前發布 | 20K 次閱讀 Python Python開發

日前,非死book 開源了Prophet,一個可用于 Python 和 R 編程語言的預測工具。預測是一個數據科學任務,是組織內許多活動的核心。例如,像非死book這樣的大型組織必須進行能力規劃,以有效地分配稀缺的資源和目標設置,以便相對于基線測量性能。產生高質量的預測對于機器或大多數分析師來說并不是一個容易的問題。我們在創建各種業務預測的實踐中觀察到兩個主要主題:

  • 完全自動的預測技術可能很脆弱,并且往往太不靈活而無法納入有用的假設或啟發。

  • 能夠產生高質量預報的分析師是相當罕見的,因為預測是專業數據科學技能,需要大量經驗積累。

這些主題的結果是對高質量預測的需求通常遠遠超過了分析師可以生成它們的速度。這個觀察是我們建設Prophet的動機:我們希望讓專家和非專家更容易做出與需求保持一致的高質量預測。

“規模”暗示的典型考慮,計算和存儲,不僅僅關注預測。我們發現,預測大量時間序列的計算和基礎設施問題相對簡單 - 通常這些擬合過程很容易并行化,預測不難存儲在關系數據庫(如MySQL)或數據倉庫(如Hive)中。

我們在實踐中觀察到的規模問題涉及由各種預測問題引入的復雜性,并且一旦已經產生,就在大量預測中建立信任。Prophet一直是提高非死book的能力、建立用于決策、甚至在產品功能大量可信預測的關鍵。

Prophet 的亮點

不是所有的預測問題都可以通過相同的過程來解決。Prophet 針對我們在非死book上遇到的業務預測任務進行了優化,這些任務通常具有以下特征:

  • 每小時,每天或每周觀察至少幾個月(優選一年)的歷史

  • 強化的多重“人類規模”季節性:工作日和一年的時間

  • 以預先知道的不規則間隔發生(例如超級碗)重要的節假日

  • 合理數量的缺失觀測值或大的異常值

  • 歷史趨勢變化,例如由于產品啟動或記錄更改

  • 趨勢是非線性增長曲線,其中趨勢達到自然極限或飽和

我們發現Prophet的默認設置產生的預測往往是準確的,如熟練的預報員所產生的預測那樣,但所做的代價更少。使用 Prophet ,如果預測不令人滿意,那么你不會在一個完全自動過程的結果面前止步不前- 沒有經過時間序列方法訓練的分析師可以使用各種易于解釋的參數改進或調整預測。我們發現,針對特殊情況通過將自動預測與環路預測分析( analyst-in-the-loop ) 相結合,可以覆蓋各種各樣的業務用例。下圖說明了我們發現大規模工作的預測過程:

對于預測過程的建模階段,目前只有有限數量的工具可用。 Rob Hyndman 出色的 R 語言預測包可能是最受歡迎的選項,Google 和 推ter 都發布了更具體的時間序列功能的包 - CausalImpac t和 AnomalyDetection。據我們所知,在 Python 中用于預測的開源軟件包很少。

我們經常使用 Prophet 作為 forecast 包在許多設置中的替代,這是因為下面兩個主要優點:

1.Prophet讓創造一個合理、準確的預測更直截了當。預測包包括許多不同的預測技術(ARIMA,指數平滑等),每個都有自己的優勢、弱點和調整參數。我們已經發現,選擇錯誤的模型或參數通常可能產生不良結果,并且即使經驗豐富的分析人員也不可能有效地選擇正確的模型和參數。

2.Prophet預測可以對非專家來說直觀的方式進行定制。有季節性的平滑參數,允許您調整適合歷史周期的緊密程度,以及平滑趨勢的參數,允許您調整如何主動跟蹤歷史趨勢更改。對于增長曲線,您可以手動指定“容量”或增長曲線的上限,從而允許您注入自己的關于預測將如何增長(或下降)的先前信息。最后,您可以指定不規則的假日,如超級碗、感恩節和黑色星期五的日期。

Prophet 的工作原理

在其核心,Prophet程序是一個加性回歸模型(additive regression model),包含四個主要部分:

  • 分段線性或邏輯增長曲線趨勢。 Prophet通過從數據中選擇變化點來自動檢測趨勢變化。

  • 使用傅里葉級數建模的年度季節分量。

  • 使用虛擬變量的每周季節分量。

  • 用戶提供的重要節日列表。

例如,這里有一個特征預測:我們使用wikipediatrend包下載的Peyton Manning的Wikipedia頁面的log-scale頁面視圖。由于 Peyton Manning是一個美式足球運動員,你可以看到每年的季節性比賽和重要的角色,而每周的周期性也明顯存在。最后,你看到某些事件(如他出現的季后賽)也可以建模。

Prophet 將提供一個組件圖,用圖形描述它適合的模型:

這個圖更清楚地顯示了與瀏覽Peyton Manning的頁面(足球賽季和季后賽)以及每周季節性相關的年度季節性:比賽日(星期日和星期一)和之后的訪問增多。也可以注意到趨勢組件自他最近退役以來的向下調整。

Prophet 的重要思想是,通過更靈活地配合趨勢組件,我們更準確地模擬季節性,結果是預測更加準確。我們更喜歡使用非常靈活的回歸模型(有點像曲線擬合),而不是傳統的時間序列模型,因為它給我們更多的建模靈活性,更容易擬合模型,更加優雅地處理丟失的數據或離群值。

默認情況下,Prophet 將通過模擬您的時間序列的未來趨勢變化為趨勢組件提供不確定性區間。如果你想模擬未來季節性或假期效應的不確定性,你可以運行幾百個HMC迭代(需要幾分鐘),你的預測將包括季節不確定性估計。

我們使用 Stan 匹配Prophet模型,并以Stan概率編程語言中實現了Prophet 過程的核心。 Stan對參數執行MAP優化非常快(<1秒),給出了使用哈密爾頓蒙特卡洛算法(Hamiltonian Monte Carlo algorithm)估計參數不確定性的選項,并允許我們在多種接口語言中重復使用擬合過程。目前,我們提供了Prophet 的Python 和 R 語言的實現。它們具有完全相同的功能,通過提供這兩個實現,我們希望讓我們的預測方法在數據科學社區更廣泛使用。

如何使用Prophet

使用Prophet的最簡單的方法是從PyPI(Python)或CRAN(R)安裝軟件包。您可以閱讀我們的快速入門指南,并深入了解我們的全面文檔。如果您正在尋找一個有趣的時間序列數據源,建議嘗試wikipediatrend包,它可在維基百科頁面的下載歷史頁面視圖提供下載。

幫助我們改進 Prophet

有兩個主要方法來幫助我們改進Prophet。首先,你可以自己試試使用,告訴我們你的結果。我們一直在尋找更多的用例,以便了解當Prophet表現是否良好。第二,有大量的功能需要構建!我們歡迎拉取請求(pullrequest)、修復錯誤和增加新的功能。看看如何貢獻的指南,我們期待與社區互動,使 Prophet更廣泛地有用。

 

 

來自:https://mp.weixin.qq.com/s?__biz=MzI4NjYwMjcxOQ==&mid=2247483929&idx=1&sn=144406c86ad8e5c897adff8e8103b864&chksm=ebdb26a9dcacafbf3840e8f3d7a1765311a650385ae23f9ee4525ca06d82cdfcd9abb08f2a8f#rd

 

 本文由用戶 dbpy5819 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!