初识Prophet模型(一)-- 理论篇

目录

1、Prophet 简介
2、Prophet 适用场景
3、Prophet 算法的输入输出
4、Prophet 算法原理
5、Prophet 使用时可设置的参数
6、Prophet 学习资料参考
7、Prophet 模型应用
  • 7.0 背景描述
  • 7.1 导入数据
  • 7.2 拟合模型
  • 7.3 预测(使用默认参数)
  • 7.4 趋势突变点
  • 7.5 季节性、假期效应
  • 7.6 模型诊断(内置方法)
  • 7.7 模型评估

正文

1、Prophet 简介

fbprophet是facebook开源的一个时间序列预测算法。

prophet库可以做的

  • Saturating Forecasts
  • Trend Changepoints
  • Seasonality, Holidays Effects
  • Multiplicative Seasonality
  • Uncertainty Intervals
  • Outliers
  • Non-Daily Data
  • Diagnostics

2、Prophet 适用场景

Prophet适用于具有明显的内在规律的商业行为数据,例如:有如下特征的业务问题:

  • a.有至少几个月(最好是一年)的每小时、每天或每周观察的历史数据;
  • b.有多种人类规模级别的较强的季节性趋势:每周的一些天和每年的一些时间;
  • c.有事先知道的以不定期的间隔发生的重要节假日(比如国庆节);
  • d.缺失的历史数据或较大的异常数据的数量在合理范围内;
  • e.有历史趋势的变化(比如因为产品发布);
  • f.对于数据中蕴含的非线性增长的趋势都有一个自然极限或饱和状态。

3、Prophet 算法的输入输出

0.png

上图为一个时间序列场景:

  • 黑色表示原始的时间序列离散点

  • 深蓝色的线表示使用时间序列来拟合所得到的取值

  • 浅蓝色的线表示时间序列的一个置信区间,也就是所谓的合理的上界和下界

  • prophet 所做的事情就是:

    • 输入已知的时间序列的时间戳和相应的值;

    • 输入需要预测的时间序列的长度;

    • 输出未来的时间序列走势。

    • 输出结果可以提供必要的统计指标,包括拟合曲线,上界和下界等。

传入prophet的数据分为两列 dsy ,ds表示时间序列的时间戳,y表示时间序列的取值

其中:

  • ds是pandas的日期格式,样式类似与YYYY-MM-DD for a date or YYYY-MM-DD HH:MM:SS

  • y列必须是数值型,代表着我们希望预测的值。

通过 prophet 的计算,可以计算出:

  • yhat,表示时间序列的预测值

  • yhat_lower,表示预测值的下界

  • yhat_upper,表示预测值的上界

4、Prophet 算法原理

算法模型:
$ y(t)=g(t)+s(t)+h(t)+\epsilon_{(t)} $

模型整体由三部分组成:

  • growth(增长趋势)
  • seasonality(季节趋势)
  • holidays(节假日对预测值的影响)

其中:

  • g(t) 表示趋势项,它表示时间序列在非周期上面的变化趋势;
  • s(t) 表示周期项,或者称为季节项,一般来说是以周或者年为单位;
  • h(t) 表示节假日项,表示时间序列中那些潜在的具有非固定周期的节假日对预测值造成的影响;
  • $\epsilon_{t} $即误差项或者称为剩余项,表示模型未预测到的波动, $\epsilon_{t} $服从高斯分布;

Prophet 算法就是通过拟合这几项,然后最后把它们累加起来就得到了时间序列的预测值。

4.1 趋势项模型$ g(t)$

趋势项有两个重要的函数,一个是基于逻辑回归函数的(非线性增长),另一个是基于分段线性函数的(线性增长)

4.1.1 基于逻辑回归的趋势项:

$ g(t) = \frac{C(t)}{1+exp(-(k+\boldsymbol{a}(t)^{T}\boldsymbol{\delta}) \cdot (t - (m+\boldsymbol{a}(t)^{T}\boldsymbol{\gamma})} , , \boldsymbol{a}(t) = (a_{1}(t),\cdots,a_{S}(t))^{T}, \boldsymbol{\delta} = (\delta_{1},\cdots,\delta_{S})^{T}, \boldsymbol{\gamma} = (\gamma_{1},\cdots,\gamma_{S})^{T}$

其中,

  • C(t)表示承载量:

    • 它是一个随时间变化的函数,限定了所能增长的最大值
    • 在使用 Prophet 的 growth = ‘logistic’ 的时候,需要提前设置好 C(t) 的取值才行
  • k 表示增长率:

    • 在现实的时间序列中,曲线的走势肯定不会一直保持不变,在某些特定的时候或者有着某种潜在的周期曲线会发生变化,模型定义了增长率k发生变化时对应的点,将其称作changepoints。

    • 在 Prophet 里面,是需要设置变点的位置的,而每一段的趋势和走势也是会根据变点的情况而改变的。在程序里面有两种方法,一种是通过人工指定的方式指定变点的位置;另外一种是通过算法来自动选择。在默认的函数里面,Prophet 会选择 n_changepoints = 25 个变点,然后设置变点的范围是前 80%,也就是在时间序列的前 80% 的区间内会设置变点。之后还要看一些边界条件是否合理,例如时间序列的点数是否少于 n_changepoints 等内容;其次如果边界条件符合,那变点的位置就是均匀分布的。

    • 下面假设已经放置了 S 个变点了,并且变点的位置是在时间戳$ s_{j}, 1\leq j\leq S 上 , 那 么 在 这 些 时 间 戳 上 , 就 需 要 给 出 增 长 率 的 变 化 , 也 就 是 在 时 间 戳 上,那么在这些时间戳上,就需要给出增长率的变化,也就是在时间戳 s_{j} 上 发 生 的 c h a n g e i n r a t e 。 可 以 假 设 有 这 样 一 个 向 量 : 上发生的 change in rate。可以假设有这样一个向量: changeinrate\boldsymbol{\delta}\in\mathbb{R}^{S}$, 其中 $\delta_{j} $表示在时间戳 $s_{j} $上的增长率的变化量。如果一开始的增长率使用 k 来代替的话,那么在时间戳 t 上的增长率就是
      $ k + \sum_{j:t>s_{j}} \delta_{j} , 通 过 一 个 指 示 函 数 , ,通过一个指示函数, , \mathbf{a}(t)\in {0,1}^{S} $ , 就是 a j ( t ) = { 1 ,  if  t ≥ s j , 0 ,  otherwise. a_{j}(t) = \begin{cases} 1, \text{ if } t\geq s_{j},\\ 0, \text{ otherwise.} \end{cases} aj(t)={ 1, if ts

  • 7
    点赞
  • 99
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Prophet模型是Facebook开发的一种时间序列预测模型,用于预测具有季节性和趋势性特征的数据。它是一种基于加法模型的非线性回归模型,对季节性和趋势性进行建模,并结合了数据中的异常值处理。 Prophet模型的核心思想是将时间序列数据分解为趋势、季节性和假日效应三个组成部分,并利用这些组成部分进行预测。具体来说,Prophet模型使用了以下几个关键概念: 1. 非线性趋势:Prophet模型假设数据的趋势可以用多项式函数进行拟合,可以是线性趋势、饱和增长趋势等。这种非线性趋势的建模能够更好地捕捉数据的变化。 2. 季节性:Prophet模型可以自动检测和建模数据中的季节性特征,如每周、每月、每年的周期性变化。这使得模型能够更准确地预测未来的季节性变化。 3. 假日效应:Prophet模型允许用户指定一些特殊的假日效应,并将其作为模型的额外参数进行建模。这样可以更好地预测在假日期间可能发生的异常情况。 4. 自动处理缺失值和异常值:Prophet模型能够自动处理数据中的缺失值和异常值,并进行合理的填充和修复,以保证模型的准确性。 Prophet模型在实际应用中具有广泛的适用性,可以用于预测各种类型的时间序列数据,如销售数据、气象数据等。它的优点在于简单易用、具有良好的可解释性和较高的准确性。 需要注意的是,Prophet模型是一种统计模型,对于某些复杂的时间序列数据可能无法提供最佳的预测效果。在使用Prophet模型时,需要根据具体情况进行参数调整和模型评估,以获得最佳的预测结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值