CNN-QR 算法 - Amazon Forecast

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

CNN-QR 算法

Amazon Forecast CNN-QR,卷积神经网络 - 分位数回归,是一种专有的机器学习算法,使用因果卷积神经网络(CNN)预测标度(一维)时间序列。该有监督学习算法从大量时间序列中训练一个全局模型,并使用分位数解码器进行概率预测。

CNN-QR 入门

可通过两种方式使用 CNN-QR 训练预测器:

  1. 手动选择 CNN-QR 算法。

  2. 选择 AutoML(CNN-QR 是 AutoML 的一部分)。

如果您不确定要使用哪种算法,我们建议您选择 AutoML,如果 CNN-QR 算法对您的数据来说是最准确的算法,Forecast 将选择 CNN-QR。要查看 CNN-QR 是否被选为最准确的模型,请使用 DescribePredictor 或在控制台中选择预测器名称。

以下是 CNN-QR 的一些关键用例:

  • 使用大型和复杂数据集进行预测 - CNN-QR 在使用大型和复杂数据集进行训练时效果最佳。神经网络可以跨多个数据集进行学习,这在拥有相关时间序列和项目元数据时非常有用。

  • 使用历史相关时间序列进行预测 - CNN-QR 不要求相关时间序列包含预测范围内的数据点。这种增加的灵活性使您可以包含更广泛的相关时间序列和项目元数据,例如商品价格、事件、网络指标和产品类别。

CNN-QR 的工作原理

CNN-QR 是一种用于概率预测的序列到序列(Seq2Seq)模型,其测试预测在编码序列的基础上重建解码序列的效果。

该算法允许在编码和解码序列中使用不同的特征,因此您可以在编码器中使用相关的时间序列,然后将其从解码器中省略(反之亦然)。默认情况下,编码器和解码器中都将包含数据点在预测范围内的相关时间序列。预测范围内没有数据点的相关时间序列将仅包含在编码器中。

CNN-QR 使用分层因果 CNN 作为可学习的特征提取器,进行分位数回归。

为了便于学习与时间相关的模式(例如周末的峰值),CNN-QR 将根据时间序列粒度自动创建特征时间序列。例如,CNN-QR 按每周时间序列频率创建两个特征时间序列(一月中的某天和一年中的某天)。其使用这些派生的特征时间序列以及您在训练和推理期间提供的自定义特征时间序列。以下示例说明了一个目标时间序列 zi,t 和两个派生的时间序列特征:ui,1,t 表示一天中的几点, ui,2,t 表示一周中的某天。


                图片:CNN-QR,其中包含时间频率的衍生特征。

CNN-QR 将根据数据频率和训练数据的大小自动包括这些特征时间序列。下表列出了可为每个支持的基本时间频率派生的特征。

时间序列的频率 派生的特征
分钟 一小时中的分钟、一天中的几点、一周中的某天、一月中的某天、一年中的某天
小时 一天中的小时、一周中的某天、一月中的某天、一年中的某天
一周中的某天、一月中的某天、一年中的某天
一月中的某周、一年中的某周
月份 一年中的某天

在训练过程中,训练数据集中的每个时间序列都由一对相邻的上下文和预测窗口组成,这些窗口具有固定的预定义长度。如下图所示,其中上下文窗口用绿色表示,预测窗口用蓝色表示。

您可以使用在给定训练集上训练的模型来生成训练集中时间序列的预测以及其他时间序列的预测。训练数据集由目标时间序列组成,该时间序列可能与相关时间序列列表和项目元数据相关联。

下图说明如何对由 i 索引的训练数据集的元素执行此操作。训练数据集包含一个目标时间序列 zi,t 和两个关联的相关时间序列 xi,1,txi,2,t。第一个相关时间序列 xi,1,t 是前瞻性时间序列,第二个相关时间序列 xi,2,t 是历史时间序列。


                图片:CNN-QR,包含历史和前瞻性相关时间序列

CNN-QR 跨目标时间序列 zi,t 和相关时间序列 xi,1,txi,2,t 进行学习,并在预测窗口中生成预测,以橙线表示。

将相关数据与 CNN-QR 结合使用

CNNQR 支持历史和前瞻性相关时间序列数据集。如果您提供前瞻性相关时间序列数据集,则将使用未来填充方法填充任何缺失值。有关历史和前瞻性相关时间序列的更多信息,请参阅使用相关时间序列数据集

也可以将项目元数据集与 CNN-QR 结合使用。这些数据集包含目标时间序列中项目的静态信息。项目元数据对于几乎没有历史数据的冷启动预测场景特别有用。有关项目元数据的更多信息,请参阅项目元数据。

CNN-QR 超参数

Amazon Forecast 根据选定的超参数优化 CNN-QR 模型。手动选择 CNN-QR 时,您可以选择传入这些超参数的训练参数。下表列出了 CNN-QR 算法的可调超参数。

参数名称 描述
context_length
有效值

正整数

有效范围

10 至 500

典型值

2 * ForecastHorizon 到 12 * ForecastHorizon

可调 HPO

模型在进行预测之前读入的时间点数。通常,CNN-QR 的 context_length 值大于 DeepAR+,因为 CNN-QR 不使用滞后来查看进一步的历史数据。

如果 context_length 的值超出预定义范围,CNN-QR 会自动将默认 context_length 设置为适当的值。

use_related_data
有效值

ALL

NONE

HISTORICAL

FORWARD_LOOKING

默认值

ALL

可调 HPO

确定要在模型中包含哪些类型的相关时间序列数据。

从以下四个选项中选择一个:

  • ALL:包括所有提供的相关时间序列。

  • NONE:排除所有提供的相关时间序列。

  • HISTORICAL:仅包括延伸到预测范围的相关时间序列。

  • FORWARD_LOOKING:仅包括延伸到预测范围的相关时间序列。

HISTORICAL 包括所有历史相关时间序列,FORWARD_LOOKING 包括所有前瞻性相关时间序列。不能选择 HISTORICALFORWARD_LOOKING 相关时间序列的子集。

use_item_metadata
有效值

ALL

NONE

默认值

ALL

可调 HPO

确定模型是否包含项目元数据。

从以下两个选项中选择一个:

  • ALL:包括所有提供的项目元数据。

  • NONE:排除所有提供的项目元数据。

use_item_metadata 包括所有提供的项目元数据,或者不包含任何内容。不能选择项目元数据的子集。

epochs
有效值

正整数

典型值

10 到 1000

默认值

100

可调 HPO

完成传递训练数据的最大次数。较小的数据集需要更多的周期。

对于 ForecastHorizoncontext_length 的大值,可以考虑通过减少周期来缩短训练时间。

超参数优化(HPO)

超参数优化(HPO)是针对特定学习目标选择最佳超参数值的任务。使用 Forecast,您可以通过两种方式自动执行该过程:

  1. 选择 AutoML,HPO 将自动运行 CNN-QR。

  2. 手动选择 CNN-QR 并设置 PerformHPO = TRUE

其他相关时间序列和项目元数据并不总是能提高 CNN-QR 模型的准确性。运行 AutoML 或启用 HPO 时,CNN-QR 会使用或不使用提供的相关时间序列和项目元数据,测试模型的准确性,然后选择准确性最高的模型。

在 HPO 期间,Amazon Forecast 会自动优化以下三个超参数,并为您提供最终的训练值:

  • context_length - 决定网络能看到过去多远的时间。HPO 流程会自动设置 context_length 值,以最大限度地提高模型准确性,同时考虑到训练时间。

  • use_related_data - 确定模型中要包含哪些形式的相关时间序列数据。HPO 流程自动检查相关时间序列数据是否会改善模型,并选择最佳设置。

  • use_item_metadata - 决定是否在模型中包含项目元数据。HPO 流程自动检查项目元数据是否会改善模型,并选择最佳设置。

注意

如果选择 Holiday 补充特征时,设置 use_related_dataNONEHISTORICAL,则表示包含节假日数据并不能提高模型准确性。

如果您在手动选择期间对 PerformHPO = TRUE 进行了设置,则可以为 context_length 超参数设置 HPO 配置。但是,如果选择 AutoML,则无法更改 HPO 配置的任何方面。有关 HPO 配置的更多信息,请参阅 IntergerParameterRange API。

提示和最佳实践

避免对 ForecastHorizon 使用大值 - 对 ForecastHorizon 使用超过 100 的值会增加训练时间并可能降低模型的准确性。如果您想进一步预测将来的情况,请考虑以更高的频率进行聚合。例如,使用 5min 而不是 1min

CNN 支持更高的上下文长度 - 使用 CNN-QR 时,可以将 context_length 设置得略高于 DeepAR+,因为 CNN 的效率通常比 RNN 更高。

相关数据的特征工程 - 在训练模型时,尝试使用相关时间序列和项目元数据的不同组合,并评估附加信息是否能提高准确性。相关时间序列和项目元数据的不同组合和转换将产生不同的结果。

CNN-QR 不按照平均分位数进行预测 – 使用 CreateForecast API 将 ForecastTypes 设置为 mean 时,预测将按照中间值分位数(0.5P50)生成。