Forecasting at Scale

Abstract

预测是十分常见的数据科学任务,可用于企业的容量规划,目标设定,异常检测等。当时间序列多种多样并且缺少专家经验时,时间序列预测就变得尤其困难。本文提出了一种具有可解释参数的模块化回归模型。

Introduction

图1总结了用于大规模商业预测的"analyst-in-the-loop"方法。首先用具有参数可解释性的模型对时间序列进行建模[Modeling],然后对时序数据进行预测并用baseline的结果来衡量现有模型的预测效果[Forecast Evaluation]。当模型效果较差或者需要人工干预的时候,会进行人工干预[Surface Problems],接下来会检测预测结果并基于反馈调整模型[Visually Inspect Forecasts]。

Features of Business Time Series

图2展示了Facebook的Events(例如 create pages)对应的时间序列,显而易见的是时间序列数据有周期性的特征:以周或者年为周期,在圣诞节和新年有一个明显的下沉。这几种周期性的效果会自然的出现并且可以在人为产生的时间序列中被预测到。同时最后六个月的数据有一个明显的上升趋势,可能是因为新产品或者市场变化的影响。最后,这个数据也是有异常点的。下面图3展示了一些自动化的方法预测,其中有色曲线是对图2的时间序列数据进行预测,可以看出预测效果较差。

The Prophet Forecasting Model

接下来介绍prophet模型的具体算法细节,facebook给出了开源代码的github

,季节性项(周或月)

,节假日项

以及噪音项

,得到如下的加法模型,其中通常假设噪音项符合如下标准正态分布

The Trend Model

在Facebook真实场景应用中,共有两种趋势模型,一种是(2)式中的logistic growth model,这是一个非线性的模型

其中

表示最大渐近值,

的最大取值无限接近于

分别表示线性部分的斜率和偏置。当

时,

就是一个sigmoid函数。但是现实中往往

都是随时间变化的值,因此对于

,通过检测change point并在此基础上进行调整,得到式(3)的piecewise logistic growth model

其中假设在时刻

个变点,对应的变化率为

,其中向量

的每个分量定义如下

向量

的每个分量定义如下,通过分段函数在边界

处的值相等计算得到

另外一种是Linear Trend with Changepoints,本质上是一个分段的线性函数,(4)式所示

其中大部分参数与(3)一致,唯一不同的是

。Automatic Changepoint Selection

可以设置变点数量以及变点的变化率

,其中通常假设

的先验分布是拉普拉斯分布,即

,参数

可以控制变化率,当

趋向于0时,分段函数退化为完整的sigmoid函数或者线性函数。其中开源代码参数的调整在张戎另一篇文章

Trend Forecast Uncertainty

对于未来趋势点的预测,得到如下新的变化率

其中

,由历史的变点的变化率按照极大似然的思想得到。Seasonality

对于周期性项的拟合通过标准的傅立叶级数来近似,如下式(5)

其周期是

,需要估计的参数是

。文中对于年为周期的数据取

,对于周为周期的取

,如下分别得到

以及周期项如下

通常假设其中

的先验分布是正态分布

。Holidays and Events

根据不同的国家不同的节日,对于每一个节假日

,令

表示节假日的前后一段时间。得到如下的节假日项,

其中先验分布

。Model Fitting

接下来通过Stan进行函数拟合,得到

中参数的后验估计。其中可以预设

,change points以及节假日,三个先验分布的参数值。通过拟合训练得到

等参数值。对于图2的数据点,使用prophet拟合得到图5。Analyst-in-the-Loop Modeling

模型的很多参数可以通过专家经验给出。

Automating Evaluation of Forecasts

预测效果的自动评估机制略。

python的实现

import pandas as pd

from fbprophet import Prophet

df = pd.read_csv('./data/example_wp_log_peyton_manning.csv')

m = Prophet()

m.fit(df) # training model

future = m.make_future_dataframe(periods=365) # containing the dates for which a prediction is to be made

forecast = m.predict(future)

m.plot(forecast) # Fig1

fig2 = m.plot_components(forecast) # Fig2Fig1 真实值以及预测值的时序图Fig2 趋势项和周期项的拟合图像

import pandas as pd

from fbprophet import Prophet

df = pd.read_csv('./data/example_wp_log_peyton_manning.csv')

split = int(df.shape[0] / 2)

df_train = df.iloc[:split, :]# split datasets into train and test

m = Prophet()

m.fit(df_train) # training model

future = m.make_future_dataframe(periods=df.shape[0] - split)

forecast = m.predict(future)

fig = m.plot(forecast)

ax = fig.add_subplot(111)

ax.plot(df['ds'].astype('datetime64'), df['y'], 'k.')黑色的真实数据点落在预测区间内,预测值与真实值略有偏差

参考^Taylor S J, Letham B. Forecasting at scale[J]. The American Statistician, 2018, 72(1): 37-45.

python 时间序列prophet 模型分析_时间序列预测模型Prophet[Facebook]相关推荐

  1. python 时间序列prophet 模型分析_手把手教你用Prophet快速进行时间序列预测(附Prophet和R代码)...

    原标题:手把手教你用Prophet快速进行时间序列预测(附Prophet和R代码) 作者:ANKIT CHOUDHARY:翻译:王雨桐:校对:丁楠雅: 本文约3000字,建议阅读12分钟. 本文将通过 ...

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

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

  3. 时间序列模型预测_时间序列预测,使用facebook先知模型预测股价

    时间序列模型预测 1.简介 (1. Introduction) 1.1. 时间序列和预测模型 (1.1. Time-series & forecasting models) Tradition ...

  4. python微博评论情感分析_基于Python的微博情感分析系统设计

    2019 年第 6 期 信息与电脑 China Computer & Communication 软件开发与应用 基于 Python 的微博情感分析系统设计 王 欣 周文龙 (武汉工程大学邮电 ...

  5. Holt-Winters模型分析及时间序列预测

    文章目录 数据特点 异常检测 预测器设计 同比环比预测器 基线预测器 Holt-Winters预测器 三次指数滑动平均算法 报警模型中的预测器 计算序列的周期性数据 残差数据实时预测 报警检测比较器的 ...

  6. python做灰色关联度分析_【数学建模】通过python实现灰色关联度计算

    1.关联分析 关联分析主要作用为对系统的因素进行分析,其主要作用为分辨因素中哪些因素对系统的影响是显著的,哪些影响是次要的.通常而言因素分析的主要方式为回归分析等,但其存在数据量要求大,计算量大等诸多 ...

  7. python文本相似度分析_文本相似度分析(基于jieba和gensim)

    ##基础概念 本文在进行文本相似度分析过程分为以下几个部分进行, 文本分词 语料库制作 算法训练 结果预测 分析过程主要用两个包来实现jieba,gensim jieba:主要实现分词过程 gensi ...

  8. python英文文本情感分析_舆情信息浩如烟海?看看如何用Python进行英文文本的情感分析...

    市场每天都在生成海量的舆情信息,这些信息可以帮助我们识别市场情绪的转变.如果只是人工地去跟踪大量的舆论和研报显然缺乏效率.我们可以试试让机器来完成这个工作. 数据科学在数值领域中很常见,但这个不断壮大 ...

  9. 用python构建机器学习模型分析空气质量

    空气质量(air quality)的好坏反映了空气污染程度,它是依据空气中污染物浓度的高低来判断的.空气污染是一个复杂的现象,在特定时间和地点空气污染物浓度受到许多因素影响.来自固定和流动污染源的人为 ...

最新文章

  1. 具体数学第二版第三章习题(2)
  2. 全文搜索Apache Lucene简介
  3. 常用的3dsmax插件(批处理模型的插件)
  4. 台式计算机usb接口无反应6,教你电脑usb接口不能用的解决方法
  5. 高中生学python培养思维能力_Python教学:编程如何培养学生计算思维
  6. java全角数字_Java全角、半角字符的关系以及转换
  7. 激光雷达相关技术方案介绍
  8. 【入门笔记】量化投资是什么?
  9. 禁欲28天!一宅男居然肝出如此详细Web安全学习笔记,学妹看完直接抽搐了!(第二弹)
  10. 2018-08-08 Mac使用中的一些实用设置
  11. 计算机诞生以来应用最早的,全国一级b考试练习题.doc
  12. Oracle Corp甲骨文公司推出Oracle NoSQL数据库2.0版
  13. 【Linux-MYSQL】数据库的使用
  14. python后端开发的缺点_前后端分离优缺点
  15. linux 启动openfire
  16. K8s笔记1----入门基础与fannel网络
  17. python考试搜题神器_python实现百万英雄答题神器
  18. 13-roman-to-integer
  19. codeblocks全屏模式怎么退出_极速PDF安卓版如何翻页、阅读模式修改等操作详解...
  20. 小草 客户端 android,小草app安卓版入口

热门文章

  1. 怎么启动python项目_如何组织Python项目?
  2. Python3入门机器学习经典算法与应用——手写knn模块
  3. 吃鸡一直显示服务器维护发生了错误,吃鸡一直显示BE服务器错误怎么办 | 手游网游页游攻略大全...
  4. html状态码521,python爬虫 处理521状态码
  5. 微信h5录音上传到自己的服务器,微信js-sdk 录音功能的示例代码
  6. 大学生创业新颖的点子互联网+大学生创新创业项目有哪些?
  7. 2021年山东省安全员C证考试报名及山东省安全员C证新版试题
  8. VB API 之 第九课 图像编程(二)
  9. 华为交换基本配置命令--S5700为例
  10. 俞敏洪不是新东方的瓶颈,“选择困难症”才是