

 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_tw/forecast/latest/dg/images/transformationFunctionsMod.png)


在反白區段中，`price`欄位在 （即 Tacoma、Washington) 的商店中乘以 0.90 `tacoma`（即 10% 的折扣），表示項目為彩色 `blue`。若要這樣做，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\$1id BOA21314K 上套用 20% 標記。

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

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

此範例會將 \$11 新增至 Seattle 和 Bellevue 存放區中的所有項目。

```
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 ]

使用時間戳記的轉換條件適用於邊界對齊的資料，而不是原始資料。例如，您每小時輸入資料並每天預測。在此情況下，預測會將時間戳記與日期對齊，因此 `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"
      },
    ] 
  }
]
```

------