Skip to content

Prophet面试?

1. 简要介绍Prophet

常见的时间序列分解方法:

将时间序列分成季节项St,趋势项Tt,剩余项Rt,即对所有的t?

yt=St+Tt+Rtyt=St×Tt×Rtlnyt=lnSt+lnTt+lnRt

fbprophet 的在此基础上,添加了节日项?

y(t)=g(t)+s(t)+h(t)+ϵt

2. 趋势项模?

  • 基于逻辑回归

    sigmoid 函数?

    σ(x)=1/(1+ex)

    prophet在逻辑回归的基础上添加了随时间变化的参数,那么逻辑回归就可以改写成?

    f(x)=C(t)(1+ek(t)(xm(t)))

    这里?C 称为曲线的最大渐近值, k 表示曲线的增长率?m$ 表示曲线的中点。当 $$ C=1, k=1, m=0

    ?sigmoid?g(t)=C(t)1+exp((k+a(t)tδ)(t(m+a(t)Tγ)

    k表示变化?

    aj(t)表示指示函数?

    aj(t)={1, if tsj0, otherwise 

    δj表示在时间戳sj上的增长率的变化?

    γj确定线段边界

    γj=(sjm<jγ)(1k+<jδk+jδ)

    其中?

    a(t)=(a1(t),,aS(t))T,δ=(δ1,,δS)T,γ=(γ1,,γS)T

3. 变点的选择

?Prophet 算法中,需要给出变点的位置,个数,以及增长的变化率?

  • changepoint_range

    changepoint_range 指的是百分比,需要在?changepoint_range 那么长的时间序列中设置变?

  • n_changepoint

    n_changepoint 表示变点的个数,在默认的函数中是 n_changepoint = 25

  • changepoint_prior_scale?

    changepoint_prior_scale 表示变点增长率的分布情况

    δjLaplace(0,τ)

    T就是 change_point_scale

4. 对未来的预估

对于已知的时间序列,可以手动设置s个变?

对于预测的数据模型使用Poisson分布找到新增的变点,然后与已知的变点进行拼接

5. 季节性趋?

时间序列通常会随着天,周,月,年等季节性的变化而呈现季节性的变化,也称为周期性的变化

prophet算法使用傅立叶级数来模拟时间序列的周期?

P表示时间序列的周期, P=365.25表示以年为周期,P=7表示以周为周期。它的傅立叶级数的形式都是:

s(t)=n=1N(ancos(2πntP)+bnsin(2πntP))

6. 节假日效应(holidays and events?

除了周末,同样有很多节假日,而且不同的国家有着不同的假期,不同的节假日可以看成相互独立的模型,并且可以为不同的节假日设置不同的前后窗口值,表示该节假日会影响前后一段时间的时间序列?

h(t)=Z(t)κ=i=1Lκi1{tDi}

其中?Z(t)=\left(1_{\left{t \in D_{1}\right}}, \cdots, 1_{\left{t \in D_{L}\right}}\right), \boldsymbol{\kappa}=\left(\kappa_{1}, \cdots, \kappa_{L}\right)^{T}?κNormal(0,v2)

并且该正态分布是受到v = holidays_prior_scale 这个指标影响的。默认值是 10,当值越大时,表示节假日对模型的影响越大;当值越小时,表示节假日对模型的效果越小

7. 参数

?Prophet 中,用户一般可以设置以下四种参数:

  1. Capacity:在增量函数是逻辑回归函数的时候,需要设置的容量值?

  2. Change Points:可以通过 n_changepoints ?changepoint_range 来进行等距的变点设置,也可以通过人工设置的方式来指定时间序列的变点?

  3. 季节性和节假日:可以根据实际的业务需求来指定相应的节假日?

  4. 光滑参数?

    τ = changepoint_prior_scale 可以用来控制趋势的灵活度

    σ = seasonality_prior_scale 用来控制季节项的灵活度,

    v = holidays prior scale 用来控制节假日的灵活度?

参考资?

https://zhuanlan.zhihu.com/p/52330017