层次时间序列预测指南

fareise fareise     2022-12-05     542

关键词:

如果觉得我的算法分享对你有帮助,欢迎关注我的微信公众号“圆圆的算法笔记”,定期更新深度学习/CV/NLP/搜推广干货笔记,和世间万物的学习记录~

层次时间序列预测是工业界非常常见的一个应用场景。当要预估的时间序列之间存在层次关系,不同层次的时间序列需要满足一定的和约束时,就需要利用层次时间序列预测方法解决。设想这样一种场景,我们作为政府负责旅游业的部门,需要预测出澳大利亚每个月的旅游人数,同时还需要预测澳大利亚每个州的旅游人数,以及每个州中每个区的旅游人数。如果澳大利亚包括10个州,每个州包括5个地区,那么总共需要预测1+10+50个时间序列。而这50个时间序列是存在关系的,即澳大利亚总旅游人数=10个州旅游总人数,同时每个州旅游总人数=这个州下5个地区旅游总人数。这就形成了一个类似于下面这样的层次结构:

对这种层次结构中每个序列进行预测,就叫层次预估。层次预估需要达成2个条件:首先,需要对层次中的每个节点都进行预测;其次,需要保证某个父节点的预测结果和其子节点的预测结果之和相等(或近似相等),这个约束可以被称为层次约束。层次预估在应用场景中也比较常见,相对于基础的时间序列预测,层次时间序列预测需要不仅要考虑如何预测好每个序列,还要考虑如何让整体层次预估结果满足层次约束。本文为大家梳理了层次时间序列预测的SOTA方法,从最基础的bottom-up方法,到基于校准的方法,再到近两年出现的基于深度学习的层次预估方法。

1. 层次预估的基础方法

实现层次预估的目标其实并不难,最基础的方法包括bottom-up、top-down或middle-out等。Bottom-up方法,指的是只预测所有最底层节点的时间序列,对于上层的时间序列,使用底层时间序列预测结果逐层加和得到。Top-down方法只预测最顶层节点的时间序列,然后根据一种分配方式,将顶层的预测结果逐渐分发至底层,这种分配方式可以按照诸如某个子节点历史一段时间的值占其父节点值的比例分配。Middle-out选择中间某层进行预测,然后再利用bottom-up和top-down方法,从所选这一层的预估结果向上汇聚和向下分配。

这3种方式的问题在于,只能使用某一层的信息进行预测,无法同时使用所有层次序列信息。不同层次的节点有不同的优势和劣势。越往上层的节点,噪声越小,规律性越强,预估起来越容易(试想预测中国总人口相对容易,只要考虑出生率死亡率这些变化趋势就行了;而如果要预测每个城市的人口,就还需要考虑不同城市之间的迁徙规律、发展情况等,问题更加复杂)。而上层节点由于粒度过粗,损失了很多底层节点才有的信息。越往下层的节点,噪声越大,预估起来越困难,通过底层节点预估结果加和得到上层节点,往往不会取得比较好的效果。但是底层节点粒度细,信息更丰富。因此,如果能设计一种方式同时考虑不同层次的时间序列信息,实现整个层次整体的预估,能达到各个层次信息互补的目的,提升整体预测效果。

2. 基于校准的层次预估方法

Optimal combination forecasts for hierarchical time series(2010)这篇文章中,将层次预估问题抽象成3个步骤:先分别预估每个序列的值(可以使用任何预估方法),我们把这一步得到的预估结果叫作基础预估结果(base forecast);然后利用层次约束信息(父节点预估结果等于其子节点预估结果的和)对每个底层序列的初始预估结果进行校准,我们把这步得到的结果叫作校准结果(reconciliation forecast);最后,我们使用底层节点的校准结果,采用bottom-up的思路向上聚合,得到其他上层节点的预估结果。整个过程可以用一个公式表示(这个公式非常重要):

​其中左侧代表最终的预测结果,右侧的y代表初始预估结果,P代表校准矩阵,S代表层次关系。我们以下图中的层次结构为例,包含7个序列,3个层次。S是一个7*4的矩阵,S(i, j)表示第i个节点和第j个上层节点是否是父子关系。P是一个4*7的矩阵,可以理解为每个底层节点和其他节点之间的分配系数。公式右侧从右向左,可以理解为,首先利用所有节点的基础预估结果,结合矩阵P定义的分配系数,重新生成底层节点校准后的预测结果。这一步相当于将所有节点的预估结果信息都进行了利用,作用到底层节点。然后利用S矩阵定义的层次关系,将底层节点校准后的结果聚合到上层结果,得到所有节点的预测结果。

​Bottom-up和top-down这两种方法都是上面方法的一种特例,它们的P矩阵分别可以表示成如下形式。

​只要能够求解出最好的P,就能得到最优解,因此后面有一系列工作围绕如何求解P矩阵展开。主要工作包括Optimal combination forecasts for hierarchical time series(2010)、Optimal forecast reconciliation for hierarchical and grouped time series through trace minimization(2019)、(Regularized Regression for Hierarchical Forecasting Without Unbiasedness Conditions(KDD 2019)。这些工作的主要区别在于求解P的方法,从最基础的WLS、OLS,到MinT,再到ERM等。

3. 基于深度学习的层次预估方法

近两年出现了一些层次预估的新方法,本节将对这些方法进行介绍。A Trainable Reconciliation Method for Hierarchical Time-Series(2021)将P矩阵(M*N)看成是一个从M维映射到N维的函数,利用NN网络来拟合这个校准矩阵P。模型可以看成是一个Encoder-Decoder结构,输入基础预估结果,经过P矩阵(NN网络)映射得到底层节点的预估结果,再根据层次关系矩阵S映射成整个层次所有节点的预估结果,Encoder-Decoder联合训练,模型结构如下图。

​A Self-supervised Approach to Hierarchical Forecasting with Applications to Groupwise Synthetic Controls(2019)通过直接在引入一个底层节点预估结果之和与父节点预估结果的偏差作为正则化损失,加入优化目标中,将优化目标分解为forecast loss和reconciliation loss。其中reconciliation loss的作用在于,限制模型的预测结果,防止偏离层次约束太多,进而利用层次约束限制了预测结果的学习过程,公式如下:

​Forecasting Hierarchical Time Series with a Regularized Embedding Space(2020)对上述方法进行改进,不是在预测结果上施加层次约束,而是将每个时间序列映射成一个embedding,然后在embedding上施加约束,即让父节点的embedding与子节点embedding的和更接近,公式如下:

​HIERARCHICALLY REGULARIZED DEEP FORECASTING(2021,HIRED)提出了一种基于深度学习的端到端层次预估方法,并且适用于大规模层次时间序列预测任务,这里我们做重点介绍。HIRED假设每个序列都是由公共的一些basis序列组成的,类似于基于矩阵分解的时间序列预测思路,basis序列的数量是一个超参数。假设设定basis数量为5,对于每一个序列,都定义一个5维的embedding,5个维度分别对应每个basis的权重,利用emebdding的每个维度分别乘basis的每个序列进行加权求和,得到当前序列的预测结果。但是对于时间序列数量非常多的数据来说,这种全局学习basis的方法效率很低。因此本文提出一种反向操作,用每个序列的信息,去还原全局的basis,并且增加了不同序列还原得到的basis应该尽可能相同的一个正则化项,可以表示为如下形式:

​其中左侧公式theta_i对应每个每个序列的embedding,函数B是根据当前序列的特征和序列值进行全局basis的还原;右侧公式表示让任何两个序列还原得到的全局basis尽可能相等的正则化项。

在此基础上,为了引入层次约束,本文采用了用序列的embedding进行约束的方式,类似于上面提到的Forecasting Hierarchical Time Series with a Regularized Embedding Space(2020)这篇论文的方法,即引入父节点的embedding和子节点的embedding的L2损失,可以表示如下:

​最终,模型的loss由3个部分组成:预测loss、全局basis生成的正则化loss、embedding进行层次约束的loss,整体loss和模型结构如下:

4. 总结

本文介绍了时间序列预测中层次时间序列预测这一场景,当要预测多个时间序列存在层次结构关系时,可以利用层次预估的思路,引入不同层次之间的加和关系、不同层次时间序列的信息等,提升整体的预测效果。

如果觉得我的算法分享对你有帮助,欢迎关注我的微信公众号“圆圆的算法笔记”,定期更新深度学习/CV/NLP/搜推广干货笔记,和世间万物的学习记录~

***公众号后台回复“论文”,获取经典论文汇总~***

如有问题欢迎公众号后台直接回复交流,更多精彩内容欢迎后台查看~

【历史干货算法笔记】

Spatial-Temporal时间序列预测建模方法汇总

12篇顶会论文,深度学习时间序列预测经典方案汇总

最新NLP Prompt代表工作梳理!ACL 2022 Prompt方向论文解析

一网打尽:14种预训练语言模型大汇总

花式Finetune方法大汇总

时间序列预测|arma应用指南

ARMA可谓是时间序列最为经典常用的预测方法,广泛应有于涉及时间序列的各个领域。ARMA模型自出道以来,出场次数不可胜数。想必大家也都不陌生,常学常新,我们今天不妨再来回顾一遍~。ARMA全称Autoregress... 查看详情

HTS 包:如何指定类似网络的预测层次结构?

】HTS包:如何指定类似网络的预测层次结构?【英文标题】:HTSpackage:howtospecifyanetwork-likehierarchyofforecasts?【发布时间】:2018-04-2618:54:52【问题描述】:我正在尝试使用htspackageforhierarchicalforecasting来一起预测供水网络的不同规模,... 查看详情

如何在多级层次结构中使用“hts”?

...发布时间】:2012-11-1418:46:37【问题描述】:我正在对大量时间序列(5,000多个)进行预测。如果我在更高级别进行预测,然后将预测分配到每个SKU,我想使用分层方法来做到这一点。我认为有必要这样做以便放大较低的地理细节... 查看详情

预测技术与方法

...按照不同的分类标准,有不同的分类:按照预测的范围或层次分类:宏观预测与微观预测按照时间长短分类:长期 查看详情

将不同的预测方法传递给R中的分层时间序列预测?

】将不同的预测方法传递给R中的分层时间序列预测?【英文标题】:PassingdifferentforecastingmethodtohierarchicaltimeseriesforecastinR?【发布时间】:2015-04-2413:31:35【问题描述】:我有一个分层时间序列,其底层序列都表现出间歇性需求。... 查看详情

WatchKit 扩展:基于页面的层次结构,一目了然

】WatchKit扩展:基于页面的层次结构,一目了然【英文标题】:WatchKitExtension:Page-basedhierarchyforglances【发布时间】:2015-02-2007:01:29【问题描述】:Apple的编程指南文档中有一些令人困惑的地方。当他们展示一瞥时,他们使用了一个... 查看详情

iosvideotoolbox硬编指南(代码片段)

...它图像,但可作为其它类型图像的参考帧。P帧(预测编码图像帧)即预测(Predicted)图像,采用帧间编码,参考前一幅I或P图像,用作运动补偿。B帧(双向预测编码图像帧)即双向预测࿰... 查看详情

使用python从混淆矩阵进行层次聚类

】使用python从混淆矩阵进行层次聚类【英文标题】:Hierarchicalclusteringfromconfusionmatrixwithpython【发布时间】:2013-09-1704:46:23【问题描述】:使用下面的answer,我尝试编写基于混淆矩阵的层次类聚类。混淆矩阵用于评估分类问题的结... 查看详情

在r中logistic回归,对新的数据做预测出现新的层次,怎么办

参考技术A在R语言中使用Logistic回归模型:Logistic模型主要有三大用途:1)寻找危险因素,找到某些影响因变量的"坏因素",一般可以通过优势比发现危险因素;2)用于预测,可以预测某种情况发生的概率或可能性大小;3... 查看详情

设计用于分解需求预测的简单模式

...为以下情况提出一个基本的模式设计:我有一个父子产品层次结构(原材料>在制品>最终产品)。订单在每个级别下。在接下来的6个月内,每周可以查看订 查看详情

层次结构窗口

层次结构窗口层级窗口:主要用来存放游戏场景物体层次结构显示对象如何附加到另一个对象的结构。层次结构窗口打开新的Unity项目时的默认层次结构窗口视图打开新的Unity项目时的默认层次结构窗口视图该层次窗口包含当前... 查看详情

是否可以在 Vim 中显示缩进指南?

...晰且不分散注意力的缩进指示,以帮助跟踪我在查看多个层次的内容时所在的代码块。:setlist只显示制表符和结束符。我找到了 查看详情

LibreOffice Base 中的数据库层次结构、聚合、关系

】LibreOfficeBase中的数据库层次结构、聚合、关系【英文标题】:Databasehierarchy,aggregation,relationsinLibreOfficeBase【发布时间】:2013-03-2911:35:35【问题描述】:我正在做一个家庭作业项目,我们为商店设计一个网站,并且我已分配了数... 查看详情

o准备如何苟进复赛圈?华为软挑开挂指南(附赛题预测)

事先声明,这不是华为软挑的软广,我也不是海军。这篇文章纯粹是心血来潮,原因是去年上传到github的参赛代码,前几天又有两个人star和fork了。记得star热潮还是去年4月复赛刚结束的那几天,厚着脸皮在八大赛区的群里发消... 查看详情

生产力应用导航层次结构中的分页视图

】生产力应用导航层次结构中的分页视图【英文标题】:PagingviewwithinaproductivityAppnavigationhierarchy【发布时间】:2010-01-2314:49:50【问题描述】:AppleUI设计指南建议UIPageControl非常适合呈现实用程序应用的顶视图。在主UINavigationControl... 查看详情

photoshop脚本指南(代码片段)

...的JavaScripts脚本Photoshop对象模型(ObjectModel)容器层次结构Application和document类Layer类一. 查看详情

如何使用保存的文本分类模型对新的文本数据集进行预测

】如何使用保存的文本分类模型对新的文本数据集进行预测【英文标题】:Howtomakepredictiononnewtextdatasetusingsavedtextclassificationmodel【发布时间】:2021-01-2519:12:00【问题描述】:我根据本指南训练了一个文本分类器:https://developers.goo... 查看详情

怎样用xgboost做时间序列预测

参考技术AXGBoost参数调优完全指南(附Python代码)译注:文内提供的代码和运行结果有一定差异,可以从这里完整代码对照参考。另外,我自己跟着教程做的时候,发现我的库无法解析字符串类型的特征,所以只用其中一部分特... 查看详情