有什么好的模型可以提高时间序列预测的准确率

一、序预测分类及算法

时序预测从不同角度看有不同分类,从实现原理的角度,可以分为传统统计学,机器学习(又分非深度学习和深度学习)。

  • 按预测步长区分,可以分为单步预测和多步预测,简单来说就是一次预测未来一个时间单元还是一次预测未来多个时间单元的区别。
  • 按输入变量区分,可以分为自回归预测和使用协变量进行预测,区别在于维度中是否含有协变量,例如预测未来销售量时,如果只接受时间和历史销售量数据,则是自回归预测,如果可以接受天气、经济指数、政策事件分类等其他相关变量(称为协变量),则称为使用协变量进行预测。
  • 按输出结果区分,可以分为点预测和概率预测,很多模型只提供了点预测而不提供概率预测,点预测模型后再加蒙特卡洛模拟(或其他转化为概率预测的方式)往往不能准确反映模型输出的预测概念,而在大多数场景下,概率预测更贴近事实情况,对于未来的预测本身就应该是一种概率分布。
  • 按目标个数区分,可以分为一元、多元、多重时间序列预测。举例理解,使用历史的销售量预测未来1天的销售量为一元时间序列预测,使用历史的进店人数、销售量、退货量预测未来1天的进店人数、销售量、退货量(预测目标有三个)为多元时间序列预测,使用历史的红烧牛肉面、酸菜牛肉面、海鲜面的销售量预测未来1天的红烧牛肉面、酸菜牛肉面、海鲜面的销售量(预测目标有三种)为多重时间序列预测。

这些分类是不同角度下的分类,同一种算法往往只能是分类中的一种,例如传统的统计学算法只适合做自回归预测而不适合协变量预测。
《有什么好的模型可以提高时间序列预测的准确率》
时序预测算法有很多很多,在这里主要介绍典型的四种算法,并着重介绍 DeepAR 算法。
《有什么好的模型可以提高时间序列预测的准确率》
简单移动平均 SMA 是统计学中易实现的一种算法,他能很有效的体现出数据长期的趋势,但无法反映数据周期性的变化。将自回归(AR)的算子加上移动平均(MA),就是 ARIMA 算法。回归能够反映数据的周期性规律,和移动平均形成互补,从统计学的角度可以很好的预测一元与时间强相关场景下的时间序列,由于原理简单好理解,算法也只是一行数学公式, ARIMA 也常常在时间序列预测时先拿来做第一步实验(baseline)。

长短期记忆算法 LSTM 是在循环神经网络 RNN 的基础上,引出了遗忘门和记忆门,从而可以在长期训练的过程中筛选出我们需要的内容。在时间序列预测中,LSTM 对于一元预测场景的效果还是不错的。

DeepAR 是一个自回归循环神经网络,使用递归神经网络 (RNN) 结合自回归 AR 来预测标量(一维)时间序列。在很多应用中,会有跨一组具有代表性单元的多个相似时间序列。DeepAR 会结合多个相似的时间序列,例如是不同方便面口味的销量数据,通过深度递归神经网络学习不同时间序列内部的关联特性,使用多元或多重的目标个数来提升整体的预测准确度。DeepAR 最后产生一个可选时间跨度的多步预测结果,单时间节点的预测为概率预测,默认输出P10,P50和P90三个值。这里的P10指的是概率分布,即10%的可能性会小于P10这个值。通过给出概率预测,我们既可以综合三个值给出一个值预测,也可以使用P10 – P90的区间做出相应的决策。

二、DeepAR 算法优势

时间序列预测在真正去做的时候,难免会遇到关于数据的问题,例如无法完整收集所有影响因素的数据,影响因素在未来具有不确定性,有时只有很少甚至没有历史数据。数据往往是卡住大多数时序预测工作负载最大的问题。

DeepAR 能够在一定程度上减轻对数据的要求。作为一种监督学习算法,DeepAR 直接在模型内部补充缺省值。在导入数据的过程中,我们不需要人为的扫描数据寻找缺省值,不需要为如何填补缺省值大费周章,DeepAR 模型内部会解决这一问题。利用 DeepAR,可以将时间序列与多个分组关联,可以处理统计学难以处理的非线性问题和规模问题,可以在几乎没有历史数据的情况下执行冷启动时间序列预测,只需要有类似的事件序列相支持。例如,我有历史方便面的销售数据若干,现在新上市了一款自热米饭,只有几天的数据,依然可以使用 DeepAR 结合历史方便面的数据预测自热米饭的未来销售走势。这也是算法的一大亮点。

联合多重时间序列本身是一件挑战性十足的事,数据样本的不均衡导致了不同时间序列对于模型的影响程度是不同的。拿商品销售为例,销售数量多一个数量级,商品数量就少一个数量级,每个月卖10个的商品如果有100,000种,每个月卖100个的商品就只有10,000种,每个月卖1000个的商品就只有1000种。这种不均衡样本导致输入值的量级差异,商品A每天销售数百个,商品B每天销售数万个,两个商品共同训练时商品A的信息会被忽略掉,因为相对于B而言,A对神经网络参数的影响太低。但是,A时间序列中隐含的信息是有价值的,数百个销售额仍然能够反映季节性和趋势性的变化。
《有什么好的模型可以提高时间序列预测的准确率》
而对于这种样本量级差异的解决方法,需要对商品销售量进行缩放,对应到神经网络中,即输入到神经网络前除以v, 输出后乘以v。如何选择为每一个商品选择对应的v是一个挑战,实践发现使用商品的历史销量均值是一个不错的选择。

《有什么好的模型可以提高时间序列预测的准确率》
在 DeepAR 中这些问题的方案都包含在了算法内部,从而省去了前期大量的数据规整和清洗工作。这也就使得从使用的角度上,DeepAR 的上手难度并不高。

三、DeepAR 应用

在 SageMaker 上启用一个笔记本实例, DeepAR的示例笔记本在 Jupyter 的示例中可以找到:
《有什么好的模型可以提高时间序列预测的准确率》
点击 Use,进入示例笔记本:
《有什么好的模型可以提高时间序列预测的准确率》
使用内置算法DeepAR,我们需要设置容器的名称 forecasting-deepar:
《有什么好的模型可以提高时间序列预测的准确率》
数据预处理,按照文档中的数据格式要求进行数据预处理,设置时间序列的跨度,预测跨度,起始终止时间,并切分训练和测试数据集:
《有什么好的模型可以提高时间序列预测的准确率》
SageMaker 中使用的是封装好的 DeepAR 模型容器,我们只需要在笔记本中指定相关的命令参数和训练参数,就可以开始训练。相面给出了一个示例定义:
《有什么好的模型可以提高时间序列预测的准确率》
模型训练完成后,可以定义预测方法类,并一步调用 API 执行部署:

《有什么好的模型可以提高时间序列预测的准确率》
这样我们就训练好了一个 DeepAR 用于预测电力供应的模型,可以在笔记本中继续尝试去预测接下来的几组数据并与历史数据进行比对。我们在实际使用SageMaker的过程中,可以先简单跑一遍示例代码,再逐步替换其中的数据、和改写数据预处理的代码。当您对相关代码掌握后,可以尝试独立来编写其他流程的代码,自定义在每一个步骤中实现业务的需求。

DeepAR 作为时间序列预测中一个亮点十足的算法,希望能够帮助您短时间内取得不错的准确率。

来源:知乎
作者:AWS云计算

    原文作者:擎创夏洛克AIOps
    原文地址: https://blog.csdn.net/qq_37641528/article/details/107759279
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞