通过指标评估解决方案版本 - Amazon Personalize
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

通过指标评估解决方案版本

您可以通过离线和在线指标来评估解决方案版本的性能。在线指标 是您在用户与实时建议的交互中观察到的实证结果。例如,您可以记录用户在浏览您的目录时的点击率。您负责生成和记录任何在线指标。

离线指标 是 Amazon Personalize 在您训练解决方案版本时生成的指标。您可以使用离线指标,在创建市场活动并提供建议之前评估模型的性能。借助离线指标,您可以查看修改解决方案超参数的效果或比较使用相同数据训练的模型的结果。在本节的其余部分中,指标一词是指离线指标

为了获得性能指标,Amazon Personalize 将输入的交互数据拆分为训练集、测试集以及验证集(验证集适用于 PERSONALIZED_ACTIONS)。拆分取决于您选择的食谱类型:

  • 对于 USER_SEGMENTATION 食谱,训练集由每个用户 80% 的交互数据组成,测试集由每个用户 20% 的交互数据组成。

  • 对于所有其他食谱类型,训练集由 90% 的用户及其交互数据组成。测试集由剩余的 10% 的用户及其交互数据组成。

然后,Amazon Personalize 使用训练集创建解决方案版本。训练完成后,Amazon Personalize 会向新解决方案版本提供测试集中每位用户 90% 的最早数据作为输入。然后,Amazon Personalize 通过将解决方案版本生成的建议与测试集中每位用户 10% 的最新数据中的实际交互进行比较,计算指标。

为了生成基准以进行比较,我们建议使用热门程度-计数食谱,该食谱会推荐前 K 项最受欢迎的物品。

检索解决方案版本指标

创建解决方案版本后,您可以使用指标来评估其性能。您可以使用 Amazon Personalize 控制台、 Amazon Command Line Interface (Amazon CLI) 和 Amazon 软件开发工具包检索解决方案版本的指标。

检索解决方案版本指标(控制台)

要在控制台中查看推荐器指标,请导航到解决方案版本的详细信息页面。

  1. 打开 Amazon Personalize 控制台(网址为 https://console.aws.amazon.com/personalize/home),并登录您的账户。

  2. 数据集组页面上,选择您的自定义数据集组。

  3. 在导航窗格中,选择自定义资源,然后选择解决方案和食谱

  4. 选择您的解决方案。

  5. 解决方案版本中,选择您的解决方案版本以查看其详细信息页面。指标列在底部窗格的解决方案版本指标选项卡上。有关指标的定义,请参阅指标定义

    既然您评估了解决方案版本,就可以通过最适合您使用案例的指标来部署解决方案版本,以创建市场活动。有关部署解决方案的更多信息,请参阅创建市场活动

检索解决方案版本指标 (Amazon CLI)

您通过调用 GetSolutionMetrics 操作为特定解决方案版本检索指标。以下代码显示了如何使用 Amazon CLI 检索指标。

personalize get-solution-metrics --solution-version-arn solution version ARN

以下是使用带有其他优化目标的 User-Personalization 食谱创建的解决方案版本的输出示例。

{ "solutionVersionArn": "arn:aws:personalize:us-west-2:acct-id:solution/SolutionName/<version-id>", "metrics": { "coverage": 0.27, "mean_reciprocal_rank_at_25": 0.0379, "normalized_discounted_cumulative_gain_at_5": 0.0405, "normalized_discounted_cumulative_gain_at_10": 0.0513, "normalized_discounted_cumulative_gain_at_25": 0.0828, "precision_at_5": 0.0136, "precision_at_10": 0.0102, "precision_at_25": 0.0091, "average_rewards_at_k": 0.653 } }

有关每个指标的说明,请参阅指标定义。既然您评估了解决方案版本,就可以通过最适合您使用案例的指标来部署解决方案版本,以创建市场活动。有关部署解决方案的更多信息,请参阅创建市场活动

检索解决方案版本指标 (Amazon SDK)

您通过调用 GetSolutionMetrics 操作为特定解决方案版本检索指标。使用以下代码来检索指标。

SDK for Python (Boto3)
import boto3 personalize = boto3.client('personalize') response = personalize.get_solution_metrics( solutionVersionArn = 'solution version arn') print(response['metrics'])
SDK for Java 2.x
public static void getSolutionVersionMetrics(PersonalizeClient personalizeClient, String solutionVersionArn) { try { GetSolutionMetricsRequest request = GetSolutionMetricsRequest.builder() .solutionVersionArn(solutionVersionArn) .build(); Map<String, Double> metrics = personalizeClient.getSolutionMetrics(request).metrics(); metrics.forEach((key, value) -> System.out.println(key + " " + value)); } catch (PersonalizeException e ) { System.err.println(e.awsErrorDetails().errorMessage()); System.exit(1); } }

以下是使用带有其他优化目标的 User-Personalization 食谱创建的解决方案版本的输出示例。

{ "solutionVersionArn": "arn:aws:personalize:us-west-2:acct-id:solution/MovieSolution/<version-id>", "metrics": { "coverage": 0.27, "mean_reciprocal_rank_at_25": 0.0379, "normalized_discounted_cumulative_gain_at_5": 0.0405, "normalized_discounted_cumulative_gain_at_10": 0.0513, "normalized_discounted_cumulative_gain_at_25": 0.0828, "precision_at_5": 0.0136, "precision_at_10": 0.0102, "precision_at_25": 0.0091, "average_rewards_at_k": 0.653 } }

有关每个指标的说明,请参阅指标定义。既然您评估了解决方案版本,就可以通过最适合您使用案例的指标来部署解决方案版本,以创建市场活动。有关部署解决方案的更多信息,请参阅创建市场活动

指标定义

下文使用以下术语描述了 Amazon Personalize 为解决方案版本生成的指标:

  • 相关建议 是针对用户实际与之交互的物品的建议。这些物品来自测试集中每个用户 10% 的最新交互数据。

  • 排名 是指推荐项在推荐列表中的位置。位置 1(列表的顶部)被假定为与用户最相关。

对于每个指标,数字越大(越接近 1)越好。要深入了解相关信息,请参阅其他 资源中列出的资源。

覆盖

覆盖范围的值告诉您 Amazon Personalize 可能推荐的独特项目(用于商品推荐)、操作(针对操作建议)或用户(针对用户细分推荐)在您的数据集中的唯一记录总数中所占的比例。

覆盖率分数越高,意味着 Amazon Personalize 建议的目录越多,而不是重复记录相同的物品。对于具有物品浏览功能的配方(例如 User-Personalization),其覆盖率比不具备该功能的配方(例如 Similar-Items)的覆盖率更高。

前 25 项中平均倒数排名

该指标可指明,模型在排名靠前的位置生成相关物品建议的能力。

如果您要为用户生成物品搜索结果,且不希望用户选择列表中排名靠后的物品,则可以选择前 25 项中平均倒数排名较高的模型。例如,用户经常在搜索结果中选择第一个烹饪食谱。Amazon Personalize 不会为 PERSONALIZED_ACTIONS 或 USER_SEGMENTATION 配方生成此指标。

Amazon Personalize 使用建议请求的平均倒数排名分数来计算该指标。每个倒数排名分数的计算方法如下:1 / the rank of the highest item interacted with by the user,其中可能的总排名为 25。用户与之交互的其他排名较低的物品将被忽略。如果用户选择了第一个物品,则分数为 1。如果没有选择任何物品,则分数为 0。

例如,您可以向三个不同的用户分别显示 25 条建议:

  • 如果用户 1 单击排名为 4 的物品和排名为 10 的物品,则其倒数排名分数为 1/4

  • 如果用户 2 单击排名为 2 的物品、排名为 4 的物品以及排名为 12 的物品,则其倒数排名分数为 1/2。

  • 如果用户 3 单击排名为 6 的单个物品,则其倒数排名分数为 1/6。

所有建议请求的平均倒数排名(在本例中为 3)的计算公式为 (1/4 + 1/2 + 1/6) / 3 = .3056

K (5/10/25) 项标准化折扣累计增益 (NDCG)

该指标可指明模型对物品或操作建议的排名,其中 K 是样本大小,即 5、10 或 25 条建议。如果您最感兴趣的是建议的排名,而不仅仅是排名最高的物品或操作,则此指标非常有用(有关此信息,请参阅 mean reciprocal rank at 25)。例如,如果您的应用程序在轮播中一次最多显示 10 部电影,则 NDCG at 10 分数将非常有用。

Amazon Personalize 根据测试集中每位用户的排名位置为建议分配权重,来计算 NDCG。每条建议被折扣一倍(给定较低的权重),具体取决于其位置。最终指标是测试集中所有用户的平均值。K 项标准化折扣累计增益假定列表中排名较低的推荐与列表中排名较高的推荐相比相关性更低。

Amazon Personalize 使用加权系数 1/log(1 + position),其中列表的顶部是位置 1

K 项精度

该指标可指明,根据样本大小 K(5、10 或 25)条建议,模型建议的相关性。

Amazon Personalize 按照以下方法计算此指标:测试集中每个用户前 K 条建议中的相关建议数量除以 K,其中 K 为 5、10 或 25。最终指标是测试集中所有用户的平均值。

例如,如果您向用户推荐 10 个物品,而用户与其中 3 个物品交互,则 K 项精度为:3 个正确预测的物品除以总计 10 个建议物品 (3 / 10 = .30)。

此指标奖励相关物品的精准建议。分数越接近 1,模型就越精确。

精度

如果您使用 Next-Best-Action 配方训练解决方案版本,Amazon Personalize 会生成 precision 指标,而不是 precision at K。该指标告诉您,模型在预测用户实际采取的操作方面的表现如何。

为了计算 precision,对于数据集中的每个操作,Amazon Personalize 将经正确预测会采取该操作的用户数除以建议该操作的总次数。然后,Amazon Personalize 计算数据集中所有操作的平均值。

例如,如果向 100 个用户建议了一个操作,60 个用户采取了该操作,而 40 个用户没有采取该操作,则该操作的 precision60 / 100 = .60。然后,Amazon Personalize 将此计算应用于所有操作并返回平均值。

此指标奖励相关操作的精准建议。分数越接近 1,模型就越精确。

average_rewards_at_k

当您为具有优化目标的解决方案创建解决方案版本(训练模型)时,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,表示您期望从建议中获得的每个用户平均收入就越多。

有关更多信息,请参阅 针对其他目标优化解决方案

趋势预测准确度

如果您使用 Trending-Now 食谱训练解决方案版本,则表示模型推荐的物品的受欢迎程度的增长率。趋势预测准确度越高(越接近 1),模型就越能正确识别热门物品。

为了计算受欢迎程度增长率,Amazon Personalize 将所有推荐物品的受欢迎程度增长率除以前 25 个热门物品的总受欢迎程度增长率。这些物品来自测试集中的实际交互。

根据您的数据分布和您选择的趋势发现频率,趋势预测准确度的值可以为 0.0。

命中率(K 项命中率)

如果您使用 USER_SEGMENTATION 食谱训练解决方案版本,则表示预测的相关度最高的 K 个结果中与实际用户相匹配的平均用户数。实际用户是指与测试集中的物品进行实际交互的用户。K 是最相关的用户中前 1% 的用户。该值越高,表示预测越准确。

查全率(K 项查全率)

如果您使用 USER_SEGMENTATION 食谱训练解决方案版本,则表示预测的相关度最高的 K 个结果中与实际用户相匹配的平均预测用户百分比。实际用户是指与测试集中的物品进行实际交互的用户。K 是最相关的用户中前 1% 的用户。该值越高,表示预测越准确。

查全率

如果您使用 Next-Best-Action 配方训练解决方案版本,则该指标会告诉您,您的解决方案版本在发现用户将要与之交互的操作方面的表现如何。

为了计算 recall,对于数据集中的每个操作,Amazon Personalize 将经正确预测会采取该操作的用户数量除以测试集中实际采取该操作的总用户数量。然后,Amazon Personalize 计算数据集中所有操作的平均值。

例如,如果 100 名用户在测试集中执行了操作,而 Amazon Personalize 预测其中有 50 名用户将采取该操作,则该操作的 recall50 / 100 = .50。然后,Amazon Personalize 将此计算应用于所有操作并返回平均值。

曲线下方的区域 (AUC)

如果您使用 PERSONALIZED_ACTIONS 配方训练了解决方案版本,则为您的解决方案版本的“接收者操作特征”曲线下方的区域。该指标告诉您,解决方案版本在正确识别用户将要采取的操作方面的表现如何。

“接收者操作特征”曲线绘制了解决方案版本的性能。它绘制了不同阈值下的真阳性(正确预测为相关的操作)和假阳性(错误地预测为相关的操作)的比率。曲线下方的区域 (AUC) 是根据其曲线总结解决方案版本的性能的分数。

解决方案版本的 AUC 可介于 0 和 1 之间。越接近 1,模型就越能更好地预测用户的相关操作。

示例

下面是一个可为特定用户生成建议列表的解决方案版本的简单示例。第二个和第五个推荐与此用户的测试数据中的记录匹配。这些是相关的推荐。如果将 K 设置为 5,将为该用户生成以下指标。

reciprocal_rank

计算:1/2

结果:0.5000

normalized_discounted_cumulative_gain_at_5

计算:(1/log(1 + 2) + 1/log(1 + 5)) / (1/log(1 + 1) + 1/log(1 + 2))

结果:0.6241

precision_at_5

计算:2/5

结果:0.4000

其他 资源

有关通过 A/B 测试评估解决方案版本的信息,请参阅使用 A/B 测试来衡量 Amazon Personalize 生成的建议的有效性。要深入了解推荐器系统的不同类型的指标,请参阅以下外部资源: