

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

# 使用事件配置优化解决方案
<a name="optimizing-solution-events-config"></a>

**重要**  
默认情况下，所有新解决方案都使用自动训练。如果使用自动训练，则在解决方案处于活动状态时，就会产生训练费用。为避免产生不必要的费用，在完成后，可以[更新解决方案](updating-solution.md)以关闭自动训练。有关训练费用的信息，请参阅 [Amazon Personalize 定价](https://www.amazonaws.cn/personalize/pricing/)。

 如果您使用了 User-Personalization-v2 recipe 或 Personalized-Ranking-v2 配方，则可以使用事件配置优化 Amazon Personalize 解决方案。

 使用项目建议配方时，Amazon Personalize 的主要目标是根据历史和实时项目交互数据，为您的用户预测最相关的项目。但是，交互可能包含其他信息，例如用户是点击还是购买了某个项目。您可以通过记录事件的类型（[事件类型和事件值数据](interactions-datasets.md#event-type-and-event-value-data)）来记录此内容。配置解决方案时，您可以让它为不同的交互事件类型赋予不同的权重。例如，您可以配置一个解决方案，为 `purchase` 事件赋予高于 `click` 事件的权重。

要让解决方案为不同的事件类型赋予不同的权重，您需要在解决方案的事件配置中指定事件类型及其对应的权重。此外，您还可以设置事件值阈值以排除事件值低于该阈值的交互。例如，如果 EVENT\$1TYPE 为观看 的事件的 EVENT\$1VALUE 数据是用户观看的视频的百分比，如果您将事件值阈值设置为 0.5，将事件类型设置为观看，则 Amazon Personalize 将仅使用 EVENT\$1VALUE 大于或等于 0.5 的观看 交互事件来训练模型。

 与事件类型相关的权重将决定事件类型的重要性。权重较高的事件类型将使经过训练的模型更有可能推荐与该事件类型交互的项目。例如，如果您为“购买”赋予了高于“点击”的权重，并且模型得知某用户将点击项目 B 或利用自己的交互历史购买项目 C，那么模型将提高项目 C 的排名。

要使用事件配置优化解决方案，您需要使用 Personalization-v2 配方或 Personalized-Ranking-v2 配方创建一个新解决方案，并指定事件配置。您还可以使用事件配置更新现有解决方案（[更新解决方案以更改其自动训练配置](updating-solution.md)）。

您可以使用 Amazon Personalize 控制台、Amazon Command Line Interface (Amazon CLI) 或 Amazon SDK。有关使用 Amazon Personalize 控制台的信息，请参阅[创建解决方案（控制台）](create-solution.md#configure-solution-console)。

**Topics**
+ [指南和要求](#optimize-event-config-guidelines-req)
+ [使用事件权重配置来衡量性能](#optimize-event-configuration-measuring-performance)
+ [优化解决方案 (Amazon CLI)](#optimize-event-configuration-cli)
+ [优化解决方案 (Amazon SDK)](#optimize-event-configuration-sdk)

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

 下面是事件配置的准则和要求：
+ 要为不同的事件类型配置权重，您的项目交互数据集必须有一个 EVENT\$1TYPE 列和一个 EVENT\$1VALUE 列（可选）。
+ 您可以在配置中指定一个事件参数列表。包含您希望在创建解决方案时考虑的所有事件类型。您可以指定最多 10 种不同的事件类型。
+ 您可以为每种事件类型指定事件权重。事件权重必须介于 0.0 和 1.0 之间。只有事件类型之间的权重比率才重要。例如，将事件类型“购买”的权重设置为 0.3 并将事件类型“点击”的权重设置为 0.1，其效果与将“购买”的权重设置为 0.6 并将“点击”的权重设置为 0.2 相同。
+ 您可以使用 [UpdateSolution](https://docs.amazonaws.cn/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)。

## 优化解决方案 (Amazon CLI)
<a name="optimize-event-configuration-cli"></a>

您可以将 User-Personalization-v2 或 Personalized-Ranking-v2 配方与事件配置结合使用来进行优化。

 要借助 Amazon CLI 使用事件配置来优化解决方案，请创建一个新解决方案，并在 `solutionConfig` 对象中使用 `eventsConfig` 键指定事件配置详细信息。`eventsConfig` 有一个键 `eventParametersList`，您可在该键下指定最多 10 个 eventParameters。每个 `eventParameter` 都包含以下字段：
+ eventType：指定您在创建解决方案时要考虑的事件类型。
+ eventValueThreshold：指定事件值阈值。只有事件值大于或等于此阈值的事件才会被考虑用于创建解决方案。
+ weight：为每种事件类型指定权重。权重越高意味着事件类型对创建的解决方案越重要。

以下是 create-solution Amazon 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}]}"
```

解决方案准备就绪后，创建一个新的解决方案版本（有关示例命令，请参阅[创建解决方案 (Amazon CLI)](create-solution.md#configure-solution-cli)）。创建解决方案版本后，可以通过解决方案版本指标查看优化性能。请参阅[衡量优化性能](optimizing-solution-for-objective.md#measuring-performance)。

## 优化解决方案 (Amazon SDK)
<a name="optimize-event-configuration-sdk"></a>

您可以将 User-Personalization-v2 或 Personalized-Ranking-v2 配方与事件配置结合使用来进行优化。

 要借助 Amazon SDK 使用事件配置来优化解决方案，请创建一个新解决方案，并在 `solutionConfig` 对象中使用 `eventsConfig` 键指定事件配置详细信息。`eventsConfig` 有一个键 `eventParametersList`，您可在该键下指定最多 10 个 `eventParameters`。每个 `eventParameter` 都包含以下字段：
+ eventType：指定您在创建解决方案时要考虑的事件类型。
+ eventValueThreshold：指定事件值阈值。只有事件值大于或等于此阈值的事件才会被考虑用于创建解决方案。
+ weight：为每种事件类型指定权重。权重越高意味着事件类型对创建的解决方案越重要。

------
#### [ 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 "";
```

------

解决方案准备就绪后，创建一个新的解决方案版本（有关示例命令，请参阅[创建解决方案 (Amazon SDK)](create-solution.md#configure-solution-sdk)）。创建解决方案版本后，可以通过解决方案版本指标查看优化性能。请参阅[衡量优化性能](optimizing-solution-for-objective.md#measuring-performance)。