

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

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

# 转换函数
<a name="data-transformations"></a>

转换函数是一组操作，可用于选择和修改相关时间序列中的行。您可以通过条件操作来选择需要的行。然后，可以使用转换操作修改行。所有条件都使用 AND 操作连接，这表示所有条件都必须为 true，才能应用转换。将按转换列出的顺序应用转换。

在创建假设分析预测时，请使用**转换函数生成器**来指定要应用的条件和转换。下图对此功能进行了说明。

![\[Transformation function builder interface with options to modify price and stock count.\]](http://docs.aws.amazon.com/zh_cn/forecast/latest/dg/images/transformationFunctionsMod.png)


在突出显示的部分中，对于 `tacoma`（即华盛顿州塔科马市）商店中标颜色 `blue` 的项目，`price` 列乘以 0.90（即 10％ 的折扣）。为此，Amazon Forecast 首先要创建一个基准相关时间序列的子集，使其仅包含 `store` 中等于 `tacoma` 的行。

该子集被进一步缩减为仅包含 `color` 中等于 `blue` 的行。最后，将 `price` 列中的所有值乘以 0.90，以创建一个在假设分析预测中使用的新相关时间序列。

Amazon Forecast 支持以下条件：
+ `EQUALS` - 此列中的值与条件中提供的值相同。
+ `NOT_EQUALS` - 此列中的值与条件中提供的值不同。
+ `LESS_THAN` - 此列中的值小于条件中提供的值。
+ `GREATER_THAN` - 此列中的值大于条件中提供的值。

Amazon Forecast 支持以下操作：
+ `ADD` - 此列中的所有行都加上提供的值。
+ `SUBTRACT` - 从此列中的所有行中减去提供的值。
+ `MULTIPLY` - 此列中的所有行乘以提供的值。
+ `DIVIDE` - 此列中的所有行除以提供的值。

下面的示例显示了使用 SDK 指定时间序列变换的方式。

------
#### [ Example 1 ]

此示例对西雅图商店的所有项目应用 10% 的折扣。请注意，“城市”是一个预测维度。

```
TimeSeriesTransformations=[
  {
    "Action": {
      "AttributeName": "price",
      "Operation": "MULTIPLY",
      "Value": 0.90
      },
    "TimeSeriesConditions": [
      {
        "AttributeName": "city",
        "AttributeValue": "seattle",
        "Condition": "EQUALS"
      }
    ]
  }
]
```

------
#### [ Example 2 ]

此示例对“电子产品”类别中的所有项目应用 10% 的折扣。请注意，“product\$1category”是一个项目元数据。

```
TimeSeriesTransformations=[
  {
    "Action": {
      "AttributeName": "price",
      "Operation": "MULTIPLY",
      "Value": 0.90
      },
    "TimeSeriesConditions": [
      {
        "AttributeName": "product_category",
        "AttributeValue": "electronics",
        "Condition": "EQUALS"
      }
    ] 
  }
]
```

------
#### [ Example 3 ]

此示例对特定 item BOA21314 \$1id K 应用了 20% 的加价。

```
TimeSeriesTransformations=[
  {
    "Action": {
      "AttributeName": "price",
      "Operation": "MULTIPLY",
      "Value": 1.20
      },
    "TimeSeriesConditions": [
      {
        "AttributeName": "item_id",
        "AttributeValue": "BOA21314K",
        "Condition": "EQUALS"
      }
    ] 
  }
]
```

------
#### [ Example 4 ]

此示例为西雅图和贝尔维尤商店的所有项目增加 1 美元。

```
TimeSeriesTransformations=[
  {
    "Action": {
      "AttributeName": "price",
      "Operation": "ADD",
      "Value": 1.0
      },
    "TimeSeriesConditions": [
      {
        "AttributeName": "city",
        "AttributeValue": "seattle",
        "Condition": "EQUALS"
      }
    ] 
  },
  {
    "Action": {
      "AttributeName": "price",
      "Operation": "ADD",
      "Value": 1.0
      },
    "TimeSeriesConditions": [
      {
        "AttributeName": "city",
        "AttributeValue": "bellevue",
        "Condition": "EQUALS"
      }
    ] 
  }
]
```

------
#### [ Example 5 ]

此示例为 2022 年 9 月西雅图商店的所有项目减去 1 美元。

```
TimeSeriesTransformations=[
  {
    "Action": {
      "AttributeName": "price",
      "Operation": "SUBTRACT",
      "Value": 1.0
      },
    "TimeSeriesConditions": [
      {
        "AttributeName": "city",
        "AttributeValue": "seattle",
        "Condition": "EQUALS"
      },
      {
        "AttributeName": "timestamp",
        "AttributeValue": "2022-08-31 00:00:00",
        "Condition": "GREATER_THAN"
      },
      {
        "AttributeName": "timestamp",
        "AttributeValue": "2022-10-01 00:00:00",
        "Condition": "LESS_THAN"
      }
    ] 
  }
]
```

------
#### [ Example 6 ]

在此示例中，价格先乘以 10，然后再减去 5 美元。请注意，此类操作是按照声明的顺序应用的。

```
TimeSeriesTransformations=[
  {
    "Action": {
      "AttributeName": "price",
      "Operation": "MULTIPLY",
      "Value": 10.0
      },
    "TimeSeriesConditions": [
      {
        "AttributeName": "city",
        "AttributeValue": "seattle",
        "Condition": "EQUALS"
      }
    ]
    },
    {
    "Action": {
      "AttributeName": "price",
      "Operation": "SUBTRACT",
      "Value": 5.0
      },
    "TimeSeriesConditions": [
      {
        "AttributeName": "city",
        "AttributeValue": "seattle",
        "Condition": "EQUALS"
      }
    ] 
   }
]
```

------
#### [ Example 7 ]

因为此示例创建了一个空集，所以此操作不适用于任何时间序列。此代码试图修改西雅图和贝尔维尤商店中所有项目的价格。由于条件与 AND 操作相结合，并且一家商店只能位于一座城市，所以结果为空集。因此，此操作不适用。

```
TimeSeriesTransformations=[
  {
    "Action": {
      "AttributeName": "price",
      "Operation": "MULTIPLY",
      "Value": 10.0
      },
    "TimeSeriesConditions": [
      {
        "AttributeName": "city",
        "AttributeValue": "seattle",
        "Condition": "EQUALS"
      },
      {
        "AttributeName": "city",
        "AttributeValue": "bellevue",
        "Condition": "EQUALS"
      },
    ] 
  }
]
```

有关如何将一个条件应用于多个属性的示例，请参阅示例 4。

------
#### [ Example 8 ]

使用时间戳的转换条件适用于边界对齐的数据，而不适用于原始数据。例如，您每小时输入一次数据，然后每天进行预测。在本用例中，Forecast 会将时间戳与当天对齐，因此将 `2020-12-31 01:00:00` 与 `2020-12-31 00:00:00` 对齐。此代码将创建一个空集，因为它没有在边界对齐的时间戳处指定时间戳。

```
TimeSeriesTransformations=[
  {
    "Action": {
      "AttributeName": "price",
      "Operation": "MULTIPLY",
      "Value": 10.0
      },
    "TimeSeriesConditions": [
      {
        "AttributeName": "timestamp",
        "AttributeValue": "2020-12-31 01:00:00",
        "Condition": "EQUALS"
      },
    ] 
  }
]
```

------