

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

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

# 导入数据集
<a name="howitworks-datasets-groups"></a>

*数据集* 包含用于训练[预测器](howitworks-predictor.md)的数据。您可以创建一个或多个 Amazon Forecast 数据集，然后将您的训练数据导入其中。*数据集组* 是一组互补数据集，它们详细说明一组随时间序列变化的参数。创建数据集组后，可以使用它训练预测器。

每个数据集组可以包含最多三个数据集，每个[数据集](#howitworks-dataset-domainstypes)为以下类型之一：目标时间序列、相关时间序列和项目元数据。

要创建和管理 Forecast 数据集和数据集组，可以使用 Forecast 控制台、 AWS Command Line Interface (AWS CLI) 或 AWS SDK。

有关预测数据集的示例，请参阅 [Amazon Forecas GitHub t 示例存储库](https://github.com/aws-samples/amazon-forecast-samples)。

**Topics**
+ [

## 数据集
](#howitworks-dataset)
+ [

## 数据集组
](#howitworks-datasetgroup)
+ [

## 解决数据收集频率中的冲突
](#howitworks-data-alignment)
+ [

# 使用相关时间序列数据集
](related-time-series-datasets.md)
+ [

# 使用项目元数据数据集
](item-metadata-datasets.md)
+ [

# 预定义数据集域和数据集类型
](howitworks-domains-ds-types.md)
+ [

# 更新数据
](updating-data.md)
+ [

# 处理缺失值
](howitworks-missing-values.md)
+ [

# Forecast 的数据集准则
](dataset-import-guidelines-troubleshooting.md)

## 数据集
<a name="howitworks-dataset"></a>

要创建和管理 Forecast 数据集，可以使用 For APIs ecast，包括[CreateDataset](API_CreateDataset.md)和[DescribeDataset](API_DescribeDataset.md)操作。有关 Forecast 的完整列表 APIs，请参阅[API 参考](api-reference.md)。

在创建数据集时，请提供类似于下面的信息：
+ 您记录数据的地方。 frequency/interval 例如，您可以每周汇总和记录一次零售商品销售额。在 [入门](getting-started.md) 练习中，您使用每小时平均用电量。
+ 预测格式（*域*）和数据集类型（域内）。数据集域指定要执行的预测类型，而数据集类型可帮助您将训练数据组织为对 Forecast 友好的类别。
+ 数据集*架构*。架构映射数据集的列标题。例如，在监视需求时，您可能已经收集了多家商店中某商品的每小时销售数据。在这种情况下，您的架构将定义时间戳、位置和每小时销售额在训练数据文件中的顺序（从左到右）。此外，架构还定义每列的数据类型，例如 `string` 或 `integer`。
+ 地理位置和时区信息。地理位置属性通过属性类型 `geolocation` 在架构中定义。时区信息是通过[ CreateDatasetImportJob](API_CreateDatasetImportJob.md)操作定义的。要启用[天气指数](weather.md)，必须同时包含地理位置和时区数据。

Forecast 数据集中的每一列都表示*预测维度*或*特征*。预测维度描述数据中不会随着时间而变化的要素，例如 `store` 或 `location`。预测特性包括数据中随着时间而变化的任何参数，例如 `price` 或 `promotion`。在目标时间序列和相关时间序列数据集中，某些维度（例如 `timestamp` 或 `itemId`）是必需的。

### 数据集域和数据集类型
<a name="howitworks-dataset-domainstypes"></a>

创建 Forecast 数据集时，需要选择域和数据集类型。Forecast 为许多使用场景（例如预测零售需求或网络流量）提供了域。您也可以创建自定义域。有关 Forecast 域的完整列表，请参阅[预定义数据集域和数据集类型](howitworks-domains-ds-types.md)。

在每个域中，Forecast 用户可以指定以下类型的数据集：
+ 目标时间序列数据集（必需）– 当您的训练数据是时间序列*并且*包括要为其生成预测的字段时，请选择该数据集类型。该字段称为*目标字段*。
+ 相关时间序列数据集（可选）– 当您的训练数据是时间序列，但它*不包括*目标字段时，请选择该数据集类型。例如，如果您要预测项目需求，则相关时间序列数据集可能包含 `price` 字段，但没有 `demand`。
+ 项目元数据数据集（可选）– 当您的训练数据*不是*时间序列数据，但包括有关目标时间序列或相关时间序列数据集中的项目的元数据信息时，请选择该数据集类型。例如，如果您要预测项目需求，则项目元数据集可能具有 `color` 或 `brand` 作为维度。

  当您使用 [CNN-QR](aws-forecast-algo-cnnqr.md) 或 [DeepAR\$1](aws-forecast-recipe-deeparplus.md) 算法时，Forecast 仅考虑项目元数据集类型提供的数据。

  项目元数据在冷启动预测方案中特别有用，在这种情况下，您几乎没有直接的历史数据可用于进行预测，但您对于有类似元数据属性的项目具有历史数据。当您包括项目元数据时，Forecast 会根据相似的时间序列创建冷启动预测，从而创建更准确的预测。

根据训练数据中的信息以及要预测的内容，您可能需要创建多个数据集。

例如，假设您要为零售商品（如鞋和袜）的需求生成预测。您可在 RETAIL 域中创建以下数据集：
+ 目标时间序列数据集 – 包括零售商品的历史时间序列需求数据（`item_id`、`timestamp` 和目标字段 `demand`）。由于指定了要预测的目标字段，因此数据集组中必须至少有一个目标时间序列数据集。

  您还可以向目标时间序列数据集添加其他维度（最多十个）。如果在数据集组中仅包括目标时间序列数据集，则只能在项目级别或预测维度粒度级别创建预测。有关更多信息，请参阅 [CreatePredictor](API_CreatePredictor.md)。
+ 相关时间序列数据集 – 包括目标字段以外的历史时间序列数据，例如 `price` 或 `revenue`。由于相关时间序列数据必须可映射到目标时间序列数据，因此每个相关时间序列数据集必须包含相同的标识字段。在 RETAIL 域中，它们将是 `item_id` 和 `timestamp`。

  相关时间序列数据集可能包含对从目标时间序列数据集执行的预测进行优化的数据。例如，您可以在相关时间序列数据集中包含为要生成预测的将来日期的 `price` 数据。通过这种方式，Forecast 可以使用额外的上下文维度进行预测。有关更多信息，请参阅 [使用相关时间序列数据集](related-time-series-datasets.md)。
+ 项目元数据数据集 – 包括零售商品的元数据。元数据的示例包括 `brand`、`category`、`color` 和 `genre`。

**具有预测维度的数据集示例**

继续前面的示例，假设您要根据商店以往的销售额预测鞋袜的需求。在以下目标时间序列数据集中，`store` 是时间序列预测维度，而 `demand` 是目标字段。袜子在两个商店位置（NYC 和 SFO）销售，而鞋子仅在 ORD 销售。

该表的前三行包含 NYC、SFO 和 ORD 商店的第一组可用的销售数据。最后三行包含每个商店的最后记录的销售数据。`...` 行表示在第一组条目和最后一组条目之间记录的所有商品销售数据。


| `timestamp` | `item_id` | `store` | `demand` | 
| --- | --- | --- | --- | 
| 2019-01-01 | socks | NYC |  25  | 
| 2019-01-05 | socks | SFO | 45 | 
| 2019-02-01 | shoes | ORD | 10 | 
| ... | 
| 2019-06-01 | socks | NYC | 100 | 
| 2019-06-05 | socks | SFO | 5 | 
| 2019-07-01 | shoes | ORD | 50 | 

### 数据集架构
<a name="howitworks-dataset-schema"></a>

每个数据集都需要一个架构，即用户提供的对训练数据中字段的 JSON 映射。您可以在架构中列出要包含在数据集中的必需维度、可选维度、必需特性和可选特性。

如果您的数据集包含地理位置属性，请使用属性类型 `geolocation` 在架构中定义该属性。有关更多信息，请参阅[添加地理位置信息](weather.md#adding-geolocation)。要应用[天气指数](weather.md)，您必须在目标时间序列和任何相关的时间序列数据集中包含地理位置属性。

某些域具有我们建议包括的可选维度。本指南后面每个域的说明中列出了可选维度。有关示例，请参阅[RETAIL 域](retail-domain.md)。所有可选维度都接受数据类型 `string`。

每个数据集都需要一个架构。下面是上述目标时间序列数据集示例的附带方案。

```
{
     "attributes": [
        {
           "AttributeName": "timestamp",
           "AttributeType": "timestamp"
        },
        {
           "AttributeName": "item_id",
           "AttributeType": "string"
        },
        {
           "AttributeName": "store",
           "AttributeType": "string"
        },
        {
           "AttributeName": "demand",
           "AttributeType": "float"
        }
    ]
}
```

当您将训练数据上传到使用此架构的数据集时，Forecast 假定 `timestamp` 字段是第 1 列，`item_id` 字段是第 2 列，`store` 字段是第 3 列，而 `demand` 字段（即*目标* 字段）是第 4 列。

对于相关时间序列数据集类型，所有相关特征都必须具有浮点数或整数属性类型。对于项目元数据数据集类型，所有特征都必须具有字符串属性类型。有关更多信息，请参阅 [SchemaAttribute](API_SchemaAttribute.md)。

**注意**  
数据集中的每一列都需要一对 `attributeName` 和 `attributeType`。Forecast 预留了许多名称，它们不能用作架构属性的名称。有关预留名称的列表，请参阅 [预留字段名称](reserved-field-names.md)。

## 数据集组
<a name="howitworks-datasetgroup"></a>

*数据集组* 是一到三个互补数据集的集合，其中每个数据集各有一个数据集类型。您将数据集导入数据集组，然后使用数据集组训练预测器。

Forecast 包括以下用于创建数据集组并将数据集添加到其中的操作：
+ [CreateDatasetGroup](API_CreateDatasetGroup.md)
+ [UpdateDatasetGroup](API_UpdateDatasetGroup.md)

## 解决数据收集频率中的冲突
<a name="howitworks-data-alignment"></a>

Forecast 可以使用与您在 [CreateDataset](API_CreateDataset.md) 操作中指定的数据频率不一致的数据来训练预测器。例如，即使有些数据的记录时间戳不是整点（02:20、02:45），您也可以导入以小时为间隔记录的数据。Forecast 使用您指定的数据频率来学习您的数据。然后 Forecast 会在预测器训练期间聚合数据。有关更多信息，请参阅 [不同预测频率的数据聚合](data-aggregation.md)。

# 使用相关时间序列数据集
<a name="related-time-series-datasets"></a>

相关时间序列数据集包含目标时间序列数据集中未包含的时间序列数据，可能会提高预测器的准确性。

例如，在需求预测领域中，目标时间序列数据集会包括 `timestamp` 和 `item_id` 维度，而互补的相关时间序列数据集还包括以下互补特性：`item price`、`promotion` 和 `weather`。

相关时间序列数据集最多可以包含 10 个预测维度（目标时间序列数据集中相同的预测维度）和 13 个相关的时间序列特性。

**Python 笔记本**  
有关使用相关时间序列数据集的 step-by-step指南，请参阅[合并相关时间序列](https://github.com/aws-samples/amazon-forecast-samples/blob/master/notebooks/advanced/Incorporating_Related_Time_Series_dataset_to_your_Predictor/Incorporating_Related_Time_Series_dataset_to_your_Predictor.ipynb)。

**Topics**
+ [

## 历史和前瞻性相关时间序列
](#related-time-series-historical-futurelooking)
+ [

## 相关时间序列数据集验证
](#related-time-series-dataset-validation)
+ [

## 示例：前瞻性相关时间序列文件
](#related-time-series-example)
+ [

## 示例：预测粒度
](#related-time-series-granularity)
+ [

## 传统预测器和相关时间序列
](#related-time-series-legacy)

## 历史和前瞻性相关时间序列
<a name="related-time-series-historical-futurelooking"></a>

**注意**  
 预测范围内包含任何值的相关时间序列被视为前瞻性时间序列。

 相关时间序列有以下两种形式：
+  **历史时间序列**：预测范围内*没有*数据点的时间序列。
+  **前瞻性时间序列**：预测范围内*有*数据点的时间序列。

历史相关时间序列包含预测范围之前的数据点，但不包含预测范围内的任何数据点。前瞻性相关时间序列包含预测范围*之前和*之内的数据点。

![\[Time series graph showing target, forward-looking, and historical related data with forecast window.\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/short-long-rts.png)


## 相关时间序列数据集验证
<a name="related-time-series-dataset-validation"></a>

相关时间序列数据集具有以下限制：
+ 它不能包括目标时间序列中的目标值。
+ 它必须包含 `item_id` 和 `timestamp` 维度，并且必须至少包含一个相关特性（例如 `price`）。
+ 相关时间序列特性数据必须为 `int` 或 `float` 数据类型。
+ 为了使用整个目标时间序列，目标时间序列数据集中的所有项目还必须包含在相关时间序列数据集中。如果相关时间序列仅包含目标时间序列中的项目子集，则模型创建和预测生成将仅限于该特定项目子集。

   例如，如果目标时间序列包含 1000 个项目，而相关时间序列数据集仅包含 100 个项目，则模型和预测将仅基于这 100 个项目。
+ 对于在相关时间序列数据集中记录数据的频率，必须与您希望生成预测的时间间隔（预测*粒度*）匹配。

  例如，如果要按照每周粒度生成预测数据，则在相关时间序列中记录数据的频率也必须为每周记录，即使在目标时间序列中记录数据的频率是每天也是如此。
+ 相关时间序列数据集中每个项目的数据必须在目标时间序列数据集中对应 `item_id` 的起始 `timestamp` 之时或之前开始。

  例如，如果 `socks` 的目标时间序列数据从 2019-01-01 开始，而 `shoes` 的目标时间序列数据从 2019-02-01 开始，则 `socks` 的相关时间序列数据必须在 2019-01-01 当天或之前开始，`shoes` 的数据必须在 2019-02-01 当天或之前开始。
+ 对于前瞻性相关时间序列数据集，每个项目的最后一个时间戳必须在用户指定的预测时段（称为*预测范围*）中最后一个时间戳之时。

  在下面的示例相关时间序列文件中，袜子和鞋子的 `timestamp` 数据的结束时间必须在 2019-07-01（最后记录的时间戳）*加上* 预测范围之时或之后。如果目标时间序列中的数据频率是每天，而预测范围是 10 天，则前瞻性相关时间序列文件中必须提供每日数据点，直到 2019-07-11。
+ 对于历史相关时间序列数据集，每个项目的最后一个时间戳必须与目标时间序列中的最后一个时间戳相匹配。

  在下面的示例相关时间序列文件中，袜子和鞋子的 `timestamp` 数据的结束时间必须为 2019-07-01（最后记录的时间戳）。
+ 相关时间序列数据集中提供的 Forecast 维度必须等于目标时间序列数据集中指定的维度或是该维度的子集。
+  相关时间序列不能有缺失值。有关相关时间序列数据集中缺失值的信息，请参阅[处理缺失值](howitworks-missing-values.md)。

## 示例：前瞻性相关时间序列文件
<a name="related-time-series-example"></a>

下表显示了正确配置的相关时间序列数据集文件。在本示例中，我们假设满足以下条件：
+ 目标时间序列数据集中的最后一个数据点是在 2019-07-01 记录的。
+  预测范围是 10 天。
+ 预测粒度为每天 (`D`)。

“`…`”行表示前一行和后一行之间的所有数据点。


| `timestamp` | `item_id` | `store` | `price` | 
| --- | --- | --- | --- | 
| 2019-01-01 | 袜子 | NYC | 10 | 
| 2019-01-02 | 袜子 | NYC | 10 | 
| 2019-01-03 | 袜子 | NYC | 15 | 
| ... | 
| 2019-06-01 | 袜子 | NYC | 10 | 
| ... | 
| 2019-07-01 | 袜子 | NYC | 10 | 
| ... | 
| 2019-07-11 | 袜子 | NYC | 20 | 
| 2019-01-05 | 袜子 | SFO | 45 | 
| ... | 
| 2019-06-05 | 袜子 | SFO | 10 | 
| ... | 
| 2019-07-01 | 袜子 | SFO | 10 | 
| ... | 
| 2019-07-11 | 袜子 | SFO | 30 | 
| 2019-02-01 | 鞋子 | ORD | 50 | 
| ... | 
| 2019-07-01 | 鞋子 | ORD | 75 | 
| ... | 
| 2019-07-11 | 鞋子 | ORD | 60 | 

## 示例：预测粒度
<a name="related-time-series-granularity"></a>

下表显示了使用每周粒度预测时的目标时间序列和相关时间序列的兼容数据记录频率。由于无法聚合相关时间序列数据集中的数据，Forecast 仅接受与所选预测粒度相同的相关时间序列数据频率。


| 目标输入数据频率 | 相关时间序列频率 | 预测粒度 | Forecast 是否支持？ | 
| --- | --- | --- | --- | 
| 每天 | Weekly | Weekly | 是 | 
| Weekly | Weekly | Weekly | 是 | 
| 不适用 | Weekly | Weekly | 是 | 
| 每天 | 每天 | Weekly | 否 | 

## 传统预测器和相关时间序列
<a name="related-time-series-legacy"></a>

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

使用传统预测器时，仅当使用 [CNN-QR](aws-forecast-algo-cnnqr.md)、[DeepAR\$1](aws-forecast-recipe-deeparplus.md) 和 [Prophet](aws-forecast-recipe-prophet.md) 算法训练预测器时，才可以使用相关时间序列数据集。[NPTS](aws-forecast-recipe-npts.md)、[ARIMA](aws-forecast-recipe-arima.md) 和 [ETS](aws-forecast-recipe-ets.md) 不接受相关时间序列数据。

下表显示了每种 Amazon Forecast 算法接受的相关时间序列的类型。


|  | CNN-QR | DeepAR\$1 | Prophet | NPTS | ARIMA | ETS | 
| --- | --- | --- | --- | --- | --- | --- | 
|  历史相关时间序列表  | ![\[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)  | 
|  前瞻性相关时间序列  | ![\[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)  | 

 使用 AutoML 时，您可以提供历史和前瞻性相关时间序列数据，而 Forecast 将仅在适用的情况下使用这些时间序列。

 如果您提供*前瞻性* 相关时间序列数据，Forecast 会将这些相关数据用于 CNN-QR、DeepAR\$1 和 Prophet，而不会用于 NPTS、ARIMA 和 ETS。如果提供*历史* 相关时间序列数据，Forecast 会将这些相关数据用于 CNN-QR，而不会用于 DeepAR\$1、Prophet、NPTS、ARIMA 和 ETS。

# 使用项目元数据数据集
<a name="item-metadata-datasets"></a>

*项目元数据数据集*包含分类数据，分类数据可为目标时间序列数据集中的项目提供有价值的上下文。与相关的时间序列数据集不同，项目元数据数据集提供静态信息。也就是说，数据值随着时间推移保持不变，就像项目的颜色或品牌一样。项目元数据集是数据集组的可选补充。仅当目标时间序列数据集中的每个项目都存在于相应的项目元数据数据集中时，才能使用项目元数据。

项目元数据可能包括特定项目的品牌、颜色、型号、类别、原产地或其他补充功能。例如，项目元数据数据集可能为在目标时间序列数据集中找到的某些需求数据提供上下文，该数据集表示拥有 32 GB 存储空间的 Amazon 黑色电子阅读器的销量。由于这些特征与 day-to-day或没有变化 hour-to-hour，因此它们属于项目元数据集。

项目元数据对于在时间序列数据中发现和跟踪描述性模式非常有用。如果您在数据集组中包括项目元数据数据集，则 Forecast 可以训练模型，以便根据项目之间的相似性进行更准确的预测。例如，您可能发现 Amazon 生产的虚拟助理商品比其他公司制造的虚拟助理商品更有可能售出，然后相应地规划您的供应链。

项目元数据在冷启动预测方案中特别有用，在这种情况下，您没有历史数据可用于进行预测，但您对于有类似元数据属性的项目具有历史数据。项目元数据使 Forecast 能够利用与冷启动项目相似的项目来生成预测。

当您包括项目元数据时，Forecast 会根据相似的时间序列创建冷启动预测，从而创建更准确的预测。冷启动预测是针对在项目元数据数据集中但不在结尾时间序列中的项目生成的。首先，Forecast 会为非冷启动项目生成预测，非冷启动项目是指在结尾时间序列中有历史数据的项目。接下来，对于每个冷启动项目，使用项目元数据数据集找到其最临近的项目。然后，使用这些最临近的项目来创建冷启动预测。

项目元数据数据集中的每一行最多可包含 10 个元数据字段，其中一个字段必须是标识字段，才能将元数据与目标时间序列中的项目匹配。与所有数据集类型一样，每个字段的值由数据集架构指定。

**Python 笔记本**  
有关使用项目元数据的 step-by-step指南，请参阅[合并项目元数据](https://github.com/aws-samples/amazon-forecast-samples/blob/master/notebooks/advanced/Incorporating_Item_Metadata_Dataset_to_your_Predictor/Incorporating_Item_Metadata_Dataset_to_your_Predictor.ipynb)。

**Topics**
+ [

## 示例：项目元数据文件和架构
](#item-metadata-example)
+ [

## 传统预测器和项目元数据
](#item-metadata-legacy)
+ [

## 另请参阅
](#item-metadata-see-also)

## 示例：项目元数据文件和架构
<a name="item-metadata-example"></a>

下表显示了描述 Amazon 电子阅读器经过正确配置的项目元数据数据集文件的一部分。对于此示例，假定标题行表示数据集的架构，并且每个列出的项目都位于相应的目标时间序列数据集中。


| `item_id` | `brand` | `model` | `color` | `waterproof` | 
| --- | --- | --- | --- | --- | 
| 1 | amazon | paperwhite | black | 是 | 
| 2 | amazon | paperwhite | blue | 是 | 
| 3 | amazon | base\$1model | black | 否 | 
| 4 | amazon | base\$1model | white | 否 | 
| ... | 

以下是以 CSV 格式表示的相同信息。

```
1,amazon,paperwhite,black,yes
2,amazon,paperwhite,blue,yes
3,amazon,base_model,black,no
4,amazon,base_model,white,no
...
```

以下是此示例数据集的架构。

```
{
     "attributes": [
        {
           "AttributeName": "item_id",
           "AttributeType": "string"
        },
        {
           "AttributeName": "brand",
           "AttributeType": "string"
        },
        {
           "AttributeName": "model",
           "AttributeType": "string"
        },
        {
           "AttributeName": "color",
           "AttributeType": "string"
        },
        {
           "AttributeName": "waterproof",
           "AttributeType": "string"
        }
    ]
}
```

## 传统预测器和项目元数据
<a name="item-metadata-legacy"></a>

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

使用传统预测器时，您可以在使用 [CNN-QR](aws-forecast-algo-cnnqr.md) 或 [DeepAR\$1](aws-forecast-recipe-deeparplus.md) 算法训练预测器时使用项目元数据。使用 AutoML 时，您可以提供项目元数据，而 Forecast 将仅在适用的情况下使用这些时间序列。

## 另请参阅
<a name="item-metadata-see-also"></a>

要深入了解如何使用商品元数据集，请参阅在 [Amazon Forecast 示例 GitHub ](https://github.com/aws-samples/amazon-forecast-samples)存储库中将[商品元数据集合并到您的预测变量](https://github.com/aws-samples/amazon-forecast-samples/blob/master/notebooks/advanced/Incorporating_Item_Metadata_Dataset_to_your_Predictor/Incorporating_Item_Metadata_Dataset_to_your_Predictor.ipynb)中。

# 预定义数据集域和数据集类型
<a name="howitworks-domains-ds-types"></a>

要训练预测器，请创建一个或多个数据集，将其添加到一个数据集组，然后提供该数据集组以进行训练。

对于您创建的每个数据集，您将一个数据集域和一个数据集类型相关联。*数据集域* 为常见使用场景指定预定义的数据集架构，不影响模型算法或超参数。

Amazon Forecast 支持以下数据集域：
+ [RETAIL 域](retail-domain.md) – 用于零售需求预测
+ [INVENTORY\$1PLANNING 域](inv-planning-domain.md) – 用于供应链和库存规划
+ [EC2 CAPACITY 域](ec2-capacity-domain.md) – 用于预测 Amazon Elastic Compute Cloud (Amazon EC2) 容量 
+ [WORK\$1FORCE 域](workforce-domain.md) – 用于劳动力规划 
+ [WEB\$1TRAFFIC 域](webtraffic-domain.md) – 用于估计未来的 Web 流量 
+ [METRICS 域](metrics-domain.md) – 用于预测指标，如收入和现金流
+ [CUSTOM 域](custom-domain.md) – 用于所有其他类型的时间序列预测

每个域都可以有一到三个*数据集类型*。您为域创建的数据集类型基于您拥有的数据的类型和要包含在训练中的内容。

每个域都需要一个目标时间序列数据集，并且可选支持相关时间序列和项目元数据数据集类型。

数据集类型为：
+ 目标时间序列 – 唯一必需的数据集类型。此类型定义您要为其生成预测的*目标*字段。例如，如果要预测一组产品的销售额，您必须为要预测的每个产品创建历史时间序列数据的数据集。同样，您可以为可能想要预测的指标（例如收入、现金流和销售额）创建目标时间序列数据集。
+ 相关时间序列 – 与目标时间序列数据相关的时间序列数据。例如，价格与产品销售数据相关，因此您可以将其作为相关时间序列提供。
+ 项目元数据 – 适用于目标时间序列数据的元数据。例如，如果您预测特定产品的销售额，则该产品的属性（例如品牌、颜色和流派）将成为项目元数据的一部分。当预测 EC2 实例的 EC2 容量时，元数据可能包含实例类型的 CPU 和内存。

对于每个数据集类型，您的输入数据必须包含某些必填字段。您还可以包含 Amazon Forecast 建议您包含的可选字段。

以下示例演示如何选择数据集域和相应的数据集类型。

**Example 示例 1：RETAIL 域中的数据集类型**  
如果您是对预测商品需求感兴趣的零售商，则可以在 RETAIL 域中创建以下数据集：  
+ 目标时间序列是每个商品（零售商出售的每个产品）的历史时间序列需求（销售）的必需数据集。在 RETAIL 域中，此数据集类型要求数据集包含 `item_id`、`timestamp` 和 `demand` 字段。`demand` 字段是预测目标，并且通常是零售商在某个特定周或日内出售的商品的数量。
+ （可选）相关时间序列类型的数据集。在 RETAIL 域中，此类型可包含可选但建议的时间序列信息，例如 `price`、`inventory_onhand` 和 `webpage_hits`。
+ （可选）项目元数据类型的数据集。在 RETAIL 域中，Amazon Forecast 建议提供与您在目标时间序列中提供的商品相关的元数据信息，如 `brand`、`color`、`category` 和 `genre`。

**Example 示例 2：METRICS 域中的数据集类型**  
如果您想预测组织的关键指标（例如收入、销售额和现金流），可以向 Amazon Forecast 提供以下数据集：  
+ 为要预测的指标提供历史时间序列数据的目标时间序列数据集。如果您的兴趣是预测您组织中所有业务部门的收入，您可以使用 `metric`、`business unit` 和 `metric_value` 字段创建 `target time series` 数据集。
+ 如果您有针对不需要的每个指标的任何元数据（如 `category` 或`location`），则可以提供相关时间序列和项目元数据类型的数据集。
您至少必须提供一个目标时间序列数据集，以便 Forecast 为您的目标指标生成预测。

**Example 示例 3：CUSTOM 域中的数据集类型**  
您的预测应用程序的训练数据可能不适合任何 Amazon Forecast 域。在这种情况下，请选择 CUSTOM 域。您必须提供目标时间序列数据集，但可以添加您自己的自定义字段。  
[入门](getting-started.md)练习预测了某个客户端的用电量。用电量训练数据不适合任何数据集域，因此我们使用了 CUSTOM 域。在该练习中，我们仅使用一个数据集类型 - 目标时间序列类型。我们将数据字段映射到数据集类型所需的最少数量的字段。

# RETAIL 域
<a name="retail-domain"></a>

RETAIL 域支持以下数据集类型。对于每个数据集类型，我们列出了必填字段和可选字段。有关如何将字段映射到您的训练数据中的列的信息，请参阅[数据集域和数据集类型](howitworks-datasets-groups.md#howitworks-dataset-domainstypes)。

**Topics**
+ [

## 目标时间序列数据集类型
](#target-time-series-type-retail-domain)
+ [

## 相关时间序列数据集类型
](#related-time-series-type-retail-domain)
+ [

## 项目元数据数据集类型
](#item-metadata-type-retail-domain)

## 目标时间序列数据集类型
<a name="target-time-series-type-retail-domain"></a>

目标时间序列是零售组织出售的每个商品或产品的历史时间序列数据。以下字段是必填字段：
+ `item_id `（字符串）– 要为其预测需求的商品或产品的唯一标识符。
+ `timestamp`（时间戳）
+ `demand`（浮点数）– 商品在此时间戳处的销售量。这也是 Amazon Forecast 为其生成预测的*目标* 字段。

下面的维度是可选的，可用于更改预测粒度：
+ `location`（字符串）– 出售商品的商店的位置。仅当您有多个商店/位置时，才应使用此选项。

理想情况下，应仅包含这些必填字段和可选维度。其他附加时间序列信息应包含在相关时间序列数据集中。

## 相关时间序列数据集类型
<a name="related-time-series-type-retail-domain"></a>

您可以为 Amazon Forecast 提供相关时间序列数据集，例如价格或商品在特定日期获得的 Web 点击量。您提供的信息越多，预测就越准确。以下字段是必填字段：
+ `item_id `（字符串）
+ `timestamp `（时间戳）

以下字段是可选字段，对于改进预测结果可能有所帮助：
+ `price`（浮点数）– 商品在时间戳的时间处的价格。
+ `promotion_applied`（整数；1=true，0=false）– 用于指示商品在时间戳处是否有营销促销的标记。

除了必填字段和建议的可选字段之外，您的训练数据还可以包含其他字段。要在数据集中包含其他字段，请在创建数据集时在架构中提供这些字段。

## 项目元数据数据集类型
<a name="item-metadata-type-retail-domain"></a>

此数据集为 Amazon Forecast 提供了正在为其预测需求的商品的元数据（属性）的相关信息。以下字段是必填字段：
+ `item_id `（字符串）

以下字段是可选字段，对于改进预测结果可能有所帮助：
+ `category`（字符串）
+ `brand`（字符串）
+ `color`（字符串）
+ `genre`（字符串）

除了必填字段和建议的可选字段之外，您的训练数据还可以包含其他字段。要在数据集中包含其他字段，请在创建数据集时在架构中提供这些字段。

# CUSTOM 域
<a name="custom-domain"></a>

CUSTOM 域支持以下数据集类型。对于每个数据集类型，我们列出了必填字段和可选字段。有关如何将字段映射到您的训练数据中的列的信息，请参阅[数据集域和数据集类型](howitworks-datasets-groups.md#howitworks-dataset-domainstypes)。

**Topics**
+ [

## 目标时间序列数据集类型
](#target-time-series-type-custom-domain)
+ [

## 相关时间序列数据集类型
](#related-time-series-type-custom-domain)
+ [

## 项目元数据数据集类型
](#item-metadata-type-custom-domain)

## 目标时间序列数据集类型
<a name="target-time-series-type-custom-domain"></a>

以下字段是必填字段：
+ `item_id `（字符串）
+ `timestamp`（时间戳）
+ `target_value`（浮点整数）– 这是 Amazon Forecast 为其生成预测的 `target` 字段。

理想情况下，应仅包括这些必填字段。其他附加时间序列信息应包含在相关时间序列数据集中。

## 相关时间序列数据集类型
<a name="related-time-series-type-custom-domain"></a>

以下字段是必填字段：
+ `item_id`（字符串）
+ `timestamp`（时间戳）

除了必填字段之外，您的训练数据还可以包含其他字段。要在数据集中包含其他字段，请在创建数据集时在架构中提供这些字段。

## 项目元数据数据集类型
<a name="item-metadata-type-custom-domain"></a>

以下字段是必填字段：
+ `item_id`（字符串）

以下字段是可选字段，可能有助于改进预测结果：
+ `category`（字符串）

除了必填字段和建议的可选字段之外，您的训练数据还可以包含其他字段。要在数据集中包含其他字段，请在创建数据集时在架构中提供这些字段。

# INVENTORY\$1PLANNING 域
<a name="inv-planning-domain"></a>

使用 INVENTORY\$1PLANNING 域预测原材料的需求并确定要存货的特定商品的库存量。它支持以下数据集类型。对于每个数据集类型，我们列出了必填字段和可选字段。有关如何将字段映射到您的训练数据中的列的信息，请参阅[数据集域和数据集类型](howitworks-datasets-groups.md#howitworks-dataset-domainstypes)。

**Topics**
+ [

## 目标时间序列数据集类型
](#target-time-series-type-inv-planning-domain)
+ [

## 相关时间序列数据集类型
](#related-time-series-type-related-time-series-domain)
+ [

## 项目元数据数据集类型
](#item-metadata-type-related-time-series-domain)

## 目标时间序列数据集类型
<a name="target-time-series-type-inv-planning-domain"></a>

以下字段是必填字段：
+ `item_id`（字符串）
+ `timestamp`（时间戳）
+ `demand`（浮点数）– 这是 Amazon Forecast 为其生成预测的 `target` 字段。

下面的维度是可选的，可用于更改预测粒度：
+ `location`（字符串）– 储存商品的配送中心的位置。仅当您有多个商店/位置时，才应使用此选项。

理想情况下，应仅包含这些必填字段和可选维度。其他附加时间序列信息应包含在相关时间序列数据集中。

## 相关时间序列数据集类型
<a name="related-time-series-type-related-time-series-domain"></a>

以下字段是必填字段：
+ `item_id`（字符串）
+ `timestamp`（时间戳）

以下字段是可选字段，对于改进预测结果可能有所帮助：
+ `price`（浮点数）– 商品的价格 

除了必填字段和建议的可选字段之外，您的训练数据还可以包含其他字段。要在数据集中包含其他字段，请在创建数据集时在架构中提供这些字段。

## 项目元数据数据集类型
<a name="item-metadata-type-related-time-series-domain"></a>

以下字段是必填字段：
+ `item_id`（字符串）

以下字段是可选字段，对于改进预测结果可能有所帮助：
+ `category`（字符串）– 商品的类别。
+ `brand`（字符串）– 商品的品牌。
+ `lead_time`（字符串）– 制造商品的前期时间（天）。
+ `order_cycle`（字符串）– 订购周期在工作开始时开始，在商品准备好交货时结束。
+ `safety_stock`（字符串）– 要为商品保留的最小库存量。

除了必填字段和建议的可选字段之外，您的训练数据还可以包含其他字段。要在数据集中包含其他字段，请在创建数据集时在架构中提供这些字段。

# EC2 CAPACITY 域
<a name="ec2-capacity-domain"></a>

使用 EC2 CAPACITY 域预测 Amazon EC2 容量。它支持以下数据集类型。对于每个数据集类型，我们列出了必填字段和可选字段。有关如何将字段映射到您的训练数据中的列的信息，请参阅[数据集域和数据集类型](howitworks-datasets-groups.md#howitworks-dataset-domainstypes)。

## 目标时间序列数据集类型
<a name="target-time-series-type-ec2-capacity-domain"></a>

以下字段是必填字段：
+ `instance_type`（字符串）– 实例的类型（例如，c5.xlarge）。
+ `timestamp`（时间戳）
+ `number_of_instances`（整数）– 在时间戳处使用的该特定实例类型的实例数。这是 Amazon Forecast 为其生成预测的 `target` 字段。

下面的维度是可选的，可用于更改预测粒度：
+ `location`（字符串）— 你可以提供一个 AWS 区域，比如 us-west-2 或 us-east-1。只有在您对多个区域进行建模时，才应使用此项。

理想情况下，应仅包含这些要求和建议的可选字段。其他附加时间序列信息应包含在相关时间序列数据集中。

## 相关时间序列数据集类型
<a name="related-time-series-type-ec2-capacity-domain"></a>

以下字段是必填字段：
+ `instance_type`（字符串）
+ `timestamp`（时间戳）

除了必填字段之外，您的训练数据还可以包含其他字段。要在数据集中包含其他字段，请在创建数据集时在架构中提供这些字段。

# WORK\$1FORCE 域
<a name="workforce-domain"></a>

使用 WORK\$1FORCE 域预测劳动力需求。它支持以下数据集类型。对于每个数据集类型，我们列出了必填字段和可选字段。有关如何将字段映射到您的训练数据中的列的信息，请参阅[数据集域和数据集类型](howitworks-datasets-groups.md#howitworks-dataset-domainstypes)。

**Topics**
+ [

## 目标时间序列数据集类型
](#target-time-series-type-workforce-domain)
+ [

## 相关时间序列数据集类型
](#related-time-series-type-workforce-domain)
+ [

## 项目元数据数据集类型
](#item-metadata-type-workforce-domain)

## 目标时间序列数据集类型
<a name="target-time-series-type-workforce-domain"></a>

以下字段是必填字段：
+ `workforce_type`（字符串）– 正被预测的劳动力的类型。例如，呼叫中心需求或履行中心劳动力需求。
+ `timestamp`（时间戳）
+ `workforce_demand`（浮点整数）– 这是 Amazon Forecast 为其生成预测的 `target` 字段。

下面的维度是可选的，可用于更改预测粒度：
+ `location`（字符串）– 寻找劳动力资源的位置。如果您有多个商店/位置，则应使用此项。

理想情况下，应仅包含这些必填字段和可选维度。其他附加时间序列信息应包含在相关时间序列数据集中。

## 相关时间序列数据集类型
<a name="related-time-series-type-workforce-domain"></a>

以下字段是必填字段：
+ `workforce_type`（字符串）
+ `timestamp`（时间戳）

除了必填字段之外，您的训练数据还可以包含其他字段。要在数据集中包含其他字段，请在创建数据集时在架构中提供这些字段。

## 项目元数据数据集类型
<a name="item-metadata-type-workforce-domain"></a>

以下字段是必填字段：
+ `workforce_type`（字符串）

以下字段是可选字段，对于改进预测结果可能有所帮助：
+ `wages`（浮点数）– 该特定劳动力类型的平均薪资。
+ `shift_length`（字符串）– 班次的长度。
+ `location`（字符串）– 劳动力的位置。

除了必填字段和建议的可选字段之外，您的训练数据还可以包含其他字段。要在数据集中包含其他字段，请在创建数据集时在架构中提供这些字段。

# WEB\$1TRAFFIC 域
<a name="webtraffic-domain"></a>

使用 WEB\$1TRAFFIC 域预测流至一个 Web 属性或一组 Web 属性的 Web 流量。它支持以下数据集类型。相关主题描述了该数据集类型支持的必填字段和可选字段。有关如何将这些字段映射到您的训练数据中的列的信息，请参阅[数据集域和数据集类型](howitworks-datasets-groups.md#howitworks-dataset-domainstypes)。

**Topics**
+ [

## 目标时间序列数据集类型
](#target-time-series-type-webtraffic-domain)
+ [

## 相关时间序列数据集类型
](#related-time-series-type-webtraffic-domain)

## 目标时间序列数据集类型
<a name="target-time-series-type-webtraffic-domain"></a>

以下字段是必填字段：
+ `item_id`（字符串）– 正被预测的每个 Web 属性的唯一标识符。
+ `timestamp`（时间戳）
+ `value`（浮点数）– 这是 Amazon Forecast 为其生成预测的 `target` 字段。

理想情况下，应仅包括这些必填字段。其他附加时间序列信息应包含在相关时间序列数据集中。

## 相关时间序列数据集类型
<a name="related-time-series-type-webtraffic-domain"></a>

以下字段是必填字段：
+ `item_id`（字符串）
+ `timestamp`（时间戳）

除了必填字段之外，您的训练数据还可以包含其他字段。要在数据集中包含其他字段，请在创建数据集时在架构中提供这些字段。

### 项目元数据数据集类型
<a name="idem-metadata-type-webtraffic-domain"></a>

以下字段是必填字段：
+ `item_id`（字符串）

以下字段是可选字段，可能有助于改进预测结果：
+ `category`（字符串）

除了必填字段和建议的可选字段之外，您的训练数据还可以包含其他字段。要在数据集中包含其他字段，请在创建数据集时在架构中提供这些字段。

# METRICS 域
<a name="metrics-domain"></a>

使用 METRICS 域预测指标，如收入、销售额和现金流。它支持以下数据集类型。对于每个数据集类型，我们列出了必填字段和可选字段。有关如何将字段映射到您的训练数据中的列的信息，请参阅[数据集域和数据集类型](howitworks-datasets-groups.md#howitworks-dataset-domainstypes)。

**Topics**
+ [

## 目标时间序列数据集类型
](#target-time-series-type-metrics-domain)
+ [

## 相关时间序列数据集类型
](#related-time-series-type-metrics-domain)
+ [

## 项目元数据数据集类型
](#item-metadata-type-metrics-domain)

## 目标时间序列数据集类型
<a name="target-time-series-type-metrics-domain"></a>

以下字段是必填字段：
+ `metric_name`（字符串）
+ `timestamp`（时间戳）
+ `metric_value`（浮点整数）– 这是 Amazon Forecast 为其生成预测的 `target` 字段（例如，特定一天内所产生的收入量）。

理想情况下，应仅包括这些必填字段。其他附加时间序列信息应包含在相关时间序列数据集中。

## 相关时间序列数据集类型
<a name="related-time-series-type-metrics-domain"></a>

以下字段是必填字段：
+ `metric_name`（字符串）
+ `timestamp`（时间戳）

除了必填字段之外，您的训练数据还可以包含其他字段。要在数据集中包含其他字段，请在创建数据集时在架构中提供这些字段。

## 项目元数据数据集类型
<a name="item-metadata-type-metrics-domain"></a>

以下字段是必填字段：
+ `metric_name`（字符串）

以下字段是可选字段，可能有助于改进预测结果：
+ `category`（字符串）

除了必填字段和建议的可选字段之外，您的训练数据还可以包含其他字段。要在数据集中包含其他字段，请在创建数据集时在架构中提供这些字段。

# 更新数据
<a name="updating-data"></a>

在收集新数据时，您需要将该数据导入 Forecast。为此，您有两种选择：替换更新和增量更新。替换数据集导入作业将使用新导入的数据覆盖所有现有数据。增量更新会将新导入的数据追加到数据集中。

导入新数据后，您可以使用现有的预测器为该数据生成预测。

**Topics**
+ [

## 导入模式
](#idsi)
+ [

## 更新现有数据集
](#idsi-console)
+ [

## 更新预测
](#update-data-new-forecasts)

## 导入模式
<a name="idsi"></a>

要配置 Amazon Forecast 如何向现有数据集添加新数据，请为数据集导入作业指定导入模式。默认导入模式为 `FULL`。您只能使用 Amazon Forecast API 配置导入模式。
+ 要覆盖数据集中的所有现有数据，请在 [CreateDatasetImportJob](API_CreateDatasetImportJob.md) API 操作中指定 `FULL`。
+ 要将记录追加到数据集中的现有数据中，请在 [CreateDatasetImportJob](API_CreateDatasetImportJob.md) API 操作中指定 `INCREMENTAL`。如果现有记录和导入的记录具有相同的时间序列 ID（项目 ID、维度和时间戳），则将现有记录替换为新导入的记录。Amazon Forecast 始终使用带有最新时间戳的记录。

如果您尚未导入数据集，则增量选项不可用。默认的导入模式是完整替换。

### 增量导入模式指南
<a name="idsi-incremental"></a>

执行增量数据集导入时，不能更改时间戳格式、数据格式或地理位置数据。要更改其中任何项目，您需要执行完整的数据集导入。

## 更新现有数据集
<a name="idsi-console"></a>

**重要**  
默认情况下，数据集导入作业会替换您导入到的数据集中的任何现有数据。您可以通过指定数据集导入作业的[导入模式](#idsi)来更改此设置。

要更新数据集，请为该数据集创建数据集导入作业并指定导入模式。

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

要更新数据集，使用 `create-dataset-import-job` 命令。对于 `import-mode`，请指定 `FULL` 以替换现有数据，或者指定 `INCREMENTAL` 以向其中添加数据。有关更多信息，请参阅 [导入模式](#idsi)。

以下代码演示如何创建以增量方式将新数据导入数据集的数据集导入作业。

```
aws forecast create-dataset-import-job \
                        --dataset-import-job-name dataset import job name \
                        --dataset-arn dataset arn \
                        --data-source "S3Config":{"KMSKeyArn":"string", "Path":"string", "RoleArn":"string"} \
                        --import-mode INCREMENTAL
```

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

要更新数据集，请使用 `create_dataset_import_job` 方法。对于 `import-mode`，请指定 `FULL` 以替换现有数据，或者指定 `INCREMENTAL` 以向其中添加数据。有关更多信息，请参阅 [导入模式](#idsi)。

```
import boto3

forecast = boto3.client('forecast')

response = forecast.create_dataset_import_job(
    datasetImportJobName = 'YourImportJob',
    datasetArn = 'dataset_arn',
    dataSource = {"S3Config":{"KMSKeyArn":"string", "Path":"string", "RoleArn":"string"}},
    importMode = 'INCREMENTAL'
)
```

------

## 更新预测
<a name="update-data-new-forecasts"></a>

收集新数据时，可能需要用新数据来生成新的预测。导入更新的数据集时，Forecast 不会自动重新训练预测器，但您可以手动重新训练预测器，以便使用更新的数据生成新的预测。例如，如果您收集每日销售数据，并且希望在预测中包含新的数据点，则可以导入更新后的数据并使用该数据生成预测，而无需训练新的预测器。要使新导入的数据对预测产生影响，必须重新训练预测器。

**要使用新数据生成预测，请执行以下操作：**

1. 将新数据上载到 Amazon S3 存储桶。您的新数据应仅包含自上次数据集导入以来添加的数据。

1. 使用新数据创建**增量**数据集导入作业。新数据将追加到现有数据中，并根据更新的数据生成预测。如果您的新数据文件同时包含以前导入的数据和新数据，请创建**完整**数据集导入作业。

1. 使用现有预测器创建新的预测。

1. 像往常一样检索预测。

# 处理缺失值
<a name="howitworks-missing-values"></a>

时间序列预测数据中的一个常见问题是存在缺失值。由于多种原因，您的数据可能会有缺失值，这包括测量失败、格式化问题、人为错误或缺乏可记录的信息。例如，如果您要预测零售商店的商品需求，并且某个商品已售罄或不可用，则当该商品缺货时，该商品将没有销售数据可供记录。缺失值在占到一定的比例时，会显著影响模型的精度。

Amazon Forecast 提供了多种填充方法，用于处理目标时间序列和相关时间序列数据集中的缺失值。填充是向数据集中缺少的条目添加标准化值的过程。

Forecast 支持以下填充方法：
+ **中间填充** – 填充数据集的项目开始日期和项目结束日期之间的任何缺失值。
+ **回填充** – 填充数据集最后记录的数据点与数据集的全局结束日期之间的任何缺失值。
+ **未来填充（仅限相关时间序列）**– 填充全局结束日期与预测范围结束日期之间的任何缺失值。

下图提供了不同填充方法的可视化表示。

![\[Timeline showing three items with varying durations and fill methods between global start and end dates.\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/Filling_types.PNG)


## 选择填充逻辑
<a name="choosing-missing-values"></a>

选择填充逻辑时，您应考虑模型将如何解释逻辑。例如，在零售场景中，记录有货商品的 0 销售额与记录无货商品的 0 销售额不同，因为后者并不意味着客户对该商品缺乏兴趣。因此，目标时间序列中的 `0` 填充可能会导致预测器的预测中偏差过低，而 `NaN` 填充可能会忽略实际上有 0 个有货商品可供销售的情况，并导致预测器的预测中偏差过高。

下面的时间序列图表说明了选择错误的填充值会如何显著影响模型的精度。图 A 和 B 绘制了对部分商品的需求 out-of-stock，黑线表示实际销售数据。使用 `0` 来填充 A1 中的缺失值，导致 A2 中相对偏差过低的预测（由虚线表示）。同样，使用 `NaN` 填充 B1 中的缺失值，这会导致 B2 中的预测更精确。

![\[Time-series graphs comparing item demand predictions with different filling values for missing data.\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/filling_values.PNG)


有关支持的填充逻辑的列表，请参阅以下部分。

## 目标时间序列及相关时间序列填充逻辑
<a name="filling-restrictions"></a>

您可以对目标时间序列和相关时间序列数据集执行填充。每种数据集类型有不同的填充指南和限制。


**填充指南**  

| 数据集类型 | 是否默认填充？ | 支持的填充方法 | 默认填充逻辑 | 接受的填充逻辑 | 
| --- | --- | --- | --- | --- | 
| 目标时间序列 | 是 | 中间填充和回填充 | 0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/howitworks-missing-values.html)  | 
| 相关时间序列 | 否 | 中间填充、回填充和未来填充 | 无默认值 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/howitworks-missing-values.html)  | 

**重要**  
对于目标时间序列和相关时间序列数据集，根据缺失值之前的最近的 64 个数据条目的滚动窗口来计算 `mean`、`median`、`min` 和 `max` 。

## 缺失值语法
<a name="filling-syntax"></a>

要执行缺失值填充，请在调用[CreatePredictor](API_CreatePredictor.md)操作时指定要实现的填充类型。填充逻辑是在[FeaturizationMethod](API_FeaturizationMethod.md)对象中指定的。

以下摘录演示了目标时间序列属性和相关时间序列属性（分别为 `target_value` 和 `price`）的格式正确的 `FeaturizationMethod` 对象。

 要将填充方法设置为特定值，请将填充参数设置为 `value`，并在相应的 `_value` 参数中定义该值。如下所示，相关时间序列的回填值设置为 2，具体如下：`"backfill": "value"`，且 `"backfill_value":"2"`。

```
[
    {
        "AttributeName": "target_value",
        "FeaturizationPipeline": [
            {
                "FeaturizationMethodName": "filling",
                "FeaturizationMethodParameters": {
                    "aggregation": "sum",
                    "middlefill": "zero",
                    "backfill": "zero"
                }
            }
        ]
    },
    {
        "AttributeName": "price",
        "FeaturizationPipeline": [
            {
                "FeaturizationMethodName": "filling",
                "FeaturizationMethodParameters": {
                    "middlefill": "median",
                    "backfill": "value",
                    "backfill_value": "2",
                    "futurefill": "max"               
                    }
            }
        ]
    }
]
```

# Forecast 的数据集准则
<a name="dataset-import-guidelines-troubleshooting"></a>

如果 Amazon Forecast 在导入数据集时失败，或者数据集未按预期运行，请参阅以下准则。

**时间戳格式**  
对于年 (`Y`)、月 (`M`)、星期 (`W`) 和日期 (`D`) 收集频率，Forecast 支持 `yyyy-MM-dd` 时间戳格式（例如 `2019-08-21`）以及可选的 `HH:mm:ss` 格式（例如 `2019-08-21 15:00:00`）。  
对于小时 (`H`) 和分钟 (`M`) 频率，Forecast 仅支持 `yyyy-MM-dd HH:mm:ss` 格式（例如 `2019-08-21 15:00:00`）。  
准则：将数据集收集频率的时间戳格式更改为支持的格式。

**Amazon S3 文件或存储桶**  
导入数据集时，可以指定包含数据的 Amazon Simple Storage Service (Amazon S3) 存储桶中 CSV 或 Parquet 文件的路径，也可以指定包含数据的 S3 存储桶的名称。如果指定 CSV 或 Parquet 文件，则 Forecast 将仅导入该文件。如果指定 S3 存储桶，则 Forecast 会导入存储桶中的所有 CSV 或 Parquet 文件（最多 10000 个文件）。如果通过指定存储桶名称导入多个文件，则所有 CSV 或 Parquet 文件都必须符合指定的架构。  
准则：使用以下语法指定特定文件或 S3 存储桶：  
`s3://bucket-name/example-object.csv`  
`s3://bucket-name/example-object.parquet`  
`s3://bucket-name/prefix/`  
`s3://bucket-name`  
Parquet 文件的扩展名可以是.parquet、.parq、.pqt，或者根本没有扩展名。

**完整数据集更新**  
第一次数据集导入始终是完整导入，后续导入可以是完整更新，也可以是增量更新。必须使用 Forecast API 来指定导入模式。  
完整更新后，所有现有数据都将替换为新导入的数据。由于未聚合完整的数据集导入作业，因此最近的数据集导入是在训练预测器或生成预测时使用的数据集导入。  
准则：创建增量数据集更新，将新数据追加到现有数据中。否则，请确保最新的数据集导入中包含您在建模时希望使用的所有数据，而不仅仅是自上次导入以来收集的新数据。

**增量数据集更新**  
从当前活动的数据集中读取时间戳、数据格式、地理位置等字段。您不需要在增量数据集导入中包含此类信息。如果包含此类信息，则此类信息必须与最初提供的值相匹配。  
准则：执行完整的数据集导入以更改其中任何值。

**属性顺序**  
架构定义中指定的属性顺序必须与要导入的 CSV 或 Parquet 文件中的列顺序相匹配。例如，如果您将 `timestamp` 定义为第一个属性，则 `timestamp` 必须也是输入文件中的第一列。  
准则：确认输入文件中的列与您创建的架构属性的顺序相同。

**天气指数**  
要应用天气指数，必须在目标时间序列和任何相关时间序列数据集中包含[地理位置属性](weather.md#adding-geolocation)。还需要为目标时间序列时间戳指定[时区](weather.md#specifying-timezones)。  
准则：确保您的数据集包含地理位置属性，并且您的时间戳具有指定的时区。有关更多信息，请参阅天气指数的[条件和限制](weather.md#weather-conditions-restrictions)。

**数据集标头**  
您的输入 CSV 中的数据集标头可能会导致验证错误。我们建议忽略 CSV 文件标头。  
准则：删除数据集标头并重试导入。  
Parquet 文件需要数据集标头。

**数据集状态**  
数据集的 `Status` 必须为 `ACTIVE`，您才可以使用 [CreateDatasetImportJob](API_CreateDatasetImportJob.md) 操作导入训练数据。  
准则：使用 [DescribeDataset](API_DescribeDataset.md) 操作获取数据集的状态。如果创建或更新数据集失败，请检查数据集文件的格式并尝试再次创建它。

**默认文件格式**  
默认文件格式为 CSV。

**文件格式和分隔符**  
Forecast 仅支持逗号分隔值 (CSV) 文件格式和 Parquet 格式。不能使用制表符、空格、冒号或任何其他字符分隔值。  
准则：将数据集转换为 CSV 格式（仅使用逗号作为分隔符）或 Parquet 格式，然后尝试再次导入文件。

**文件名**  
文件名必须包含至少一个字母字符。无法导入纯数字名称的文件。  
准则：重命名输入数据文件，使其包含至少一个字母字符，然后尝试再次导入文件。

**分区的 Parquet 数据**  
Forecast 不读取分区的 Parquet 文件。

**假设分析数据集要求**  
假设分析需要 CSV 数据集。 TimeSeriesSelector 操作的[CreateWhatIfAnalysis](API_CreateWhatIfAnalysis.md)操作和不接受 Parq [CreateWhatIfForecast](API_CreateWhatIfForecast.md) uet 文件的 TimeSeriesReplacementDataSource 操作。