论文:ICLR2020 | N-BEATS: NEURAL BASIS EXPANSION ANALYSIS FOR INTERPRETABLE TIME SERIES FORECASTING [1]

代码:https://github.com/ElementAI/N-BEATS

录播:https://www.bilibili.com/video/BV1zP4y177x6?spm_id_from=333.999.0.0

引用量:149

一、介绍

在M4竞赛中,前排基本都用机器学习的方法,但赢家们还结合了传统统计模型,例如选手Smyl的方法是:带残差/关注机制的神经空洞LSTM + 经典Holt-Winter统计模型。受到M4竞赛的启发,作者想探究在TS预测背景下的纯DL模型结构,同时想让模型具有可解释性,让模型能够抽取可解释性因子后,给出预测结果。

N-BEATS的贡献主要有两点:

深度神经结构:没用时序特别组成成分,用单纯的DL也能超过M3和M4竞赛中做的好的统计方法。

对时序可解释的DL:N-BEATS模型能跟传统时序中”seasonality-trend-level“的方法(序列分解)相近,输出的结果具有可解释性。

二、问题声明

先了解下离散时间下单一时序点预测的评估函数:MAPE、sMAPE、MASE和OWA。

1. MAPE

MAPE为mean absolute percentage error: ● 优点:忽略时序scale的影响,可以对比多条序列。

● 缺点:真实值有0的话,无法计算。

2. sMAPE

sMAPE为symmetric mean absolute percentage error。 ● 优点:避免当真实值为0时,MAPE会变很大的情况。另外当预测值/真实值均为0值,达到sMAPE的上限200%。

● 缺点:文章[2]提到,sMAPE在修正无边的不对称性的同时,引入了另一种由公式的分母引起的微妙的不对称性。假设有真实值A=100和预测值F=120。sMAPE为18.2%。现在是一个非常相似的情况,其中真实值=100,预测值F=80。在这里,我们得出的sMAPE为22.2%。

3. MASE

MASE为mean absolute scaled error[3]。 m为周期数,当m=1,为non-seasonal MASE。分母是 in-sample one-step naive forecast method的预测结果,这种预测方法是:t时刻预测值 = t-1时刻真实值。

● 优点:scale-independent。另外,不像MAPE在真实值趋向于0时,误差会变得很大。对称性很好,sMAPE对大和小预测值上误差不一致,预测小的会更大误差。因此sMAPE的对称性没那么好,MASE便不会如此。

4. OWA:

OWA是M4竞赛里面用的指标overall weighted average:分母是使用Naive2方法下的MAPE和sMAPE。 ïï在M4文档[4]中,有提及Naive方法就是t时刻预测值 = t-1时刻真实值,而在Naive2的M4代码[5]中,是先将序列进行乘性序列分解,然后原始序列/季节序列便得到seasonally-adjusted时序,之后用Naive即可。

Dec <- decompose(input,type="multiplicative")
des_input <- input/Dec$seasonal
...
f3 <- naive(des_input, h=fh)$mean*SIout #Naive2

三、N-BEATS

我们先看下N-BEATS整体结构示意图,再细聊结构中的各个模块:

图1:N-BEATS结构图

1. 基础Block

图2:Block

先看图1左边的Block,N-BEATS有多个Block:

● 第1个Block的输入是:真实窗口序列  ;

●第2个Block开始便是:上一步窗口的残差序列  。

x窗口长度在2H-7H之间,H为预测长度。Block的输出是对当前窗口时刻点的预测  (Backcast)和对未来预测窗口内时刻点的预测  (Forecast)。

Block包括两部分:

● FC网络:输出前向放大系数(expansion coefficient)  和后向放大系数  ;

● 基础层:基础层(basis layer)接收前后向放大系数,输入基础函数(basis function),输出前后序列的预测结果  和  。

Block的操作如下:

FC Stack内,每层的函数是RELU+FC,以FC Stack中第一层为例,它是  。而后面的FC便只是简单的线性映射层  。

基础函数  和  是用于剔除输入数据中对预测无用的部分。基础函数的具体内容会在后面细讲。

2. 双残差Stack

图2:双残差Stack

图2能看到两个残差分支:

● 后向预测:  ;

● 前向预测:  。

上游Block把  中无用部分移除掉,这使得下游Block的预测任务更容易。从预测上看,Block的输出由浅到深,是个层次分解的过程,每个Stack的输出是由各Block预测值求和得到。

3. 解释性

对前面的基础函数  和  ,作者提供两种方法:一种通用DL结构,一种是用于模型解释的结构。

(1) 通用结构

此结果不依赖于TS的领域知识,block的输出如下:

的维度是  ,其中H是预测长度。  第一个维度是表示预测的时间长度,第二维度是对应每个放大系数,因此每一列的  可以看作是有一种时序波形,预测结果相当于多个波形的加权求和。该通用函数的弊端在于解释性差。

(2) 可解释性结构

时序分解成趋势和季节性,常用STL方法,但作者设计了一种将趋势和季节性分解嵌入模型中,使得Stack输出更具解释性的结构。

● 趋势模型:采用多项式函数(degree p较小,2或3)来描述缓慢变化的时序趋势。 其中  ,相当于  (x为uniform-distributed),t的范围在[0,1),让模型学习\theta,获取趋势。比如t=0,趋势  ,数据样例可访问[6]。

● 季节性模型:使用傅里叶级数。   有H行,其中分一半参数给cos,一半参数分给sin。

整个可解释性结构,包括2个stack:第一个为trend stack,第二个为seasonal stack每个stack有3个blocks,所以2个stack就有6个blocks。而通用结构是2个stacks(共有30个blocks)

4. 集成

在M4竞赛的所有赢家,都融合了多个模型。这里作者也做了集成,而且用了180个模型(太疯狂了...),然后取预测中位数。模型的集成方面有:

● 不同的metrics。

● 不同训练长度。

● 不同随机初始化。

图3:在M4、M3和TOURISM测试集上的表现(数据集后面括号内的数字是指时序条数,N-BEATS后缀G为通用结构,I为可解释性结构)

在M4数据集上,使用GPU训练一个N-BEATS模型,耗时在30分钟-2小时之间。

5. 实验和结论

实验发现,数据粒度越小的数据集,预测不确定性更高,建议预测长度H不要太大。另外,对于模型的可解释性,透过下图便能发现:N-BEATS-I在trend stack和seasonal stack的数据明显比N-BEATS-G好。

图4:通用结构和可解释性结构的输出对比

\theta是梯度更新后给basis function的,因此\theta是它的条件参数,除此之外g(\theta)内无其他参数需要更新,这便认为g(\theta)相对固定,所以block增加或者stack增加,能提高模型的泛化能力。但提高block/stack/fc layer数量给SMAPE带来的下降会趋于平缓。

图5:不同stacks和blocks数量下的SMAPE

四、心得

阅读本文,个人心得如下:

● 模型结构中Block和双残差Stack设计很有意思,上一轮预测残差作为下一个block的输入。此外,为了增加模型可解释性,将序列分解加入到basis function当中,并有trend stack和seasonal stack分别输出结果,方便可视化解释序列预测结果。

● 但实验是在M4比赛后才做的,据社群朋友反馈,测试集已经公开了,而且用了180个模型融合才比M4第一名高了3%。真实业务场景下的效果还有待考究。

参考资料

[1] Oreshkin, B. N., Carpov, D., Chapados, N., & Bengio, Y. (2019). N-BEATS: Neural basis expansion analysis for interpretable time series forecasting. *arXiv preprint arXiv:1905.10437*.

[2] 选择正确的错误度量标准:MAPE与sMAPE的优缺点 - deephub,文章:https://zhuanlan.zhihu.com/p/273208331

[3] Mean absolute scaled error - Wikipedia,百科:https://en.wikipedia.org/wiki/Mean_absolute_scaled_error

[4] M4 Competitors Guide,文档:https://usermanual.wiki/Pdf/M4CompetitorsGuide.719015056/view

[5] Benchmarks and Evaluation.R - M4-methods,代码:https://github.com/Mcompetitions/M4-methods/blob/master/Benchmarks%20and%20Evaluation.R

[6] N-BEATS: NEURAL BASIS EXPANSION ANALYSIS FOR INTERPRETABLE TIME SERIES FORECASTING - Keshav G,博文:https://kshavg.medium.com/n-beats-neural-basis-expansion-analysis-for-interpretable-time-series-forecasting-91e94c830393

推荐阅读:

我的2022届互联网校招分享

我的2021总结

浅谈算法岗和开发岗的区别

互联网校招研发薪资汇总

2022届互联网求职现状,金9银10快变成铜9铁10!!

公众号:AI蜗牛车

保持谦逊、保持自律、保持进步

发送【蜗牛】获取一份《手把手AI项目》(AI蜗牛车著)

发送【1222】获取一份不错的leetcode刷题笔记

发送【AI四大名著】获取四本经典AI电子书

【时间序列】N-BEATS:对可解释时序预测的神经基础扩展分析相关推荐

  1. 【时序】N-BEATS:用于可解释时间序列预测的神经基础扩展分析

    论文名称:N-BEATS: Neural basis expansion analysis for interpretable time series forecasting 论文下载:https:/ ...

  2. 时序预测 | MATLAB实现基于EMD-LSTM时间序列预测(EMD分解结合LSTM长短期记忆神经网络)

    时序预测 | MATLAB实现基于EMD-LSTM时间序列预测(EMD分解结合LSTM长短期记忆神经网络) 目录 时序预测 | MATLAB实现基于EMD-LSTM时间序列预测(EMD分解结合LSTM ...

  3. 时序预测 | python实现仿生算法优化LSTM时间序列预测(全网最全仿生算法)

    ** 时序预测 | python实现仿生算法优化LSTM时间序列预测(全网最全仿生算法) ** 多变量/单变量预测程序 多变量/单变量预测程序 多变量/单变量预测程序 A ABC-LSTM--人工蜂群 ...

  4. 时序预测 | MATLAB实现LSTM长短期记忆神经网络时间序列预测

    目录 时序预测 | MATLAB实现LSTM长短期记忆神经网络时间序列预测 预测效果 程序设计 案例1 案例2 参考资料 时序预测 | MATLAB实现LSTM长短期记忆神经网络时间序列预测 预测效果 ...

  5. 时序预测 | MATLAB实现BiLSTM时间序列未来多步预测

    时序预测 | MATLAB实现BiLSTM时间序列未来多步预测 目录 时序预测 | MATLAB实现BiLSTM时间序列未来多步预测 基本介绍 模型介绍 程序设计 参考资料 基本介绍 双向 LSTM ...

  6. 时序预测 | MATLAB实现BiLSTM时间序列预测

    时序预测 | MATLAB实现BiLSTM时间序列预测 目录 时序预测 | MATLAB实现BiLSTM时间序列预测 基本介绍 程序设计 单层网络 多层网络 参考资料 致谢 基本介绍 双向 LSTM ...

  7. 时序预测 | MATLAB实现ARIMA时间序列预测(GDP预测)

    时序预测 | MATLAB实现ARIMA时间序列预测(GDP预测) 目录 时序预测 | MATLAB实现ARIMA时间序列预测(GDP预测) 预测效果 基本介绍 模型设计 模型分析 学习总结 参考资料 ...

  8. 时序预测 | MATLAB实现贝叶斯优化CNN-LSTM时间序列预测(股票价格预测)

    时序预测 | MATLAB实现贝叶斯优化CNN-LSTM时间序列预测(股票价格预测) 目录 时序预测 | MATLAB实现贝叶斯优化CNN-LSTM时间序列预测(股票价格预测) 效果一览 基本介绍 模 ...

  9. 时序预测 | MATLAB实现GWO-LSTM灰狼算法优化长短期记忆神经网络时间序列预测

    时序预测 | MATLAB实现GWO-LSTM灰狼算法优化长短期记忆神经网络时间序列预测 目录 时序预测 | MATLAB实现GWO-LSTM灰狼算法优化长短期记忆神经网络时间序列预测 预测效果 基本 ...

最新文章

  1. opencv和halcon标定参数结果对比
  2. WIN7实现多用户远程桌面
  3. C++四种cast操作符
  4. 「SCOI2011」棘手的操作
  5. 没有工作经验找it_没有工作经验怎么找工作?
  6. mysql自动填充_Mysql自动填充测试数据
  7. adb 重启应用程序
  8. 离散数学——自动生成真值表、主合取范式
  9. 开心盒子助手3.0版|开心盒子助手工具3.0电脑版
  10. ubuntu系统克隆实用教程
  11. echarts地图api series_使用echarts结合百度地图API做迁徙图
  12. Linux监控平台搭建
  13. 网页设计的秘诀:如何用颜色烘托情感
  14. 想进入IT行业,自学还是选择培训机构。
  15. Paper reading (九十一):Bifidobacterium breve Bif195 Protects Against Small-Intestinal Damage
  16. mppdb 查看建表语句_MPP架构数据库优化总结——华为LibrA与GreenPlum
  17. word表格分开快捷键_在Word 表格的编辑中,快速拆分表格应按快捷键为______。
  18. 鸿蒙系统应用开发初体验(一)
  19. 用于生菜的Linux
  20. (AI)Illustrator 2020安装教程

热门文章

  1. 【Java进阶营】Java异步NIO框架Netty实现高性能高并发
  2. 精简FreeCAD源码
  3. 新媒体指数评价方法:相应计算公式
  4. 解决Xftp6错误 要继续使用此程序您必须应用最新的更新或使用新版本
  5. Python绘制饼状图
  6. 用户思维+:好产品让用户为自己尖叫
  7. P1294 高手去散步
  8. Android 主线程与子线程区分和实践
  9. Docker实现odoo部署
  10. 个性化测试学生评测软件,团队项目(2+3):自动测试平台-- 需求文档