deepAR已经上线Amazon SageMaker +GluonTS,有AWS的站台 + 本身的灵活性,实操可行性还是蛮高的。模型本身可以加入一些额外的属性信息,同时可以输出点预测 + 概率预测。

AWS也为此做了很多开发文档:

在机器学习中,目前主流的方法是利用LSTM等递归神经网络来对未来数据进行预测,这次介绍的DeepAR模型也不例外,不过不同的是,DeepAR模型并不是直接简单地输出一个确定的预测值,而是输出预测值的一个概率分布,这样做的好处有两点:

  • 1、很多过程本身就具有随机属性,因此输出一个概率分布更加贴近本质,预测的精度反而更高;

  • 2、可以评估出预测的不确定性和相关的风险。


1 DeepAR 预测算法优缺点

模型亮点:

  • 冷启动预测(迁移学习)
    当我们想要为一个历史数据很少或无任何历史数据的时间序列生成预测时,会出现冷启动情况。这种情况在实践中常有发生,比如在引入新产品或推出新的 AWS 区域服务时。ARIMA 或 ES 等传统方法完全依赖于单个时间序列的历史数据,因此在冷启动情况下通常不太准确。我们以服装类商品 (例如运动鞋) 预测为例。

    基于神经网络的算法 (例如 DeepAR) 可以根据其他类型运动鞋首次发布时的销售模式,学习新款运动鞋销售的典型行为。通过学习训练数据中多个相关时间序列的关系,DeepAR 可以提供比现有算法更精确的预测。

  • 概率预测(与WTTE-RNN比较像,不过WTTE使用得是:Weibull分布)
    DeepAR 还可生成点预测 (例如,一周内售出的运动鞋数量为 X) 和概率预测 (例如,一周内售出的运动鞋数量介于 X 和 Y 之间,概率为 Z%)。后者尤其适合产能规划等商业应用,在此类应用中,具体的预测分位数比可能性最大的结果更为重要。
    例如,根据预测自动为运动鞋下订单的系统可能需要生成订单数量,以使仓库库存在 X% 的概率下满足客户需求。借助概率预测,根据预测的 X% 分位数得出订单数量,可以轻松做到这一点。
    客户可以通过指定相应的似然函数超参数和推理时所需的分位数来利用此功能。

  • 多维度自变量(不仅仅是时间本身 ,还可以额外加入一些自变量)

  • 对实数和计数分别设计了不同的loss;

  • 数据预处理方面使用归一化的变换和预测使用weighted sampling。

  • 预测多条时间序列时,论文中提到可以对每条时间序序列进行category的编码,训练时进行embedding的学习

  • 可以提取每条时间序列的时间特征,作为feature输入到模型

缺点:

没有attention机制,对较长的时间序列可能会出现记忆丢失的问题,无法捕获长周期、季节等信息。
但在输入部分可以加入attention机制,比如用同期的数据作为一个特征。

对金融时序的独特有效性:

DeepAR模型不同于以往的时间序列预测模型,它输出的是未来数据的一个概率分布,我们需要通过采样的方法,用DeepAR递归地生成对于未来一段时间数据的预测,不过因为是从概率分布中采样得到的,这只是一条可能的“轨迹”,要计算期望值的话,就需要利用蒙特卡洛方法多次重复采样后取平均来得到。

个人感觉这种让模型输出概率分布的方法特别适用于像金融数据这类具有较大不确定性的时间序列数据,这类数据上往往具有一些噪声,这就导致直接对未来数据做直接预测并不一定可靠,而对于预测概率分布的DeepAR模型,最大化未来序列的似然函数的方式反而能够更好地反映出数据内在的随机性质,它不仅能够预测数值,还可以预测未来的波动,这一特点对于需要考虑风险的金融领域是非常有帮助的。

多重时间序列联合的问题的解决:

联合多重时间序列本身是一件挑战性十足的事,数据样本的不均衡导致了不同时间序列对于模型的影响程度是不同的。拿商品销售为例,销售数量多一个数量级,商品数量就少一个数量级,每个月卖10个的商品如果有100,000种,每个月卖100个的商品就只有10,000种,每个月卖1000个的商品就只有1000种。
这种不均衡样本导致输入值的量级差异,商品A每天销售数百个,商品B每天销售数万个,两个商品共同训练时商品A的信息会被忽略掉,因为相对于B而言,A对神经网络参数的影响太低。但是,A时间序列中隐含的信息是有价值的,数百个销售额仍然能够反映季节性和趋势性的变化。

而对于这种样本量级差异的解决方法,需要对商品销售量进行缩放,对应到神经网络中,即输入到神经网络前除以v, 输出后乘以v。如何选择为每一个商品选择对应的v是一个挑战,实践发现使用商品的历史销量均值是一个不错的选择。


2 DeepAR原理和实现过程

为了便于学习与时间相关的模式(如周末的峰值),DeepAR 会根据目标时间序列的频率自动创建特征时间序列。

例如,DeepAR 创建两个特征时间序列(一月中的某天和一年中的某天),其每周时间序列频率。它将这些派生的特征时间序列与您在训练和推理期间提供的自定义特征时间序列结合使用。下图显示了这些派生的时间序列特征中的两个:ui,1,t 表示一天中的小时以及 ui,2,t 一周中的某天。

算法自动生成这些特征时间序列。DeepAR下表列出了支持的基本时间频率的派生特征。

时间序列的频率 派生的特征
Minute

minute-of-hour, hour-of-day, day-of-week, day-of-month, day-of-year

Hour

hour-of-day, day-of-week, day-of-month, day-of-year

Day

day-of-week, day-of-month, day-of-year

Week

day-of-month, week-of-year

Month

一年中的某天

DeepAR 通过从训练数据集中的每个时间序列中随机采样多个训练示例来训练模型。

每个训练示例包括一对具有固定的预定义长度的相邻上下文和预测窗口。超参数控制网络可以往前看多长时间,context_length 超参数控制可以往后预测多长时间。

prediction_length在训练期间,算法忽略包含短于指定预测长度的时间序列的训练集元素。下图表示从元素 i 中提取的上下文长度为 12 小时且预测长度为 6 小时的五个样本。为简洁起见,我们省略了特征时间序列 xi,1,t 和 ui,2,t.

为了捕获季节性模式,DeepAR 还自动提供目标时间序列中的滞后值。在每小时频率的示例中,对于每个时间索引,t = T,模型公开 zi,t 值,过去大约 1、2 和 3 天出现。

对于推理,训练后的模型采用输入目标时间序列,该序列在训练期间可能已使用,也可能未使用,并预测下一个 prediction_length 值的概率分布。

由于 DeepAR 是在整个数据集上训练的,预测会考虑从类似时间序列中学习的模式。

算法的工作方式DeepAR

https://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/deepar_how-it-works.html

DeepAR 超参数

https://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/deepar_hyperparameters.html


3 deepAR模型输入

可支持:

  • 时间序列的开始时间和长度可以不同。例如,在营销工作中,产品通常在不同日期进入零售目录,因此,它们的起始日期自然会不同。但是,所有系列必须具有相同的频率、分类特征数量和动态特征数量。

  • 根据文件中时间序列的位置将训练文件随机排序。换而言之,时间序列在文件中以随机顺序出现。

  • start — 格式为 YYYY-MM-DD HH:MM:SS 的字符串。开始时间戳不能包含时区信息。

  • target — 表示时间序列的浮点值或整数的数组。可以将缺失的值编码为 null 文字、JSON 格式的 "NaN" 字符串或 Parquet 格式的 nan 浮点值。

  • dynamic_feat(可选)— 一个或多个表示自定义特征时间序列(动态特征)向量的浮点值或整数的数组。如果设置此字段,则所有记录必须具有相同数量的内部数组(相同数量的特征时间序列)。

  • cat(可选)— 可用于对记录所属的组进行编码的分类特征的数组。分类特征必须编码为一个以 0 开始的正整数序列。


4 deepAR模型评估

点预测评估:

DeepAR 算法使用不同的准确性指标评估训练后的模型。该算法通过以下方式计算测试数据上的均方根误差 (RMSE):

分布式评估:

算法使用加权分位数损失评估预测分布的准确度。对于范围为 [0, 1] 的分位数,加权分位数损失定义如下:


5 deepAR关联实践代码

除了Amazon SageMaker还有哪些有开放的代码? 官方开源项目:

关于电力数据集的 DeepAR 演示

https://github.com/awslabs/amazon-sagemaker-examples/blob/master/introduction_to_amazon_algorithms/deepar_electricity/DeepAR-Electricity.ipynb

使用 DeepAR - Synthetic 数据进行时间序列预测

https://github.com/aws/amazon-sagemaker-examples/blob/master/introduction_to_amazon_algorithms/deepar_synthetic/deepar_synthetic.ipynb

5.1 code - tensorflow版本

https://www.jianshu.com/p/8a900b9ad3d3

github:
https://github.com/arrigonialberto86/deepar

import tensorflow as tf
import tensorflow_probability as tfpclass DeepAR(tf.keras.models.Model):"""DeepAR 模型"""def __init__(self, lstm_units):super().__init__()# 注意,文章中使用了多层的 LSTM 网络,为了简单起见,本 demo 只使用一层self.lstm = tf.keras.layers.LSTM(lstm_units, return_sequences=True, return_state=True)self.dense_mu = tf.keras.layers.Dense(1)self.dense_sigma = tf.keras.layers.Dense(1, activation='softplus')def call(self, inputs, initial_state=None):outputs, state_h, state_c = self.lstm(inputs, initial_state=initial_state)mu = self.dense_mu(outputs)sigma = self.dense_sigma(outputs)state = [state_h, state_c]return [mu, sigma, state]def log_gaussian_loss(mu, sigma, y_true):"""Gaussian 损失函数"""return -tf.reduce_sum(tfp.distributions.Normal(loc=mu, scale=sigma).log_prob(y_true))

5.2 最佳代码实践 - pytorch版本

https://github.com/jingw2/demand_forecast

•DeepAR
•MQ-RNN
•Deep Factor
•LSTNet
•TPA-LSTM
•LSTNet Github
•TPA-LSTM Github
•Uber Extreme Event Forecast 1
•Uber Extreme Event Forecast 2
•Modeling Extreme Events in Time Series Prediction

参考文献:

DeepAR: Probabilistic Forecasting with Autoregressive Recurrent Networks

https://arxiv.org/abs/1704.04110

概率自回归预测——DeepAR模型浅析

https://zhuanlan.zhihu.com/p/201030350

教程 | 如何使用 DeepAR 进行时间序列预测?

https://mp.weixin.qq.com/s/88AIAyAAL9LFLutVcwGk2A

预测DeepAR算法

https://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/deepar.html

回顾︱DeepAR 算法实现更精确的时间序列预测(二)相关推荐

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

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

  2. 【时序】M4竞赛冠军方案:一种用于时间序列预测的指数平滑和递归神经网络的混合方法

    论文名称:A hybrid method of exponential smoothing and recurrent neural networks for time series forecast ...

  3. 入行时间序列预测必读的4篇论文(附代码)

    时间序列预测是一个发展历史悠久的技术领域,传统的统计学算法(e.g. ARIMA, ETS, GARCH)以及近年来的机器学习(e.g. 广义线性模型,xgboost).深度学习算法(e.g. LST ...

  4. Python设计KNN算法实现对空气质量的预测

    设计KNN算法实现对空气质量的预测 文章目录 设计KNN算法实现对空气质量的预测 前言 一.任务 二.knn应用 1.引入库 2.读入数据 两行数据之间的欧式距离 KNN算法 完整代码 总结 前言 K ...

  5. 时间序列预测(二)—— AR模型

    时间序列预测(二)-- AR模型 欢迎大家来我的个人博客网站观看原文:https://xkw168.github.io/2019/05/20/时间序列预测-二-AR模型.html 文章链接 (一)数据 ...

  6. 解读:一种来自Facebook团队的大规模时间序列预测算法(附github链接)

    写在前面 下面这篇文章的内容主要是来自Facebook团队的论文<Forecast at Scale>,这篇论文介绍了一种时间序列预测算法Prophet,该算法结合了时间序列分解以及机器学 ...

  7. porphet论文_Facebook 时间序列预测算法 Prophet 的研究

    Prophet 简介 Facebook 去年开源了一个时间序列预测的算法,叫做 fbprophet,它的官方网址与基本介绍来自于以下几个网站: 从官网的介绍来看,Facebook 所提供的 proph ...

  8. 旷视孙剑团队提出AutoML神经架构搜索新方法:单路径One-Shot,更精确更省时

    本文转载自旷视研究院 一步法(One-Shot)是一个强大的神经网络模型搜索(Neural Architecture Search/NAS)框架,但是它的训练相对复杂,并且很难在大型数据集(比如 Im ...

  9. 回顾︱时间序列预测与分解有哪些模型?(一)

    本节简单回归一下时间序列任务的几种方向以及有哪些比较优秀的开源算法. 1 时序预测 时序预测从不同角度看有不同分类.从实现原理的角度,可以分为传统统计学.机器学习(又分非深度学习和深度学习). 按预测 ...

最新文章

  1. 如何读论文?-如何写好科技论文之我见(八)
  2. jdk 9和jdk8_JDK 9 –给圣诞老人的信?
  3. 隐藏马尔科夫模型HMM
  4. 从零开始学习Hadoop--第1章 Hadoop的安装
  5. 电脑rar文件打开方式_怎么压缩文件,如何压缩文件?压缩软件哪个好?
  6. 错误记录(Unindent amount does not match previous indent)
  7. 工作两三年了,整不明白架构图都画啥?
  8. python ui自动化面试题_UI自动化面试题
  9. UltraLAB台式图形工作站(地球最快~超级图形工作站Alpha720介绍)
  10. Linux中基于eBPF的恶意利用与检测机制
  11. 陀螺仪和加速度计MPU6050的单位换算方法
  12. Opencv__模板匹配(上)
  13. pycharm如何恢复工具的主菜单
  14. 迅为龙芯2K1000核心板国产Linux工业板卡适用于工控电力能源行业方案
  15. CMU开设美国首个人工智能本科专业
  16. api 定位 微信小程序 精度_微信小程序API~地理位置location
  17. 【玩单反】屈光度调节 d7100
  18. Tomcat性能的测试
  19. 2022 华为OD机试真题 Python 实现【竖直四子棋】
  20. 三星的净利润大跌与其多项业务均面临中国企业的冲击有关

热门文章

  1. 洛谷P1461 海明码 Hamming Codes
  2. 如果一个人请优雅的活着。
  3. 13个坏习惯让IT工作者中过劳(转)
  4. IOT物联网观察之物联网建设为什么是供给侧改革的重要途径?
  5. redis安全设置及主从配置
  6. 二维数组按指定的键值排序
  7. 拼多多332亿美金市值超网易,黄铮离目标又近了一步!
  8. Masonry详解(转)
  9. Linux运维课程 第一阶段 重难点摘要(一)网络基础
  10. 学习笔记DL003:神经网络第二、三次浪潮,数据量、模型规模,精度、复杂度,对现实世界冲击...