针对其他目标优化解决方案 - Amazon Personalize
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

针对其他目标优化解决方案

重要

创建解决方案后,您无法更改其配置。默认情况下,所有新解决方案都使用自动训练。使用自动训练,当您的解决方案处于活动状态时,您就会产生培训费用。为避免不必要的开支,请务必在完成后删除该解决方案。有关培训费用的信息,请参阅 Amazon Personalize 定价

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

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

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

您可以使用 Amazon Personalize 控制台、 Amazon Command Line Interface (Amazon CLI) 或 Amazon 软件开发工具包。有关使用 Amazon Personalize 控制台的信息,请参阅创建解决方案(控制台)

指南和要求

目标要求如下:

  • 您只能为目标选择一列。

  • 列在架构中必须具有数字类型。

  • 列在架构中不能有 null 类型。

有关架构和数据类型的更多信息,请参阅架构

平衡目标重点和相关性

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

要配置相关性和目标之间的平衡,请在创建解决方案时选择以下一个目标敏感度级别:

  • 关闭:Amazon Personalize 主要使用物品交互数据为用户预测最相关的物品。

  • 低:Amazon Personalize 不太重视您的目标。通过物品交互数据实现的相关性更为重要。

  • 中等:Amazon Personalize 通过物品交互数据对您的目标和相关性给予同等重视。

  • 高:Amazon Personalize 更加重视您的目标。通过物品交互数据实现的相关性不太重要。

衡量优化性能

当您为具有优化目标的解决方案创建解决方案版本(训练模型)时,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 CLI)

您只能使用 User-Personalization 或 Personalized-Ranking 食谱针对目标进行优化。要使用针对其他目标优化解决方案 Amazon CLI,请创建一个新的解决方案并使用solutionConfig对象中的optimizationObjective密钥指定您的目标细节。optimizationObjective 包含以下字段:

  • itemAttribute:指定物品数据集中与您的目标相关的数值元数据列的名称。

  • objectiveSensitivity:指定解决方案在生成建议时对您的目标的重视程度。目标敏感度级别配置了 Amazon Personalize 如何通过物品交互数据根据目标和相关性来平衡建议的物品。objectiveSensitivity 可以是 OFF、LOW、MEDIUMHIGH。有关更多信息,请参阅 平衡目标重点和相关性

以下是 create-solution Amazon CLI 命令的示例。将 solution namedataset group arnrecipe 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\"}}"

解决方案准备就绪后,创建一个新的解决方案版本(有关示例命令,请参阅创建解决方案 (Amazon CLI))。创建解决方案版本后,可以通过解决方案版本指标查看优化性能。请参阅 衡量优化性能

优化解决方案 (Amazon SDK)

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

要使用 Amazon 软件开发工具包针对其他目标优化解决方案,请创建一个新的解决方案,并使用解决方案solutionConfig对象中的optimizationObjective密钥指定您的目标细节。optimizationObjective 包含以下字段:

  • itemAttribute:指定数据集组物品数据集中与您的目标相关的数值元数据列的名称。

  • objectiveSensitivity:指定解决方案在生成建议时对您的目标的重视程度。目标敏感度级别配置了 Amazon Personalize 如何通过物品交互数据根据目标和相关性来平衡建议的物品。objectiveSensitivity 可以是 OFFLOWMEDIUMHIGH。有关更多信息,请参阅 平衡目标重点和相关性

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

解决方案准备就绪后,创建一个新的解决方案版本(有关示例代码,请参阅创建解决方案版本 (Amazon SDK))。创建解决方案版本后,可以通过解决方案版本指标查看优化性能。请参阅 衡量优化性能

SDK for Python (Boto3)

要创建针对其他目标进行了优化的解决方案,请使用以下 create_solution 方法。将 solution namedataset group arnrecipe 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 笔记本

有关演示如何创建针对其他基于目标的项目元数据进行优化的解决方案的 Jupyter 笔记本示例,请参阅 Amazon Personalize 示例存储库的 objective_ optimation 文件夹 GitHub