prophet:時間序列預測模型原理
prophet:時間序列預測原理
介紹
prophet是Facebook 開源一款基於 Python 和 R 語言的資料預測工具即“先知”。Facebook 表示,Prophet 相比現有預測工具更加人性化,並且難得地提供 Python 和R的支援。它生成的預測結果足以和專業資料分析師媲美。
時間序列模型
基本模型
這裡,模型將時間序列分成3個部分的疊加,其中
prophet的工作流如上圖所述,通過整合了建模-評估兩大模組,實現了時間序列模型的快速迭代優化。
對於GAM的擬合,可以使用backfitting或L-BFGS來進行(我們偏向於選擇L-BFGS)。
因此,對於時間序列的預測問題,這裡是把該當做了曲線擬合的問題來完成,因此與傳統時間序列的方法有所不同。傳統時間序列更多的是考慮時間在結構上的依賴關係,比如ARIMA模型,通過放棄這一點有4個好處:
1.更靈活
2.ARIMA建模需要有連續的時間資料,而我們這個方法並不需要,因此我們可以不考慮缺失值的填充問題。
3.擬合非常快,使得互動式探索成為可能。
4.預測模型的引數非常容易解釋,因此分析人員可以根據經驗來設定一些引數。
增長項
非線性增長
我們將增長項
這一個函式實際上就是類似於人口增長函式,其中C是人口容量,k是增長率,b是偏移量。顯然隨著t的增加,
但是如果僅使用這個模型是無法滿足要求的,因為增長率是可能隨著時間變化的。於是我們可以設一個change point用來表示增長率k變化的時間節點,當
由於出現change point,為了使函式是連續的,需要做些處理:
我們設C也是隨時間變化的
於是最後我們可以得到
另外,我們也可以使用線性的增長函式:
k是增長率,δ是適應率,b是偏移量引數,γ設為
季節性
這裡使用傅立葉級數來近似
因此,模型需要擬合這些cn係數,N越大,越能擬合複雜的季節性
若取N=10,可以寫成
節假日
處理節日的方法很簡單,就是將過去,將來的相同節假日設定一個虛擬變數
模型擬合
最後模型的擬合用到了stan語言進行擬合,非常方便:
以上就是模型在stan上的定義。想了解更多stan,可以參考我另外一篇部落格:R語言stan概率程式設計
參考資料
作為分享主義者(sharism),本人所有網際網路釋出的圖文均遵從CC版權,轉載請保留作者資訊並註明作者a358463121專欄:http://blog.csdn.net/a358463121,如果涉及原始碼請註明GitHub地址:https://github.com/358463121/。商業使用請聯絡作者。