

 Amazon Forecast 不再向新买家开放。Amazon Forecast 的现有客户可以继续照常使用该服务。[了解更多](https://aws.amazon.com/blogs/machine-learning/transition-your-amazon-forecast-usage-to-amazon-sagemaker-canvas/)

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

# CNN-QR 算法
<a name="aws-forecast-algo-cnnqr"></a>

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

**Topics**
+ [CNN-QR 入门](#aws-forecast-algo-cnnqr-getting-started)
+ [CNN-QR 的工作原理](#aws-forecast-algo-cnnqr-how-it-works)
+ [将相关数据与 CNN-QR 结合使用](#aws-forecast-algo-cnnqr-using-rts)
+ [CNN-QR 超参数](#aws-forecast-algo-cnnqr-hyperparameters)
+ [提示和最佳实践](#aws-forecast-algo-cnnqr-tips)

## CNN-QR 入门
<a name="aws-forecast-algo-cnnqr-getting-started"></a>

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

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

1. 选择 AutoML（CNN-QR 是 AutoML 的一部分）。

 如果您不确定要使用哪种算法，我们建议您选择 AutoML，如果 CNN-QR 算法对您的数据来说是最准确的算法，Forecast 将选择 CNN-QR。要查看 CNN-QR 是否被选为最准确的模型，请使用 [DescribePredictor](https://docs.aws.amazon.com/forecast/latest/dg/API_DescribePredictor.html)API 或在控制台中选择预测变量名称。

以下是 CNN-QR 的一些关键用例：
+  **使用大型和复杂数据集进行预测** - CNN-QR 在使用大型和复杂数据集进行训练时效果最佳。神经网络可以跨多个数据集进行学习，这在拥有相关时间序列和项目元数据时非常有用。
+  **使用历史相关时间序列进行预测** - CNN-QR 不要求相关时间序列包含预测范围内的数据点。这种增加的灵活性使您可以包含更广泛的相关时间序列和项目元数据，例如商品价格、事件、网络指标和产品类别。

## CNN-QR 的工作原理
<a name="aws-forecast-algo-cnnqr-how-it-works"></a>

CNN-QR 是一种用于概率预测的 sequence-to-sequence（Seq2Seq）模型，它测试预测在编码序列的基础上重建解码序列的效果如何。

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

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

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

![图片：CNN-QR，其中包含时间频率的衍生特征。](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/cnnqr-time-frequencies.PNG)


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


****  

| 时间序列的频率 | 派生的特征 | 
| --- | --- | 
| 分钟 | minute-of-hour, hour-of-day, day-of-week, day-of-month, day-of-year | 
| 小时 | hour-of-day, day-of-week, day-of-month, day-of-year | 
| 天 | day-of-week, day-of-month, day-of-year | 
| 周 | week-of-month, week-of-year | 
| Month | month-of-year | 

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

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

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

![图片：CNN-QR，包含历史和前瞻性相关时间序列](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/cnnqr-short-long-rts.png)


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

## 将相关数据与 CNN-QR 结合使用
<a name="aws-forecast-algo-cnnqr-using-rts"></a>

 CNNQR 支持历史和前瞻性相关时间序列数据集。如果您提供前瞻性相关时间序列数据集，则将使用[未来填充方法](howitworks-missing-values.md)填充任何缺失值。有关历史和前瞻性相关时间序列的更多信息，请参阅[使用相关时间序列数据集](related-time-series-datasets.md)。

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

## CNN-QR 超参数
<a name="aws-forecast-algo-cnnqr-hyperparameters"></a>

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


| 参数名称 | 值 | 描述 | 
| --- | --- | --- | 
| context\_length |  [See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/aws-forecast-algo-cnnqr.html)  | 模型在进行预测之前读入的时间点数。通常，CNN-QR 的 `context_length` 值大于 DeepAR\+，因为 CNN-QR 不使用滞后来查看进一步的历史数据。<br />如果 `context_length` 的值超出预定义范围，CNN-QR 会自动将默认 `context_length` 设置为适当的值。 | 
| use\_related\_data |  [See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/aws-forecast-algo-cnnqr.html)  | 确定要在模型中包含哪些类型的相关时间序列数据。<br />从以下四个选项中选择一个：[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/aws-forecast-algo-cnnqr.html)<br />`HISTORICAL` 包括所有历史相关时间序列，`FORWARD_LOOKING` 包括所有前瞻性相关时间序列。不能选择 `HISTORICAL` 或 `FORWARD_LOOKING` 相关时间序列的子集。 | 
| use\_item\_metadata |  [See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/aws-forecast-algo-cnnqr.html)  | 确定模型是否包含项目元数据。<br />从以下两个选项中选择一个：[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/aws-forecast-algo-cnnqr.html)<br />`use_item_metadata` 包括所有提供的项目元数据，或者不包含任何内容。不能选择项目元数据的子集。 | 
| epochs |  [See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/aws-forecast-algo-cnnqr.html)  | 完成传递训练数据的最大次数。较小的数据集需要更多的周期。<br />对于 `ForecastHorizon` 和 `context_length` 的大值，可以考虑通过减少周期来缩短训练时间。 | 

### 超参数优化（HPO）
<a name="aws-forecast-algo-cnnqr-hpo"></a>

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

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

1. 手动选择 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_data` 为 `NONE` 或 `HISTORICAL`，则表示包含节假日数据并不能提高模型准确性。

如果您在手动选择期间对 `PerformHPO = TRUE` 进行了设置，则可以为 `context_length` 超参数设置 HPO 配置。但是，如果选择 AutoML，则无法更改 HPO 配置的任何方面。有关 HPO 配置的更多信息，请参阅 [IntergerParameterRange](https://docs.aws.amazon.com/forecast/latest/dg/API_IntegerParameterRange.html)API。

## 提示和最佳实践
<a name="aws-forecast-algo-cnnqr-tips"></a>

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

 **CNNs 允许更高的上下文长度** ——使用 CNN-QR，你可以将上下文长度设置得`context_length`略高于 Deepar\+ 的长度，因为 CNNs 通常效率更高。 RNNs

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

 **CNN-QR 不按平均分位数进行预测** — 当你`mean`使用 [ CreateForecast](https://docs.aws.amazon.com/forecast/latest/dg/API_CreateForecast.html)API 设置`ForecastTypes`为时，预测将在中位分位数（或）处生成。`0.5` `P50`