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概率编程
参考资料
https://facebookincubator.github.io/prophet/
作为分享主义者(sharism),本人所有互联网发布的图文均遵从CC版权,转载请保留作者信息并注明作者a358463121专栏:http://blog.csdn.net/a358463121,如果涉及源代码请注明GitHub地址:https://github.com/358463121/。商业使用请联系作者。