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

在机器学习中,目前主流的方法是利用LSTM等递归神经网络来对未来数据进行预测,这次介绍的DeepAR模型也不例外,不过不同的是,DeepAR模型并不是直接简单地输出一个确定的预测值,而是输出预测值的一个概率分布,这样做的好处有两点:
1 DeepAR 预测算法优缺点
模型亮点:
缺点:
没有attention机制,对较长的时间序列可能会出现记忆丢失的问题,无法捕获长周期、季节等信息。 但在输入部分可以加入attention机制,比如用同期的数据作为一个特征。
对金融时序的独特有效性:
DeepAR模型不同于以往的时间序列预测模型,它输出的是未来数据的一个概率分布,我们需要通过采样的方法,用DeepAR递归地生成对于未来一段时间数据的预测,不过因为是从概率分布中采样得到的,这只是一条可能的“轨迹”,要计算期望值的话,就需要利用蒙特卡洛方法多次重复采样后取平均来得到。
个人感觉这种让模型输出概率分布的方法特别适用于像金融数据这类具有较大不确定性的时间序列数据,这类数据上往往具有一些噪声,这就导致直接对未来数据做直接预测并不一定可靠,而对于预测概率分布的DeepAR模型,最大化未来序列的似然函数的方式反而能够更好地反映出数据内在的随机性质,它不仅能够预测数值,还可以预测未来的波动,这一特点对于需要考虑风险的金融领域是非常有帮助的。
多重时间序列联合的问题的解决:
联合多重时间序列本身是一件挑战性十足的事,数据样本的不均衡导致了不同时间序列对于模型的影响程度是不同的。拿商品销售为例,销售数量多一个数量级,商品数量就少一个数量级,每个月卖10个的商品如果有100,000种,每个月卖100个的商品就只有10,000种,每个月卖1000个的商品就只有1000种。 这种不均衡样本导致输入值的量级差异,商品A每天销售数百个,商品B每天销售数万个,两个商品共同训练时商品A的信息会被忽略掉,因为相对于B而言,A对神经网络参数的影响太低。但是,A时间序列中隐含的信息是有价值的,数百个销售额仍然能够反映季节性和趋势性的变化。

而对于这种样本量级差异的解决方法,需要对商品销售量进行缩放,对应到神经网络中,即输入到神经网络前除以v, 输出后乘以v。如何选择为每一个商品选择对应的v是一个挑战,实践发现使用商品的历史销量均值是一个不错的选择。
为了便于学习与时间相关的模式(如周末的峰值),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
可支持:

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

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

除了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
https://www.jianshu.com/p/8a900b9ad3d3
github: https://github.com/arrigonialberto86/deepar
import tensorflow as tf
import tensorflow_probability as tfp
class 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