

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

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

# 处理缺失值
<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"               
                    }
            }
        ]
    }
]
```