论文阅读 Forecasting at Scale (一)

最近在看时间序列的文章,回顾下经典
论文地址
项目地址


Forecasting at Scale

  • 摘要
  • 1、介绍
  • 2、时间业务序列的特点
  • 3、Prophet预测模型
    • 3.1、趋势模型
      • 3.1.1、非线性饱和增长
      • 3.1.2、具有变化点的线性趋势
      • 3.1.3、自动转换点选择
      • 3.1.4、趋势预测的不确定性


摘要

预测是一项常见的数据科学任务,能够帮助组织进行容量规划、目标设定和异常检测。尽管其重要性不言而喻,但在生产可靠且高质量的预测时面临着严峻挑战,特别是当涉及到多样的时间序列且具有时间序列建模专业知识的分析师相对稀缺时。为了解决这些挑战,我们描述了一种实用的、可扩展的预测方法,将可配置的模型与分析师参与的性能分析相结合。我们提出了一个模块化回归模型,具有可解释的参数,可以由对时间序列具有领域知识的分析师直观地调整。我们描述了性能分析来比较和评估预测过程,并自动标记需要人工审查和调整的预测。帮助分析师最有效地利用其专业知识的工具能够可靠地、实践地预测业务时间序列。

1、介绍

预测是数据科学中的一项核心任务,对组织内的许多活动都至关重要。例如,各行业的组织必须进行容量规划,以有效地分配有限资源,并进行目标设定,以衡量相对基准的绩效。然而,对于机器和大多数分析师来说,生成高质量的预测并不容易。我们观察到在创建业务预测的实践中存在两个主要问题。首先,完全自动化的预测技术往往难以调整,并且往往过于僵化,无法纳入有用的假设或启发式方法。其次,负责组织内数据科学任务的分析师通常对所支持的特定产品或服务具有深入的领域专业知识,但往往没有时间序列预测的培训。因此,能够产生高质量预测的分析师非常罕见,因为预测是一项需要丰富经验的专业技能。

结果是,对高质量预测的需求往往远远超过了它们的生产速度。这一观察结果是我们进行研究的动机,我们打算为在不同规模下产生预测提供一些有用的指导。

我们首先考虑的两种规模是:1)适用于大量进行预测的人员,可能没有时间序列方法的培训;2)适用于各种可能具有特殊特征的预测问题。在第3节中,我们提出了一个时间序列模型,它足够灵活,适用于各种业务时间序列,同时可以由非专家配置,这些非专家可能对数据生成过程具有领域知识,但对时间序列模型和方法了解有限。

我们所讨论的第三种规模是在大多数实际情况下,将会创建大量的预测,因此需要高效自动的方式来评估和比较它们,并在性能较差时及时发现。当进行数百甚至数千个预测时,让机器来进行模型评估和比较的工作变得非常重要,同时还要有效地利用人类反馈来解决性能问题。在第4节中,我们描述了一个预测评估系统,该系统利用模拟的历史预测来估计样本外性能,并识别存在问题的预测,供人类分析人员了解出了什么问题并进行必要的模型调整。

值得注意的是,我们并不关注典型的规模考虑因素:计算和存储。我们发现,在大量时间序列的预测中,计算和基础设施问题相对来说比较简单,通常这些拟合过程很容易进行并行处理,并且预测结果也不难存储在关系数据库中。我们在实践中观察到的实际规模问题涉及到预测问题的多样性引入的复杂性,以及在生成了大量预测之后如何建立对其的信任。

我们在图1中总结了我们在大规模业务预测中的“分析师在回路中”的方法。我们首先使用灵活的规范对时间序列进行建模,每个参数都有直观的人类解释。然后,我们为该模型和一组合理的基准线在各种历史模拟预测日期上生成预测,并评估预测性能。当预测性能较差或其他方面需要人工干预时,我们按优先顺序将这些潜在问题通知给人类分析师。分析师可以检查预测结果,并根据这些反馈可能调整模型。
在这里插入图片描述

2、时间业务序列的特点

商业预测问题的有多样性和共同性。以Facebook活动的时间序列数据为例进行说明,数据显示了每天在Facebook上创建的活动数量。这个时间序列表现出明显的季节效应,包括每周和每年的周期性变化,以及圣诞节和新年期间的显著下降。这些季节效应是由人类活动产生的时间序列中自然而然地出现的。此外,该时间序列在最近六个月显示了明显的趋势变化,可能是由于新产品或市场变化的影响。同时,真实的数据通常会存在异常值,这个时间序列也不例外。
在这里插入图片描述
这个时间序列说明了完全自动化方法在产生合理预测方面的困难。图3展示了使用R语言中的forecast包中几种自动化方法进行的预测。这些方法分别是:auto.arima,它拟合一系列ARIMA模型并自动选择最佳模型;ets,它拟合一系列指数平滑模型并选择最佳模型;snaive,一种具有每周季节性的随机游走模型;tbats,一种具有每周和每年季节性的TBATS模型。从图中可以看出,这些方法在匹配时间序列的特征方面都存在困难。自动ARIMA方法在趋势发生变化时容易产生大的趋势误差,并且无法捕捉到任何季节性。指数平滑和季节性随机游走方法能够捕捉到每周的季节性,但无法捕捉到更长期的季节性。所有这些方法都对年末的下降过度反应,因为它们没有充分建模年度季节性。
在这里插入图片描述

当预测结果不理想时,我们希望能够调整方法的参数以适应具体问题。然而,调整这些方法需要对底层时间序列模型的工作原理有深入的了解。例如,自动ARIMA方法的第一个输入参数是差分、自回归分量和移动平均分量的最大阶数。普通分析师通常不知道如何调整这些阶数以避免图3中的行为,这是一种难以扩展的专业知识。

3、Prophet预测模型

现在我们描述一个时间序列预测模型,设计用于处理图2中所见到的业务时间序列的共同特征。重要的是,它还被设计为具有直观的参数,可以进行调整,而无需知道底层模型的详细信息。这对于分析师有效地调整模型是必要的,如图1所述。我们的实现以Python和R的形式提供作为开源软件,称为Prophet(https://facebook.github.io/prophet/)。

我们使用分解时间序列模型(Harvey&Peters 1990),其中包括三个主要模型组件:趋势、季节性和节假日。它们组合在以下方程中:
y ( t ) = g ( t ) + s ( t ) + h ( t ) + ε t y(t)=g(t)+s(t)+h(t)+ε_t y(t)=g(t)+s(t)+h(t)+εt (1)

这里,g(t)是趋势函数,用于建模时间序列值的非周期性变化,s(t)表示周期性变化(例如,每周和每年的季节性),h(t)表示在一个或多个日期上可能不规则安排的假日效应。误差项 ε t ε_t εt表示模型无法适应的任何特异性变化;稍后,我们将对εt做出参数假设,即服从正态分布。

这个规范类似于广义加性模型(GAM)(Hastie&Tibshirani 1987),一类回归模型,其中对回归器应用了潜在非线性平滑器。在这里,我们只使用时间作为回归器,但可能使用时间的几个线性和非线性函数作为组件。将季节性建模为加法组件的方法与指数平滑(Gardner 1985)采用相同的方法。通过对数转换,可以实现乘法季节性,其中季节效应是乘以g(t)的因子。

GAM的优点在于它很容易进行分解,并根据需要适应新的组件,例如当发现新的季节性来源时。GAM也非常快速适配,可以使用反向逐步回归或L-BFGS(Byrd等,1995)(我们更喜欢后者),以便用户可以交互地更改模型参数。

实际上,我们将预测问题视为一种曲线拟合的过程,这与明确考虑数据中时间依赖结构的时间序列模型本质上是不同的。虽然我们放弃了使用生成模型(如ARIMA)的一些重要推断优势,但这种规范提供了许多实际优势:

  • 灵活性:我们可以轻松地适应具有多个周期的季节性,并让分析人员对趋势做出不同的假设。
  • 与ARIMA模型不同,测量值不需要定期间隔,我们也不需要插值缺失值,例如从去除异常值中插值。
  • 拟合速度非常快,允许分析人员交互式地探索许多模型规范,例如在Shiny应用程序中(Chang等,2015)。
  • 预测模型具有易于解释的参数,分析人员可以更改这些参数以对预测施加假设。此外,分析人员通常具有回归的经验,并且很容易将模型扩展到包括新组件。

自动预测有着悠久的历史,有许多方法专门针对特定类型的时间序列(Tashman&Leach 1991,De Gooijer&Hyndman 2006)。我们的方法受到Facebook预测的时间序列的特性(分段趋势、多重季节性、浮动假日)以及大规模预测所涉及的挑战的驱动。

3.1、趋势模型

我们已经实现了两种趋势模型,涵盖了许多Facebook应用程序:饱和增长模型和分段线性模型。

3.1.1、非线性饱和增长

对于增长预测,数据生成过程的核心组成部分是对人口增长的模型以及预期的持续增长模式的建模。在Facebook上进行增长建模通常类似于自然生态系统中的人口增长(例如Hutchinson 1978),其中存在非线性增长,在达到一个承载能力后趋于饱和。例如,在某个特定区域内,Facebook用户数量的承载能力可能是可以接入互联网的人数。这种增长通常使用逻辑增长模型进行建模,在其最基本的形式下是:

g ( t ) = C 1 + e x p ( − k ( t − m ) ) g(t)=\frac{C}{1+exp(-k(t-m))} g(t)=1+exp(k(tm))C (2)

其中C为承载能力,k为增长率,m为偏移参数。t是时间,随着时间的增长,分母从小于1边长大于1,导致g(t)开始会很快增大,到后来变缓,直到无限接近C。

在 Facebook 的增长中有两个重要方面没有被上面公式所捕捉到。首先,承载能力并非恒定的,随着世界范围内能够接入互联网的人数增加,增长上限也会相应增加。因此,我们用一个随时间变化的承载能力 C(t) 替代了固定的容量 C。其次,增长率也并非恒定的。新产品可以深刻地改变某个地区的增长速率,因此模型必须能够融合不同的速率以适应历史数据。

我们通过明确定义增长率允许改变的变更点来将趋势变化纳入增长模型。假设在时刻 s j s_j sj 处存在 S 个变更点,即 j = 1…S。我们定义一个速率调整的向量 δ ∈ R S δ\in \mathbb{R}^S δRS,其中 δ j δ_j δj 表示在时刻 s j s_j sj 出现的速率变化。任意时刻 t 的速率则是基本速率 k,再加上该时刻之前的所有调整值之和 k + ∑ j : t > s j δ j k+\sum_{j:t>s_j}^{}δ_j k+j:t>sjδj。这通过定义向量 a ( t ) ∈ 0 , 1 S a(t)\in{0, 1}^S a(t)0,1S来更清晰地表示,就像下面这样:
a j ( t ) = { 1 , i f t ⩾ s j , 0 , o t h e r w i s e . a_j(t)= \left\{\begin{matrix} 1,&if\space t\geqslant s_j, \\ 0,& otherwise. \end{matrix}\right. aj(t)={1,0,if tsj,otherwise.

则在时间t的速率为 k + a ( t ) T δ k+a(t)^\texttt{T}δ k+a(t)Tδ。当调整速率k时,还必须调整偏移参数m以连接分段的端点。在变化点j处的正确调整可以很容易地计算为

γ j = ( s j − m − ∑ l < j γ l ) ( 1 − k + ∑ l < j δ l k + ∑ l ⩽ j δ l ) γ_j=(s_j-m-\sum_{l<j}^{}γ_l)(1-\frac{k+\sum_{l<j}^{}δ_l}{k+\sum_{l\leqslant j}^{}δ_l}) γj=(sjml<jγl)(1k+ljδlk+l<jδl)

分段逻辑增长模型

g ( t ) = C ( t ) 1 − e x p ( − k + a ( t ) T δ ) ( t − ( m + a ( t ) T γ ) ) g(t)=\frac{C(t)}{1-exp(-k+a(t)^{\texttt{T}}δ)(t-(m+a(t)^{\texttt{T}}γ))} g(t)=1exp(k+a(t)Tδ)(t(m+a(t)Tγ))C(t) (3)

我们模型中的一个重要参数集是 C(t),即系统在任意时间点的预期容量。分析人员通常能够洞察市场规模并据此设置这些参数。此外,还可能存在外部数据来源可以提供承载能力,比如世界银行的人口预测数据。

在这里提出的 Logistic 增长模型是广义 Logistic 增长曲线的一个特例,而广义 Logistic 增长曲线只是 Sigmoid 曲线的一种类型。将这一趋势模型扩展到其他曲线族是直截了当的。

3.1.2、具有变化点的线性趋势

对于没有表现出饱和增长的预测问题,分段恒定增长率提供了一个简洁且通常有用的模型。这里的趋势模型是:

g ( t ) = ( k + a ( t ) T δ ) t + ( m + a ( t ) T γ ) g(t)=(k+a(t)^{\texttt{T}}δ)t+(m+a(t)^{\texttt{T}}γ) g(t)=(k+a(t)Tδ)t+(m+a(t)Tγ) (4)

其中,与之前一样,k是生长速率,δ有速率调整,m是偏移参数, γ j γ_j γj设置为 − s j δ j −s_jδ_j sjδj,以使函数连续。

3.1.3、自动转换点选择

变更点 s j s_j sj 可以由分析人员使用已知的产品发布日期和其他改变增长的事件来确定,或者可以根据一组候选项自动选择。使用公式(3)和(4)中的表达式,可以自然地对 δ 设置稀疏先验分布来进行自动选择。
我们通常会指定大量的变更点(例如,对于几年的历史数据,每个月一个变更点),并使用先验分布 δ j ∼ L a p l a c e ( 0 ; τ ) δ_j ∼ Laplace(0; τ) δjLaplace(0;τ)。参数 τ τ τ 直接控制模型在调整速率方面的灵活性。重要的是,对调整项 δ δ δ 使用稀疏先验不会对主要的增长率 k 产生影响,因此当 τ τ τ 趋近于0时,拟合结果将归约为标准的(非分段)Logistic或线性增长模型。

3.1.4、趋势预测的不确定性

当模型被推广至历史数据以外进行预测时,趋势将具有恒定的速率。我们通过向前延伸生成模型来估计预测趋势的不确定性。趋势的生成模型是,在历史的 T 个点上存在 S 个变更点,每个变更点都有一个速率变化 δ j ∼ L a p l a c e ( 0 ; τ ) δ_j ∼ Laplace(0; τ) δjLaplace(0;τ)。我们通过用从数据中推断出的方差取代 τ τ τ 来模拟未来速率变化,使其模拟过去的情况。在完全的贝叶斯框架中,这可以通过对 τ τ τ 设置分层先验来获得其后验概率,否则我们可以使用速率尺度参数的最大似然估计值 λ = 1 S ∑ j = 1 S ∣ δ j ∣ λ = \frac{1}{S} \sum_{j=1}^{S} |δ_j| λ=S1j=1Sδj。未来的变更点是以随机方式抽样的,以使变更点的平均频率与历史中的频率相匹配:

∀ j > T , { δ j = 0 w . p . T − S T , δ j ∼ L a p l a c e ( 0 ; τ ) w . p . S T . \forall_j>T, \left\{\begin{matrix} δ_j =0 \space \mathrm{w}.\mathrm{p}. \space \frac{T-S}{T}, \\ δ_j ∼ Laplace(0; τ) \space \mathrm{w}.\mathrm{p}. \space \frac{S}{T}. \end{matrix}\right. j>T,{δj=0 w.p. TTS,δjLaplace(0;τ) w.p. TS.

因此,我们通过假设未来的频率和速率变化的平均值与历史上观察到的相同,来衡量预测趋势的不确定性。一旦从数据中推断出 λ λ λ,我们使用这个生成模型来模拟可能的未来趋势,并利用模拟的趋势来计算不确定性区间。

假设趋势在未来以与历史上相同的频率和幅度变化,是相当强的假设,因此我们不指望不确定性区间能够完全覆盖。然而,它们仍然是对不确定性水平的有用指示,尤其是对过度拟合的指示。随着 τ τ τ 的增加,模型在拟合历史时具有更大的灵活性,因此训练误差会降低。然而,当向前进行预测时,这种灵活性将产生宽广的不确定性区间。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/159642.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

暗物质探测器认知教学VR元宇宙平台打破传统束缚

“飞船正在上升&#xff0c;马上就冲出大气层了!”这是一位在1&#xff1a;1还原的神舟飞船返回舱内借助VR设备置身元宇宙世界&#xff0c;沉浸式体验升空全过程的游客兴奋地说道。不仅如此&#xff0c;在载人飞船训练期&#xff0c;元宇宙技术为航天员虚拟一个逼真的太空世界&…

vue3 iconify 图标几种使用 并加载本地 svg 图标

iconify iconify 与 iconify/vue 使用 下载 pnpm add iconify/vue -D使用 import { Icon } from "iconify/vue";<template><Icon icon"mdi-light:home" style"color: red; font-size: 43px" /><Icon icon"mdi:home-flo…

shell脚本三

目录 一、循环语句 一、循环 二、for循环语句 1.列表循环 2.与c语言循环相似的for循环 3.使用for打印三角形以及乘法表 4.测试172.16.114.0网段存活的主机并将存活的主机IP地址写入文件中&#xff0c;未存活的主机放入另一文件中 三、while循环语句 四、until循环语句…

如何使用 Navicat 连接 GaussDB 主备版

Navicat Premium&#xff08;16.2.8 Windows版或以上&#xff09; 已支持对GaussDB 主备版的管理和开发功能。它不仅具备轻松、便捷的可视化数据查看和编辑功能&#xff0c;还提供强大的高阶功能&#xff08;如模型、结构同步、协同合作、数据迁移等&#xff09;&#xff0c;这…

每日一练:质因数分解

1. 题目 从键盘输入一个整数&#xff0c;开始整数的质因数分解&#xff0c;最后打印出该整数的所有质因数。 2.解题思路 1&#xff09;初始化&#xff1a; 从最小的质数开始&#xff0c;将输入的整数不断除以质数&#xff0c;直到无法整除为止。   2&#xff09;循环&#x…

ansible的基本安装

目录 一、简介 1.ansible自动化运维人工运维时代 2.自动化运维时代 3.ansible介绍 4.ansible特点 二、ansible实践 1.环境 2.ansible管理安装 3.ansible被管理安装 4.管理方式 5.添加被管理机器的ip 6.ssh密码认证方式管理 三、配置免密登录 1.ansible自带的密码…

【grep】从html表格中快速定位某个数据

文章目录 1 背景2 参考知识2.1 grep2.2 HTML基础语言标签 3 解决方案 1 背景 在html中是一堆表格、图片、文字什么的&#xff0c;想从表格中提取关键词为“GJC”后对应的数字&#xff0c;怎么办呢&#xff1f; 逐个打开html文件&#xff0c;“ctrlF”搜一下&#xff0c;然后复…

vue项目中element-ui对话框el-dialog嵌套显示时多了一个遮罩层解决办法

在对话框里又嵌套了一个对话框展示时&#xff0c;多了一个遮罩层&#xff0c;如下图所示&#xff1a; 解决办法如下&#xff1a; 给对话框添加append-to-body 属性&#xff0c;参考以下代码&#xff1a; <el-dialog :visible.sync"dialogVisible" append-to-body …

所有产品都值得用AI再做一遍,让AGI与品牌营销双向奔赴

微软 CEO Satya Nadella 曾经说过&#xff1a;“所有的产品都值得用 AI 重做一遍。” AI 大模型的出现&#xff0c;开启了一个全新的智能化时代&#xff0c;重新定义了人机交互。这让生成式 AI 技术变得「触手可得」&#xff0c;也让各行业看到 AGI 驱动商业增长的更大可能性。…

ui设计师简历自我评价的范文(合集)

ui设计师简历自我评价的范文篇一 本人毕业于艺术设计专业&#xff0c;具有较高的艺术素养&#xff0c;平时注重设计理论知识的积累&#xff0c;并将理论应用到作品中。了解当下设计的流行趋势&#xff0c;设计注重细节、重视用户体验&#xff0c;对色彩搭配有着浓厚的兴趣&…

13、深度学习之神经网络

深度学习是机器学习中重要的一个学科分支,它的特点就在于需要构建多层“深度”的神经网络。 人们在探索人工智能初期,就曾设想构建一个用数学方式来表达的模型,它可以模拟人的大脑,大脑我们都知道,有很多神经元,每个神经元之间通过突触链接。 神经网络的设计就是模仿了这…

11.6AOP

一.AOP是什么 是面向切面编程,是对某一类事情的集中处理. 二.解决的问题 三.AOP的组成 四.实现步骤 1.添加依赖(版本要对应): maven仓库链接 2.添加两个注解 3.定义切点 4.通知 5.环绕通知 五.excution表达式 六.AOP原理 1.建立在动态代理的基础上,对方法级别的拦截. 2. …

【机器学习】贝叶斯分类器

贝叶斯分类器是一种概率模型&#xff0c;利用贝叶斯公式来解决分类问题。假设样本的特征向量服从一定的概率分布&#xff0c;我们就可以计算出该特征向量属于各个类的条件概率。分类结果是条件概率最大的分类结果。如果假设特征向量的每个分量彼此独立&#xff0c;则它是朴素贝…

【OpenCV实现图像:OpenCV利用Python创作热力图】

文章目录 概要读取图像图像灰度化**像素化效果**小结 概要 热力图是一种强大的统计图表&#xff0c;通过对数据进行色彩映射&#xff0c;直观展示了数据分布的热度和密度。在绘制热力图时&#xff0c;关键在于指定颜色映射的规则&#xff0c;这决定了图中不同数值的呈现方式。…

渗透实例------2个星期艰难的渗透纪实

2个星期艰难的渗透纪实 kyo327 入侵原因,需删一帖子,目标用www.111.com代替,前期通过初期的网站文件暴力猜解,扫描到robots.txt这个文件,有以下目录。如图1: 图1 再通过对这些文件的访问,从3gadm.php文件的标题栏得到该网站采用的是diy-page8.3的cms,自然可以先用搜索…

Android JNI 异常定位(2)—— addr2line

Android native报错有时候只有一句 signal 11 (SIGSEGV)&#xff0c;这种情况仅通过log是很难定位到问题的。不过Android 在/data/tombstones目录保存了错误的堆栈信息&#xff0c;为定位bug提供了路径。不过一般这里的log都无法像java一样直接定位的出错的行数。如下图&#x…

2023做车载测试真的可以远离内耗!转行车载月入20K!

2023年&#xff0c;车载测试正处于一个发展阶段&#xff0c;随着新能源汽车的蓬勃发展&#xff0c;电气化、智能化逐渐成为发展趋势。在汽车开发过程中&#xff0c;测试是非常重要的一个环节。现在软件越来越多地被应用到汽车上&#xff0c;对软件测试的需求也越来越多、越来越…

数据库数据恢复—MongoDB数据库文件拷贝出现错误的数据恢复案例

MongoDB数据库数据恢复环境&#xff1a; 一台Windows Server操作系统的虚拟机&#xff0c;虚拟机上部署有MongoDB数据库。 MongoDB数据库故障&检测&#xff1a; 在未关闭MongoDB服务的情况下&#xff0c;工作人员将MongoDB数据库文件拷贝到其他分区&#xff0c;然后将原数…

力扣:175. 组合两个表(Python3)

题目&#xff1a; 表: Person ---------------------- | 列名 | 类型 | ---------------------- | PersonId | int | | FirstName | varchar | | LastName | varchar | ---------------------- personId 是该表的主键&#xff08;具有唯一值的列&#…

js进阶笔记之原型,原型链

目录 1、原型对象 constructor 属性 对象原型 2、原型链 3、instanceof 4、原型继承 1、原型对象 面向过程就是分析出解决问题所需要的步骤&#xff0c;然后用函数把这些步骤一步一步实现&#xff0c;使用的时候再一个一个的依次调用就可以了。 面向对象是把事务分解成为…