

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用事件組態最佳化解決方案
<a name="optimizing-solution-events-config"></a>

**重要**  
根據預設，所有新解決方案都會使用自動訓練。透過自動訓練，您會在解決方案處於作用中狀態時產生訓練成本。為了避免不必要的成本，您可以在完成後[更新解決方案](updating-solution.md)以關閉自動訓練。如需訓練成本的相關資訊，請參閱 [Amazon Personalize 定價](https://aws.amazon.com/personalize/pricing/)。

 如果您使用 User-Personalization-v2 配方或 Personalized-Ranking-v2 配方，您可以使用事件組態來最佳化 Amazon Personalize 解決方案。

 使用項目建議配方，Amazon Personalize 的主要目標是根據歷史和即時項目互動資料，預測使用者最相關的項目。不過，互動可能會包含其他資訊，例如使用者是否點按或購買特定項目。您可以透過記錄事件的類型 () 來記錄此項目[事件類型和事件值資料](interactions-datasets.md#event-type-and-event-value-data)。當您設定解決方案時，您可以讓解決方案為不同的互動事件類型提供不同的權重。例如，您可以設定解決方案，為`purchase`事件提供比`click`事件更多的權重。

若要讓解決方案為不同的事件類型提供不同的權重，您可以在解決方案的事件組態中指定事件類型及其對應的權重。此外，您可以設定事件值閾值，以排除與該閾值以下事件值的互動。例如，如果具有 EVENT\_TYPE 監看事件的 EVENT\_VALUE 資料是使用者監看的影片百分比，如果您將事件值閾值設定為 0.5，且要監看的事件類型，Amazon Personalize 只會使用 EVENT\_VALUE 大於或等於 0.5 的監看互動事件來訓練模型。

 與事件類型相關聯的權重將決定其重要性。權重較高的事件類型會導致訓練模型更有可能建議與該事件類型互動的項目。例如，如果您指定的「購買」的權重高於「按一下」，且模型得知使用者會按一下項目 B 或使用其互動歷史記錄購買項目 C，則模型會將項目 C 排名較高。

若要使用事件組態最佳化解決方案，您可以使用 User-Personalization-v2 配方或 Personalized-Ranking-v2 配方建立新的解決方案，並指定事件組態。您也可以使用事件組態更新現有的解決方案 ([更新解決方案以變更其自動訓練組態](updating-solution.md))。

您可以使用 Amazon Personalize 主控台、 AWS Command Line Interface (AWS CLI) 或 AWS SDKs。如需使用 Amazon Personalize 主控台的詳細資訊，請參閱 [建立解決方案 （主控台）](create-solution.md#configure-solution-console)。

**Topics**
+ [指導方針和要求](#optimize-event-config-guidelines-req)
+ [使用事件權重組態測量效能](#optimize-event-configuration-measuring-performance)
+ [最佳化解決方案 (AWS CLI)](#optimize-event-configuration-cli)
+ [最佳化解決方案 (AWS SDKs)](#optimize-event-configuration-sdk)

## 指導方針和要求
<a name="optimize-event-config-guidelines-req"></a>

 以下是事件組態的指導方針和要求：
+ 若要設定不同事件類型的權重，您的項目互動資料集必須具有 EVENT\_TYPE 資料欄和選擇性的 EVENT\_VALUE 資料欄。
+ 您可以在組態中指定事件參數清單。包含您想要考慮建立解決方案的所有事件類型。您最多可以指定 10 種不同的事件類型。
+ 您可以為每個事件類型指定事件權重。事件權重必須介於 0.0 和 1.0 之間。只有事件類型之間的權重比率很重要。例如，將事件類型「購買」設為權重 0.3，並將事件類型「點選」設為權重 0.1，與將「購買設為權重 0.6，以及「點選」設為權重 0.2 的效果相同。
+ 您可以使用 [UpdateSolution](https://docs.aws.amazon.com/personalize/latest/dg/API_UpdateSolution.html) API 操作更新現有解決方案的事件組態。

## 使用事件權重組態測量效能
<a name="optimize-event-configuration-measuring-performance"></a>

 當您為具有事件組態的解決方案建立解決方案版本 （訓練模型） 時，Amazon Personalize 會產生 `normalized_discounted_cumulative_gain_with_event_weights_at_k` 指標。的分數`normalized_discounted_cumulative_gain_with_event_weights_at_k`會說明解決方案版本在考量您為每個事件類型設定的事件權重時的效能。

 它類似於 K 的標準化折扣累積增益 (NDCG)，但每個正確預測的獎勵都會加權。相反地，在 K 的原始 NDCG 中，每個正確的預測都會具有 1 的權重。例如，在「購買」權重 0.3 和「按一下」權重 0.1 的情況下，正確預測「購買」項目將得到 1.5 的獎勵，而預測「按一下」項目將得到 0.5 的獎勵。

如需產生指標的詳細資訊，請參閱 [使用指標評估 Amazon Personalize 解決方案版本](working-with-training-metrics.md)。

## 最佳化解決方案 (AWS CLI)
<a name="optimize-event-configuration-cli"></a>

您可以使用 User-Personalization-v2 或 Personalized-Ranking-v2 配方來最佳化事件組態。

 若要使用 最佳化具有事件組態的解決方案 AWS CLI，請建立新的解決方案，並使用 `solutionConfig` 物件中的 `eventsConfig`金鑰指定事件組態詳細資訊。`eventsConfig` 有一個 金鑰，您可以在`eventParametersList`其中指定最多 10 個 eventParameters。每個 `eventParameter`都有下列欄位：
+ eventType：指定您要考慮建立解決方案的事件類型。
+ eventValueThreshold：指定事件值閾值。只有事件值大於或等於此閾值的事件才會考慮建立解決方案。
+ 權重：指定每個事件類型的權重。權重越高，表示所建立解決方案的事件類型就越重要。

以下是 create-solution AWS CLI 命令的範例。將 `solution name`、 `dataset group arn`和 `recipe arn`值取代為您自己的值。

```
aws personalize create-solution \
--name {{solution name}} \
--dataset-group-arn {{dataset group arn}} \
--recipe-arn {{recipe arn}} \
--solution-config "{\"eventsConfig\":{\"eventParametersList\":[{\"eventType\":\"Purchase\", \"eventValueThreshold\":0.1, \"weight\":0.3}, {\"eventType\":\"Click\", \"weight\":0.1}]}"
```

當您的解決方案準備就緒時，請建立新的解決方案版本 （如需範例命令，請參閱 [建立解決方案 (AWS CLI)](create-solution.md#configure-solution-cli))。建立解決方案版本後，您可以使用解決方案版本指標來檢視最佳化效能。請參閱 [測量最佳化效能](optimizing-solution-for-objective.md#measuring-performance)。

## 最佳化解決方案 (AWS SDKs)
<a name="optimize-event-configuration-sdk"></a>

您可以使用 User-Personalization-v2 或 Personalized-Ranking-v2 配方來最佳化事件組態。

 若要使用 AWS SDKs 最佳化具有事件組態的解決方案，請建立新的解決方案，並使用 `solutionConfig` 物件中的 `eventsConfig`金鑰指定您的事件組態詳細資訊。`eventsConfig` 有一個 金鑰，您可以在`eventParametersList`其中指定最多 10 個 `eventParameters`。每個 `eventParameter`都有下列欄位：
+ eventType：指定您要考慮建立解決方案的事件類型。
+ eventValueThreshold：指定事件值閾值。只有事件值大於或等於此閾值的事件才會考慮建立解決方案。
+ 權重：指定每個事件類型的權重。權重越高，表示所建立解決方案的事件類型就越重要。

------
#### [ SDK for Python (Boto3) ]

```
import boto3

personalize = boto3.client('personalize')

create_solution_response = personalize.create_solution(
    name= '{{solution name}}', 
    recipeArn = '{{recipe arn}}', 
    datasetGroupArn = '{{dataset group arn}}',
    solutionConfig = {
       "eventsConfig": {
          "eventParametersList": [
             {"eventType":"Purchase", 
              "eventValueThreshold":0.1, 
              "weight":0.3}, 
             {"eventType":"Click", 
              "weight":0.1}
          ]
       }
    }
)
solution_arn = create_solution_response['solutionArn']
print('solution_arn: ', solution_arn)
```

------
#### [ SDK for Java 2.x ]

```
public static String createPersonalizeSolution(PersonalizeClient personalizeClient, 
							  String datasetGroupArn, 
							  String solutionName, 
							  String recipeArn,
							  ) {
    
try {
    EventsConfig eventsConfig = EventsConfig.builder()
        .eventsParameterList(eventsParameterList)
        .build();

    SolutionConfig solutionConfig = SolutionConfig.builder()
        .eventsConfig(eventsConfig)
        .build();

    CreateSolutionRequest solutionRequest = CreateSolutionRequest.builder()
        .name(solutionName)
        .datasetGroupArn(datasetGroupArn)
        .recipeArn(recipeArn)
        .solutionConfig(solutionConfig)
        .build();

    CreateSolutionResponse solutionResponse = personalizeClient.createSolution(solutionRequest);
    
    return solutionResponse.solutionArn();

} catch (PersonalizeException e) {
    System.err.println(e.awsErrorDetails().errorMessage());
    System.exit(1);
}
return "";
```

------

當您的解決方案準備就緒時，請建立新的解決方案版本 （如需範例命令，請參閱 [建立解決方案AWS SDKs)](create-solution.md#configure-solution-sdk))。建立解決方案版本後，您可以使用解決方案版本指標來檢視最佳化效能。請參閱[測量最佳化效能](optimizing-solution-for-objective.md#measuring-performance)。