顶会VLDB'22论文解读:多元时序预测算法METRO
摘要:本文提出了一个端到端的MTS预测框架METRO。METRO的核心思想是利用多尺度动态图建模变量之间的依赖关系,考虑单尺度内信息传递和尺度间信息融合。
本文分享自华为云社区《VLDB'22 METRO论文解读》,作者:云数据库创新Lab 。
0 导读
本文(METRO: A Generic Graph Neural Network Framework for Multivariate Time Series Forecasting)是由华为云数据库创新Lab联合电子科技大学数据与智能实验室发表在顶会VLDB‘22的文章,该文章提出了一种的多元时序预测算法METRO。VLDB是CCF推荐的A类国际学术会议,是数据库领域顶级学术会议之一。该论文是云数据库创新LAB在时序分析层面取得的关键技术成果之一。
METRO是基于自注意力机制(self-attention)的深度学习算法。该算法能有效学习历史数据的多种周期性以及提取不同时间线的相关性,为时序预测任务提供更准确的结果,使时序数据库具有强大的分析能力。目前METRO已经作为GaussDB for Influx的时序预测算子在华为云上线,应用场景包括对服务器容量指标进行预测,指导服务器扩容操作;以及对交通路段拥堵程度预测,动态指导地图路径规划等。结合METRO提供的强大分析能力以及GaussDB for Influx已有的超大规模时间线快速读写能力,GaussDB for Influx已具备从大规模时序数据中持续挖掘数据潜在价值的能力。
1 背景
多元时间序列(Mltivariate Time Series, MTS)预测因具有广泛的应用场景而受到越来越多的关注。目前的多元时间序列模型普遍具有以下不足:
- 忽视了变量间依赖关系的动态特性。
- 没有充分考虑一个时间序列内不同尺度的时序模式
因此,本文提出了一个端到端的MTS预测框架METRO。METRO的核心思想是利用多尺度动态图(Multi- scale temperal graph)建模变量之间的依赖关系,考虑单尺度内信息传递和尺度间信息融合。同时,METRO也是一个通用的框架,现有的基于图神经网络的MTS预测模型可以被描述成METRO的特例。我们在公开的真实数据集和华为云的在线生产环境上进行了大量实验,结果表明,METRO在预测准确性,运行时间,模型大小上都优于SOTA。同时,我们也通过例化多个基于METRO的预测模型,展示了他们在性能和时间空间开销之间的的trade-off。
2 METRO
2.1 定义
定义1 动态图(Temporal graph): 我们将多元时间序列的变量描述成节点,变量之间的依赖关系描述成边,则动态图G(t)=(V(t),E(t))G(t)=(V(t),E(t))可被用来建模变量之间的动态相关性。动态图可以看作一系列静态图组成的时间序列。如下图所示。

定义2 多尺度动态图(Multi-scale Temporal graph): 若动态图中的每个时间步都是在时间尺度ss下观察/归纳得到的,我们称该动态图是关于尺度ss的,记为G_s(t)=(V_s(t),E_s(t))Gs(t)=(Vs(t),Es(t))。利用多个时间尺度观察原始MTS,则可得到多尺度动态图。如下图所示。

2.2 模型框架
METRO包含四个部分,temporal graph embedding (TGE) 模块,singe-scale graph update (SGU) 模块, cross-scale graph fusion (CGF) 模块 和 predict 模块。

2.3 TGE
TGE类似编码器,利用函数emb()emb()得到原始MTS中变量对于不同时间尺度s_isi的表示,也即获得动态图中节点的嵌入向量\mathbf{H}^{l}({t})Hl(t)。emb()emb()可被实现成拼接,求和,卷积,LSTM,GRU等等。

2.4 SGU
对于TGE的到的多尺度动态图,SGU按照尺度分别处理,完成在单一尺度下动态图内的信息传递。
首先,由于变量之间的依赖关系未知且动态变化,我们使用图学习函数g_m()gm()自动学习变量在相邻时间步之间的联系,即邻接矩阵AA, 再通过msg()msg()函数建模相邻时间步之间的信息,记为mm。


接下来,agg()agg()函数被用来聚合所有mm,得到\widetilde{m}m,\widetilde{m}m可被看作是一张包含了整体序列信息的新图。对于时间步tt,我们利用所有tt时刻之前的信息聚合得到的\widetilde{m}m来对其进行更新,得到\hat{\mathbf{H}}^{l+1}({t})H^l+1(t)。

其中,msg(),upd()msg(),upd() 可被实现成GCN,Transformer。agg()agg()可被实现成多数时序模型,例如Transformer,LSTM,GRU等。 g_m(),g_u()gm(),gu()在目前的工作中曾被实现成 transfer entropy,线性层等,也可以利用attention模型。
当对于tt的部分未来信息也可获得时,也可将其加入用于更新,这在本文中被称作SUG-C (SUG-Contextual)。
2.5 CGF

多尺度融合可使模型自动地选择有效的时间尺度组合,以适应当前预测的horizon。在CGF模块,我们首先通过samp()samp()函数找到可融合的时间步,其需满足对应的原始时间片段可对齐。再通过g_f(),fuse()gf(),fuse() 函数进行图结构的学习和信息传播,此步可用的实现与SUG类似。


SGU与CGF可堆叠多层,以通过增加深度增加模型expressiveness。
2.6 Predict
最终的预测结果取CGF最后一层,输入pred()pred()函数获得。pred()pred()可被实现为常见的输出层,例如线性层等。
2.7 实例化METRO
我们对METRO进行了如下实例化。

3 实验
3.1 在公开数据集上与baseline比较

在四个公开数据集,4个预测horizon上,METRO-attn相对于SOTA模型获得了更好的RSE和CORR。
3.2 开销和准确率的权衡

我们总结了METRO的各个实例化模型对应准确率与训练时间/测试时间/GPU memory/model size的关系,因引入了SOTA模型做比较,发现METRO模型总体开销显著低于SOTA,且由于模块的实现方式不同,METRO模型内部也存在着不同的准确率-开销trade off,其中,METRO-attn是一个有效且相对简单的实现。
3.3 模型参数分析




我们在METRO-attn上进行了参数分析,得到了使用较多时间尺度有利,大时间尺度对于长horizon预测有利等结论。
4. 应用

我们将METRO应用于华为云真实生产环境,于其产生的私人数据集上进一步测试了模型效果,实验表明,METRO显著优于SOTA模型。
5. 总结
本文提出了一个端到端的MTS预测框架METRO。METRO的核心思想是利用多尺度动态图(Multi- scale temperal graph)建模变量之间的依赖关系,考虑单尺度内信息传递和尺度间信息融合。我们在公开的真实数据集和华为云的在线生产环境上进行了大量实验,结果表明,METRO在预测准确性,运行时间,模型大小上都优于SOTA。
目前METRO已经作为GaussDB for Influx的时序预测算子应用在了生产环境中,应用场景包括对服务器容量指标进行预测,指导服务器扩容操作;交通路段拥堵程度预测,动态指导地图路径规划等。结合METRO提供的强大分析能力以及GaussDB for Influx已有的超大规模时间线快速读写能力,GaussDB for Influx已具备从大规模时序数据中持续挖掘数据潜在价值的能力。
华为云数据库创新lab官网:https://www.huaweicloud.com/lab/clouddb/home.html
顶会VLDB'22论文解读:多元时序预测算法METRO的更多相关文章
- VLDB'22 HiEngine极致RTO论文解读
摘要:<Index Checkpoints for Instant Recovery in In-Memory Database Systems>是由华为云数据库创新Lab一作发表在数据库 ...
- 解读ICDE'22论文:基于鲁棒和可解释自编码器的无监督时间序列离群点检测算法
摘要:本文提出了两个用于无监督的具备可解释性和鲁棒性时间序列离群点检测的自动编码器框架. 本文分享自华为云社区<解读ICDE'22论文:基于鲁棒和可解释自编码器的无监督时间序列离群点检测算法&g ...
- Tsunami: A Learned Multi-dimensional Index for Correlated Data and Skewed Workloads 论文解读(VLDB 2021)
Tsunami: A Learned Multi-dimensional Index for Correlated Data and Skewed Workloads 论文解读(VLDB 2021) ...
- Fauce:Fast and Accurate Deep Ensembles with Uncertainty for Cardinality Estimation 论文解读(VLDB 2021)
Fauce:Fast and Accurate Deep Ensembles with Uncertainty for Cardinality Estimation 论文解读(VLDB 2021) 本 ...
- zz扔掉anchor!真正的CenterNet——Objects as Points论文解读
首发于深度学习那些事 已关注写文章 扔掉anchor!真正的CenterNet——Objects as Points论文解读 OLDPAN 不明觉厉的人工智障程序员 关注他 JustDoIT 等 ...
- NIPS2018最佳论文解读:Neural Ordinary Differential Equations
NIPS2018最佳论文解读:Neural Ordinary Differential Equations 雷锋网2019-01-10 23:32 雷锋网 AI 科技评论按,不久前,NeurI ...
- CVPR2020行人重识别算法论文解读
CVPR2020行人重识别算法论文解读 Cross-modalityPersonre-identificationwithShared-SpecificFeatureTransfer 具有特定共享特征变换 ...
- CVPR2020论文解读:手绘草图卷积网络语义分割
CVPR2020论文解读:手绘草图卷积网络语义分割 Sketch GCN: Semantic Sketch Segmentation with Graph Convolutional Networks ...
- CVPR2020论文解读:3D Object Detection三维目标检测
CVPR2020论文解读:3D Object Detection三维目标检测 PV-RCNN:Point-Voxel Feature Se tAbstraction for 3D Object Det ...
- 可视化反投射:坍塌尺寸的概率恢复:ICCV9论文解读
可视化反投射:坍塌尺寸的概率恢复:ICCV9论文解读 Visual Deprojection: Probabilistic Recovery of Collapsed Dimensions 论文链接: ...
随机推荐
- 聊聊RNN与Attention
RNN系列: 聊聊RNN&LSTM 聊聊RNN与seq2seq attention mechanism,称为注意力机制.基于Attention机制,seq2seq可以像我们人类一样,将&quo ...
- CSS3 rgb and rgba(透明色)的使用
作者:WangMin 格言:努力做好自己喜欢的每一件事 对于颜色相信大家都很敏感,眼睛所见之处都存在颜色,那在css中我们用什么来表示颜色呢?CSS 中的颜色有三种定义方式:使用颜色方法(RGB.RG ...
- C#判断字符串的显示宽度
C#判断字符串的显示宽度 起因: 公司有一个使用项目使用HTML转换为PDF,其中有一个表格,表格的最后一列中的单元格,其字符串超长后会被丢弃,而不是换行到下一行展示(HtmlToPdf渲染引擎导致的 ...
- C语言已知四位数3025具有一个特殊性质:它的前两位数字30与后两位数字25之和是55,而55的平方正好等于3025。编程找出所有具有这种性质的四位数。
#include<stdio.h> void main() { int n, i, j; for (n = 1000; n < 10000; n++) { i = n / 100; ...
- 3款高评价的.Net开发的WMS系统推荐
本文简介 WMS仓库管理系统是一款专业的仓库管理系统,旨在帮助企业实现仓储管理的智能化.信息化和自动化.通过该系统,企业可以实现对仓库的进货.出货.库存等各个环节的全面把控,提高仓储管理水平,降低运营 ...
- Walrus 0.4发布:单一配置、多态运行,体验下一代应用交付模型
今天,我们高兴地宣布云原生统一应用平台 Walrus 0.4 正式发布,这是一个里程碑式的版本更新.新版本采用了全新的应用模型--仅需进行单一配置,即可在多种模态的基础设施及环境中运行包括应用服务及周 ...
- 小程序引入外部icon图标
一.使用阿里巴巴图标库引入字体图标 阿里巴巴图标库:https://www.iconfont.cn/manage/index 选择合适的图标 收藏,在收藏中查看 选择:自己的项目 选择:第二个{fon ...
- java.lang.TypeNotPresentException: Type javax.servlet.http.HttpServletRequest not present
完整的报错信息 java.lang.TypeNotPresentException: Type javax.servlet.http.HttpServletRequest not present at ...
- 如何将Swagger接口导入ApiFox
先按照如下图操作 在apifox创建一个新项目,点击项目 点击导入数据(可以选择手动或者自动) 复制刚才的url,然后立即导入,保存
- 使用Py2neo更新Neo4j中节点的属性值的正确姿势
1 def findNode(name, graph): 2 matcher = NodeMatcher(graph) 3 m = matcher.match(name = name).first() ...