Prophet模型详细原理
Prophet模型详细原理
主要是为了自己以后可以及时查看笔记,如果有小伙伴有什么想法非常欢迎一起讨论。
模型形式
prophet模型原理是y(t)=g(t)+s(t)+h(t)+ϵy(t) = g(t)+s(t)+h(t)+\epsilon y(t)=g(t)+s(t)+h(t)+ϵ
其中g(t)g(t)g(t)是趋势函数,s(t)s(t)s(t)表示周期性函数,h(t)h(t)h(t)表是节假日、假期函数,ϵ\epsilonϵ表示误差或者是噪声等。
prophet模型依据的是时间序列的分解,有两种基本的形式:
y=g(t)+s(t)+h(t)+ϵy=g(t)+s(t)+h(t)+\epsilony=g(t)+s(t)+h(t)+ϵ和y=g(t)×s(t)×h(t)×ϵy=g(t)\times s(t)\times h(t)\times\epsilony=g(t)×s(t)×h(t)×ϵ
但是对于第二种形式,当我们考虑取对数时,很自然的就转化为第一种形式:ln(y)=ln(g(t))+ln(s(t))+ln(h(t))+ln(ϵ)ln(y) = ln(g(t))+ln(s(t))+ln(h(t))+ln(\epsilon)ln(y)=ln(g(t))+ln(s(t))+ln(h(t))+ln(ϵ),所以两种形式可以都作为可加模型(additive model)进行讨论。
趋势函数g(t)g(t)g(t)
对于趋势函数g(t)g(t)g(t),有两种常用的构造方式:分段线性和分段逻辑回归。
分段logistic
先来看分段逻辑回归,对于普通的logistic,对应的响应函数是11+e−x\frac{1}{1+e^{-x}}1+e−x1,在prophet中使用的与之类似,添加一些参数,变为f(x)=C1+e−k(x−m)f(x)=\frac{C}{1+e^{-k(x-m)}}f(x)=1+e−k(x−m)C其中C表示函数的最大渐进值,k表示增长率,m表示曲线的中点。
在时间序列问题中,三个参数我们一般认为是随着t变化而变化的,在现实的时间序列中,曲线的走势肯定不会一直保持不变,在某些特定的时候或者有着某种潜在的周期曲线会发生变化,存在变点,i.e.i.e.i.e. change point。在实际应用prophet模型时,变点可以认为设置,也可以使用prophet自带的参数,默认prophet是25个变点。
对于设置好的S个变点,sj,1≤j≤Ss_j,\ 1\leq j\leq Ssj, 1≤j≤S,以δj\delta_jδj表示在sjs_jsj时间戳上发生的增长率的变化量,则对于初始增长率是k,在时间ttt时刻的增长率应该等于k+∑j:t>sjδjk+\sum_{j:t>s_j}\delta_jk+∑j:t>sjδj,如果设置指示函数a:={1,forj≥sj0,otherwise\bm{a}:=\left\{\begin{aligned} 1&,\ for\ j\geq s_j\\ 0&,\ otherwise\\ \end{aligned}\right.a:={10, for j≥sj, otherwise,也就是k+aTδk+\bm{a}^T\bm{\delta}k+aTδ,每次k确定了的话参数m也要跟着确定:
γj=(sj−m−∑l<jγl)×(1−k+∑l<jδjk+∑l≤jδj)\gamma_j=(s_j-m-\sum_{l<j}\gamma_l)\times(1-\frac{k+\sum_{l<j}\delta_j}{k+\sum_{l\leq j}\delta_j})γj=(sj−m−l<j∑γl)×(1−k+∑l≤jδjk+∑l<jδj)
得到对应的分段logistic函数:g(t)=C(t)1+exp(−(k+a(t)Tδ)×(t−(m+a(t)Tγ)))g(t)=\frac{C(t)}{1+exp(-(k+\bm{a(t)}^T\bm{\delta})\times(t-(m+\bm{a(t)}^T\bm{\gamma})))}g(t)=1+exp(−(k+a(t)Tδ)×(t−(m+a(t)Tγ)))C(t)
C(t)是需要人为限定的上线。
分段线性
分段线性使用的就是线性可加模型(LAM),对应的模型形式是:
g(t)=(k+a(t)Tδ)×(t+(m+a(t)Tγ))g(t)=(k+\bm{a(t)^T\delta})\times(t+(m+\bm{a(t)^T\gamma}))g(t)=(k+a(t)Tδ)×(t+(m+a(t)Tγ))
周期函数s(t)s(t)s(t)
s(t)基于傅里叶级数提供了一个灵活的模型:
s(t)=∑n=1N(ancos(2πntP)+bnsin(2πntP))s(t)=\sum_{n=1}^{N}(a_n\cos(\frac{2\pi nt}{P})+b_n\sin(\frac{2\pi nt}{P}))s(t)=n=1∑N(ancos(P2πnt)+bnsin(P2πnt))
其中P表示周期的时间,如果是年的话P就是365.25,如果是周的话P就是7
节假日效应h(t)h(t)h(t)
prophet最大的创新点就是可以把涉及到的节假日单独考虑,因为节假日呈现的趋势会与平日数据呈现的规律不同。
对应的节假日效应模型形式为:
h(t)=Z(t)κ=∑i=1Lκi⋅I{∈Di}h(t)=Z(t)\kappa=\sum_{i=1}^{L}\kappa_i\cdot I_{\{\in D_i\}}h(t)=Z(t)κ=i=1∑Lκi⋅I{∈Di}
其中L表示节假日的个数,κi\kappa_iκi表示对应节假日的影响范围。
函数主要参数说明
参数 | 描述 |
---|---|
growth | "linear"或者"logistic"两种趋势函数 |
changepoints | 包括潜在突变点的日期列表 |
n_changepoints | 如果不手动指定突变点,需要设置内置自动识别突变点的突变点数目 |
changepoint_prior_scale | 突变点选择的灵活性,解决过拟合/欠拟合的问题,越大突变点的选择越灵活 |
cap | 在使用分段逻辑回归的时候需要设置的上限 |
Prophet模型详细原理相关推荐
- 云音乐用户增长预测之Prophet模型
Prophet模型是Meta公司开发并应用于Facebook/Twitter等产品的开源时间序列模型,适用于MAU/DAU和新增的预测.在云音乐的业务中,此模型不仅能用于DAU预测,也能用于评估活动和 ...
- 时间序列模型Prophet使用详细讲解
之前我们已经讲过了如何在Windows系统下安装Python版本的Prophet.详细见这里. 接下来的几个部分,我们说下如何使用Prophet,以此来体验下Prophet的丰富内容.内容会比较多,主 ...
- 大白话Prophet模型以及简单的应用(一)
Prophet 是基于加法模型预测时间序列数据.适合于具有季节性影响的时间序列和具有多个季节的历史数据.Prophet对数据中的异常值和缺失值以及趋势的强烈变化有着较好的鲁棒性(耐操性),所以通常情况 ...
- Prophet模型的简介以及案例分析
目录 前言 一.Prophet安装以及简介 二.适用场景 三.算法的输入输出 四.算法原理 五.使用时可以设置的参数 六.学习资料参考 七.模型应用 7-1.股票收盘价格预测 7-1-1.导入相关库 ...
- python 时间序列prophet 模型分析_如何评价facebook开源的prophet时间序列预测工具?...
近期整理了一下 Facebook 的 Prophet,个人感觉这是一个非常不错的时间序列预测工具. Prophet 简介 Facebook 去年开源了一个时间序列预测的算法,叫做 fbprophet, ...
- python 靶心_手把手教你使用Python实战反欺诈模型|原理+代码
原标题:手把手教你使用Python实战反欺诈模型|原理+代码 作者 | 萝卜 来源 | 早起Python(ID: zaoqi-python) 本文将基于不平衡数据,使用Python进行 反欺诈模型数据 ...
- 【经典书】概率图模型:原理与技术
来源:专知 本文为书籍,建议阅读5分钟概率图模型将概率论与图论相结合,是当前非常热门的一个机器学习研究方向. 概率图模型将概率论与图论相结合,是当前非常热门的一个机器学习研究方向.<概率图模型: ...
- cad怎么表示出一个孔_怎么训练出一个NB的Prophet模型
上篇<神器の争>主要是介绍Prophet的特点以及prophet入门的一些注意事项,但离真正的实际运用还有段距离.本篇主要讲解实际运用中Prophet调参的主要步骤以及一些本人实际经验. ...
- P2P技术详解(一):NAT详解——详细原理、P2P简介(转)
这是一篇介绍NAT技术要点的精华文章,来自华3通信官方资料库,文中对NAT技术原理的介绍很全面也很权威,对网络应用的应用层开发人员而言有很高的参考价值. <P2P技术详解>系列文章 ➊ 本 ...
最新文章
- 【收藏】Linux系统常用命令速查手册(附赠PDF档)
- ie浏览器修复_[图]三大Windows 10获得累积更新 修复IE和无法运行Access 95数据库问题...
- “你们对编程和头发一无所知。”
- ElasticStack系列之八 _source 字段
- flask mysql项目模板渲染_21. Flask 模板 - 宏、继承、包含
- servlet为什么要别名呢_servlet --2
- 数据千万条,安全第一条
- java统计每个单词单词出现的次数_(java)统计若干段英文中的单词数量,并统计每个单词出现的次数按降序排序。...
- VS2008编辑器代码适合的配色方案下载
- 谷歌开源内部代码评审规范
- 英语学渣如何看懂全英文的芯片数据手册
- linux飞信机器人,在Nagios使用飞信机器人发送警报
- 查看服务器显卡GPU型号
- 内网渗透小技巧(转载)
- PHP即充宝v3.0实例
- 北京强化养老行业诚信自律 从业者禁止侮辱、虐待老人
- mysql异地多活方案_数据库异地多活解决方案
- REINFORCEMENT LEARNING USING QUANTUM BOLTZMANN MACHINES利用量子波兹曼机进行强化学习
- Nginx-http-flv-module流媒体服务器搭建+模拟推流+flv.js在前端html和Vue中播放HTTP-FLV视频流
- Qt音视频开发01-共享解码线程(耗时一年/性能凶残/至臻完美)