- Code: https://facebook.github.io/prophet/
- Prophet paper: Sean J. Taylor, Benjamin Letham (2018) Forecasting at scale. The American Statistician 72(1):37-45 (https://facebook.github.io/prophet/).
- 镜像地址 pdf
前言
时间序列预测可以用于 capacity planning, goal setting, and anomaly detection,所以挺重要,这篇论文提出了一个模型。
business forecast有两种主要方法
completely automatic forecasting techniques
缺点是不灵活,且不能加入专家知识。analysts
往往缺乏 series forecasting 方面的知识
正文
核心公式还是加法公式
$y(t)=g(t)+s(t)+h(t)+\epsilon_t$
- g是趋势性
- s是周期性(周、年等)
- h是holiday,特点是不规律,可能持续一天或数天
模型优点
- Flexibility:可以轻松调整周期和趋势
- 不需要均匀采样(对比ARIMA)
- 拟合较快
- 每个参数都有意义,都可理解
3.1 趋势项
3.1.1 Nonlinear, Saturating Growth
$g(t)=\dfrac{C}{1+\exp(-k(t-m))}$
模型进行如下改进:
capacity C 是变化的(例如FaceBook的用户数量,上限是网民人数,但网民人数在变化)替换为$C(T)$
增长率k也是变化的。原文用了3个式子去描述,就不摘抄了。描述一下就是,增长率是分段的,然后为了函数连续,m也需要分段进行调整。
3.1.2 Linear Trend with Changepoints
就是一个线性模型 $g(t)=kt+m$,然后用上面写的方法进行分段。
3.1.3 寻找分割点
上文涉及到分割点,如何计算呢:
- 分析师根据经验去定义。
- 按月按年等,等分
- 随机选取分割间隔,分割间隔服从拉普拉斯分布$\delta_j\sim Laplace(0,\tau)$
3.2 Seasonality
$s(t)=\sum\limits_{n=1}^N (a_n cos(\dfrac{2\pi nt}{P})+b_n sin(\dfrac{2\pi nt}{P}))$
P = 365.25 for yearly data or P = 7 for weekly data
先定义一个N,然后拟合 $a_i,b_i$ (共2N个)
可以使用AIC准则来计算N
3.3 Holidays and Events
For each holiday i, let $D_i$ be the set of past and future dates for that holiday. 例如,用1代表圣诞节,2代表感恩节…,那么$D_1$就是圣诞节集合,$D_2$是感恩节集合。
如果总共L种节日,那么$Z(t)$是L阶向量
$Z(t)=[1(t\in D_1),…,1(t\in D_L)]$
原文没写太清楚,但$h(t)$应该是$Z(t)$的各元素加权和,权重就是待解参数。
3.4 Model Fitting
周期项和节日项产生了多维feature,类似多维回归,优化算法选择L-BFGS
3.5 分析师的作用
- Capacities
- Changepoints
- seasonality
- Holidays
- smoothing parameter
我的理解
- 整个模型实际上还是时间序列分析中的加法模型,
- 加法每一项都做了巧妙但不难的设计,保证一定的复杂度的同时,可解释性、可操作性都极强。
- 很漂亮的模型。