1. Prophet简介
Facebook 在2017年开源了一个叫fbprophet的时间序列预测的算法,Facebook 所提供的 prophet 算法Prophet是Facebook发布的基于可分解(趋势+季节+节假日)模型的开源库。该算法支持自定义季节和节假日,解决了像春节、618和双十一这种周期性节假日的指标预测难题。prophet不仅可以处理时间序列存在一些异常值的情况,也可以处理部分缺失值的情形,还能够几乎全自动地预测时间序列未来的走势。而且Prophet包提供了直观易调的参数,即使是对缺乏模型知识的人来说,也可以据此对各种商业问题做出有意义的预测。它的官方网址与基本介绍来自于:
Github:github.com/facebook/pro
官方网址:facebook.github.io/prop
2. Prophet算法原理
数据的输入和输出
Prophet 的输入包含两列数据:ds 和 y 。ds 列为日期(YYYY-MM-DD)或者是具体的时间点(YYYY-MM-DD HH:MM:SS)。y 列是数值变量,即预测量。
算法实现
一般来说,在实际生活和生产环节中,除了季节项,趋势项,剩余项之外,通常还有节假日的效应。所以,在 prophet 算法里面同时考虑了以上四项:
表示趋势项,它表示时间序列在非周期上面的变化趋势;
表示周期项,或者称为季节项,一般来说是以周或者年为单位;
表示节假日项,表示在当天是否存在节假日;
表示误差项或者称为剩余项。Prophet 算法就是通过拟合这几项,然后最后把它们累加起来就得到了时间序列的预测值。
趋势项模型
趋势是对时间序列中非周期性部分的趋势进行拟合。在 Prophet 算法里面,趋势项有两个重要的函数,一个是基于逻辑回归函数,另一个是基于分段线性函数。这里来介绍一下基于逻辑回归的趋势项是怎么做的。
逻辑回归函数形式为: 如果增加一些参数的话,那么逻辑回归就可以改写成:这里的分别为曲线的最大渐近值,曲线的增长率,曲线的中点。当 时,恰好就是大家常见的 sigmoid 函数的形式。那么这里增加了参数的一般函数形式就为:
在现实环境中,参数 不可能都是常数,而很有可能是随着时间的迁移而变化的,因此,在 Prophet 里面,作者考虑把这三个参数全部换成了随着时间而变化的函数,也就是
通常在生产生活中,我们希望某指标在整个预测区间内持续增长或下降。但也会有最大最小容量的限制,比如某app预测在某地未来12个月的UV,最大UV只能接近该地区人数。因此分析师在调参时可以定义时间序列预测的容量限制为C(t)。
另外,在现实的时间序列中,指标经常会因