

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