

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

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

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

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

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

## 时间边界
<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'])
```

------