Prophet:Facebook 简单高效的时间序列模型

将门创投
关注

3.1 趋势模型

首先是趋势模型 g(t)。

在 Prophet 算法里,趋势模型有两个选择,一个是基于饱和增长模型 (saturating growth model),另一个是基于分段线性函数 (piecewise linear model)。

3.1.1 饱和增长模型

Prophet 使用如下形式的饱和增长模型:

其中,C 为承载能力(如可上网人数、可处理事件等),k 为增长率,m 为偏移参数。

当 C=1,k=1,m=0 时就是大家常见的 Sigmoid 函数的形式。

在现实生活中,承载能力、增长率和偏移参数并不是一成不变的,所以作者将其转换为随时间变化的函数:

除此之外,现实中的时间序列其走势也不是不变的,在某些特定的时候会发生改变,这就需要用户去研究变点检测 (change points)。

在 Prophet 中,变点的位置是需要设置的,每一段的趋势和走势也会随着变点的设置而改变。目前有两种方法去设置变点,一种是人工指定的方式,另一种是通过算法来自动选择。

假设现在有 S 个变点,变点的时间戳为

每个变点都会出现增长率的变化  。如果初始增长率为 k 的话,那么时间戳 t 上的增长率为:

其中

为指示函数:

一旦初始增长率 k 确定,那么偏移参数 m 也会随之确定。

既然是分段函数,我们也需要处理好分段边界:

所以分段逻辑回归模型为:

此外我们含有一个重要参数 C(t),该参数需要用户根据市场规模来进行调整。

3.1.2 分段线性模型我们再来看一下分段线性函数,根据

给出基本模型:

其中 k 表示增长率,

表示增长率的变化量,m 为偏移参数,

值得注意的是,分段线性函数并没有表示承载能力的

参数。

3.1.3 序列中的变点变点可以由分析师人工设定,相应的参数有变点的位置、个数、增长的变化率。

当然,也可以根据候选对象进行自动选择。自动选择主要是利用了先验知识

,参数

控制模型变换的灵活性,当

趋于 0 时,增长函数将蜕变为 Logistic 函数或者线性函数。默认情况下,Prophet 会在时间序列前 80% 的范围里,通过等份的方法找到 25 个变点,而变点的增长率满足 Laplace 分布

3.1.4 趋势预测现在,历史 T 个数据点中有 S 个变点,且对应的增长率的变化量服从

,但预测未来也需要考虑未来的变点位置。

作者通过历史数据推断出方差,从而替换

来模拟未来的速率变化。在一个完全贝叶斯框架下,可以通过先验知识来获得它的后验概率,或者我们也可以用最大似然估计来评估速率尺度参数:

未来变点位置将通过随机抽样的方法使变点的平均频率与历史数据相匹配:

因此,我们保证了未来和历史具有相同平均频率和变点变化率,从而衡量预测未来趋势中的不确定性,一旦从数据中推断出了 λ ,我们便可以使用生成模型来模拟未来可能的趋势,并使用模拟的趋势来计算不确定区间。

3.2 季节性模型

季节性(这里指周期性)是大部分时间序列都会考虑其中的,因为时间序列通常会随着天、周、月、年等的变化而呈现周期性变化。为了拟合和预测这些数据,作者制定了季节模型。

作者利用傅立叶级数来提供一个灵活的周期性影响:

其中,P 为周期(一年 P=365.25,一个星期 P=7);N 为经验所得(年 N=10,周N=3)。

我们另傅立叶级数的参数为

,则可以用这个来构造一个季节性向量矩阵。

例如当 N=10 时:

季节项表示为:

作者用标准化

对参数

进行初始化, σ 为可设置参数,值越大,季节效应越明显;值越小,季节效应越不明显。

声明: 本文由入驻OFweek维科号的作者撰写,观点仅代表作者本人,不代表OFweek立场。如有侵权或其他问题,请联系举报。
侵权投诉

下载OFweek,一手掌握高科技全行业资讯

还不是OFweek会员,马上注册
打开app,查看更多精彩资讯 >
  • 长按识别二维码
  • 进入OFweek阅读全文
长按图片进行保存