

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

# 针对其他目标优化解决方案
<a name="optimizing-solution-for-objective"></a>

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

 如果您使用 User-Personalization 配方或 Personalized-Ranking 配方，则除了最大相关性（例如更大限度地提高收入）之外，您还可以针对目标优化 Amazon Personalize 解决方案。

 使用物品建议配方时，Amazon Personalize 的主要目标是根据历史和实时物品交互数据，为您的用户预测最相关的物品。这些是您的用户最有可能与之交互的物品（例如，他们最有可能单击的物品）。如果您还有其他目标，例如最大限度地提高流时长或增加收入，则可以创建一个解决方案，根据相关性和目标生成建议。

要针对其他目标优化解决方案，请使用 User-Personalization 食谱或 Personalized-Ranking 食谱创建一个新的解决方案，然后在物品数据集中选择与您的目标相关的数值元数据列。在生成建议时，Amazon Personalize 会更加重视此列数据中具有更高值的物品。例如，您可以选择 VIDEO\$1LENGTH 列来最大限度地提高流时长，或者选择 PRICE 列来最大限度地提高收入。

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

**Topics**
+ [指南和要求](#optimize-objective-guidelines-req)
+ [平衡目标重点和相关性](#balancing-objective-emphasis)
+ [衡量优化性能](#measuring-performance)
+ [优化解决方案 (AWS CLI)](#optimizing-solution-cli)
+ [优化解决方案 (AWS SDKs)](#optimizing-solution-sdk)
+ [示例 Jupyter 笔记本](#optimization-objective-sample-notebooks)

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

 目标要求如下：
+ 您只能为目标选择一列。
+ 列在架构中必须具有数字类型。
+ 列在架构中不能有 `null` 类型。

有关架构和数据类型的更多信息，请参阅[为 Amazon Personalize 架构创建架构 JSON 文件](how-it-works-dataset-schema.md)。

## 平衡目标重点和相关性
<a name="balancing-objective-emphasis"></a>

 当更多地根据目标（而不是相关性）来推荐物品时，可能会进行权衡取舍。例如，如果您想通过建议来增加收入，则仅针对昂贵物品的建议可能会降低物品与用户的相关性，并降低用户参与度和转化率。

要配置相关性和目标之间的平衡，请在创建解决方案时选择以下一个目标敏感度级别：
+ 关闭：Amazon Personalize 主要使用物品交互数据为用户预测最相关的物品。
+ 低：Amazon Personalize 不太重视您的目标。通过物品交互数据实现的相关性更为重要。
+ 中等：Amazon Personalize 通过物品交互数据对您的目标和相关性给予同等重视。
+ 高：Amazon Personalize 更加重视您的目标。通过物品交互数据实现的相关性不太重要。

## 衡量优化性能
<a name="measuring-performance"></a>

当您为具有优化目标的解决方案创建解决方案版本（训练模型）时，Amazon Personalize 会生成 `average_rewards_at_k` 指标。`average_rewards_at_k` 的分数可指明，解决方案版本在实现目标方面的性能如何。为了计算该指标，Amazon Personalize 按如下方式计算每位用户的奖励：

`rewards_per_user = total rewards from the user's interactions with their top 25 reward generating recommendations / total rewards from the user's interactions with recommendations`

最终 `average_rewards_at_k` 是所有 `rewards_per_user` 的平均值，即标准化为小于或等于 1 且大于 0 的十进制值。该值越接近 1，表示您期望从建议中获得的每个用户平均收益就越多。

例如，如果您的目标是最大限度地提高单击收入，则 Amazon Personalize 将按以下方法计算每个用户分数：将用户单击的前 25 个最昂贵建议物品产生的总收入除以用户单击的所有推荐物品产生的总收入。然后，Amazon Personalize 会返回所有用户分数的标准化平均值。`average_rewards_at_k` 越接近 1，表示您期望从建议中获得的每个用户平均收入就越多。

有关生成指标的更多信息，请参阅[通过指标评估 Amazon Personalize 解决方案版本](working-with-training-metrics.md)。

## 优化解决方案 (AWS CLI)
<a name="optimizing-solution-cli"></a>

 您只能使用 User-Personalization 或 Personalized-Ranking 食谱针对目标进行优化。要使用针对其他目标优化解决方案 AWS CLI，请创建一个新的解决方案并使用`solutionConfig`对象中的`optimizationObjective`密钥指定您的目标细节。`optimizationObjective` 包含以下字段：
+ `itemAttribute`：指定物品数据集中与您的目标相关的数值元数据列的名称。
+ `objectiveSensitivity`：指定解决方案在生成建议时对您的目标的重视程度。目标敏感度级别配置了 Amazon Personalize 如何通过物品交互数据根据目标和相关性来平衡建议的物品。`objectiveSensitivity` 可以是 `OFF`、LOW、`MEDIUM` 或 `HIGH`。有关更多信息，请参阅 [平衡目标重点和相关性](#balancing-objective-emphasis)。

以下是 `create-solution` AWS CLI 命令的示例。将 `solution name`、`dataset group arn` 和 `recipe arn` 值替换为您自己的值。

对于 `optimizationObjective`，将 `COLUMN_NAME` 替换为物品数据集中与您的目标相关的数值元数据列名称。对于 `objectiveSensitivity`，请指定关闭、低、中或高。

```
aws personalize create-solution \
--name solution name \
--dataset-group-arn dataset group arn \
--recipe-arn recipe arn \
--solution-config "{\"optimizationObjective\":{\"itemAttribute\":\"COLUMN_NAME\",\"objectiveSensitivity\":\"MEDIUM\"}}"
```

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

## 优化解决方案 (AWS SDKs)
<a name="optimizing-solution-sdk"></a>

您只能使用 User-Personalization 或 Personalized-Ranking 食谱针对目标进行优化。

要使用针对其他目标优化解决方案 AWS SDKs，请创建一个新的解决方案并使用解决方案`solutionConfig`对象中的`optimizationObjective`密钥指定您的目标细节。`optimizationObjective` 包含以下字段：
+ `itemAttribute`：指定数据集组物品数据集中与您的目标相关的数值元数据列的名称。
+ `objectiveSensitivity`：指定解决方案在生成建议时对您的目标的重视程度。目标敏感度级别配置了 Amazon Personalize 如何通过物品交互数据根据目标和相关性来平衡建议的物品。`objectiveSensitivity` 可以是 `OFF`、`LOW`、`MEDIUM` 或 `HIGH`。有关更多信息，请参阅 [平衡目标重点和相关性](#balancing-objective-emphasis)。

使用以下代码通过 适用于 Python (Boto3) 的 AWS SDK 或 AWS SDK for Java 2.x创建具有其他目标的解决方案。

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

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

 要创建针对其他目标进行了优化的解决方案，请使用以下 `create_solution` 方法。将 `solution name`、`dataset group arn` 和 `recipe arn` 值替换为您自己的值。

对于 `optimizationObjective`，将 `COLUMN_NAME` 替换为物品数据集中与您的目标相关的数值元数据列名称。对于 `objectiveSensitivity`，请指定关闭、低、中或高。

```
import boto3

personalize = boto3.client('personalize')

create_solution_response = personalize.create_solution(
    name= 'solution name', 
    recipeArn = 'recipe arn', 
    datasetGroupArn = 'dataset group arn',
    solutionConfig = {
        "optimizationObjective": {
            "itemAttribute": "COLUMN_NAME",
            "objectiveSensitivity": "MEDIUM"
        }
    }
)
solution_arn = create_solution_response['solutionArn']
print('solution_arn: ', solution_arn)
```

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

要创建针对其他目标进行了优化的解决方案，请使用以下 `createPersonalizeSolution` 方法并将以下内容作为参数传递：Amazon Personalize 服务客户端、数据集组的 Amazon 资源名称 (ARN)、解决方案名称、食谱 ARN、物品属性和目标敏感度级别。

```
public static String createPersonalizeSolution(PersonalizeClient personalizeClient, 
                                             String datasetGroupArn, 
                                             String solutionName, 
                                             String recipeArn,
                                             String itemAttribute, 
                                             String objectiveSensitivity) {
    
    try {
        OptimizationObjective optimizationObjective = OptimizationObjective.builder()
            .itemAttribute(itemAttribute)
            .objectiveSensitivity(objectiveSensitivity)
            .build();
    
        SolutionConfig solutionConfig = SolutionConfig.builder()
            .optimizationObjective(optimizationObjective)
            .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 "";
```

------
#### [ SDK for JavaScript v3 ]

```
// Get service clients and commands using ES6 syntax.
import { CreateSolutionCommand, PersonalizeClient } from
  "@aws-sdk/client-personalize";
  
// create the personalizeClient
const personalizeClient = new PersonalizeClient({ region: "REGION"});

// set the solution parameters.
export const createSolutionParam = {
  datasetGroupArn: 'DATASET_GROUP_ARN',              /* required */
  recipeArn: 'RECIPE_ARN',                           /* required */
  name: 'NAME',                                      /* required */
  solutionConfig: {
    optimizationObjective: {
      itemAttribute: "COLUMN_NAME",           /* specify the numerical column from the Items dataset related to your objective */
      objectiveSensitivity: "MEDIUM"          /* specify OFF, LOW, MEDIUM, or HIGH */
    }
  }
};

export const run = async () => {
  try {
    const response = await personalizeClient.send(new CreateSolutionCommand(createSolutionParam));
    console.log("Success", response);
    return response; // For unit tests.
  } catch (err) {
    console.log("Error", err);
  }
};
run();
```

------

## 示例 Jupyter 笔记本
<a name="optimization-objective-sample-notebooks"></a>

[有关演示如何创建针对其他基于目标的项目元数据进行优化的解决方案的 Jupyter 笔记本示例，请参阅 Amazon Personalize 示例存储库的 [objective\$1](https://github.com/aws-samples/amazon-personalize-samples/tree/master/next_steps/core_use_cases/objective_optimization) optimation 文件夹](https://github.com/aws-samples/amazon-personalize-samples) GitHub 