时间序列:prophet(介绍)

1,136 阅读6分钟

0/前言

prophet,英文意思:先知
是facebook(脸书公司开发的)
时间序列预测
根据过去一段时间的数据,来预测未来的数据
跳变(一些特殊的情况)
通过python和r语言开发
提供了类似sklearn扩展包的形式
最终的时间序列预测函数=趋势项+周期项+节假日项+噪声项,共4部分构成。
通过简单的参数配置,就可以达到精准的预测。

对于历史数据的要求:
    

1/什么是时间序列预测

这里我们说的预测指的是「时间序列预测」,
时间序列预测是根据数据过去一段时间的状态,在满足「趋势一致」以及「不发生跳变」的前提下,预测未来一段时间的数据情况。

image.png

2/时间序列预测的常用方式

时间序列预测方式有很多,大体可以划分为三种类型:

image.png

<1>同环比
   这种方式最为简单,根据同期值及近期权重进行拟合,适合于日常及节假日预测。
   附上之前应用过的公式,大家可以参考:
   - 日常预测值 = 上周同期值 × 近期权重;
   - 节假日预测值 = 前30日均值 × [(节假日系数×0.2 + 周期性系数×0.8) × 近期权重]。

「同环比」方式弊端:
  1、预测的精准度较差
  2、仅适用于短期预测,对于中长期表现不佳

<2> 自回归系列
  自回归(Auto Regression)为传统的时间序列,其中涵盖:ARMA、ARIMA、ARCH等模型。
  此种方式的统计学原理比较简单,所以在预测的场景中也是比较通用。
  AR就是auto regression的简称,自回归。

「自回归系列」方式弊端:
    1、仅适用于短期预测,对于中长期表现不佳
    2、无法处理由于节假日、特殊时点(例如:双十一)等带来的变点问题
    3、模型的解耦能力较差,无法分析出影响准确率的潜在因素

<3>Prophet模型
  基于传统时间序列的问题,Prophet模型的诞生,无疑是提出了另外一种解决方案,将预测问题转化为拟合问题。下面将和大家分享此种模型的原理,以及如何通过python代码进行实现。

2/prophet是什么

Prophet是Facebook数据科学团队于2017年发布的开源预测软件包,其内容发表在《Forecasting at scale》论文中。
目前可以通过Python和R进行实现,该模型可以通过简单的参数配置,实现高精准的时间序列预测。

image.png

3/prophet的适用场景

预测模型均有其适用的场景,Prophet也不例外,只有在合适的场景下,才能发挥模型本身的威力。
具体适用场景如下:
    训练数据:拥有至少一个完整周期的数据,让模型完整学习规律。
    数据趋势:数据有一定正常的周期效应,例如:周末效应、季节效应等。
    跳变情况:明确可能发生跳变的时间点及窗口期,例如:双十一、国庆节等。
    缺失值符合预期:历史数据的缺失值和异常值保持在合理范围内。

4/Prophet原理

前面提到,Prophet可将趋势项、周期项、节假日项进行解偶。

因此该模型也是由这三者,加上噪声项组合而成,如下图所示:

image.png

可以理解为:y(t)是最终的目标函数(预测函数),该目标函数又是由4部分构成。
          每部分都有自己的作用,4部分合起来才能最终进行预测。
g(t):趋势项。用于`拟合`非周期性的趋势变化。例如:上升、下降趋势;
s(t):周期项。用于拟合周、月、季度的周期性变化趋势;
h(t):节假日项。用于表示潜在的跳变点对预测的影响。例如:节假日、突发事件等;
ϵ(t):噪音项。用于表示未预测到的随机波动。

将各项拆开的优势非常明显,可以清晰的定位预测中的问题,通过Prophet解耦输出效果图如下:

image.png

下面和大家详细介绍一下趋势项、周期项、节假日项的计算方式及注意事项。

<1>趋势项

数据的变化趋势,是模型的核心项,用于表示数据在一段时间的状态,按照何种形式增长或下降。
根据趋势模式,可划分为「线性模型」和「非线性模型」,模型默认为线性模型,非线性模型采用逻辑回归方式进行拟合。
这两种方式的适用场景有所差异。

(1)线性模型:适用于处于稳步上升或下降的业务场景。
           例如:处于成长期产品销量等。
           下面附上公式及趋势图,这里暂不对公式做更详细的解释,感兴趣可以搜索一下。
  线性模型公式

图片

  线性模型趋势图

图片

(2)非线性模型:适用于数据值趋于饱和的业务场景。例如:全球GDP、总人口等。(附上公式及趋势图)
   非线性模型公式

图片

   非线性模型趋势图

图片

<2>周期项

在时间序列的预测中,周期项是避不开的一部分,周期包括但不限于:季度、月、周、日。这里可采用傅里叶级数的方式近似表示这一项。
周期项公式

图片

<3>节假日项

除了常规的趋势和周期以外,在我们日常生活中,还会遇到节假日及特殊时点,这些节点会直接影响数据的变化程度,例如:双十一订单量会激增。节假日项,是Prophet相比其他模型的优势。

Prophet将节假日作为单独的模型,可以在模型中设定节假日影响的周期,例如:虽然春节只有7日,但是春运窗口则将近30日
节假日项公式

图片

总体来讲,Prophet是通过四个组件模型自加形成整体模型,并采用Stan的L-BFGS来进行模型拟合。

5/Prophet优势

Prophet相比其他预测模型具有一定优势,主要体现在以下几个方向:

<1>精准度更高:
   Prophet预测精准度更高。
   下图为不同预测时间周期情况下,计算出来MAPE得分(平均绝对百分比误差,用于度量预测值与真实值的偏差程度,值越大差异越大),可见Prophet拟合效果相对较好。

图片

<2>运行效率高:
   Prophet可采用基于L-BFGS方式(解决函数最优化问题手段,类似梯度下降)来拟合函数,模型收敛速度更快。

<3>解释能力强:
   Prophet可将模型成分分解,将整体趋势、年趋势、周趋势、节假日效应解耦开来,并通过可视化方式展现给用户。

<4>功能丰富:
   支持年、月、日、小时多粒度的分析与预测;支持周期效应、节假日效应等;对于缺失数据的处理较友好;
   支持输出置信区间,方便做异常点挖掘;支持根据正则化因子来调节欠拟合与过拟合;支持加性及乘性的趋势拟合等。

<5>应用简单:
   Python提供了类似sklearn包的风格,通过几行代码,完成训练、评估、验证、预测、存储。
   并且input只需提供两列字段,一列为ds,另一列为指标值y。