2020.02.21

用了facebook的prophet的包,记录下prophet的一些调参情况。

--安装

环境python3.6。春节回家只带了windows本。Windows 10花了足足一天时间也没装上,试了windows+R和windows+anaconda+python都不行,期间还装了好多依赖包,比如R下的Rtools、tidyr,python下的stringi什么的。网上查了好多用户反馈,确有一些成功案例。尝试了网上多种可能解决error的方法,如windows默认没有管理员权限、lib路径问题等,最后压死我这个骆驼的是发现可能是C++编译器出了问题,因我一直就搞不懂windows下的C++编译器到底装在哪里,是否默认已安装。决定弃疗。总结:windows装包全靠运气。以及中间多次用到的tuna镜像真是业界良心。

队友的mac安装顺利。想到我为windows10花费的一整天,吐血。

--输入

prophet对输入的要求:The input to Prophet is always a dataframe with two columns: ds and y. The ds (datestamp) column should be of a format expected by Pandas, ideally YYYY-MM-DD for a date or YYYY-MM-DD HH:MM:SS for a timestamp. The y column must be numeric, and represents the measurement we wish to forecast.

--模型和调参

prophet主要是把数据分解了下,分为趋势+季节+节假日,其主要好处是可处理规模稍大的数据(我理解主要是原理简单),然后使用简易(就是参数少,需要研究的内容少)。预测模型只有两种linear、logistic。

重要参数changepoint_prior_scale。doc里的解释为'Adjusting trend flexibility'。If the trend changes are being overfit (too much flexibility) or underfit (not enough flexibility), you can adjust the strength of the sparse prior using the input argument changepoint_prior_scale. By default, this parameter is set to 0.05. Increasing it will make the trend more flexible. 这个参数调了很久。

做了两个不同样本的case。

case1。已有data大概30个点,第25个点左右有个转折,前半段单升后半段单降。forecast要么直接按后半段直降,要么忽略后期下降,跟着前半段升。其实forecast单升或者单降是无可厚非的,但问题存在于,单升或单降的斜率比较大。对这种前半段单升后半段单降的历史值,根据我们愚蠢人类的感性理解,forecast段可能要斜率小一些,才比较稳妥。因此开始调参。本来希望通过调整changepoint_prior_scale使得forecast能够按照上述理解降低幅度,但现实情况是有突变。一直用二分法往下找changepoint_prior_scale,无果。最后找到>0.115,单降;<0.115单升。放弃治疗。

调参结果:n_changepoints=8,changepoint_prior_scale=0.12,changepoint_range=0.9

case2。已有样本数据基本单调,相对简单。没怎么调参,这个case只是试一下(所以图看上去有点过拟合)。这种简易情况换ARIMA或者直接线性回归估计也能行。

两个case仅按照doc的功能使用,只有一个功能出了问题,画changepoints的时候,a = add_changepoints_to_plot(fig.gca(), m, forecast)报错,也是一个和pandas相关的依赖包装不上,stackoverflow上有人同样问题且目前解决不了,版本bug。手动画,无伤大雅。

--输出

可以给出向前若干forecasts的上下限值,出图样子还可以。

--总结

针对我的两个case,prophet的主要好处还是简易。

--ref

官方doc fbprophet doc 

作者关于这个包的论文,发在了PeerJ Preprints上(这个好像和PeerJ没啥关系?)fbprophet论文

btw,查了下prophet的意思,先知。

你可能感兴趣的:(2020.02.21)