最近又發現一個很有意思的工具——facebook開源的大規模預測框架Prophet,據說它生成的預測結果足以和專業數據分析師媲美。
從查閱的資料來看,Prophet開源時日不久,難怪網上很少有以實際應用來介紹的資料。就跟當初在baidu上查不到pandas資料那時候一樣,米哥打算小試一把,用tushare網站過去的真實訪問流量做一個未來預測,以簡單的用法將facebook這個工具推薦給大家,希望對大家有一個啟發。更牛逼的應用期待大家更加深入的研究和實踐。
介紹
根據facebook公開的白皮書介紹,Prophet實質上是一個可加性回歸模型(additive regression model),主要由四個核心構成:
分段線性或者 logistic 增長曲線趨勢,Prophet可以通過從數據選擇變化點,自動探測變化趨勢。
按年為周期使用傅里葉級數(Fourier series)建模。
按周為周期使用虛變數(dummy variables)建模。
支持用戶提供的重要節假日列表。
Prophet 針對的是商業預測任務,適用於具備以下特徵的場景:
針對每小時、每天或每星期的觀察頻次,有至少數月(理想情況的一年)的歷史記錄。
多重顯著的「人類層級」周期性:星期X以及年份。
日期間隔不規則的重要節日,需要事先得知。
觀察缺失或是異常值在合理範圍內。
歷史趨勢變化,比如產品發布或者改寫記錄(logging changes)。
符合非線性增長曲線的趨勢,有天然上、下限或者飽和點。
對於以上官方的套話,米哥看的似懂非懂,反正經過一番折騰后,米哥用一句話總結一下它的優點吧:使用過程令人髮指的簡單!如果預測結果相對可靠,那簡直就是逆天了。
安裝
Prophet的安裝很簡單,一行代碼搞定。
pip install fbprophet
但是!Prophet嚴重依賴pystan包,在安裝之前必須先安裝好這個包,雖然同樣也是一行pip來安裝,但是在windows上安裝pystan + prophet就是一種心靈折磨,各種坑爹的坑。為了讓大家少躺坑,如果您打算在windows上嘗試的話,米哥這裡提示幾點:
1、最好選用winows7系統
2、使用Python3.5+ (用Anaconda發行版)
3、確認已安裝Visual C++ Build Tools 2015
4、Prophet最好通過clone源代碼來setup install
數據準備
本實驗通過tushare在cnzz上的pv流量統計數據來做一個實例,下載了從2016年1月1日至今的流量數據,原始數據格式如下:
以此來預測未來一年tushare的訪問流量,數據經過整理存儲在一個csv文件里並通過pandas讀取數據。
對pv值進行對數處理,然後查看過去一年的趨勢情況。
有一點值得注意的是,Prophet對輸入數據的格式有要求,時間列需命名ds,數值命名為y。
預測實現
首先需要初始Prophet對象,並將pandas的DataFrame數據傳入給prophet,數據裝載過程很簡單也相對較快。
然後我們告訴預測模型我們需要預測未來多久的結果,這裡設定一年(即365天)並執行預測命令。
預測的結果依然是一個DataFrame格式的數據,結果值列名為yhat,同時給出了最大和最小值。
通過繪圖功能,我們來看一下預測效果。
通過weekly函數我們看一下,周末兩天訪問量最少。
m.plot_weekly(forecast)
m.plot_trend(forecast)
有興趣獲得以上完整代碼和演示數據文件的同學,請在微信公眾號「挖地兔」私信回復「預測」兩個字自動獲得下載鏈接。
更多乾貨請關注微信公眾號:挖地兔