一、模型概述

1.1 适用场景

A modular regression model with interpretable parameters 模块化回归、有可解释参数模型

Facebook开源的时间序列预测算法,适用于具有规律的数据,适用情景如下:

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

1.2 模型输入输出 

3、Prophet 算法的输入输出

输出图包括: 

  • 原始的时间序列离散点
  • 使用时间序列来拟合所得到的取值
  • 时间序列的一个置信区间,(合理的上界和下界)
  • 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,表示预测值的上界

二、基本原理

机器学习时间序列模型预测 时间序列预测模型实例_数据

这是Generalized Additive Model(GAM)模型的特例,通过对各项的拟合,再进行累加得到预测值。

模型整体由三部分组成:

  • g(t): 趋势项,描述growth(增长趋势),即时间序列非周期的变化趋势
  • s(t): 周期项,描述seasonality(季节趋势),即时间序列周期的变化
  • h(t): 假期项,描述holidays(节假日对预测值的影响),即周期中偶发的、无固定周期的假日对预测值的影响。
  • ϵt:噪声项/误差项,随机的未预测波动。假设服从高斯分布(Gaussian distribution)/正态分布(Normal distribution)。

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

2.1 趋势项(The trend model)

2.1.1 概述

趋势项用于描述时间序列非周期的变化趋势,包括基于逻辑回归函数的饱和增长模型(saturating growth model)、线性增长模型(piecewise linear model)。

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

机器学习时间序列模型预测 时间序列预测模型实例_机器学习时间序列模型预测_02

其中,C表示承载能力(capacity),k表示增长率(growth rate),m表示偏移量(offset parameter)

  • 承载能力C(capacity):
  • 用函数C(t)描述的随时间变化的函数,对增长的上限进行约束
  • 在使用 Prophet 的 growth = ‘logistic’ 的时候,需要提前设置好 C(t) 的取值才行

机器学习时间序列模型预测 时间序列预测模型实例_数据_03

机器学习时间序列模型预测 时间序列预测模型实例_拟合_04

机器学习时间序列模型预测 时间序列预测模型实例_机器学习时间序列模型预测_05

机器学习时间序列模型预测 时间序列预测模型实例_拟合_06

2.2 季节性趋势 s(t)

机器学习时间序列模型预测 时间序列预测模型实例_机器学习_07

2.3节假日趋势h(t)

机器学习时间序列模型预测 时间序列预测模型实例_机器学习时间序列模型预测_08