

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

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

# Amazon Forecast 算法
<a name="aws-forecast-choosing-recipes"></a>

Amazon Forecast 预测器使用算法通过时间序列数据集训练模型。然后，使用经过训练的模型来生成指标和预测。

 如果您不确定要使用哪种算法来训练模型，请在创建预测器时选择 AutoML，然后让 Forecast 为您的数据集训练最优模型。或者，您可以手动选择其中一种 Amazon Forecast 算法。

**Python 笔记本**  
有关使用 AutoML 的 step-by-step指南，请参阅 AutoML [入门](https://github.com/aws-samples/amazon-forecast-samples/blob/master/notebooks/advanced/Getting_started_with_AutoML/Getting_started_with_AutoML.ipynb)。

## 内置 Forecast 算法
<a name="forecast-algos"></a>

 Amazon Forecast 提供了六种内置算法供您选择。这些算法包括自回归积分滑动平均模型（ARIMA）等常用统计算法，以及 CNN-QR 和 DeepAR\$1 等复杂的神经网络算法。

### [CNN-QR](aws-forecast-algo-cnnqr.md)
<a name="cnnqr"></a>

 `arn:aws:forecast:::algorithm/CNN-QR` 

 Amazon Forecast CNN-QR，卷积神经网络——分位数回归，是一种专有的机器学习算法，用于使用因果卷积神经网络预测时间序列 ()。CNNsCNN-QR 最适合处理包含数百个时间序列的大型数据集。它接受项目元数据，并且是唯一接受不包含未来值的相关时间序列数据的 Forecast 算法。

### [DeepAR\$1](aws-forecast-recipe-deeparplus.md)
<a name="deeparplus"></a>

`arn:aws:forecast:::algorithm/Deep_AR_Plus`

 Amazon Forecast Deepar\$1 是一种专有的机器学习算法，用于使用循环神经网络预测时间序列 () RNNs。DeepAR\$1 最适合处理包含数百个特征时间序列的大型数据集。该算法接受前瞻性相关时间序列和项目元数据。

### [Prophet](aws-forecast-recipe-prophet.md)
<a name="prophet"></a>

`arn:aws:forecast:::algorithm/Prophet`

 Prophet 是一种基于加性模型的时间序列预测算法，其中非线性趋势与每年、每周和每日的季节性相吻合。它最适合具有强季节效应的时间序列和多个季节的历史数据。

### [NPTS](aws-forecast-recipe-npts.md)
<a name="npts"></a>

`arn:aws:forecast:::algorithm/NPTS`

 Amazon Forecast 非参数时间序列 (NPTS) 专有算法是可扩展的概率基线预测器。NPTS 在处理稀疏或间歇性时间序列时特别有用。Forecast 提供了四种算法变体：标准 NPTS、季节性 NPTS、气候学预报器和季节性气候学预报器。

### [ARIMA](aws-forecast-recipe-arima.md)
<a name="arima"></a>

`arn:aws:forecast:::algorithm/ARIMA`

 自回归积分滑动平均模型 (ARIMA) 是一种常用的时间序列预测统计算法。该算法对小于 100 个时间序列的简单数据集特别有用。

### [ETS](aws-forecast-recipe-ets.md)
<a name="ets"></a>

`arn:aws:forecast:::algorithm/ETS`

 指数平滑法 (ETS) 是一种常用的时间序列预测统计算法。该算法对小于 100 个时间序列的简单数据集以及具有季节性模式的数据集特别有用。ETS 计算时间序列数据集中所有观察数据的加权平均值作为其预测，权重随时间呈指数递减。

## 比较 Forecast 算法
<a name="comparing-algos"></a>

 使用下表查找最适合您的时间序列数据集的选项。


|  | 神经网络 | 灵活的局部算法 | 基线算法 |  | CNN-QR | DeepAR\$1 | Prophet | NPTS | ARIMA | ETS | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| 计算密集型训练过程 | 高 | 高 | 中 | 低 | 低 | 低 | 
| 接受历史相关时间序列\$1 | ![\[Yes\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/icon-yes.png)  | ![\[No\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/icon-no.png)  | ![\[No\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/icon-no.png)  | ![\[No\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/icon-no.png)  | ![\[No\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/icon-no.png)  | ![\[No\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/icon-no.png)  | 
| 接受前瞻性相关时间序列\$1 | ![\[Yes\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/icon-yes.png)  | ![\[Yes\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/icon-yes.png)  | ![\[Yes\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/icon-yes.png)  | ![\[No\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/icon-no.png)  | ![\[No\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/icon-no.png)  | ![\[No\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/icon-no.png)  | 
| 接受项目元数据（商品颜色、品牌等） | ![\[Yes\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/icon-yes.png)  | ![\[Yes\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/icon-yes.png)  | ![\[No\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/icon-no.png)  | ![\[No\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/icon-no.png)  | ![\[No\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/icon-no.png)  | ![\[No\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/icon-no.png)  | 
| 接受天气指数内置特征化 | ![\[Yes\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/icon-yes.png)  | ![\[Yes\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/icon-yes.png)  | ![\[Yes\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/icon-yes.png)  | ![\[No\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/icon-no.png)  | ![\[No\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/icon-no.png)  | ![\[No\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/icon-no.png)  | 
| 适用于稀疏数据集 | ![\[Yes\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/icon-yes.png)  | ![\[Yes\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/icon-yes.png)  | ![\[No\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/icon-no.png)  | ![\[Yes\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/icon-yes.png)  | ![\[No\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/icon-no.png)  | ![\[No\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/icon-no.png)  | 
| 执行超参数优化（HPO） | ![\[Yes\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/icon-yes.png)  | ![\[Yes\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/icon-yes.png)  | ![\[No\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/icon-no.png)  | ![\[No\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/icon-no.png)  | ![\[No\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/icon-no.png)  | ![\[No\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/icon-no.png)  | 
| 允许覆盖默认的超参数值  | ![\[Yes\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/icon-yes.png)  | ![\[Yes\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/icon-yes.png)  | ![\[No\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/icon-no.png)  | ![\[Yes\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/icon-yes.png)  | ![\[No\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/icon-no.png)  | ![\[No\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/icon-no.png)  | 

\$1有关相关时间序列的更多信息，请参阅[相关时间序列](related-time-series-datasets.md)。

# 自回归积分滑动平均模型 (ARIMA) 算法
<a name="aws-forecast-recipe-arima"></a>

自回归积分滑动平均模型 ([ARIMA](https://en.wikipedia.org/wiki/Autoregressive_integrated_moving_average)) 是一种常用的时间序列预测局部统计算法。ARIMA 捕获输入数据集中的标准时间结构（模式化的时间组织）。Amazon Forecast ARIMA 算法在综合 R 档案网络（CRAN）的 `Package 'forecast'` 中调用 [Arima 函数](https://cran.r-project.org/web/packages/forecast/forecast.pdf#Rfn.Arima.1)。

## ARIMA 的工作原理
<a name="aws-forecast-recipe-arima-how-it-works"></a>

ARIMA 算法对于可以映射到平稳时间序列的数据集特别有用。平稳时间序列的统计特性（例如自相关）与时间无关。具有平稳时间序列的数据集通常包含信号和噪声的组合。信号可能呈现正弦振荡模式或具有季节性成分。ARIMA 就像一个过滤器，将信号从噪声中分离出来，然后对未来的信号进行推断以做出预测。

## ARIMA 超参数和优化
<a name="aws-forecast-recipe-arima-hyperparamters"></a>

有关 ARIMA 超参数和优化的信息，请参阅 [CRAN](https://cran.r-project.org) 的“预测”包中的 `Arima` 函数文档。

Amazon Forecast 通过下表将 [CreateDataset](API_CreateDataset.md) 操作中指定的 `DataFrequency` 参数转换为 R [ts](https://www.rdocumentation.org/packages/stats/versions/3.6.1/topics/ts) 函数的 `frequency` 参数：


| DataFrequency （字符串） | R ts 频率（整型） | 
| --- | --- | 
| Y | 1 | 
| M | 12 | 
| W | 52 | 
| D | 7 | 
| H | 24 | 
| 30 分钟 | 2 | 
| 15 分钟 | 4 | 
| 10 分钟 | 6 | 
| 5 分钟 | 12 | 
| 1 分钟 | 60 | 

对于小于 24 的频率或短时间序列，则使用 [CRAN](https://cran.r-project.org) 的 `Package 'forecast'` 的 `auto.arima` 函数设置超参数。对于大于等于 24 的频率和长时间序列，我们使用傅立叶级数 K = 4，如此处[使用长季节性周期进行预测](https://robjhyndman.com/hyndsight/longseasonality/)所述。

表中不支持的数据频率默认为 `ts` 频率 1。

# 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` 表示一周中的某天。

![\[\]](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` 是历史时间序列。

![\[\]](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\$1length |  [\[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\$1，因为 CNN-QR 不使用滞后来查看进一步的历史数据。 如果 `context_length` 的值超出预定义范围，CNN-QR 会自动将默认 `context_length` 设置为适当的值。  | 
| use\$1related\$1data |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/aws-forecast-algo-cnnqr.html)  |  确定要在模型中包含哪些类型的相关时间序列数据。 从以下四个选项中选择一个： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/aws-forecast-algo-cnnqr.html) `HISTORICAL` 包括所有历史相关时间序列，`FORWARD_LOOKING` 包括所有前瞻性相关时间序列。不能选择 `HISTORICAL` 或 `FORWARD_LOOKING` 相关时间序列的子集。  | 
| use\$1item\$1metadata |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/aws-forecast-algo-cnnqr.html)  |  确定模型是否包含项目元数据。 从以下两个选项中选择一个： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/aws-forecast-algo-cnnqr.html) `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)  |  完成传递训练数据的最大次数。较小的数据集需要更多的周期。 对于 `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\$1length** - 决定网络能看到过去多远的时间。HPO 流程会自动设置 `context_length` 值，以最大限度地提高模型准确性，同时考虑到训练时间。
+ **use\$1related\$1data** - 确定模型中要包含哪些形式的相关时间序列数据。HPO 流程自动检查相关时间序列数据是否会改善模型，并选择最佳设置。
+ **use\$1item\$1metadata** - 决定是否在模型中包含项目元数据。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\$1 的长度，因为 CNNs 通常效率更高。 RNNs

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

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

# DeepAR\$1 算法
<a name="aws-forecast-recipe-deeparplus"></a>

Amazon Forecast Deepar\$1 是一种监督学习算法，用于使用循环神经网络 () 预测标量（一维）时间序列。RNNs经典预测方法，如自回归积分滑动平均模型 (ARIMA) 或指数平滑法 (ETS)，将一个模型拟合到各个单独的时间序列，然后使用该模型外推时间序列到未来的情况。但是，在很多应用中，您有跨一组具有代表性单元的多个相似时间序列。这些时间序列分组需要不同的产品、服务器负载和网页请求。在此情况下，联合所有时间序列来训练单个模型会非常有益。DeepAR\$1 采用此方法。当您的数据集包含数百个特征时间序列时，DeepAR\$1 算法的效果将超过标准 ARIMA 和 ETS 方法。您还可以使用训练后的模型生成与其训练过的时间序列类似的新时间序列的预测。

**Python 笔记本**  
有关使用 Deepar\$1 算法的 step-by-step指南，请参阅 Deepar\$1 [入门](https://github.com/aws-samples/amazon-forecast-samples/blob/master/notebooks/advanced/Getting_started_with_DeepAR%2B/Getting_started_with_DeepAR%2B.ipynb)。

**Topics**
+ [DeepAR\$1 的工作原理](#aws-forecast-recipe-deeparplus-how-it-works)
+ [DeepAR\$1 超参数](#aws-forecast-recipe-deeparplus-hyperparameters)
+ [优化 DeepAR\$1 模型](#aws-forecast-recipe-deeparplus-tune-model)

## DeepAR\$1 的工作原理
<a name="aws-forecast-recipe-deeparplus-how-it-works"></a>

在训练过程中，DeepAR\$1 将使用训练数据集和可选的测试数据集。它将使用测试数据集评估训练后的模型。通常，训练数据集和测试数据集不必包含相同的时间序列集。您可以使用在给定训练集上训练的模型来生成训练集中时间序列的未来以及其他时间序列的预测。训练数据集和测试数据集都由（最好是多个）目标时间序列组成。或者，它们可以与特征时间序列向量和分类特征向量相关联（有关详细信息，请参阅 [AI 开发者指南中的 Input/Output Deepar](https://docs.aws.amazon.com/sagemaker/latest/dg/deepar.html#deepar-inputoutput) *Interf SageMaker ac* e）。以下示例说明如何对由 `i` 索引的训练数据集的元素执行此操作。训练数据集包含一个目标时间序列 `zi,t` 和两个关联的特征时间序列 `xi,1,t` 和 `xi,2,t`。

![\[\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/forecast-recipe-deeparplus-ts-full-159.base.png)


目标时间序列可能包含缺失值（在图表中用时间序列中的断点表示）。DeepAR\$1 仅支持将来已知的特征时间序列。这允许您运行反事实的“假设”场景。例如，“如果我以某种方式改变产品的价格，会发生什么？” 

每个目标时间序列也可以与大量分类特征关联。您可以使用它们对属于特定分组的时间序列进行编码。使用分类特征允许模型学习这些分组的典型行为，这可以提高准确性。模型通过学习每个组的嵌入向量来实现这一点，该嵌入向量捕获组中所有时间序列的公共属性。

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

![\[\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/forecast-recipe-deeparplus-ts-full-159.derived.png)


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


****  

| 时间序列的频率 | 派生的特征 | 
| --- | --- | 
| 分钟 | 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 | 

通过从训练数据集中的每个时间序列中随机抽取多个训练示例来训练 DeepAR\$1 模型。每个训练示例包括一对具有固定的预定义长度的相邻上下文和预测窗口。`context_length` 超参数控制网络可以往前回顾多长时间，`ForecastHorizon` 参数控制可以往后预测多长时间。训练期间，Amazon Forecast 将忽略训练数据集中的时间序列短于指定的预测长度的元素。以下示例显示了五个样本，其中上下文长度（以绿色突出显示）为 12 小时，预测长度（以蓝色突出显示）为 6 小时，从元素 `i` 中提取。为简洁起见，我们排除了特征时间序列 `xi,1,t` 和 `ui,2,t`。

![\[\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/forecast-recipe-deeparplus-ts-full-159.sampled.png)


为了捕获季节性模式，DeepAR\$1 还自动提供目标时间序列的延迟（过去的时段）值。在我们的以小时频率采样的示例中，对于每个时间索引 `t = T`，模型会公开 `zi,t` 值，过去大约 1 天、2 天和 3 天（以粉色突出显示）执行此操作一次。

![\[\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/forecast-recipe-deeparplus-ts-full-159.lags.png)


对于推理，训练后的模型将目标时间序列（这些时间序列在训练期间可能已使用，也可能未使用），并预测后续的 `ForecastHorizon` 值的概率分布。由于 DeepAR\$1 是在整个数据集上进行训练的，因此，预测会考虑来自类似时间序列的学习模式。

有关 DeepAR\$1 背后的数学运算的更多信息，请参阅康奈尔大学图书馆 (Cornell University Library) 网站上的 [DeepAR：使用自回归递归网络进行概率预测](https://arxiv.org/abs/1704.04110)。

## DeepAR\$1 超参数
<a name="aws-forecast-recipe-deeparplus-hyperparameters"></a>

下表列出了可在 DeepAR\$1 算法中使用的超参数。粗体显示的参数参与超参数优化 (HPO)。


| 参数名称 | 说明 | 
| --- | --- | 
| context\$1length |  模型在进行预测之前读入的时间点数。此参数的值应该与 `ForecastHorizon` 大致相同。此模型还接收来自目标的滞后输入，因此 `context_length` 可以比典型的季节性小得多。例如，每日时间序列可以具有每年的季节性。模型自动包括一年的滞后，因此上下文长度可以短于一年。模型选取的滞后值取决于时间序列的频率。例如，每日频率的滞后值为：前 1 周、2 周、3 周、4 周和年。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/aws-forecast-recipe-deeparplus.html)  | 
| epochs |  扫描训练数据的最大次数。最佳值取决于您的数据大小和学习率。较小的数据集和较低的学习率都需要有更多的周期，才能获得良好的效果。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/aws-forecast-recipe-deeparplus.html)  | 
| learning\$1rate |  训练中使用的学习率。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/aws-forecast-recipe-deeparplus.html)  | 
| learning\$1rate\$1decay |  学习率降低的速度。学习率最多降低 `max_learning_rate_decays` 次，然后训练停止。仅当 `max_learning_rate_decays` 大于 0 时才会使用此参数。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/aws-forecast-recipe-deeparplus.html)  | 
| likelihood |  模型生成一个概率预测，并可以提供分布的分位数和返回样本。根据您的数据，选择用于不确定性估算的适当可能性（噪声模型）。 有效值 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/aws-forecast-recipe-deeparplus.html) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/aws-forecast-recipe-deeparplus.html)  | 
| max\$1learning\$1rate\$1decays |  应发生的学习率降低的最大数量。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/aws-forecast-recipe-deeparplus.html) | 
| num\$1averaged\$1models |  在 DeepAR\$1 中，一个训练轨迹可以遇到多个模型。每种模型可能具有不同的预测优势和劣势。DeepAR\$1 可以平均模型行为以利用所有模型的优势。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/aws-forecast-recipe-deeparplus.html)  | 
| num\$1cells |  RNN 的各个隐藏层中使用的单元数。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/aws-forecast-recipe-deeparplus.html)  | 
| num\$1layers |  RNN 中的隐藏层数。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/aws-forecast-recipe-deeparplus.html)  | 

## 优化 DeepAR\$1 模型
<a name="aws-forecast-recipe-deeparplus-tune-model"></a>

要优化 Amazon Forecast DeepAR\$1 模型，请遵循这些建议来优化训练流程和硬件配置。

### 流程优化的最佳实践
<a name="aws-forecast-recipe-deeparplus-best-practices"></a>

 要实现最佳结果，请遵循以下建议：
+ 除了分割训练和测试数据集之外，始终提供用于训练和测试的整个时间序列，以及在调用模型进行推理时。无论您如何设置 `context_length`，都不要划分时间序列或仅提供时间序列的一部分。对于滞后值特征，该模型将使用的数据点比 `context_length` 更早。
+ 对于模型优化，您可以将数据集拆分为训练数据集和测试数据集。在典型的评估方案中，您应该采用训练所用的相同时间序列，但在未来的 `ForecastHorizon` 个时间点（紧跟着在训练期间可见的最后一个时间点）上测试模型。要创建满足这些条件的训练数据集和测试数据集，请使用整个数据集（所有时间序列）作为测试数据集，并从每个时间序列中删除最后的 `ForecastHorizon` 个点来作为训练数据集。这样一来，在训练期间，模型将看不到测试期间评估它的时间点的目标值。在测试阶段，会保留测试数据集中每个时间序列的最后 `ForecastHorizon` 个点并生成预测。随后，将预测与最后 `ForecastHorizon` 个点的实际值进行比较。您可以在测试数据集中多次重复时间序列，但在不同的终端节点处切割它们来创建更复杂的评估。这将生成针对不同时间点的多个预测平均的准确率指标。
+ 避免对 `ForecastHorizon` 使用非常大的值（大于 400），因为这会降低模型的速度和准确性。如果您想进一步预测将来的情况，请考虑以更高的频率进行聚合。例如，使用 `5min` 而不是 `1min`。
+ 由于滞后，模型的预测范围可以比 `context_length` 更大。因此，您不必将此参数设置为较大的值。此参数的一个好的起点是其值与 `ForecastHorizon` 相同。
+ 使用尽可能多的时间序列训练 DeepAR\$1 模型。尽管在单个时间序列上训练的 DeepAR\$1 模型可能正常工作，但标准预测方法（如 ARIMA 或 ETS）可能更准确，并且更适合此使用案例。当数据集包含数百个特征时间序列时，DeepAR\$1 方法开始优于标准方法。目前，DeepAR\$1 要求所有训练时间序列中可用的观察总数至少为 300。

# 指数平滑法 (ETS) 算法
<a name="aws-forecast-recipe-ets"></a>

指数平滑法 [(ETS)](https://en.wikipedia.org/wiki/Exponential_smoothing) 是一种常用的时间序列预测局部统计算法。Amazon Forecast ETS 算法在综合 R 档案网络（CRAN）的 `Package 'forecast'` 中调用 [ets 函数](https://cran.r-project.org/web/packages/forecast/forecast.pdf#Rfn.ets.1)。

## ETS 的工作原理
<a name="aws-forecast-recipe-ets-how-it-works"></a>

ETS 算法对于具有关于数据的季节性假设和其他先验假设的数据集特别有用。ETS 计算输入时间序列数据集中所有观测值的加权平均值作为其预测。权重随着时间呈指数递减，而不是简单移动平均法中的恒定权重。权重取决于常量参数，该参数称作平滑参数。

## ETS 超参数和优化
<a name="aws-forecast-recipe-ets-hyperparamters"></a>

有关 ETS 超参数和优化的信息，请参阅 [CRAN](https://cran.r-project.org) 的[“预测”包](https://cran.r-project.org/web/packages/forecast/forecast.pdf)中的 `ets` 函数文档。

Amazon Forecast 通过下表将 [CreateDataset](API_CreateDataset.md) 操作中指定的 `DataFrequency` 参数转换为 R [ts](https://www.rdocumentation.org/packages/stats/versions/3.6.1/topics/ts) 函数的 `frequency` 参数：


| DataFrequency （字符串） | R ts 频率（整型） | 
| --- | --- | 
| Y | 1 | 
| M | 12 | 
| W | 52 | 
| D | 7 | 
| H | 24 | 
| 30 分钟 | 2 | 
| 15 分钟 | 4 | 
| 10 分钟 | 6 | 
| 5 分钟 | 12 | 
| 1 分钟 | 60 | 

表中不支持的数据频率默认为 `ts` 频率 1。

# 非参数时间序列 (NPTS) 算法
<a name="aws-forecast-recipe-npts"></a>

Amazon Forecast 非参数时间序列 (NPTS) 算法是可扩展的概率基线预测器。它通过从过去的观察中采样来预测给定时间序列的未来值分布。预测受观察的值的限制。当时间序列是间歇性的（或稀疏的，包含许多 0）和突发的时，NPTS 特别有用。例如，预测时间序列具有许多低计数的单个项目的需求。Amazon Forecast 提供 NPTS 的变体，这些变体在所采样的过去的观察及其采样方式上有所不同。要使用 NPTS 变体，请选择超参数设置。

## NPTS 的工作原理
<a name="aws-forecast-recipe-npts-how-it-works"></a>

与经典预测方法（如指数平滑法 (ETS) 和自回归积分滑动平均模型 (ARIMA)）类似，NPTS 分别为每个时间序列生成预测。数据集中的时间序列可以具有不同的长度。观察可用的时间点称为训练范围，需要预测的时间点称为预测范围。

Amazon Forecast NPTS 预测程序具有以下变体：NPTS、季节性 NPTS、气候预测程序以及季节性气候预测程序。

**Topics**
+ [NPTS](#aws-forecast-recipe-npts-variants-npts)
+ [季节性 NPTS](#aws-forecast-recipe-npts-variants-seasonal)
+ [气候预测程序](#aws-forecast-recipe-npts-variants-climatological)
+ [季节性气候预测程序](#aws-forecast-recipe-npts-variants-seasonal-climatological)
+ [季节性特征](#aws-forecast-recipe-npts-seasonal-features)
+ [最佳实践](#aws-forecast-recipe-npts-recommended-practices)

### NPTS
<a name="aws-forecast-recipe-npts-variants-npts"></a>

在该变体中，通过从时间序列的训练范围中的所有观察中采样来生成预测。但是，此变体不是从所有观察中均匀地采样，而是根据与需要预测的当前时间步长的距离，为每个过去的观察分配权重。特别是，它使用的权重根据过去观察的距离呈指数衰减。通过这种方式，来自最近过去的观察结果的采样概率远高于远处过去的观测结果。这就假定，对未来而言，最近的过去比遥远的过去更具指示性。您可以使用 `exp_kernel_weights` 超参数控制权重的衰减量。

要在 Amazon Forecast 中使用此 NPTS 变体，请将 `use_seasonal_model` 超参数设置为 `False` 并接受所有其他默认设置。

### 季节性 NPTS
<a name="aws-forecast-recipe-npts-variants-seasonal"></a>

季节性 NPTS 变体类似于 NPTS，只不过它不从所有观察中采样，而是仅使用来自过去*季节* 的观察。默认情况下，季节由时间序列的粒度确定。例如，对于每小时时间序列，要预测小时 *t*，此变体从对应于前几天的小时 *t* 的观察中采样。与 NPTS 类似，前一天的小时 *t* 处的观察获得的权重高于前几天的小时 *t* 处的观察。有关如何根据时间序列的粒度确定季节性的更多信息，请参阅[季节性特征](#aws-forecast-recipe-npts-seasonal-features)。

### 气候预测程序
<a name="aws-forecast-recipe-npts-variants-climatological"></a>

气候预测程序变体以均匀概率对所有过去的观测结果进行采样。

要使用气候预测程序，请将 `kernel_type` 超参数设置为 `uniform`，并将 `use_seasonal_model` 超参数设置为 `False`。接受所有其他超参数的默认设置。

### 季节性气候预测程序
<a name="aws-forecast-recipe-npts-variants-seasonal-climatological"></a>

与季节性 NPTS 类似，季节性气候预测程序对过去季节的观察进行采样，但以均匀概率对其进行采样。

要使用季节性气候预测程序，请将 `kernel_type` 超参数设置为 `uniform`。接受所有其他超参数的所有其他默认设置。

### 季节性特征
<a name="aws-forecast-recipe-npts-seasonal-features"></a>

要为季节性 NPTS 和季节性气候预测程序确定季节对应的特征，请使用下表中列出的特征。此表根据粒度列出了支持的基本时间频率的派生特征。Amazon Forecast 包含这些特征时间序列，因此您不必提供它们。


****  

| 时间序列的频率 | 用于确定季节性的特征 | 
| --- | --- | 
| 分钟 | minute-of-hour | 
| 小时 | hour-of-day | 
| 天 | day-of-week | 
| 周 | day-of-month | 
| Month | month-of-year | 

### 最佳实践
<a name="aws-forecast-recipe-npts-recommended-practices"></a>

当使用 Amazon Forecast NPTS 算法时，请考虑以下准备数据和实现最佳结果的最佳实践：
+ 由于 NPTS 单独为每个时间序列生成预测，因此，请在调用模型进行预测时提供整个时间序列。此外，接受 `context_length` 超参数的默认值。这会导致算法使用整个时间序列。
+  如果您更改 `context_length`（因为训练数据太长），请确保它足够大并涵盖过去几个季节。例如，对于每日时间序列，此值必须至少为 365 天（前提是您拥有该数据量）。

## NPTS 超参数
<a name="aws-forecast-recipe-npts-hyperparamters"></a>

下表列出了可在 NPTS 算法中使用的超参数。


| 参数名称 | 说明 | 
| --- | --- | 
| context\$1length | 模型用于进行预测的过去时间点的数量。默认情况下，它使用训练范围中的所有时间点。通常，此超参数的值应该很大，并且应涵盖过去几个季节。例如，对于每日时间序列，此值必须至少为 365 天。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/aws-forecast-recipe-npts.html)  | 
| kernel\$1type | 用于定义用来对过去观察进行采样的权重的内核。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/aws-forecast-recipe-npts.html)  | 
| exp\$1kernel\$1weights |  仅当 `kernel_type` 为 `exponential` 时才有效。 内核的扩展参数。对于在遥远的过去向观察提供的权重的更快（指数）衰减，使用大的值。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/aws-forecast-recipe-npts.html)  | 
| use\$1seasonal\$1model | 是否使用季节性变体。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/aws-forecast-recipe-npts.html)  | 
| use\$1default\$1time\$1features |  仅适用于*季节性 NPTS* 和*季节性气候预测器*变体。 是否根据时间序列的粒度使用季节性特征来确定季节性。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/aws-forecast-recipe-npts.html)  | 

# Prophet 算法
<a name="aws-forecast-recipe-prophet"></a>

[Prophet](https://facebook.github.io/prophet/) 是一种流行的局部贝叶斯结构时间序列模型。Amazon Forecast Prophet 算法使用 Prophet 的 Python 实现的 [Prophet 类](https://facebook.github.io/prophet/docs/quick_start.html#python-ap)。

## Prophet 的工作原理
<a name="aws-forecast-recipe-prophet-how-it-works"></a>

Prophet 对于以下数据集特别有用：
+ 包含详细历史观察（每小时、每日或每周）的延长时间段（数月或数年）
+ 有多个强烈的季节性
+ 包括以前已知的重要但不规则的事件
+ 缺少数据点或具有较大的异常值
+ 具有接近极限的非线性增长趋势

Prophet 是一种具有分段线性或逻辑增长曲线趋势的加性回归模型。它包括一个使用傅立叶级数建模的年度季节组件和一个使用虚拟变量建模的每周季节组件。

有关更多信息，请参阅 [Prophet：大规模预测](https://research.facebook.com/blog/2017/2/prophet-forecasting-at-scale/)。

## Prophet 超参数和相关时间序列
<a name="aws-forecast-recipe-prophet-hyperparamters"></a>

Amazon Forecast 使用默认 Prophet [超参数](https://facebook.github.io/prophet/docs/quick_start.html#python-ap)。Prophet 还支持相关时间序列作为特征，以相关时间序列 CSV 文件形式提供给 Amazon Forecast。