基於Python的開源預測工具的實踐

最近又發現一個很有意思的工具——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,數據裝載過程很簡單也相對較快。

預測的結果依然是一個DataFrame格式的數據,結果值列名為yhat,同時給出了最大和最小值。

過繪圖功能,我們來看一下預測效果。

通過weekly函數我們看一下,周末兩天訪問量最少。

m.plot_weekly(forecast)

m.plot_trend(forecast)

-------------------------------

----------------------

喜歡就關注,持續更新。

作者:挖地兔

個人公眾號:挖地兔 (有興趣獲得以上完整代碼和演示數據文件的同學,請在本公眾號私信回復「預測」兩個字自動獲得下載鏈接。)

出處:挖地兔的博客專欄

大家也可以加小編微信:tszhihu (備註:Python),拉大家到 Python愛好者社區 微信群,可以跟各位老師互相交流。謝謝。第一時間獲取視頻更新動態。

也可以關注官方微信公眾號:Python愛好者社區

友情提醒: 3月16號崔慶才老師視頻直播分享:爬取知乎所有用戶詳細信息 爬取知乎所有用戶詳細信息 (1. 分析知乎Ajax請求及爬取邏輯 2. 用Scrapy實現遞歸爬取 3. 爬取結果存儲到MongoDB ) 歡迎報名參與!!!


推薦閱讀:

Github 上那些頂尖的貢獻組織 - 2017
致 Element UI 團隊的公開信
開源宇宙:衛星篇
今天哪個行業更能代表先進生產力發展方向?

TAG:Python | 预测 | 开源 |