最近又发现一个很有意思的工具——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)
有兴趣获得以上完整代码和演示数据文件的同学,请在本公众号私信回复“预测”两个字自动获得下载链接。