【读论文】prophet

前言

时间序列预测可以用于 capacity planning, goal setting, and anomaly detection,所以挺重要,这篇论文提出了一个模型。

business forecast有两种主要方法

  • completely automatic forecasting techniques 缺点是不灵活,且不能加入专家知识。
  • analysts 往往缺乏 series forecasting 方面的知识

正文

核心公式还是加法公式

y(t)=g(t)+s(t)+h(t)+ϵty(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)=C1+exp(k(tm))g(t)=\dfrac{C}{1+\exp(-k(t-m))}

模型进行如下改进:

capacity C 是变化的(例如FaceBook的用户数量,上限是网民人数,但网民人数在变化)替换为C(T)C(T)

增长率k也是变化的。原文用了3个式子去描述,就不摘抄了。描述一下就是,增长率是分段的,然后为了函数连续,m也需要分段进行调整。

3.1.2 Linear Trend with Changepoints

就是一个线性模型 g(t)=kt+mg(t)=kt+m,然后用上面写的方法进行分段。

3.1.3 寻找分割点

上文涉及到分割点,如何计算呢:

  • 分析师根据经验去定义。
  • 按月按年等,等分
  • 随机选取分割间隔,分割间隔服从拉普拉斯分布δjLaplace(0,τ)\delta_j\sim Laplace(0,\tau)

3.2 Seasonality

s(t)=n=1N(ancos(2πntP)+bnsin(2πntP))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,然后拟合 ai,bia_i,b_i (共2N个)
可以使用AIC准则来计算N

3.3 Holidays and Events

For each holiday i, let DiD_i be the set of past and future dates for that holiday. 例如,用1代表圣诞节,2代表感恩节…,那么D1D_1就是圣诞节集合,D2D_2是感恩节集合。

如果总共L种节日,那么Z(t)Z(t)是L阶向量
Z(t)=[1(tD1),,1(tDL)]Z(t)=[1(t\in D_1),…,1(t\in D_L)]

原文没写太清楚,但h(t)h(t)应该是Z(t)Z(t)的各元素加权和,权重就是待解参数。

3.4 Model Fitting

周期项和节日项产生了多维feature,类似多维回归,优化算法选择L-BFGS

3.5 分析师的作用

  • Capacities
  • Changepoints
  • seasonality
  • Holidays
  • smoothing parameter

我的理解

  1. 整个模型实际上还是时间序列分析中的加法模型,
  2. 加法每一项都做了巧妙但不难的设计,保证一定的复杂度的同时,可解释性、可操作性都极强。
  3. 很漂亮的模型。


您的支持将鼓励我继续创作!