

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

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

# 训练预测器
<a name="howitworks-predictor"></a>

预测器是一种 Amazon Forecast 模型，该模型使用您的目标时间序列、相关时间序列、项目元数据以及您包含的任何其他数据集进行训练。您可以使用预测器根据您的时间序列数据生成预测。

默认情况下，Amazon Forecast 会创建 AutoPredictor，其中 Forecast 会将算法的最佳组合应用于数据集中的每个时间序列。

**Topics**
+ [创建预测器](#creating-predictors)
+ [正在升级到 AutoPredictor](#upgrading-autopredictor)
+ [不同预测频率的数据聚合](data-aggregation.md)
+ [使用其他数据集](#using-additional-datasets)
+ [使用传统预测器](#legacy-predictors)
+ [评估预测器准确率](metrics.md)
+ [重新训练预测器](retrain-predictors.md)
+ [天气指数](weather.md)
+ [节假日特征化](holidays.md)
+ [预测器可解释性](predictor-explainability.md)
+ [预测器监控](predictor-monitoring.md)
+ [Amazon Forecast 算法](aws-forecast-choosing-recipes.md)

## 创建预测器
<a name="creating-predictors"></a>

Amazon Forecast 需要以下输入来训练预测器：
+ **数据集组** – 必须包含目标时间序列数据集的数据集组。目标时间序列数据集包括目标属性（`item_id`）和时间戳属性以及任何维度。相关的时间序列和项目元数据为可选项。有关更多信息，请参阅 [导入数据集](howitworks-datasets-groups.md)。
+ **预测频率** – 预测的粒度（每小时、每天、每周等）。当您提供频率单位和数值时，Amazon Forecast 可让您确定预测的确切粒度。只允许使用整数值    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/howitworks-predictor.html)

  例如，如果您希望每隔一周进行一次预测，频率单位为每周，值为 2。或者，如果您希望每季度预测一次，频率单位为每月，值为 3。

  当您收集数据的频率高于预测频率时，则会将其汇总到预测频率。这包括跟踪时间序列和相关时间序列数据。有关聚合的更多信息，请参阅 [不同预测频率的数据聚合](data-aggregation.md)。
+ **预测范围** – 预测的时间步数。

您还可以为以下可选输入设置数值：
+  **时间对齐边界** – Forecast 用于聚合您的数据并生成与您指定的预测频率一致的预测的时间边界。有关聚合的更多信息，请参阅[不同预测频率的数据聚合](data-aggregation.md)。有关指定时间边界的信息，请参阅[时间边界](data-aggregation.md#time-boundaries)。
+ **预测维度** – 维度是目标时间序列数据集中的可选属性，可与目标值 (`item_id`) 结合使用以创建单独的时间序列。
+ **预测类型** – 用于评估预测器的分位数。
+ **优化指标** – 用于优化预测器的准确性指标。
+ **其他数据集** – 内置 Amazon Forecast 数据集，例如天气指数和节假日。

您可以使用软件开发工具包（SDK）或 Amazon Forecast 控制台创建预测器。

------
#### [ Console ]

**要创建预测器**

1. 登录 AWS 管理控制台 并打开 Amazon Forecast 控制台，网址为[https://console.aws.amazon.com/forecast/](https://console.aws.amazon.com/forecast/)。

1. 从**数据集组**中，选择您的数据集组。

1. 在导航窗格中，选择**预测器**。

1. 选择**训练新预测器**。

1. 提供以下必填字段的值：
   +  **名称** - 唯一的预测器名称。
   + **预测频率** - 预测的粒度。
   + **预测范围** - 预测的时间步数。

1. 选择**启动**。

有关其他数据集的信息，请参阅[天气指数](weather.md)和[节假日特征化](holidays.md)。要了解有关自定义预测类型和优化指标的更多信息，请参阅[评估预测器准确率](metrics.md)。

------
#### [ AWS CLI ]

要使用创建 auto 预测器 AWS CLI，请使用`create-predictor`命令。以下代码创建一个自动预测器，对未来 14 天进行预测。

提供预测器名称和包含训练数据的数据集组的 Amazon 资源名称（ARN）。可选择修改预测范围和预测频率。可选择为预测器添加任何标签。有关更多信息，请参阅[为 Amazon Forecast 资源贴标签](tagging-forecast-resources.md)。

有关所需和可选参数的更多信息，请参阅[CreateAutoPredictor](API_CreateAutoPredictor.md)。

```
aws forecast create-predictor \
--predictor-name predictor_name \
--data-config DatasetGroupArn="arn:aws:forecast:region:account:dataset-group/datasetGroupName" \
--forecast-horizon 14 \
--forecast-frequency D \
--tags Key=key1,Value=value1 Key=key2,Value=value2
```

要了解有关自定义预测类型和优化指标的更多信息，请参阅[评估预测器准确率](metrics.md)天气指数和节假日。其他数据集在 `DataConfig` 数据类型中定义。有关其他数据集的信息，请参阅[天气指数](weather.md)和[节假日特征化](holidays.md)。

------
#### [ Python ]

要使用适用于 Python 的 SDK（Boto3）创建自动预测器，请使用 `create_auto_predictor` 方法。以下代码创建一个自动预测器，对未来 14 天进行预测。

提供预测器名称和包含训练数据的数据集组的 Amazon 资源名称（ARN）。可选择修改预测范围和预测频率。可选择为预测器添加任何标签。有关更多信息，请参阅[为 Amazon Forecast 资源贴标签](tagging-forecast-resources.md)。

有关所需和可选参数的更多信息，请参阅[CreateAutoPredictor](API_CreateAutoPredictor.md)。

```
import boto3
            
forecast = boto3.client('forecast')

create_predictor_response = forecast.create_auto_predictor(
    PredictorName = 'predictor_name',
    ForecastHorizon = 14,
    ForecastFrequency = 'D',
    DataConfig = {
      "DatasetGroupArn": "arn:aws:forecast:region:account:dataset-group/datasetGroupName"
    },
    Tags = [ 
      { 
         "Key": "key1",
         "Value": "value1"
      },
      { 
         "Key": "key2",
         "Value": "value2"
      }
    ]
)
print(create_predictor_response['PredictorArn'])
```

要了解有关自定义预测类型和优化指标的更多信息，请参阅[评估预测器准确率](metrics.md)天气指数和节假日。其他数据集在 `DataConfig` 数据类型中定义。有关其他数据集的信息，请参阅[天气指数](weather.md)和[节假日特征化](holidays.md)。

------

## 正在升级到 AutoPredictor
<a name="upgrading-autopredictor"></a>

**Python 笔记本**  
有关将预测变量升级到的 step-by-step指南 AutoPredictor，请参阅将[预测变量升级为](https://github.com/aws-samples/amazon-forecast-samples/blob/main/notebooks/basic/Upgrading_to_AutoPredictor/UpgradeToAutoPredictor.ipynb)。 AutoPredictor

使用 AutoML 或手动选择 CreatePredictor () 创建的预测变量可以升级为。 AutoPredictor将现有变量升级到 AutoPredictor 将转移所有相关的预测变量配置设置。

升级到后 AutoPredictor，原始预测变量将保持活动状态，升级后的预测变量将具有单独的预测变量 ARN。这使您可以比较两个预测器之间的准确性指标，并且仍然可以使用原始预测器生成预测。

您可以使用软件开发工具包（SDK）或 Amazon Forecast 控制台升级预测器。

------
#### [ Console ]

**要升级预测器**

1. 登录 AWS 管理控制台 并打开 Amazon Forecast 控制台，网址为[https://console.aws.amazon.com/forecast/](https://console.aws.amazon.com/forecast/)。

1. 在导航窗格中，选择**预测器**。

1. 选择要升级的预测器，然后选择**升级**。

1. 为升级后的预测器设置唯一名称。

1. 选择 “**升级到” AutoPredictor**。

------
#### [ CLI ]

要使用升级预测变量 AWS CLI，请使用`create-predictor`方法，但*仅*指定预测变量的名称和值`reference-predictor-arn`（要升级的预测变量的 ARN）。

```
aws forecast create-predictor \
--predictor-name predictor_name \
--reference-predictor-arn arn:aws:forecast:region:account:predictor/predictorName
```

------
#### [ Python ]

要使用适用于 Python 的 SDK（Boto3）升级预测器，请使用 `create_auto_predictor` 方法，但*仅*指定预测器的名称和 `ReferencePredictorArn` 值（要升级的预测器的 ARN）。

```
import boto3
            
forecast = boto3.client('forecast')

create_predictor_response = forecast.create_auto_predictor(
    PredictorName = 'predictor_name',
    ReferencePredictorArn = 'arn:aws:forecast:region:account:predictor/predictorName'
)
print(create_predictor_response['PredictorArn'])
```

------

# 不同预测频率的数据聚合
<a name="data-aggregation"></a>

 创建预测器时，必须指定预测频率。预测频率决定了预测中预测的频率。例如，每月销售预测。Amazon Forecast 预测器可以针对高于您指定的预测频率的数据频率生成预测。例如，即使您每天记录数据，您也可以生成每周预测。在训练期间，Forecast 会聚合每日数据，以每周预测频率生成预测。

**Topics**
+ [聚合的工作原理](how-aggregation-works.md)
+ [时间边界](#time-boundaries)
+ [数据聚合假设](aggregation-guidelines.md)

# 聚合的工作原理
<a name="how-aggregation-works"></a>

 在训练期间，Amazon Forecast 会聚合与您指定的预测频率不一致的所有数据。例如，您可能有一些每日数据，但指定了每周预测频率。Forecast 会根据每日数据所属的周来对齐每日数据。然后，Forecast 将其合并为每周的单个记录。Forecast 根据其与时间边界的关系来确定数据所属的周（或月份或日等）。时间边界指定时间单位的开始时间，例如一天的开始时间或一周的开始日期。

 针对每小时和每分钟预测或未指定的时间边界，Forecast 将根据频率的时间单位使用默认时间边界。对于具有每日、每周、每月或每年预测频率的自动预测器，您可以指定自定义时间边界。有关时间边界的更多信息，请参阅 [时间边界](data-aggregation.md#time-boundaries)。

 在聚合期间，默认的转换方法是对数据汇总。您可以在创建预测器时配置转换。您可以在 Forecast 控制台中**创建预测器**页面的**输入数据配置**部分中执行此操作。或者，也可以在 CreateAutoPredictor 操作的`Transformations`参数中[AttributeConfig](API_AttributeConfig.md)设置转换方法。

下表显示了使用默认时间界限的每小时预测频率的聚合示例：每个小时从整点开始。

**预转换**


| Time | 数据 | 在整点 | 
| --- | --- | --- | 
| 2018-03-03 01:00:00 | 100 | 是 | 
| 2018-03-03 02:20:00 | 50 | 否 | 
| 2018-03-03 02:45:00 | 20 | 否 | 
| 2018-03-03 04:00:00 | 120 | 是 | 

**后转换**


| Time | 数据 | 备注 | 
| --- | --- | --- | 
| 2018-03-03 01:00:00 | 100 |  | 
| 2018-03-03 02:00:00 | 70 | 2:00:00 与 02:59:59 之间的值的总和 (50 \$1 20) | 
| 2018-03-03 03:00:00 | 空 | 03:00:00 与 03:59:59 之间没有值 | 
| 2018-03-03 04:00:00 | 120 |  | 

下图显示了 Forecast 如何转换数据来适合每周时间边界。

![\[Raw sales data points transformed into a smooth demand time series curve over weekly intervals.\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/data-alignment.png)


## 时间边界
<a name="time-boundaries"></a>

时间边界指定时间单位的开始时间，例如一周的开始日期。在聚合数据之前，Amazon Forecast 会根据您的预测频率的时间单位对齐数据。Amazon Forecast 根据数据与时间边界的关系来执行此操作。

 例如，如果您指定每日预测频率但未指定自己的时间边界，则 Forecast 会根据每小时记录所属的日期对齐每小时记录。每天从 0 点开始。一天的开始时间指的是 0 点，这就是时间边界。然后，Forecast 会将每小时记录聚合为当天的单个记录。

Forecast 根据预测频率的时间单位使用默认时间边界。如果您创建自动预测器，则可以指定自定义时间边界。

如果您同时指定自定义时间边界和自定义预测频率，Forecast 会在预测频率内聚合您的数据，并使其与自定义时间边界保持一致。预测频率决定聚合数据的频率，而自定义时间边界决定对齐的位置。例如，假设您每天收集数据，并且您希望 Amazon Forecast 在一年的每月 15 日生成季度预测。为此，请将预测频率设置为每 3 个月，将自定义时间边界设置为 15。参见以下 AWS Command Line Interface 示例。

```
aws forecast create-predictor \
--predictor-name predictor_name \
--data-config DatasetGroupArn="arn:aws:forecast:region:account:dataset-group/datasetGroupName" \
--forecast-horizon 4 \
--forecast-frequency 3M \
--time-alignment-boundary DayOfMonth=15
```

在此示例中，将所有每日数据（默认聚合）汇总到每三个月的第 15 日。

请注意，此聚合不需要每日数据，只是每月或更频繁地收集数据即可。

**Topics**
+ [默认时间边界](#default-time-boundaries)
+ [指定时间边界](#specifying-time-boundary)

### 默认时间边界
<a name="default-time-boundaries"></a>

下表列出了 Forecast 在聚合数据时使用的默认时间对齐边界。


| 频率 | 边界 | 
| --- | --- | 
| 分钟 | 上个整分（45:00、06:00） | 
| 小时 | 上个整点（09:00:00、13:00:00） | 
| 天 | 一天中的第一个小时（0 点） | 
| 周 | 最近的星期一 | 
| Month | 一月中的第一天 | 
| Year | 一年中的第一天（1 月 1 日） | 

### 指定时间边界
<a name="specifying-time-boundary"></a>

**注意**  
您只能为自动预测器指定时间边界。

 创建具有每日、每周、每月或每年预测频率的自动预测器时，可以指定 Forecast 用于聚合数据的时间边界。如果您的业务日历与默认时间边界不一致，则可以指定时间边界。例如，您可能想要生成每月预测，其中每个月从当月的第三天开始。如果您未指定时间边界，Forecast 将使用一组 [默认时间边界](#default-time-boundaries)。

 您指定的时间边界单位必须比预测频率精细一个单位。下表列出了您可以指定的时间边界单位和值，按预测频率组织。

只能指定边界值等于或小于 `28` 的 `Monthly` 时间边界。


| 预测频率单位 | 边界单位 | 边界值 | 
| --- | --- | --- | 
| 每天 | 小时 | 0–23 | 
| 每周 | 星期几 | 星期一至星期日 | 
| 每月 | 日期 | 1 到 28 日 | 
| 每年 | Month | 一月至十二月 | 

在创建预测器时，您可以指定时间对齐边界，如下所示。有关可以通过编程方式指定的不同时间边界单位和边界值的信息，请参阅 [TimeAlignmentBoundary](API_TimeAlignmentBoundary.md)。

------
#### [ Console ]

****

**为预测器指定时间对齐边界**

1. 登录 AWS 管理控制台 并打开 Amazon Forecast 控制台，网址为[https://console.aws.amazon.com/forecast/](https://console.aws.amazon.com/forecast/)。

1. 从**数据集组**中，选择您的数据集组。

1. 在导航窗格中，选择**预测器**。

1. 选择**训练新预测器**。

1. 为必填的 **名称**、**预测频率**和**预测范围**字段提供值。

1.  对于**时间对齐边界**，请指定预测器在聚合数据时将使用的时间边界。此列表中的值取决于您选择的**预测频率**。

1. 选择**启动**。Forecast 将在创建预测器时使用您指定的时间对齐边界来聚合数据。

------
#### [ AWS CLI ]

要使用为预测变量指定时间对齐边界 AWS CLI，请使用`create-predictor`命令。针对 `time-alignment-boundary` 参数，提供时间单位和边界值。以下代码创建了一个自动预测器，用于预测未来 5 周，其中每周从星期二开始。

`DayOfWeek` 和 `DayOfMonth` 值必须全部为大写。有关您可以指定的不同时间边界单位和边界值的信息，请参阅 [TimeAlignmentBoundary](API_TimeAlignmentBoundary.md)。有关所需和可选参数的信息，请参阅 [CreateAutoPredictor](API_CreateAutoPredictor.md)。

```
aws forecast create-predictor \
--predictor-name predictor_name \
--data-config DatasetGroupArn="arn:aws:forecast:region:account:dataset-group/datasetGroupName" \
--forecast-horizon 5 \
--forecast-frequency W \
--time-alignment-boundary DayOfWeek=TUESDAY
```

------
#### [ Python ]

要使用适用于 Python (Boto3) 的 SDK 为预测器指定时间对齐边界，请使用 `create_auto_predictor` 方法。针对 `TimeAlignmentBoundary` 参数，请提供一个以时间单位为键、边界值为值的字典。以下代码创建了一个自动预测器，用于预测未来 5 周，其中每周从星期二开始。

`DayOfWeek` 和 `DayOfMonth` 值必须全部为大写。有关您可以指定的不同时间边界单位和边界值的信息，请参阅 [TimeAlignmentBoundary](API_TimeAlignmentBoundary.md)。有关所需和可选参数的信息，请参阅 [CreateAutoPredictor](API_CreateAutoPredictor.md)。

```
import boto3
            
forecast = boto3.client('forecast')

create_predictor_response = forecast.create_auto_predictor(
    PredictorName = 'predictor_name',
    ForecastHorizon = 5,
    ForecastFrequency = 'W',
    DataConfig = {
      "DatasetGroupArn": "arn:aws:forecast:region:account:dataset-group/datasetGroupName"
    },
    TimeAlignmentBoundary = {
      "DayOfWeek": "TUESDAY"
    }
)
print(create_predictor_response['PredictorArn'])
```

------

# 数据聚合假设
<a name="aggregation-guidelines"></a>

Forecast 不假定数据来自任何特定时区。但是，在聚合时间序列数据时，它做出以下假设：
+ 所有数据都来自同一时区。
+ 所有预测都与数据集中的数据位于同一时区。
+ 如果在 [CreatePredictor](API_CreatePredictor.md) 操作的 [InputDataConfig](API_InputDataConfig.md) 参数中指定了 [SupplementaryFeature](API_SupplementaryFeature.md) 节假日特征，则输入数据来自同一国家/地区。

## 使用其他数据集
<a name="using-additional-datasets"></a>

创建预测器时，Amazon Forecast 可以包括天气指数和节假日。天气指数将气象信息纳入您的模型中，而节假日则包含有关国家/地区法定节假日的信息。

天气指数需要在目标时间序列数据集中具有“地理定位”属性，并要求在时间戳中提供有关时区的信息。有关更多信息，请参阅 [天气指数](weather.md)。

节假日包括超过 250 个国家/地区的节假日信息。有关更多信息，请参阅 [节假日特征化](holidays.md)。

## 使用传统预测器
<a name="legacy-predictors"></a>

**注意**  
要将现有预测变量升级到 AutoPredictor，请参见 [正在升级到 AutoPredictor](#upgrading-autopredictor)

AutoPredictor 是使用 Amazon Forecast 创建预测变量的默认首选方法。 AutoPredictor 通过为数据集中的每个时间序列应用算法的最佳组合来创建预测变量。

使用创建的预测变量 AutoPredictor 通常比使用 AutoML 或手动选择创建的预测变量更准确。Forecast 可解释性和预测变量再训练功能仅适用于使用创建的预测变量。 AutoPredictor

Amazon Forecast 也可以通过以下方式创建传统预测器：

1. **AutoML** - Forecast 会查找性能最好的算法并将其应用于您的整个数据集。

1. **手动选择** - 手动选择适用于您的整个数据集的单一算法。

您可以使用软件开发工具包（SDK）创建传统预测器。

------
#### [ SDK ]

**要使用 AutoML**

使用 [`CreatePredictor`](API_CreatePredictor.md) 操作，将 `PerformAutoML` 的值设置为 `"true"`。

```
{
    ...
    "PerformAutoML": "true",
}
```

如果您使用 autoML，则无法为以下 CreatePredictor参数设置值：`AlgorithmArn`、、`HPOConfig`。`TrainingParameters`

------

# 评估预测器准确率
<a name="metrics"></a>

Amazon Forecast 会生成准确性指标来评估预测器，并帮助您选择使用哪种预测器来生成预测。Forecast 使用均方根误差（RMSE）、加权分位数损失（wQL） 、平均绝对百分比误差（MAPE）、平均绝对比例误差（MASE） 和加权绝对百分比误差（WAPE）指标来评估预测器。

Amazon Forecast 使用回测来调整参数并生成准确性指标。在回测期间，Forecast 会自动将您的时间序列数据分成两组：训练集和测试集。训练集用于训练模型和生成测试集内数据点的预测。Forecast 通过将预测值与测试集中的观测值进行比较来评估模型的准确性。

Forecast 允许您使用不同的预测类型来评估预测器，这些预测类型可以是一组分位数预测和均值预测。均值预测提供点估计值，而分位数预测通常提供一系列可能的结果。

**Python 笔记本**  
有关评估预测指标的 step-by-step指南，请参阅[使用项目级回测计算指标](https://github.com/aws-samples/amazon-forecast-samples/blob/master/notebooks/advanced/Item_Level_Accuracy/Item_Level_Accuracy_Using_Bike_Example.ipynb)。 。

**Topics**
+ [解释准确性指标](#predictor-metrics)
+ [加权分位数损失（wQL）](#metrics-wQL)
+ [加权绝对百分比误差（WAPE）](#metrics-WAPE)
+ [均方根误差（RMSE）](#metrics-RMSE)
+ [平均绝对百分比误差（MAPE）](#metrics-mape)
+ [平均绝对比例误差（MASE）](#metrics-mase)
+ [导出准确性指标](#backtest-exports)
+ [选择预测类型](#forecast-types)
+ [使用传统预测器](#legacy-metrics)

## 解释准确性指标
<a name="predictor-metrics"></a>

 Amazon Forecast 使用均方根误差（RMSE）、加权分位数损失（wQL） 、平均加权分位数损失（平均 wQL）、平均绝对比例误差（MASE）、平均绝对百分比误差（MAPE） 和加权绝对百分比误差（WAPE）指标来评估预测器。除了总体预测器的指标外，Forecast 还会计算每个回测窗口的指标。

您可以使用 Amazon Forecast 软件开发工具包（SDK）和 Amazon Forecast 控制台查看预测器的准确性指标。

------
#### [ Forecast SDK ]

使用该[GetAccuracyMetrics](API_GetAccuracyMetrics.md)操作，指定你`PredictorArn`来查看每次回测的 RMSE、MASE、MAPE、WAPE、Average wQL 和 wQL 指标。

```
{
    "PredictorArn": "arn:aws:forecast:region:acct-id:predictor/example-id"
}
```

------
#### [ Forecast Console ]

在**预测器**页面上选择您的预测器。预测器的准确性指标显示在**预测器指标**部分中。

------

**注意**  
 对于平均 wQL、wQL、RMSE、MASE、MAPE 和 WAPE 指标，值越低表示模型越好。

**Topics**
+ [解释准确性指标](#predictor-metrics)
+ [加权分位数损失（wQL）](#metrics-wQL)
+ [加权绝对百分比误差（WAPE）](#metrics-WAPE)
+ [均方根误差（RMSE）](#metrics-RMSE)
+ [平均绝对百分比误差（MAPE）](#metrics-mape)
+ [平均绝对比例误差（MASE）](#metrics-mase)
+ [导出准确性指标](#backtest-exports)
+ [选择预测类型](#forecast-types)
+ [使用传统预测器](#legacy-metrics)

## 加权分位数损失（wQL）
<a name="metrics-wQL"></a>

加权分位数损失（wQL）指标用于衡量模型在指定分位数下的准确性。当预测过低和预测过高的成本不同时，它特别有用。通过设置 wQL 函数的权重（*τ*），您可以自动合并针对预测过低和预测过高的不同惩罚。

损失函数的计算方法如下。

![\[Mathematical equation for weighted quantile loss function with tau parameter.\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/metrics-quantile-loss.png)


其中：  
*τ* - 集合\$10.01、0.02、...、0.99\$1中的一个分位数  
qi,t(τ) - 模型预测的 τ-分位数。  
yi,t - 点（i, t）处的观测值

wQL 的分位数（τ）的范围为 0.01（P1）到 0.99（P99）。无法计算均值预测的 wQL 指标。

默认情况下，Forecast 在 `0.1`（P10）、`0.5`（P50）和 `0.9` （P90）处计算 wQL。
+ **P10（0.1）** - 预期真实值将在 10％ 的时间内低于预测值。
+ **P50（0.5）** - 预期真实值将在 50％ 的时间内低于预测值。这也称作中值预测。
+ **P90（0.9）** - 预期真实值将在 90％ 的时间内低于预测值。

在零售业中，库存不足的成本通常高于库存过剩的成本，因此，P75（*τ* = 0.75）处的预测可能比在中值分位数（P50）处的预测更能提供信息。在这些情况下，wQL[0.75] 为预测过低（0.75）分配较大的惩罚权重 ，为预测过高（0.25）分配较小的惩罚权重。

![\[Two probability distribution curves showing demand forecasting at P50 and P75 quantiles.\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/p50-p75-prediction.jpg)


上图显示了 wQL[0.50] 和 wQL[0.75] 的不同需求预测。P75 处的预测值明显高于 P50 处的预测值，因为 P75 处的预测预计将在 75％ 的时间内满足需求，而 P50 处的预测预计仅在 50％的时间内满足需求。

在给定的回测窗口中，当所有项目和所有时间点的观测值之和近似为零时，未定义加权分位数损失表达式。在这些情况下，Forecast 会输出未加权分位数损失，这是 wQL 表达式中的分子。

Forecast 还会计算平均 wQL，即所有指定分位数的加权分位数损失的平均值。默认情况下，这将是 wQL[0.10]、wQL[0.50] 和 wQL[0.90] 的平均值。

## 加权绝对百分比误差（WAPE）
<a name="metrics-WAPE"></a>

加权绝对百分比误差（WAPE）用于测量预测值与观测值的总体偏差。WAPE 的计算方法是将观测值和预测值相加，然后计算这两个值之间的误差。值越低表示模型越准确。

 在给定的回测窗口中，当所有时间点和所有项目的观测值之和近似为零时，未定义加权绝对百分比误差表达式。在这些情况下，Forecast 会输出未加权绝对误差和，这是 WAPE 表达式中的分子。

![\[Mathematical formula for WAPE showing summation of absolute differences divided by sum of absolute values.\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/WAPE.png)


其中：  
yi,t - 点（i, t）处的观测值  
ŷi,t - 点（i, t）处的预测值

 Forecast 使用预测均值作为预测值，ŷi,t。

WAPE 对异常值比均方根误差（RMSE）更稳健，因为它使用绝对误差而不是平方误差。

Amazon Forecast 之前将 WAPE 指标称为平均绝对百分比误差（MAPE），并使用预测中值（P50）作为预测值。Forecast 现在使用预测均值来计算 WAPE。wQL[0.5] 指标等同于 WAPE [中值] 指标，如下所示：

![\[Mathematical equation showing the equivalence of wQL[0.5] and WAPE[median] metrics.\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/wql-to-wape.PNG)


## 均方根误差（RMSE）
<a name="metrics-RMSE"></a>

均方根误差（RMSE）是平方误差平均值的平方根，因此与其他准确性指标相比，它对异常值更敏感。值越低表示模型越准确。

![\[Mathematical formula for Root Mean Square Error (RMSE) with summation and square root.\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/metrics-rmse.png)


其中：  
yi,t - 点（i, t）处的观测值  
ŷi,t - 点（i, t）处的预测值  
nT - 测试集中的数据点数量

Forecast 使用预测均值作为预测值，ŷi,t。在计算预测器指标时，nT 是回测窗口中的数据点的数量。

RMSE 使用残差的平方值，这会放大异常值的影响。在只有少数重大错误预测可能造成代价高昂的用例中，RMSE 是更相关的指标。

2020 年 11 月 11 日之前创建的预测器默认使用 0.5 分位数 （P50）计算 RMSE。Forecast 现在使用均值预测。

## 平均绝对百分比误差（MAPE）
<a name="metrics-mape"></a>

平均绝对百分比误差（MAPE）取每个单位时间内观测值和预测值之间百分比误差的绝对值，并取这些值的平均值。值越低表示模型越准确。

![\[Mathematical formula for Mean Absolute Percentage Error (MAPE) calculation.\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/mape.png)


其中：  
At - 点 *t* 处的观测值  
Ft - 点 *t* 处的预测值  
n - 时间序列中的数据点的数量

Forecast 使用预测均值作为预测值， Ft。

MAPE 对于时间点之间的值存在显着差异且异常值会产生重大影响的情况非常有用。

## 平均绝对比例误差（MASE）
<a name="metrics-mase"></a>

平均绝对比例误差（MASE）的计算方法是将平均误差除以比例系数。此比例系数取决于季节性值 *m*，根据预测频率选择该值。值越低表示模型越准确。

![\[Mathematical formula for Mean Absolute Scaled Error (MASE) with summation and absolute value notations.\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/mase.png)


其中：  
Yt - 点 *t* 处的观测值  
Yt-m - 点 *t-m* 处的观测值  
ej - 点 *j* 处的误差（观测值-预测值）  
m - 季节性值

Forecast 使用预测均值作为预测值。

MASE 非常适合具有周期性或具有季节性特性的数据集。例如，对夏季需求量大、冬季需求量小的项目进行预测，可以从考虑季节性影响中获益。

## 导出准确性指标
<a name="backtest-exports"></a>

**注意**  
导出的文件可以直接从数据集导入中返回信息。如果导入的数据包含公式或命令，则文件易受 CSV 注入影响。因此，导出的文件可能会提示安全警告。为避免恶意活动，请在读取导出的文件时禁用链接和宏。

Forecast 允许您导出回测期间生成的预测值和准确性指标。

您可以使用这些导出文件来评估特定时间点和分位数的特定项目，从而更好地了解您的预测器。回测导出文件将发送到指定的 S3 位置，并包含两个文件夹：
+ **forecasted-values** 文件夹：包含 CSV 或 Parquet 文件，其中包含每个回测的每种预测类型的预测值。
+ **accuracy-metrics-values**：包含 CSV 或 Parquet 文件，其中包含每次回测的指标，以及所有回测的平均值。这些指标包括每个分位数的 wQL、平均 wQL、RMSE、MASE、MAPE 和 WAPE。

`forecasted-values` 文件夹包含每个回测窗口中每种预测类型的预测值。它还包括有关项目 IDs、尺寸、时间戳、目标值以及回测窗口开始和结束时间的信息。

`accuracy-metrics-values` 文件夹包含每个回测窗口的准确性指标，以及所有回测窗口的平均指标。它包含每个指定分位数的 wQL 指标，以及平均 wQL、RMSE、MASE、MAPE 和 WAPE 指标。

两个文件夹中的文件都遵循命名约定:`<ExportJobName>_<ExportTimestamp>_<PartNumber>.csv`.

您可以使用 Amazon Forecast 软件开发工具包（SDK）和 Amazon Forecast 控制台导出准确性指标。

------
#### [ Forecast SDK ]

使用 [`CreatePredictorBacktestExportJob`](API_CreatePredictorBacktestExportJob.md) 操作，在 [`DataDestination`](API_DataDestination.md) 对象中指定您的 S3 位置和 IAM 角色，以及 `PredictorArn` 和 `PredictorBacktestExportJobName`。

例如：

```
{
   "Destination": { 
      "S3Config": { 
         "Path": "s3://bucket/example-path/",
         "RoleArn": "arn:aws:iam::000000000000:role/ExampleRole"
      }
   },
   "Format": PARQUET;
   "PredictorArn": "arn:aws:forecast:region:predictor/example",
   "PredictorBacktestExportJobName": "backtest-export-name",
}
```

------
#### [ Forecast Console ]

在**预测器**页面上选择您的预测器。在**预测器指标**部分中，选择**导出回测结果**。

在**创建预测器回测导出**阶段，设置**导出名称**、**IAM 角色**和 **S3 预测器回测导出位置**字段。

![\[Form for exporting predictor backtest data to S3, with fields for name, IAM role, and location.\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/console-export-screen.PNG)


------

## 选择预测类型
<a name="forecast-types"></a>

Amazon Forecast 使用预测类型来创建预测并评估预测器。预测类型有以下两种形式：
+ **均值预测类型** - 使用均值作为预期值的预测。通常用作给定时间点的点预测。
+ **分位数预测类型** - 在指定分位数处的预测。通常用于提供预测区间，预测区间是考虑预测不确定性的可能值范围。例如，在 `0.65` 分位数处的预测将估计值在 65% 的时间内低于观测值。

默认情况下，Forecast 对预测器预测类型使用以下值：`0.1`（P10）、`0.5`（P50）和 `0.9`（P90）。您最多可以选择五种自定义预测类型，包括 `mean` 和分位数，范围从 `0.01`（P1）到 `0.99`（P99）。

分位数可以为预测提供上限和下限。例如，使用预测类型 `0.1`（P10）和 `0.9`（P90）可提供一个称为 80% 置信区间的值范围。预计观测值在 10% 的时间内将低于 P10 值，预计 P90 值在 90% 的时间内将高于观测值。通过在 p10 和 P90 处生成预测，您可以预期真实值在 80％ 的时间内会落在这些界限之间。下图中，P10 和 P90 之间的阴影区域描绘了这些值的范围。

![\[Graph showing forecast quantiles with P99, P90, P50, P10, and P1 lines over time.\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/quantiles-intervals.png)


当预测过低和预测过高的成本不同时，您也可以使用分位数预测作为点预测。例如，在某些零售案例中，库存不足的成本高于库存过剩的成本。在这些情况下，0.65（P65）处的预测比中值（P50）或均值预测更能提供信息。

训练预测器时，您可以使用 Amazon Forecast 软件开发工具包（SDK）和 Amazon Forecast 控制台选择自定义预测类型。

------
#### [ Forecast SDK ]

使用 [`CreateAutoPredictor`](API_CreateAutoPredictor.md) 操作，在 `ForecastTypes` 参数中指定自定义预测类型。将参数格式化为字符串数组。

例如，要在 `0.01`、`mean`、`0.65` 和 `0.99` 预测类型上创建预测器，请使用以下代码。

```
{
    "ForecastTypes": [ "0.01", "mean", "0.65", "0.99" ],
},
```

------
#### [ Forecast Console ]

在**训练预测器**阶段，在**预测类型**字段中指定自定义预测类型。选择**添加新预测类型**，然后输入预测类型值。

 例如，要使用 `0.01`、`mean`、`0.65` 和 `0.99` 预测类型创建预测器 ，请在下面显示的**预测类型**字段中输入以下值。

![\[Form for entering forecast types with fields for type names and quantile values between .01 and .99.\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/predictor-custom-quantiles.png)


------

## 使用传统预测器
<a name="legacy-metrics"></a>

### 设置回测参数
<a name="backtesting-parameters"></a>

Forecast 使用回测来计算准确性指标。如果您运行多个回测，Forecast 会在所有回测窗口中计算每个指标的平均值。默认情况下，Forecast 计算一个回测，回测窗口（测试集）的大小等于预测范围的长度（预测窗口）。在训练预测器时，您可以设置*回测窗口长度*和*回测场景数量*。

Forecast 会在回测过程中忽略填充值，并且在给定回测窗口内具有填充值的任何项目都将从该回测中排除。这是因为 Forecast 仅在回测期间将预测值与观测值进行比较，而填充值不是观测值。

回测窗口必须至少与预测范围一样大，并且小于整个目标时间序列数据集长度的一半。您可以从 1 到 5 个回测中进行选择。

![\[Graph showing training and testing periods for four backtest scenarios over time.\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/evaluation-backtests.png)


通常，增加回测数量会产生更可靠的准确性指标，因为测试期间使用了大部分时间序列，并且 Forecast 能够取所有回测指标的平均值。

您可以使用 Amazon Forecast 软件开发工具包（SDK）和 Amazon Forecast 控制台设置回测参数。

------
#### [ Forecast SDK ]

使用该[CreatePredictor](API_CreatePredictor.md)操作，在[EvaluationParameters](API_EvaluationParameters.md)数据类型中设置回测参数。使用 `BackTestWindowOffset` 参数指定回测期间测试集的长度，使用 `NumberOfBacktestWindows` 参数指定回测窗口的数量。

例如，要使用 10 个时间点的测试集运行 2 个回测，请使用以下代码。

```
"EvaluationParameters": {
    "BackTestWindowOffset": 10,
    "NumberOfBacktestWindows": 2
}
```

------
#### [ Forecast Console ]

在**训练预测器**阶段，使用**回测窗口偏移**字段设置回测期间测试集的长度，使用**回测窗口数量**字段设置回测窗口的数量。

例如，要使用 10 个时间点的测试集运行 2 个回测，请设置以下值。

![\[Input fields for number of backtest windows and backtest window offset with example values.\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/predictor-backtest-windows.png)


------

### HPO 和 AutoML
<a name="HPO-AutoML"></a>

默认情况下，Amazon Forecast 使用 `0.1`（P10）、`0.5`（P50）和 `0.9`（P90）分位数在超参数优化（HPO）期间进行超参数调整，在 AutoML 期间进行模型选择。如果您在创建预测器时指定了自定义预测类型，Forecast 将在 HPO 和 AutoML 期间使用这些预测类型。

如果指定了自定义预测类型，Forecast 将使用这些指定的预测类型来确定 HPO 和 AutoML 期间的最佳结果。在 HPO 期间，Forecast 使用第一个回测窗口来查找最佳超参数值。在 AutoML 期间，Forecast 使用所有回测窗口的平均值和 HPO 中的最佳超参数值来找到最佳算法。

针对 AutoML 和 HPO，Forecast 选择可最大限度减少预测类型平均损失的选项。您还可以使用以下其中一项准确性指标在 AutoML 和 HPO 期间优化预测器：平均加权分位数损失（平均 wQL）、加权绝对百分比误差（WAPE）、均方根误差（RMSE）、平均绝对百分比误差（MAPE）或平均绝对比例误差（MASE）。

您可以使用 Amazon Forecast 软件开发工具包（SDK）和 Amazon Forecast 控制台选择优化指标。

------
#### [ Forecast SDK ]

使用 [`CreatePredictor`](API_CreatePredictor.md) 操作，在 `ObjectiveMetric` 参数中指定自定义预测类型。

`ObjectiveMetric` 参数接受以下值：
+ `AverageWeightedQuantileLoss` - 平均加权分位数损失
+ `WAPE` - 加权绝对百分比误差
+ `RMSE` - 均方根误差
+ `MAPE` - 平均绝对百分比误差
+ `MASE` - 平均绝对比例误差 

例如，要使用 AutoML 创建预测器并使用平均绝对比例误差（MASE）准确性指标进行优化，请使用以下代码。

```
{
    ...
    "PerformAutoML": "true",
    ...
    "ObjectiveMetric": "MASE",
},
```

------
#### [ Forecast Console ]

在**训练预测器**阶段，选择**自动（AutoML）**。在**目标指标**部分，选择用于优化预测器的准确性指标。

例如，下图显示了使用 AutoML 创建并使用平均绝对比例误差 （MASE）准确性指标进行优化的预测器。

使用控制台时，只能在使用 AutoML 创建预测器时指定目标指标。如果您手动选择算法，则无法为 HPO 指定目标指标。

------

# 重新训练预测器
<a name="retrain-predictors"></a>

**注意**  
重新训练仅适用于使用 AutoPredictor () [`CreateAutoPredictor`](API_CreateAutoPredictor.md)创建的预测变量。您可以将现有的传统预测变量升级到。 AutoPredictor请参阅 [正在升级到 AutoPredictor](howitworks-predictor.md#upgrading-autopredictor)。

可通过更新的数据集保留预测器，使您的预测器保持最新。在重新训练预测器时，Amazon Forecast 将保持相同的预测器配置设置。重新训练后，原始预测器将保持活动状态，重新训练的预测器将具有单独的预测器 ARN。

重新训练预测器可以通过两种方式提高预测准确性：

1. **更多最新数据**：训练模型时，重新训练的预测变量将包含更多 up-to-date数据。

1. **预测器改进**：重新训练的预测器将包含 Amazon Forecast 算法和其他数据集中的任何更新和改进。

与从头开始创建新的预测器相比，重新训练预测器的速度最多可提高 50%。预测器的训练时间更快，而且 Forecast 会自动使用现有的配置设置。

**Python 笔记本**  
有关重新训练预测变量的 step-by-step指南，请参阅[重新训练](https://github.com/aws-samples/amazon-forecast-samples/blob/main/notebooks/advanced/Retraining_AutoPredictor/Retraining.ipynb)预测变量。

您可以使用软件开发工具包（SDK）或 Amazon Forecast 控制台对预测器进行重新训练。

------
#### [ Console ]

**要重新训练预测器**

1. 登录 AWS 管理控制台 并打开 Amazon Forecast 控制台，网址为[https://console.aws.amazon.com/forecast/](https://console.aws.amazon.com/forecast/)。

1. 在导航窗格中，选择**预测器**。

1. 选择要重新训练的预测器。

1. 在**预测器操作**下拉列表中，选择**重新训练**。

1. 为升级后的预测器设置唯一名称。

1. 选择**重新训练预测器**。

------
#### [ SDK ]

**要重新训练预测器**

使用 [`CreateAutoPredictor`](API_CreateAutoPredictor.md) 操作，为预测器指定一个唯一名称，并将 `ReferencePredictorArn` 的值设置为要重新训练的预测器。

```
{
  "PredictorName": "RetrainedPredictor",
  "ReferencePredictorArn": "arn:aws:forecast:us-west-2:938097332257:predictor/OriginalPredictor"
}
```

重新训练预测器时，只需为 `PredictorName` 和 `ReferencePredictorArn` 参数赋值。

------

# 天气指数
<a name="weather"></a>

Amazon Forecast 天气指数是一项内置特征化，用于将天气历史信息和预计信息纳入到模型中。天气指数对零售用例非常有用，在此类用例中，温度和降水会大大影响产品需求。

启用天气指数后，如果 Forecast 在预测器训练期间发现精度有所提高，则它只会将此天气特征化应用于时间序列。如果在回测期间用天气信息附加时间序列并不能提高其预测精度，则 Forecast 不会将天气指数应用于此特定的时间序列。

要应用天气指数，您的目标时间序列数据集和所有相关时间序列数据集中都必须包含[地理位置属性](#adding-geolocation)。您还需要为目标时间序列时间戳指定[时区](#specifying-timezones)。有关数据集要求的更多信息，请参阅[条件和限制](#weather-conditions-restrictions)。

**Python 笔记本**  
有关使用天气指数的 step-by-step指南，请参阅[纽约出租车：带天气指数的 Amazon F](https://github.com/aws-samples/amazon-forecast-samples/tree/master/notebooks/advanced/Weather_index) orecast。

**Topics**
+ [启用天气指数](#enabling-weather)
+ [在数据集中添加地理位置信息](#adding-geolocation)
+ [指定时区](#specifying-timezones)
+ [条件和限制](#weather-conditions-restrictions)

## 启用天气指数
<a name="enabling-weather"></a>

在预测器训练阶段启用天气指数。使用该[`CreateAutoPredictor`](API_CreateAutoPredictor.md)操作时，天气指数包含在[AdditionalDataset](API_AdditionalDataset.md)数据类型中。

在启用天气指数之前，您的目标时间序列和相关时间序列数据集中必须包含地理位置属性，并且您必须为时间戳定义时区。有关更多信息，请参阅[添加地理位置信息](#adding-geolocation)和[指定时区](#specifying-timezones)。

您可以使用 Forecast 控制台或 Forecast 软件开发工具包 (SDK) 来启用天气指数。

------
#### [ Console ]

**启用天气指数**

1. 登录 AWS 管理控制台 并打开 Amazon Forecast 控制台，网址为[https://console.aws.amazon.com/forecast/](https://console.aws.amazon.com/forecast/)。

1. 从**数据集组**中，选择您的数据集组。

1. 在导航窗格中，选择**预测器**。

1. 选择**训练新预测器**。

1. 选择**启用天气指数**。

------
#### [ SDK ]

**启用天气指数**

使用该[`CreateAutoPredictor`](API_CreateAutoPredictor.md)操作，通过在[AdditionalDataset](API_AdditionalDataset.md)数据类型`"Value": "true"`中添加`"Name": "weather"`和来启用天气指数。

```
    "DataConfig": { 
        ...
        "AdditionalDatasets": [
            ...                      
            {             
                "Name": "weather",       
            }      
            ]   
        },
```

------

## 在数据集中添加地理位置信息
<a name="adding-geolocation"></a>

要使用天气指数，您必须在目标时间序列和相关时间序列数据集中包含每个项目的地理位置属性。此属性采用数据集架构中的属性类型 `geolocation` 进行定义。

数据集中的所有地理位置值都必须完全在单个区域中。这些区域是：美国（不包括夏威夷和阿拉斯加）、加拿大、南美洲、中美洲、亚太地区、欧洲以及非洲和中东。

使用以下两种格式之一指定地理位置属性：
+ **纬度和经度**（所有区域）- 以十进制格式指定纬度和经度（例如：47.61\$1-122.33）
+ **邮政编码**（仅限美国）- 指定国家/地区代码（美国），后跟 5 位数的邮政编码（例如：US\$198121）

所有区域都支持纬度和经度格式。只有美国地区支持邮政编码格式。

**Topics**
+ [纬度和经度界限](#geolocation-bounds)
+ [在数据集架构中包括地理位置](#geolocation-schema)
+ [设置地理位置格式](#geolocation-format)

### 纬度和经度界限
<a name="geolocation-bounds"></a>

以下是可接受区域的纬度和经度界限：

------
#### [ US Region ]

**界限**：纬度（24.6、50.0）、经度（-126.0、-66.4）。

![\[Map of North America showing United States, parts of Canada and Mexico with major cities.\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/weather-us-bounds.png)


------
#### [ Canada Region ]

**界限**：纬度（41.0、75.0）、经度（-142.0、-52.0）。

![\[Map showing northern Canada and parts of the US, highlighting territories and major cities.\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/weather-can-bounds.PNG)


------
#### [ Europe Region ]

**界限**：纬度（34.8、71.8）、经度（-12.6、44.8）。

![\[Map of Northern Europe and surrounding regions showing countries and major cities.\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/weather-euro-bounds.png)


------
#### [ South America Region ]

**界限**：纬度（-56.6、14.0）、经度（-82.4、-33.00）。

![\[Map of South America showing countries, major cities, and Brazilian states.\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/weather-sa-bounds.PNG)


------
#### [ Asia Pacific Region ]

**界限**：纬度（-47.8、55.0）、经度（67.0、180.60）。

![\[Map showing East Asia, Southeast Asia, and Australia with country names and ocean labels.\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/weather-apac-bounds.png)


------
#### [ Central America Region ]

**界限**：纬度（6.80、33.20）、经度（-118.80、-58.20）。

![\[Map showing southern US, Mexico, Central America, and Caribbean with major cities and bodies of water.\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/weather-ca-bounds.png)


------
#### [ Africa & Middle East Region ]

**界限**：纬度（-35.60、43.40）、经度（-18.80、-58.20）。

![\[Map showing North Africa, Middle East, and parts of Europe with country names and borders.\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/weather-africa-bounds.png)


------

### 在数据集架构中包括地理位置
<a name="geolocation-schema"></a>

使用控制台或[CreateDataset](API_CreateDataset.md)操作，在目标时间序列和任何相关时间序列的 JSON 架构中将位置属性类型定义为 “地理位置”。架构中的属性必须按照其在数据集中排列的顺序进行排序。

```
 { 
  "Attributes":[
    {
       "AttributeName": "timestamp",
       "AttributeType": "timestamp"
    },
    {
       "AttributeName": "target_value",
       "AttributeType": "float"
    },
    {
       "AttributeName": "item_id",
       "AttributeType": "string"
    },
    {
       "AttributeName": "location",
       "AttributeType": "geolocation"
    }
  ]
}
```

### 设置地理位置格式
<a name="geolocation-format"></a>

地理位置属性的格式可以是**邮政编码**或**纬度和经度**格式。您可以使用 Forecast 控制台或 Forecast 软件开发工具包 (SDK) 设置地理位置格式。

------
#### [ Console ]

**在时间序列数据集中添加地理位置属性**

1. 登录 AWS 管理控制台 并打开 Amazon Forecast 控制台，网址为[https://console.aws.amazon.com/forecast/](https://console.aws.amazon.com/forecast/)。

1. 选择**创建数据集组**。

1. 在**架构生成器**中，将地理位置的**属性类型**设置为 `geolocation`。

1. 在**地理位置格式**的下拉列表中，选择您的位置格式。

![\[Dataset details form with name, frequency, and schema builder for attribute specification.\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/schema-builder-geolocation.png)


您也可以在 JSON 格式下定义此属性，并从**地理位置格式**的下拉列表中选择一种位置格式。

------
#### [ SDK ]

**在时间序列数据集中添加地理位置属性**

使用该[ CreateDatasetImportJob](API_CreateDatasetImportJob.md)操作，将的值设置`GeolocationFormat`为以下值之一：
+ **纬度和经度**（所有区域）：`"LAT_LONG"`
+ **邮政编码**（仅限美国）：`"CC_POSTALCODE"`

例如，要指定纬度和经度格式，请在 `CreateDatasetImportJob` 请求中包含以下内容：

```
{
    ...
    "GeolocationFormat": "LAT_LONG"
}
```

------

## 指定时区
<a name="specifying-timezones"></a>

您可以让 Amazon Forecast 自动同步时区信息与地理位置属性，也可以手动为整个数据集分配一个时区。

**Topics**
+ [自动同步时区与地理位置](#timezones-automatic)
+ [手动选择单个时区](#timezones-manual)

### 自动同步时区与地理位置
<a name="timezones-automatic"></a>

此选项非常适合包含多个时区的时间戳且这些时间戳以当地时间表示的数据集。Forecast 根据项目的地理位置属性为目标时间序列数据集中的每个项目分配时区。

您可以使用 Forecast 控制台或 Forecast SDK 自动同步时间戳与地理位置属性。

------
#### [ Console ]

**同步时区与地理位置属性**

1. 登录 AWS 管理控制台 并打开 Amazon Forecast 控制台，网址为[https://console.aws.amazon.com/forecast/](https://console.aws.amazon.com/forecast/)。

1. 在导航窗格中，选择**创建数据集组**。

1. 在**数据集导入详细信息**中，选择**同步时区与位置**。

![\[Dataset import form with fields for name, time zone, S3 data location, and IAM role.\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/sync-timezone-with-geolocation.PNG)


------
#### [ SDK ]

**同步时区与地理位置属性**

使用该[ CreateDatasetImportJob](API_CreateDatasetImportJob.md)操作，将设置`"UseGeolocationForTimeZone"`为`"true"`。

```
{
    ...
    "UseGeolocationForTimeZone": "true"
}
```

------

### 手动选择单个时区
<a name="timezones-manual"></a>

**注意**  
您可以手动选择*美国地区*、*加拿大地区*、*南美洲地区*、*中美洲地区*、*亚太地区*、*欧洲地区*以及*非洲和中东地区*以外的一个时区。但是，所有地理定位值都必须仍然在其中一个区域内。

此选项非常适合所有时间戳都在单个时区内的数据集，或者所有时间戳都标准化为单个时区的数据集。使用此选项可将相同时区应用于数据集中的每个项目。

天气指数可接受以下时区：

 **美国地区** 
+  美洲/洛杉矶 
+  America/Phoenix 
+  America/Denver 
+  America/Chicago 
+  America/New\$1York 

 **加拿大地区** 
+ 美洲/温哥华
+ 美洲/埃德蒙顿
+ 美洲/里贾纳 
+ 美洲/温尼伯 
+ 美洲/多伦多
+ 美洲/哈利法克斯
+ 美洲/圣约翰斯

 **欧洲地区** 
+ 欧洲地区/伦敦 
+ 欧洲/巴黎 
+ 欧洲/赫尔辛基 

 **南美洲地区** 
+ 美洲/布宜诺斯艾利斯
+ 美洲/诺罗尼亚
+ 美洲/加拉加斯 

 **亚太地区** 
+ 亚洲/喀布尔 
+ 亚洲/卡拉奇 
+ 亚洲/加尔各答 
+ 亚洲/加德满都 
+ 亚洲/达卡 
+ 亚洲/仰光 
+ 亚洲/曼谷 
+ 亚洲/新加坡 
+ 亚洲/首尔 
+ 澳大利亚/阿德莱德 
+ 澳大利亚/墨尔本 
+ 澳大利亚/豪勋爵岛 
+ 澳大利亚/尤克拉 
+ 太平洋/诺福克岛 
+ 太平洋/奥克兰 

 **中美洲** 
+ 美洲/波多黎各

 **非洲和中东** 
+ 非洲/内罗毕 
+ 亚洲/德黑兰 
+ 亚洲/迪拜

 **其他** 
+ 太平洋/中途岛 
+ 太平洋/檀香山 
+ 太平洋/马克萨斯 
+ 美洲/安克雷奇 
+ 大西洋/佛得角 
+ 亚洲/阿纳德尔 
+ 太平洋/查塔姆 
+ 太平洋/恩德伯里 
+ 太平洋/圣诞岛 

如果您数据集中的项目位于一个可接受的区域，但您的时间戳已标准化为该区域以外的时区，则请从**其他**列表中选择一个时区。

有关有效时区的完整名称列表，请参阅 [Joda-Time 库](http://joda-time.sourceforge.net/timezones.html) 。

您可以使用 Forecast 控制台或 Forecast SDK 为数据集手动设置一个时区。

------
#### [ Console ]

**为数据集选择单个时区**

1. 登录 AWS 管理控制台 并打开 Amazon Forecast 控制台，网址为[https://console.aws.amazon.com/forecast/](https://console.aws.amazon.com/forecast/)。

1. 在导航窗格中，选择**创建数据集组**。

1. 在**数据集导入详细信息**中，选定**选择时区**。

例如，使用以下方式将洛杉矶时间（太平洋标准时间）应用于您的数据集。

![\[Dataset import form with fields for name, time zone, data location, and IAM role.\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/select-timezone.PNG)


------
#### [ SDK ]

**为数据集选择单个时区**

使用该[ CreateDatasetImportJob](API_CreateDatasetImportJob.md)操作，设置`"TimeZone"`为有效的时区。

例如，使用以下方式将洛杉矶时间（太平洋标准时间）应用于您的数据集。

```
{
    ...
    "TimeZone": "America/Los_Angeles"
}
```

------

## 条件和限制
<a name="weather-conditions-restrictions"></a>

使用天气指数时适用以下条件和限制：
+ **可用算法**：如果您使用传统预测器，则可以在使用 CNN-QR、DeepAR\$1 和 Prophet 算法训练预测器时启用天气指数。天气指数不适用于 ARIMA、ETS 和 NPTS。
+ **预测频率**：有效的预测频率为 `Minutely`、`Hourly` 和 `Daily`。
+ **预测范围**：预测范围的跨度不能超过未来的 14 天。有关每个预测频率的预测范围限制，请参阅以下列表：
  + `1 minute`-500
  + `5 minutes`-500
  + `10 minutes`-500
  + `15 minutes`-500
  + `Hourly`-330
  + `Daily`-14
+ **时间序列长度**：在使用天气指数训练模型时，Forecast 会截断所有时间戳早于 Forecast 天气数据集特征化开始日期的时间序列数据集。Forecast 天气数据集特征化包含以下开始日期：
  + **美国地区**：2018 年 7 月 2 日
  + **欧洲地区**：2018 年 7 月 2 日
  + **亚太地区**：2018 年 7 月 2 日
  + **加拿大地区**：2019 年 7 月 2 日
  + **南美洲地区**：2020 年 1 月 2 日
  + **中美洲地区**：2020 年 9 月 2 日
  + **非洲和中东地区**：2021 年 3 月 25 日

  启用天气指数后，在预测器训练期间不会使用时间戳早于开始日期的数据点。
+ **位置数量**：目标时间序列数据集中的唯一位置不能超过 2000 个。
+ **区域界限**：数据集中的所有项目都必须位于单个区域内。
+ **最小时间序列长度**：由于测试天气指数时需要附加数据，因此时间序列数据集的最小长度为：

  `3 × ForecastHorizon + (BacktestWindows + 1) × BacktestWindowOffset`

  如果您的时间序列数据集不符合此要求，则请考虑减少以下内容：
  + `ForecastHorizon` - 减小预测范围。
  + `BacktestWindowOffset` - 在回测期间缩短测试集的长度。
  + `BacktestWindows` - 减少回测数量。

# 节假日特征化
<a name="holidays"></a>

节假日特征化是一项内置特征化，它将经过特征化设计的国定节假日信息数据集整合到您的模型中。它原生支持 250 多个国家/地区的节假日日历。Amazon Forecast 整合了 [Holiday API 库](https://holidayapi.com/countries)和 [Jollyday API](https://jollyday.sourceforge.net/data.html) 来生成节假日日历。

节假日特征化在零售领域特别有用，因为公共节假日会显著影响需求。

节假日特征化支持的最短预测频率为 5 分钟，最长 1 个月。

**Topics**
+ [启用节假日特征化](#enabling-holidays)
+ [国家/地区代码](#holidays-country-codes)
+ [其他节假日日历](#holiday-calendars)

## 启用节假日特征化
<a name="enabling-holidays"></a>

节假日特征化作为[附加数据集](API_AdditionalDataset.md)包含在 Amazon Forecast 中，并在训练预测器之前启用。建议您的历史数据包含至少两年的数据。这使得 Forecast 能够识别与特定节假日相关的需求模式。选择国家/地区后，节假日功能会在训练期间将该国家/地区的节假日日历应用于数据集中的所有项目。

 您可以使用 Amazon Forecast 控制台或 Forecast 软件开发工具包（SDK）启用节假日。

------
#### [ Forecast SDK ]

使用 [`CreateAutoPredictor`](API_CreateAutoPredictor.md) 操作，通过添加“`"Name": "holiday`”并设置 `"Configuration"` 为映射 `"CountryCode"` 两个字母的国家/地区代码来启用节假日。请参阅[国家/地区代码](#holidays-country-codes)。

例如，要包含美国节假日日历，请使用以下代码。

```
      "DataConfig": {          
        "AdditionalDatasets": [          
            {             
                "Name": "holiday",            
                "Configuration": {
                    "CountryCode" : ["US"]
                }      
            },      
          ]   
        },
```

------
#### [ Forecast Console ]

在**训练预测器**阶段，从**国家/地区节假日**下拉列表中选择一个国家/地区。

![\[Toggle switch to activate holidays and dropdown menu to select a country for forecast accuracy.\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/holidays-dropdown-2.png)


------

## 国家/地区代码
<a name="holidays-country-codes"></a>

 Amazon Forecast 原生支持以下国家/地区的公共节假日日历。使用 API 指定国家/地区时，请使用**国家/地区代码**。


**支持的国家/地区**  

| 国家/地区 | 国家/地区代码 | 
| --- | --- | 
|   阿富汗   |   AF   | 
|   奥兰群岛   |   AX   | 
|   阿尔巴尼亚   |   AL   | 
|   阿尔及利亚   |   DZ   | 
|   美属萨摩亚   |   AS   | 
|   安道尔   |   AD   | 
|   安哥拉   |   AO   | 
|   安圭拉岛   |   AI   | 
|   南极洲   |   AQ   | 
|   安提瓜和巴布达   |   AG   | 
|   阿根廷   |   AR   | 
|   亚美尼亚   |   AM   | 
|   阿鲁巴岛   |   AW   | 
|   澳大利亚   |   AU   | 
|   奥地利   |   AT   | 
|   阿塞拜疆   |   AZ   | 
|   巴哈马   |   BS   | 
|   巴林   |   BH   | 
|   孟加拉国   |   BD   | 
|   巴巴多斯   |   BB   | 
|   白俄罗斯   |   BY   | 
|   比利时   |   BE   | 
|   伯利兹   |   BZ   | 
|   贝宁   |   BJ   | 
|   百慕大   |   BM   | 
|   不丹   |   BT   | 
|   玻利维亚   |   BO   | 
|   波斯尼亚和黑塞哥维那   |   BA   | 
|   博茨瓦纳   |   BW   | 
|   布韦岛   |   BV   | 
|   巴西   |   BR   | 
|   英属印度洋领地   |   IO   | 
|   英属维尔京群岛   |   VG   | 
|   文莱达鲁萨兰国   |   BN   | 
|   保加利亚   |   BG   | 
|   布基纳法索   |   BF   | 
|   布隆迪   |   BI   | 
|   柬埔寨   |   KH   | 
|   喀麦隆   |   CM   | 
|   加拿大   |   CA   | 
|   佛得角   |   CV   | 
|   荷兰加勒比区   |   BQ   | 
|   开曼群岛   |   KY   | 
|   中非共和国   |   CF   | 
|   乍得   |   TD   | 
|   智利   |   CL   | 
|   中国   |   CN   | 
|   圣诞岛   |   CX   | 
|   科科斯（基林）群岛   |   CC   | 
|   哥伦比亚   |   CO   | 
|   科摩罗   |   KM   | 
|   库克群岛   |   CK   | 
|   哥斯达黎加   |   CR   | 
|   克罗地亚   |   HR   | 
|   古巴   |   CU   | 
|   库拉索   |   CW   | 
|   塞浦路斯   |   CY   | 
|   捷克   |   CZ   | 
|   刚果民主共和国   |   CD   | 
|   丹麦   |   DK   | 
|   吉布提   |   DJ   | 
|   多米尼加   |   DM   | 
|   多米尼加共和国   |   DO   | 
|   厄瓜多尔   |   EC   | 
|   埃及   |   EG   | 
|   萨尔瓦多   |   SV   | 
|   赤道几内亚   |   GQ   | 
|   厄立特里亚   |   ER   | 
|   爱沙尼亚   |   EE   | 
|   史瓦帝尼   |   SZ   | 
|   埃塞俄比亚   |   ET   | 
|   福克兰群岛   |   FK   | 
|   法罗群岛   |   FO   | 
|   斐济   |   FJ   | 
|   芬兰   |   FI   | 
|   法国   |   FR   | 
|   法属圭亚那   |   GF   | 
|   法属玻里尼西亚   |   PF   | 
|   法属南部领地   |   TF   | 
|   加蓬   |   GA   | 
|   冈比亚   |   GM   | 
|   格鲁吉亚   |   GE   | 
|   德国   |   DE   | 
|   加纳   |   GH   | 
|   直布罗陀   |   GI   | 
|   希腊   |   GR   | 
|   格陵兰   |   GL   | 
|   格林纳达   |   GD   | 
|   瓜德罗普   |   GP   | 
|   关岛   |   GU   | 
|   危地马拉   |   GT   | 
|   根西岛   |   GG   | 
|   几内亚   |   GN   | 
|   几内亚比绍   |   GW   | 
|   圭亚那   |   GY   | 
|   海地   |   HT   | 
|   赫德岛和 McDonald 岛屿   |   HM   | 
|   洪都拉斯   |   HN   | 
|   Hong Kong   |   HK   | 
|   匈牙利   |   HU   | 
|   Iceland   |   IS   | 
|   印度   |   IN   | 
|   印度尼西亚   |   ID   | 
|   伊朗   |   IR   | 
|   伊拉克   |   IQ   | 
|   爱尔兰   |   IE   | 
|   马恩岛   |   IM   | 
|   以色列   |   IL   | 
|   意大利   |   IT   | 
|   科特迪瓦   |   CI   | 
|   牙买加   |   JM   | 
|   日本   |   JP   | 
|   Jersey   |   JE   | 
|   约旦   |   JO   | 
|   哈萨克   |   KZ   | 
|   肯尼亚   |   KE   | 
|   基里巴斯   |   KI   | 
|   科索沃   |   XK   | 
|   科威特   |   KW   | 
|   吉尔吉斯斯坦   |   KG   | 
|   老挝   |   LA   | 
|   拉脱维亚   |   LV   | 
|   黎巴嫩   |   LB   | 
|   莱索托   |   LS   | 
|   利比里亚   |   LR   | 
|   利比亚   |   LY   | 
|   列支敦士登   |   LI   | 
|   立陶宛   |   LT   | 
|   卢森堡   |   LU   | 
|   澳门   |   MO   | 
|   马达加斯加   |   MG   | 
|   马拉维   |   MW   | 
|   马来西亚   |   MY   | 
|   马尔代夫   |   MV   | 
|   Mali   |   ML   | 
|   马耳他   |   MT   | 
|   马绍尔群岛   |   MH   | 
|   马提尼克   |   MQ   | 
|   毛里塔尼亚   |   MR   | 
|   毛里求斯   |   MU   | 
|   马约特岛   |   YT   | 
|   墨西哥   |   MX   | 
|   密克罗尼西亚   |   FM   | 
|   摩尔多瓦   |   MD   | 
|   摩纳哥   |   MC   | 
|   蒙古   |   MN   | 
|   黑山共和国   |   ME   | 
|   Montserrat   |   MS   | 
|   摩洛哥   |   MA   | 
|   莫桑比克   |   MZ   | 
|   缅甸   |   MM   | 
|   纳米比亚   |   NA   | 
|   瑙鲁   |   NR   | 
|   尼泊尔   |   NP   | 
|   荷兰   |   NL   | 
|   新喀里多尼亚   |   NC   | 
|   新西兰   |   NZ   | 
|   尼加拉瓜   |   NI   | 
|   尼日尔   |   NE   | 
|   尼日利亚   |   NG   | 
|   纽埃岛   |   NU   | 
|   诺福克岛   |   NF   | 
|   朝鲜   |   KP   | 
|   北马其顿   |   MK   | 
|   北马里亚纳群岛   |   MP   | 
|   挪威   |   NO   | 
|   阿曼   |   OM   | 
|   巴基斯坦   |   PK   | 
|   帕劳群岛   |   PW   | 
|   巴勒斯坦   |   PS   | 
|   巴拿马   |   PA   | 
|   巴布亚新几内亚   |   PG   | 
|   巴拉圭   |   PY   | 
|   秘鲁   |   PE   | 
|   菲律宾   |   PH   | 
|   皮特凯恩群岛   |   PN   | 
|   波兰   |   PL   | 
|   葡萄牙   |   PT   | 
|   波多黎各   |   PR   | 
|   卡塔尔   |   QA   | 
|   刚果共和国   |   CG   | 
|   留尼汪岛   |   RE   | 
|   罗马尼亚   |   RO   | 
|   俄罗斯联邦   |   RU   | 
|   卢旺达   |   RW   | 
|   圣巴泰勒米   |   BL   | 
|   “圣赫勒拿岛、阿森松岛和特里斯坦-达库尼亚岛”   |   SH   | 
|   圣基茨和尼维斯   |   KN   | 
|   圣卢西亚岛   |   LC   | 
|   圣马丁   |   MF   | 
|   圣皮埃尔和密克隆群岛   |   PM   | 
|   圣文森特和格林纳丁斯   |   VC   | 
|   萨摩亚群岛   |   WS   | 
|   圣马力诺   |   SM   | 
|   圣多美与普林希比共和国   |   ST   | 
|   沙特阿拉伯   |   SA   | 
|   塞内加尔   |   SN   | 
|   塞尔维亚   |   RS   | 
|   塞舌尔   |   SC   | 
|   塞拉利昂   |   SL   | 
|   新加坡   |   SG   | 
|   荷属圣马丁   |   SX   | 
|   斯洛伐克   |   SK   | 
|   斯洛文尼亚   |   SI   | 
|   所罗门群岛   |   SB   | 
|   索马里   |   SO   | 
|   南非   |   ZA   | 
|   南乔治亚岛和南桑威奇群岛   |   GS   | 
|   韩国   |   KR   | 
|   南苏丹   |   SS   | 
|   西班牙   |   ES   | 
|   斯里兰卡   |   LK   | 
|   苏丹   |   SD   | 
|   苏里南   |   SR   | 
|   斯瓦尔巴群岛和扬马延岛   |   SJ   | 
|   瑞典   |   SE   | 
|   瑞士   |   CH   | 
|   阿拉伯叙利亚共和国   |   SY   | 
|   中国台湾   |   TW   | 
|   塔吉克斯坦   |   TJ   | 
|   坦桑尼亚   |   TZ   | 
|   泰国   |   TH   | 
|   东帝汶   |   TL   | 
|   多哥   |   TG   | 
|   托克劳   |   TK   | 
|   汤加   |   TO   | 
|   特立尼达和多巴哥   |   TT   | 
|   突尼斯   |   TN   | 
|   土耳其   |   TR   | 
|   土库曼斯坦   |   TM   | 
|   特克斯和凯科斯群岛   |   TC   | 
|   图瓦卢   |   TV   | 
|   乌干达   |   UG   | 
|   乌克兰   |   UA   | 
|   阿拉伯联合酋长国   |   AE   | 
|   英国   |   GB   | 
|   联合国   |   UN   | 
|   美国   |   US   | 
|   美国本土外小岛屿   |   UM   | 
|   美属维尔京群岛   |   VI   | 
|   乌拉圭   |   UY   | 
|   乌兹别克斯坦   |   UZ   | 
|   瓦努阿图   |   VU   | 
|   梵蒂冈城   |   VA   | 
|   委内瑞拉   |   VE   | 
|   越南   |   VN   | 
|   瓦利斯和富图纳群岛   |   WF   | 
|   西撒哈拉   |   EH   | 
|   也门   |   YE   | 
|   赞比亚   |   ZM   | 
|   津巴布韦   |   ZW   | 

## 其他节假日日历
<a name="holiday-calendars"></a>

Amazon Forecast 还支持印度、韩国和阿拉伯联合酋长国的节假日。下面列出了他们的节假日。

------
#### [ India - "IN" ]

1 月 26 日 - 共和国日 

8 月 15 日 - 独立日

10 月 2 日 - 甘地诞辰纪念日

------
#### [ Korea - "KR" ]

1 月 1 日 - 新年 

3 月 1 日 - 独立运动日 

5 月 5 日 - 儿童节

6 月 6 日 - 阵亡将士纪念日

8 月 15 日 - 解放日

10 月 3 日 - 建国纪念日

10 月 9 日 - 谚文日

12 月 25 日 - 圣诞节

------
#### [ United Arab Emirates - "AE" ]

1 月 1 日 - 新年 

12 月 1 日 - 纪念日

12 月 2 日至 3 日 - 国庆节

斋月\$1

开斋节\$1

宰牲节\$1

伊斯兰新年\$1

\$1伊斯兰节日由农历周期决定。

------

# 预测器可解释性
<a name="predictor-explainability"></a>

预测器可解释性可帮助您更好地了解数据集中的属性对目标变量的影响。Forecast 使用名为影响力分数的指标来量化每个属性的相对影响，并确定它们是增加还是减少预测值。

例如，假设一个预测场景，其中目标是 `sales`，并且有两个相关的属性：`price` 和 `color`。Forecast 可能会发现，商品的价格会显著影响销量（影响力分数高），而商品颜色的影响可以忽略不计（影响力分数低）。

要启用预测可解释性，您的预测器必须至少包含以下其中一项：相关时间序列、项目元数据或其他数据集，例如节假日和天气指数。请参阅[限制和最佳实践](#predictor-explainability-best-practices)了解更多信息。

要创建特定时间序列和时间点的影响力分数，请使用预测可解释性而不是预测器可解释性。请参阅[预测可解释性](forecast-explainability.md)。

**Topics**
+ [解释影响力分数](#predictor-explainability-impact-scores)
+ [创建预测器可解释性](#creating-predictor-explainability)
+ [导出预测器可解释性](#exporting-predictor-explainability)
+ [限制和最佳实践](#predictor-explainability-best-practices)

## 解释影响力分数
<a name="predictor-explainability-impact-scores"></a>

影响力分数衡量属性对预测值的相对影响。例如，如果“价格”属性的影响力分数是“商店位置”属性的两倍，则可以得出结论，某件商品的价格对预测值的影响是商店位置的两倍。

 影响力分数还提供有关属性会增加还是减少预测值的信息。在控制台中，这由两个图表表示。带有蓝条的属性会增加预测值，而带有红条的属性会降低预测值。

![\[Bar graphs showing Price and Promo increasing impact scores, StoreLocation decreasing impact score.\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/quicksight-unfiltered.png)


在控制台中，影响力分数介于 0 到 1 之间，其中 0 分表示没有影响，接近 1 的分数表示影响显著。在中 SDKs，冲击分数范围为-1到1，其中符号表示撞击的方向。

值得注意的是，影响力分数衡量的是属性的相对影响，而不是绝对影响。因此，不能使用影响力分数来确定特定属性是否提高了模型准确性。如果某个属性的影响力分数较低，这并不一定意味着它对预测值的影响较小；而是意味着它对预测值的影响要小于预测器使用的其他属性。

## 创建预测器可解释性
<a name="creating-predictor-explainability"></a>

**注意**  
对于每个预测器最多可以创建一个预测器可解释性

当您启用预测器可解释性时，Amazon Forecast 会计算数据集中所有属性的影响力分数。影响力分数可以解释为影响属性对总体预测值的影响。可以在创建预测器时启用预测器可解释性，也可以在创建预测器后启用该功能。

### 为新的预测器启用预测器可解释性
<a name="creating-predictor-explainability-new"></a>

在创建新的预测器时启用预测器可解释性，将同时创建预测器资源和可解释性资源。您可以使用软件开发工具包（SDK）或 Amazon Forecast 控制台启用新预测器的预测器可解释性。

------
#### [ Console ]

**启用预测器可解释性**

1. 登录 AWS 管理控制台 并打开 Amazon Forecast 控制台，网址为[https://console.aws.amazon.com/forecast/](https://console.aws.amazon.com/forecast/)。

1. 从**数据集组**中，选择您的数据集组。

1. 在导航窗格中，选择**预测器**。

1. 选择**训练新预测器**。

1. 在**预测器配置**部分，选择**启用可解释性**。

1. 提供以下必填字段的值：
   + **名称** - 唯一的预测器名称。
   + **预测频率** - 预测的粒度。
   + **预测范围** - 预测的时间步数。

1. 选择**开始**

------
#### [ Python ]

要使用适用于 Python 的 SDK (Boto3) 为新的预测变量启用可解释性，请使用方法并将其设置为 true。`create_auto_predictor` ExplainPredictor 

以下代码创建一个自动预测器，对未来 24（`ForecastHorizon`）天（`ForecastFrequency`）进行预测，并已将 `ExplainPredictor` 设置为 true。有关所需和可选参数的更多信息，请参阅[CreateAutoPredictor](API_CreateAutoPredictor.md)。

```
import boto3
                            
forecast = boto3.client('forecast')

create_predictor_response = forecast.create_auto_predictor(
    PredictorName = 'predictor_name',
    ForecastHorizon = 24,
    ForecastFrequency = 'D',
    DataConfig = {
        "DatasetGroupArn": "arn:aws:forecast:region:account:dataset-group/datasetGroupName"
    },
    ExplainPredictor = True
)
```

------

### 为现有预测器启用预测器可解释性
<a name="creating-predictor-explainability-old"></a>

为现有预测器启用预测器可解释性，将为该资源创建可解释性资源。您只能为尚未包含可解释性资源的预测器创建可解释性资源。要查看已更新数据集的影响力分数，请使用更新的数据重新训练或重新创建预测器。

您可以使用软件开发工具包（SDK）或 Amazon Forecast 控制台启用新预测器的预测器可解释性。

------
#### [ Console ]

**启用预测器可解释性**

1. 登录 AWS 管理控制台 并打开 Amazon Forecast 控制台，网址为[https://console.aws.amazon.com/forecast/](https://console.aws.amazon.com/forecast/)。

1. 从**数据集组**中，选择您的数据集组。

1. 在导航窗格中，选择**预测器**。

1. 选择预测器。

1. 在预测器可解释性****部分，选择**启用可解释性**。

1. 为预测器可解释性提供唯一名称。

1. 选择**开始**

------
#### [ Python ]

要使用适用于 Python 的 SDK（Boto3）启用现有预测器的预测器可解释性，请使用 `create_explainability` 方法。指定可解释性的名称和预测器的 ARN，对于 `ExplainabilityConfig`，将 `TimePointGranularity` 和 `TimeSeriesGranularity` 均设置为 **ALL**。要创建可在控制台中查看的可解释性可视化，请将 `EnableVisualization` 设置为 **True**。

有关所需和可选参数的更多信息，请参阅[CreateExplainability](API_CreateExplainability.md)。

```
import boto3
                            
forecast = boto3.client('forecast')

create_explainability_response = forecast.create_explainability(
    ExplainabilityName = 'explainability_name',
    ResourceArn = 'arn:aws:forecast:region:accountNumber:predictor/predictorName',
    ExplainabilityConfig = { 
      "TimePointGranularity": "ALL",
      "TimeSeriesGranularity": "ALL"
    },
    EnableVisualization = True
)
```

------

## 导出预测器可解释性
<a name="exporting-predictor-explainability"></a>

**注意**  
导出的文件可以直接从数据集导入中返回信息。如果导入的数据包含公式或命令，则文件易受 CSV 注入影响。因此，导出的文件可能会提示安全警告。为避免恶意活动，请在读取导出的文件时禁用链接和宏。

Forecast 允许您将影响力分数的 CSV 或 Parquet 文件导出到 S3 位置。影响力分数介于 -1 到 1 之间，其中符号表示影响方向。您可以使用 Amazon Forecast 软件开发工具包（SDK）和 Amazon Forecast 控制台导出影响力分数。

![\[Table showing normalized impact scores for price, promotion, weather index, and US holidays.\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/explainability-global.png)


------
#### [ Console ]

**要导出预测器可解释性**

1. 登录 AWS 管理控制台 并打开 Amazon Forecast 控制台，网址为[https://console.aws.amazon.com/forecast/](https://console.aws.amazon.com/forecast/)。

1. 从**数据集组**中，选择您的数据集组。

1. 在导航窗格中，选择**预测器**。

1. 选择预测器。

1. 在预测器可解释性****部分，选择**导出**。

1. 对于**导出名称**字段，提供导出的唯一名称。

1. 对于**S3 可解释性导出位置**字段，提供导出 CSV 文件的 S3 位置。

1. 对于**IAM 角色**字段，为角色提供访问指定 S3 位置的权限。

1. 选择**创建导出**。

------
#### [ Python ]

要使用适用于 Python 的 SDK（Boto3）导出预测器可解释性，请使用 `create_explainability_export` 方法。为作业命名，指定可解释性的 ARN，然后在 `Destination` 对象中指定您的 Amazon S3 目标位置和 IAM 服务角色。

有关所需和可选参数的更多信息，请参阅[CreateExplainabilityExport](API_CreateExplainabilityExport.md)。

```
import boto3
                        
forecast = boto3.client('forecast')

export_response = forecast.create_explainability_export(
    Destination = {
        "S3Config": {
            "Path": "s3://bucketName/filename.csv",
            "RoleArn": "arn:aws:iam::accountNumber:role/roleName"
        }
    },
    ExplainabilityArn = 'arn:aws:forecast:region:accountNumber:explainability/explainabilityName',
    ExplainabilityExportName = 'job_name'
)
```

------

## 限制和最佳实践
<a name="predictor-explainability-best-practices"></a>

使用预测器可解释性时，请考虑以下限制和最佳实践。
+ **预测变量可解释性仅适用于使用创建的某些预测变量 AutoPredictor**-您无法为使用 AutoML 或通过手动选择创建的传统预测变量启用可解释性。请参阅[升级到 AutoPredictor](howitworks-predictor.md#upgrading-autopredictor)。
+ **预测变量可解释性并非适用于所有模型**-ARIMA（AutoRegressive 综合移动平均线）、ETS（指数平滑状态空间模型）和 NPTS（非参数时间序列）模型不包含外部时间序列数据。因此，即使您包含了其他数据集，这些模型也不会创建可解释性报告。
+ **可解释性需要属性** - 您的预测器必须至少包含以下其中一项：相关时间序列、项目元数据、节假日或天气指数。
+ **预测器仅限于一个可解释性资源** - 您不能为一个预测器创建多个可解释性资源。如果您对更新数据集的影响力分数感兴趣，请重新训练您的预测器。
+ **影响力分数为零表示没有影响** - 如果某一属性的影响力分数为 0，则该属性对预测值没有显著影响。
+ **重试失败的 Predictor Explainability 作业-** 如果 Forecast 成功创建了预测变量，但预测变量可解释性作业失败，则可以在控制台或操作中重试创建 Predictor Explainability。 CreateExplainability 
+ **您无法为特定时间点和时间序列创建影响力分数** - 要查看特定时间点和时间序列的影响力分数，请参阅[预测可解释性](forecast-explainability.md)。
+ **预测器可解释性可视化在创建后的 90 天内可用** - 要在 90 天后查看可视化，请重新训练预测器。

# 预测器监控
<a name="predictor-monitoring"></a>

**注意**  
 如果您启用预测器监控，Amazon Forecast 将存储您的每个预测的数据，以分析预测器性能，即使在删除预测数据之后。要删除该数据，请删除监控资源。

 预测器监控允许您查看预测器的性能如何随时间变化。导致性能变化的因素有很多，例如经济发展或客户行为的变化。

 例如，假设一个预测场景，其中目标是 `sales`，并且有两个相关的属性：`price` 和 `color`。在创建第一个预测器后的几个月内，某些颜色可能会出乎意料地更受客户欢迎。这可能会提高具有该属性的商品的销量。这些新数据可能会影响预测器的性能及其生成的预测的准确性。

 启用预测器监控后，Forecast 会在您生成预测和导入更多数据时分析预测器的性能。Forecast 将新数据与之前的预测进行比较，以检测性能的任何变化。您可以在 Forecast 控制台中查看不同准确性指标随时间变化的图表。或者，您可以通过 [ListMonitorEvaluations](API_ListMonitorEvaluations.md) 操作获得监控结果。

 预测器监控可以帮助决定是否需要重新训练预测器。如果性能下降，则可能需要根据最新数据重新训练预测器。如果选择重新训练预测器，则新的预测器将包括前一个预测器的监控数据。您也可以使用预测器监控收集有关生产环境的上下文数据，或者对不同的实验进行比较。

预测变量监控仅适用于。 AutoPredictors您可以将现有的传统预测变量升级到。 AutoPredictor请参阅[升级到 AutoPredictor](howitworks-predictor.md#upgrading-autopredictor)。

**Topics**
+ [预测器监控工作流](#predictor-monitoring-workflow)
+ [启用预测器监控](enabling-predictor-monitoring.md)
+ [查看监控结果](predictor-monitoring-results.md)
+ [限制和最佳实践](#predictor-monitoring-best-practices)

## 预测器监控工作流
<a name="predictor-monitoring-workflow"></a>

要获得预测器监控结果，必须先使用预测器生成预测，然后导入更多数据。监控工作流如下所示：

1. 为自动预测器启用预测器监控：
   + 在启用监控的情况下创建新的预测器。请参阅[启用新预测器的预测器监控](enabling-predictor-monitoring.md#enabling-predictor-monitoring-new)。
   + 或者启用现有预测器的监控。请参阅[启用现有预测器的预测器监控](enabling-predictor-monitoring.md#enabling-predictor-monitoring-existing)。

1. 使用预测器生成一个或多个预测。

1. 导入更多数据。有关将数据导入 Forecast 的信息，请参阅[导入数据集](howitworks-datasets-groups.md)。

1. 查看预测器监控结果：
   + 您可以在**监控**选项卡上查看预测器的结果。
   + 或者，您可以通过 [ListMonitorEvaluations](API_ListMonitorEvaluations.md) 操作获得监控结果。

   有关更多信息，请参阅 [查看监控结果](predictor-monitoring-results.md)。

# 启用预测器监控
<a name="enabling-predictor-monitoring"></a>

您可以在创建预测器时启用预测器监控，也可以启用预测器监控。

**注意**  
预测变量监控仅适用于。 AutoPredictors您可以将现有的传统预测变量升级到。 AutoPredictor请参阅[升级到 AutoPredictor](howitworks-predictor.md#upgrading-autopredictor)。

**Topics**
+ [启用新预测器的预测器监控](#enabling-predictor-monitoring-new)
+ [启用现有预测器的预测器监控](#enabling-predictor-monitoring-existing)

## 启用新预测器的预测器监控
<a name="enabling-predictor-monitoring-new"></a>

您可以使用控制台、、 AWS CLI和操作为新的预测变量启用预测变量监控。 AWS SDKs [CreateAutoPredictor](API_CreateAutoPredictor.md)

------
#### [ Console ]

**要启用预测器监控**

1. 登录 AWS 管理控制台 并打开 Amazon Forecast 控制台，网址为[https://console.aws.amazon.com/forecast/](https://console.aws.amazon.com/forecast/)。

1. 从**数据集组**中，选择您的数据集组。

1. 在导航窗格中，选择**预测器**。

1. 选择**训练新预测器**。

1. 在**预测器配置**部分，选择**启用监控**。

1. 提供以下必填字段的值：
   + **名称** - 唯一的预测器名称。
   + **预测频率** - 预测的粒度。
   + **预测范围** - 预测的时间步数。

1. 选择**开始**，在监控启用的情况下创建自动预测器。使用预测器生成预测并导入更多数据后，您将看到监控结果。

------
#### [ Python ]

要使用适用于 Python 的 SDK（Boto3）启用新预测器的预测器监控，请使用 `create_auto_predictor` 方法并在 `MonitoringConfig` 中提供监控器名称。

以下代码创建一个自动预测器，对未来 24（`ForecastHorizon`）天（`ForecastFrequency`）进行预测，并指定 `MyPredictorMonitor` 为 `MonitorName`。生成预测并导入更多数据后，您可以查看预测器监控的结果。有关检索结果的更多信息，请参阅[查看监控结果](predictor-monitoring-results.md)。

 有关创建预测器的所需和可选参数的信息，请参阅[CreateAutoPredictor](API_CreateAutoPredictor.md)。

```
import boto3
                            
forecast = boto3.client('forecast')

create_predictor_response = forecast.create_auto_predictor(
    PredictorName = 'predictor_name',
    ForecastHorizon = 24,
    ForecastFrequency = 'D',
    DataConfig = {
        "DatasetGroupArn": "arn:aws:forecast:region:account:dataset-group/datasetGroupName"
    },
    MonitorConifg = {
        "MonitorName": "MyMonitorName"
    }
)
```

------

## 启用现有预测器的预测器监控
<a name="enabling-predictor-monitoring-existing"></a>

您可以使用控制台、 AWS CLI和为现有预测变量启用预测变量监控。 AWS SDKs

------
#### [ Console ]

**要启用预测器监控**

1. 登录 AWS 管理控制台 并打开 Amazon Forecast 控制台，网址为[https://console.aws.amazon.com/forecast/](https://console.aws.amazon.com/forecast/)。

1. 从**数据集组**中，选择您的数据集组。

1. 在导航窗格中，选择**预测器**。

1. 选择预测器。

1. 导航到**监控**选项卡。

1. 在**监控详细信息**部分，选择**开始监控** 

   当**监控状态**为“活动”时，将启用预测器监控。生成预测并导入更多数据后，您可以查看预测器监控的结果。有关更多信息，请参阅[查看监控结果](predictor-monitoring-results.md)

------
#### [ Python ]

要使用适用于 Python 的 SDK（Boto3）启用现有预测器的预测器监控，请使用 `create_monitor` 方法。指定监控名称，对于 `ResourceArn`，指定需监控的预测器的 Amazon 资源名称（ARN）。使用 `describe_monitor` 方法并提供监控器 ARN，以获取监控器状态。生成预测并导入更多数据后，您可以查看预测器监控的结果。有关更多信息，请参阅 [查看监控结果](predictor-monitoring-results.md)。

有关所需和可选参数的更多信息，请参阅[CreateMonitor](API_CreateMonitor.md)和[DescribeMonitor](API_DescribeMonitor.md)。

```
import boto3
                            
forecast = boto3.client('forecast')

create_monitor_response = forecast.create_monitor(
    MonitorName = 'monitor_name',
    ResourceArn = 'arn:aws:forecast:region:accountNumber:predictor/predictorName'
)

monitor_arn = create_monitor_response['MonitorArn']

describe_monitor_response = forecast.describe_monitor(
    MonitorArn = monitor_arn
)
print("Monitor status: " + describe_monitor_response['Status'])
```

------

# 查看监控结果
<a name="predictor-monitoring-results"></a>

生成预测并导入更多数据后，您可以查看预测器监控的结果。您可以使用 Forecast 控制台查看结果的可视化，也可以通过 [ListMonitorEvaluations](API_ListMonitorEvaluations.md) 操作以编程方式检索结果。

 Forecast 控制台显示每个[预测器指标](metrics.md)的结果图表。图表包括每个指标在预测器和预测器事件（例如再训练）的生命周期中的变化情况。

 [ListMonitorEvaluations](API_ListMonitorEvaluations.md) 操作返回不同时间段的指标结果和预测器事件。

------
#### [ Console ]

**要查看预测器监控结果**

1. 登录 AWS 管理控制台 并打开 Amazon Forecast 控制台，网址为[https://console.aws.amazon.com/forecast/](https://console.aws.amazon.com/forecast/)。

1. 从**数据集组**中，选择您的数据集组。

1. 在导航窗格中，选择**预测器**。

1. 选择预测器并选择**监控**选项卡。
   +  **监控结果**部分显示不同的准确性指标随着时间的变化。使用下拉列表更改图表跟踪的指标。
   + **监控历史记录**部分列出了在结果中跟踪的不同事件的详细信息。

    以下是预测器的 `Avg wQL` 分数随时间变化的图表示例。在该图表中，请注意 `Avg wQL` 值会随着时间增加。该增加表明预测器的准确性正在降低。使用该信息确定是否需要重新验证模型并采取措施。  
![\[Graph showing increasing Avg wQL score over time, indicating decreasing predictor accuracy.\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/predictor-drift.png)

------
#### [ SDK for Python (Boto3) ]

 要使用适用于 Python 的 SDK（Boto3）获取监控结果，请使用 `list_monitor_evaluations` 方法。提供监控器的 Amazon 资源名称（ARN），也可以选择使用 `MaxResults` 参数指定要检索的结果的最大数量。可以选择指定 `Filter` 以筛选结果。可通过 `SUCCESS` 或 `FAILURE` 的 `EvaluationState` 筛选评估。以下代码最多可获得 20 次成功的监控评估。

```
import boto3
                            
forecast = boto3.client('forecast')

monitor_results = forecast.list_monitor_evaluations(
    MonitorArn = 'monitor_arn',
    MaxResults = 20,
    Filters = [ 
      { 
         "Condition": "IS",
         "Key": "EvaluationState",
         "Value": "SUCCESS"
      }
   ]
)
print(monitor_results)
```

 以下是示例 JSON 响应。

```
{
  "NextToken": "string",
  "PredictorMonitorEvaluations": [
    {
      "MonitorArn": "MonitorARN",
      "ResourceArn": "PredictorARN",
      "EvaluationTime": "2020-01-02T00:00:00Z",
      "EvaluationState": "SUCCESS",
      "WindowStartDatetime": "2019-01-01T00:00:00Z",
      "WindowEndDatetime": "2019-01-03T00:00:00Z",
      "PredictorEvent": {
        "Detail": "Retrain",
        "Datetime": "2020-01-01T00:00:00Z"
      },
      "MonitorDataSource": {
        "DatasetImportJobArn": "arn:aws:forecast:region:accountNumber:dataset-import-job/*",
        "ForecastArn": "arn:aws:forecast:region:accountNumber:forecast/*",
        "PredictorArn": "arn:aws:forecast:region:accountNumber:predictor/*",
      
      },
      "MetricResults": [
        {
          "MetricName": "AverageWeightedQuantileLoss",
          "MetricValue": 0.17009070456599376
        },
        {
          "MetricName": "MAPE",
          "MetricValue": 0.250711322309796
        },
        {
          "MetricName": "MASE",
          "MetricValue": 1.6275608734888485
        },
        {
          "MetricName": "RMSE",
          "MetricValue": 3100.7125081405547
        },
        {
          "MetricName": "WAPE",
          "MetricValue": 0.17101159704738722}
      ]
    }
  ]
}
```

------

## 限制和最佳实践
<a name="predictor-monitoring-best-practices"></a>

使用预测器监控时，请考虑以下限制和最佳实践。
+ **预测器监控仅适用于自动预测器** – 您无法为使用 AutoML 或通过手动选择创建的传统预测器启用监控。请参阅[升级到 AutoPredictor](howitworks-predictor.md#upgrading-autopredictor)。
+ **每个自动预测器的预测器监控都是唯一的** – 每个自动预测器只能创建一个监控器。
+ **预测器监控需要新数据并生成预测** – 当您导入用于生成新预测的新数据时，预测器监控结果就会可用。如果您没有导入新数据，或者新导入的数据没有覆盖整个预测范围，您将看不到监控结果。
+ **预测器监控需要新的预测** – 您必须持续生成新的预测才能生成监控结果。如果没有生成新的预测，就不会看到监控结果。
+  **Amazon Forecast 将存储您的每个预测的数据，以分析预测器性能** – 即使您删除预测，Forecast 也会存储这些数据。要删除这些数据，请删除关联的监控器。
+ [StopResource](API_StopResource.md) 操作将停止所有当前评估和所有未来的评估。
+ 仅当您生成除均值以外的分位数的预测时，avgWQL 指标才可用。
+ [ListMonitorEvaluations](API_ListMonitorEvaluations.md) 操作中未显示正在进行的监控器评估。

# 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。