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​δj​k+∑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​(an​cos(P2πnt​)+bn​sin(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模型详细原理相关推荐

  1. 云音乐用户增长预测之Prophet模型

    Prophet模型是Meta公司开发并应用于Facebook/Twitter等产品的开源时间序列模型,适用于MAU/DAU和新增的预测.在云音乐的业务中,此模型不仅能用于DAU预测,也能用于评估活动和 ...

  2. 时间序列模型Prophet使用详细讲解

    之前我们已经讲过了如何在Windows系统下安装Python版本的Prophet.详细见这里. 接下来的几个部分,我们说下如何使用Prophet,以此来体验下Prophet的丰富内容.内容会比较多,主 ...

  3. 大白话Prophet模型以及简单的应用(一)

    Prophet 是基于加法模型预测时间序列数据.适合于具有季节性影响的时间序列和具有多个季节的历史数据.Prophet对数据中的异常值和缺失值以及趋势的强烈变化有着较好的鲁棒性(耐操性),所以通常情况 ...

  4. Prophet模型的简介以及案例分析

    目录 前言 一.Prophet安装以及简介 二.适用场景 三.算法的输入输出 四.算法原理 五.使用时可以设置的参数 六.学习资料参考 七.模型应用 7-1.股票收盘价格预测 7-1-1.导入相关库 ...

  5. python 时间序列prophet 模型分析_如何评价facebook开源的prophet时间序列预测工具?...

    近期整理了一下 Facebook 的 Prophet,个人感觉这是一个非常不错的时间序列预测工具. Prophet 简介 Facebook 去年开源了一个时间序列预测的算法,叫做 fbprophet, ...

  6. python 靶心_手把手教你使用Python实战反欺诈模型|原理+代码

    原标题:手把手教你使用Python实战反欺诈模型|原理+代码 作者 | 萝卜 来源 | 早起Python(ID: zaoqi-python) 本文将基于不平衡数据,使用Python进行 反欺诈模型数据 ...

  7. 【经典书】概率图模型:原理与技术

    来源:专知 本文为书籍,建议阅读5分钟概率图模型将概率论与图论相结合,是当前非常热门的一个机器学习研究方向. 概率图模型将概率论与图论相结合,是当前非常热门的一个机器学习研究方向.<概率图模型: ...

  8. cad怎么表示出一个孔_怎么训练出一个NB的Prophet模型

    上篇<神器の争>主要是介绍Prophet的特点以及prophet入门的一些注意事项,但离真正的实际运用还有段距离.本篇主要讲解实际运用中Prophet调参的主要步骤以及一些本人实际经验. ...

  9. P2P技术详解(一):NAT详解——详细原理、P2P简介(转)

    这是一篇介绍NAT技术要点的精华文章,来自华3通信官方资料库,文中对NAT技术原理的介绍很全面也很权威,对网络应用的应用层开发人员而言有很高的参考价值. <P2P技术详解>系列文章 ➊ 本 ...

最新文章

  1. 【收藏】Linux系统常用命令速查手册(附赠PDF档)
  2. ie浏览器修复_[图]三大Windows 10获得累积更新 修复IE和无法运行Access 95数据库问题...
  3. “你们对编程和头发一无所知。”
  4. ElasticStack系列之八 _source 字段
  5. flask mysql项目模板渲染_21. Flask 模板 - 宏、继承、包含
  6. servlet为什么要别名呢_servlet --2
  7. 数据千万条,安全第一条
  8. java统计每个单词单词出现的次数_(java)统计若干段英文中的单词数量,并统计每个单词出现的次数按降序排序。...
  9. VS2008编辑器代码适合的配色方案下载
  10. 谷歌开源内部代码评审规范
  11. 英语学渣如何看懂全英文的芯片数据手册
  12. linux飞信机器人,在Nagios使用飞信机器人发送警报
  13. 查看服务器显卡GPU型号
  14. 内网渗透小技巧(转载)
  15. PHP即充宝v3.0实例
  16. 北京强化养老行业诚信自律 从业者禁止侮辱、虐待老人
  17. mysql异地多活方案_数据库异地多活解决方案
  18. REINFORCEMENT LEARNING USING QUANTUM BOLTZMANN MACHINES利用量子波兹曼机进行强化学习
  19. Nginx-http-flv-module流媒体服务器搭建+模拟推流+flv.js在前端html和Vue中播放HTTP-FLV视频流
  20. Qt音视频开发01-共享解码线程(耗时一年/性能凶残/至臻完美)

热门文章

  1. 高管 如何做一个讲师
  2. docker login,docker 登录私有库下载镜像,docker pull
  3. 第十三章、Designer中的按钮Buttons组件详解
  4. mx3 android6,魅族Flyme6全面推送!网友升级后傻了:竟还是安卓5.1
  5. ElasticSearch 慕课网(一)
  6. springmvc 对象传参
  7. 100天搞定机器学习(100-Days-Of-ML)(十)Numpy数组布尔掩码和花哨的索引
  8. buildroot 编译项目出现的一些error
  9. CTFshow-菜狗杯WP
  10. 深入理解Callback函数