深入剖析时序Prophet模型:工作原理与源码解析|得物技术

随着得物业务的快速发展,积累了大量的时序数据,这些数据对精细化运营,提升效率、降低成本有着重要作用。在得物的时序数据挖掘场景中,时序预测Prophet模型使用频繁,本文对Prophet的原理和源码进行深入分析,欢迎阅读和交流。

一、引入

时间序列是指按照时间先后顺序收集或观测的一系列数据点,这类数据通常都具有一定时间相关性,基于这种顺序性,我们可以对时间序列进行多种数据挖掘任务,包括分类、聚类、异常检测和预测等。

时序任务在许多领域都有广泛的应用,包括金融、商业、医疗、气象、工业生产等。在得物的业务场景中,应用最为广泛的是时序预测问题,本文介绍的内容主要和时序预测相关。

时序预测利用历史时间序列数据构建数学统计、机器学习或深度学习等模型,来预测未来的观测值,其目的是为了对时间序列的趋势、周期性、季节性、特殊事件等规律进行捕捉并预测,从而指导业务人员做出商业、运营决策。以下是时间序列预测在得物各业务域的需求情况,总之哪里有指标,哪里就有预测。

解决时序预测问题的算法研究历史非常悠久,是备受关注和持续发展的领域。根据算法原理和方法进行分类,时序预测模型可以分为以Holt-winters,ARIMA为代表的经典统计模型,用单一时序变量进行参数拟合;以线性回归、树回归为代表的传统机器学习算法,在有监督学习的框架下,构建特征来预测目标值;以及运用CNN、RNN、Transform等特征提取器,在Encoder-Decoder框架下进行预测的深度学习方法。

本文将介绍的Prophet模型和上述三种分类算法有所差异,但方法和原理上也结合了参数拟合、机器学习的思想,它将时序分解成趋势变化、季节性、节假日、外部回归因子之和,是结合时序分解的加法模型预测算法。

Prophet于2017年由Facebook’s Core Data Science team开源发布,尽管从时间上来看不是很新的模型,但是在得物实际的时序预测场景中取得了不俗的效果。目前网上的博客主要介绍了模型的基本原理、使用方式,在使用过程中笔者仍有一些疑问,例如:

  • Prophet模型是如何进行训练和预测?
  • 模型如何进行概率预测,得到预测的上界和下界?

笔者带着这些问题阅读了Prophet的源码,发现了一些论文中没有提到的细节和流程,对以上问题有了答案,这里分享给大家。代码参考Prophet python语言实现版本v1.1.5。

二、准备知识

如果读者有机器学习基础,熟悉最优化计算方法、贝叶斯估计、MCMC采样可以跳过这一小节,不熟悉的读者可以按照这一小节提到的概念搜索相关资料。

参数估计

通俗的说预测就是利用已知数据来推测产生该数据的模型和参数,然后用推测的模型和参数产生下一个结果。对于模型的参数估计方法,有频率学派和贝叶斯学派之分。频率学派认为模型参数是个固定的值。而贝叶斯学派是认为模型参数不是一个固定的值,而是源自某种潜在分布,希望从数据中推知该分布。

用大家最熟悉的线性回归为例,假设噪声服从正态分布:

在概率视角下,线性回归可以表示为:

其中θ=(w0,w,σ^2)是模型所有的参数。

在频率学派视角下θ是一个常量,可以用极大似然估计来估计参数值。其思想是对于N个观测样本来说使得其发生概率最大的参数就是最好的参数。整个观测集发生的概率为:

由于连乘不容易参数求解,可以采用最大对数似然方法,线性回归有解析解,我们可以直接求导计算得到最优的θ_hat:

在贝叶斯学派视角下θ是一个随机变量而不是一个固定的值,由一个先验分布进行约束,通过利用已知样本进行统计推断。贝叶斯学派认为一个好的θ不仅要考虑似然函数P(X|θ)还要考虑θ的先验分布P(θ),即最大化P(X|θ)P(θ)。由于X的先验分布是固定的常数,最大化函数可以写成P(X|θ)P(θ)/P(X),根据贝叶斯公式可知P(X|θ)P(θ)/P(X)=P(θ|X),即找到一个θ_hat能够最大化后验概率P(θ|X)。

求解参数θ可以选择使用最大后验估计(Maximum A Posterior, MAP)或者贝叶斯估计两种方法,最大后验估计直接求解让后验概率最大的θ。这样问题就转化还成一个约束问题,实际中可以使用梯度下降、牛顿法或者L-BFGS拟牛顿法等数值优化方法进行求解。

从最大似然估计和最大后验估计来看求解的参数θ是一个确定值,但贝叶斯估计不是直接估计θ,而是估计θ的分布。在最大后验估计中由于求θ极值过程中与P(X)无关,分母可以被忽略。但是在贝叶斯估计中是求整个后验概率的分布,分母不能忽略。对于连续型随机变量有:

则贝叶斯公式变为:

分母是积分形式一般没有解析解,直接计算是非常困难的。于是引入马尔可夫链蒙特卡洛算法(Markov Chain Monte Carlo, MCMC)进行采样,从而得到各个参数的一系列采样值。

Stan开源框架

https://mc-stan.org/ : Stan is a state-of-the-art platform for statistical modeling and high-performance statistical computation.

Stan是一个用于贝叶斯统计建模和推断的开源框架,包含了定义概率模型的编程语言,以及高效执行贝叶斯推断的算法库,被广泛用于统计建模和机器学习任务,它集成了上文谈到的MAP、MCMC等求解算法,在Python中可以通过PyStan包来使用 Stan。

Prophet基本原理

Prophet基于时间序列分解和参数拟合来实现高效的训练和预测。首先Prophet定义了一个关于时间步t的加法函数,

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值