Prophet模型详细原理
主要是为了自己以后可以及时查看笔记,如果有小伙伴有什么想法非常欢迎一起讨论。
模型形式
prophet模型原理是
其中是趋势函数,表示周期性函数,表是节假日、假期函数,表示误差或者是噪声等。
prophet模型依据的是时间序列的分解,有两种基本的形式:
和
但是对于第二种形式,当我们考虑取对数时,很自然的就转化为第一种形式:,所以两种形式可以都作为可加模型(additive model)进行讨论。
趋势函数
对于趋势函数,有两种常用的构造方式:分段线性和分段逻辑回归。
分段logistic
先来看分段逻辑回归,对于普通的logistic,对应的响应函数是,在prophet中使用的与之类似,添加一些参数,变为其中C表示函数的最大渐进值,k表示增长率,m表示曲线的中点。
在时间序列问题中,三个参数我们一般认为是随着t变化而变化的,在现实的时间序列中,曲线的走势肯定不会一直保持不变,在某些特定的时候或者有着某种潜在的周期曲线会发生变化,存在变点,
对于设置好的S个变点,,以表示在时间戳上发生的增长率的变化量,则对于初始增长率是k,在时间时刻的增长率应该等于,如果设置指示函数,也就是,每次k确定了的话参数m也要跟着确定:
得到对应的分段logistic函数:
C(t)是需要人为限定的上线。
分段线性
分段线性使用的就是线性可加模型(LAM),对应的模型形式是:
周期函数
s(t)基于傅里叶级数提供了一个灵活的模型:
其中P表示周期的时间,如果是年的话P就是365.25,如果是周的话P就是7
节假日效应
prophet最大的创新点就是可以把涉及到的节假日单独考虑,因为节假日呈现的趋势会与平日数据呈现的规律不同。
对应的节假日效应模型形式为:
其中L表示节假日的个数,表示对应节假日的影响范围。
函数主要参数说明
参数 | 描述 |
growth | "linear"或者"logistic"两种趋势函数 |
changepoints | 包括潜在突变点的日期列表 |
n_changepoints | 如果不手动指定突变点,需要设置内置自动识别突变点的突变点数目 |
changepoint_prior_scale | 突变点选择的灵活性,解决过拟合/欠拟合的问题,越大突变点的选择越灵活 |
cap | 在使用分段逻辑回归的时候需要设置的上限 |