一、模型概述
1.1 适用场景
A modular regression model with interpretable parameters 模块化回归、有可解释参数模型
Facebook开源的时间序列预测算法,适用于具有规律的数据,适用情景如下:
- a.有至少几个月(最好是一年)的每小时、每天或每周观察的历史数据;
- b.有多种人类规模级别的较强的季节性趋势:每周的一些天和每年的一些时间;
- c.有事先知道的以不定期的间隔发生的重要节假日(比如国庆节);
- d.缺失的历史数据或较大的异常数据的数量在合理范围内;
- e.有历史趋势的变化(比如因为产品发布);
- f.对于数据中蕴含的非线性增长的趋势都有一个自然极限或饱和状态。
1.2 模型输入输出
3、Prophet 算法的输入输出
输出图包括:
- 原始的时间序列离散点
- 使用时间序列来拟合所得到的取值
- 时间序列的一个置信区间,(合理的上界和下界)
- prophet 所做的事情就是:
- 输入已知的时间序列的时间戳和相应的值;
- 输入需要预测的时间序列的长度;
- 输出未来的时间序列走势。
- 输出结果可以提供必要的统计指标,包括拟合曲线,上界和下界等。
传入prophet的数据分为两列 ds 和 y ,ds表示时间序列的时间戳,y表示时间序列的取值
其中:
- ds是pandas的日期格式,样式类似与
YYYY-MM-DD for a date or YYYY-MM-DD HH:MM:SS
; - y列必须是数值型,代表着我们希望预测的值。
通过 prophet 的计算,可以计算出:
- yhat,表示时间序列的预测值
- yhat_lower,表示预测值的下界
- yhat_upper,表示预测值的上界
二、基本原理
这是Generalized Additive Model(GAM)模型的特例,通过对各项的拟合,再进行累加得到预测值。
模型整体由三部分组成:
- g(t): 趋势项,描述growth(增长趋势),即时间序列非周期的变化趋势
- s(t): 周期项,描述seasonality(季节趋势),即时间序列周期的变化
- h(t): 假期项,描述holidays(节假日对预测值的影响),即周期中偶发的、无固定周期的假日对预测值的影响。
- ϵt:噪声项/误差项,随机的未预测波动。假设服从高斯分布(Gaussian distribution)/正态分布(Normal distribution)。
Prophet 算法就是通过拟合这几项,然后最后把它们累加起来就得到了时间序列的预测值。
2.1 趋势项(The trend model)
2.1.1 概述
趋势项用于描述时间序列非周期的变化趋势,包括基于逻辑回归函数的饱和增长模型(saturating growth model)、线性增长模型(piecewise linear model)。
2.1.2 基于逻辑回归的趋势项:
其中,C表示承载能力(capacity),k表示增长率(growth rate),m表示偏移量(offset parameter)
- 承载能力C(capacity):
- 用函数C(t)描述的随时间变化的函数,对增长的上限进行约束
- 在使用 Prophet 的 growth = ‘logistic’ 的时候,需要提前设置好 C(t) 的取值才行