创建 Amazon Personalize 指标归因 - Amazon Personalize
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

创建 Amazon Personalize 指标归因

重要

在创建指标归因并记录事件或导入增量批量数据后,您每月将为每个指标支付 CloudWatch 费用。有关 CloudWatch 定价的信息,请参阅 Amazon CloudWatch 定价页面。要停止向 CloudWatch 发送指标,请删除指标归因

要开始生成指标报告,您需要创建指标归因并导入交互数据。在创建指标归因时,您需指定要报告的事件类型列表。对于每种事件类型,您需指定一个 Amazon Personalize 在收集数据时应用的函数。可用函数包括 SUM(DatasetType.COLUMN_NAME)SAMPLECOUNT()

例如,您可能有一个在线视频流应用程序,并想要跟踪以下两个指标:建议的点击率和观看的电影总时长,其中,物品数据集中的每个视频都包含一个 LENGTH 属性。您将创建一个指标归因并添加两个指标,其中每个指标都有事件类型和函数。第一个可能是带有 SAMPLECOUNT() 函数的 Click 事件类型。第二个可能是带有 SUM(Items.LENGTH) 函数的 Watch 事件类型。

您只能将 SUM() 函数应用于物品数据集和物品交互数据集的数值列。要将 SUM() 函数应用于物品数据集中的列,您必须先导入物品元数据。

您可以使用 Amazon Personalize 控制台、Amazon Command Line Interface 或 Amazon SDK 创建指标归因。

创建指标归因(控制台)

要使用 Amazon Personalize 控制台创建指标归因,请导航到指标归因页面,然后选择创建指标归因。创建指标归因时,您需指定可选的 Amazon S3 存储桶路径、Amazon Personalize IAM 服务角色以及要报告的指标列表。

当您使用 Amazon Personalize 控制台创建物品交互数据集导入作业时,您可以选择在新选项卡中创建指标归因。然后,您可以返回导入作业,将其完成。如果您已进入配置指标归因页面,则可以跳至步骤 4。

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

  2. 选择您的数据集组。

  3. 在导航窗格的自定义资源下,选择指标归因

  4. 指标归因详细信息中,选择创建指标归因

  5. 配置指标归因页面上,为指标归因命名。

  6. 如果您想将指标发布到 Amazon S3,则对于 Amazon S3 数据输出路径,输入目标 Amazon S3 存储桶。这样,您就可以选择在每次创建数据集导入作业时发布指标。使用以下语法:

    s3://amzn-s3-demo-bucket/<folder> path>

  7. 如果将 Amazon KMS 用于加密,则对于 KMS 密钥 ARN,输入 Amazon KMS 密钥的 Amazon 资源名称 (ARN)。您必须向 Amazon Personalize 和 Amazon Personalize IAM 服务角色授予使用您密钥的权限。有关更多信息,请参阅 向 Amazon Personalize 授予使用您 Amazon KMS 密钥的权限

  8. IAM 角色中,选择创建新服务角色或使用现有角色。您选择的角色必须具有 CloudWatch 的 PutMetricData 权限。如果您想发布到 Amazon S3,则该角色必须拥有访问 Amazon S3 存储桶的 PutObject 权限。

    要使用您在为 Amazon Personalize 创建IAM角色中创建的角色,您可能需要为 CloudWatch 和 Amazon S3 添加策略。

    有关策略示例,请参阅向 Amazon Personalize 授予访问 CloudWatch 的权限向 Amazon Personalize 授予访问 Amazon S3 存储桶的权限

  9. 选择下一步

  10. 定义指标属性页面上,选择如何定义指标。选择构建指标属性以使用生成器工具。选择输入指标属性,以 JSON 格式输入指标。

    • 如果您选择构建指标属性,请为每个指标提供名称、事件类型并选择一个函数。对于 SUM() 函数,选择列名称。选择添加指标属性以添加其他指标。

    • 如果您选择输入指标属性,请以 JSON 格式输入每个指标。下面演示了如何设置指标格式。

      { "EventType": "watch", "MetricName": "MinutesWatchedTracker", "MetricMathExpression": "SUM(Items.LENGTH)" }
  11. 选择下一步

  12. 查看并创建页面上,查看新指标归因的详细信息。要进行更改,请选择 Previous。要创建指标归因,请选择创建。指标属性为活动后,您可以开始导入数据并查看结果。有关查看结果的信息,请参阅在 CloudWatch 中查看指标数据图表。有关将结果发布到 Amazon S3 的信息,请参阅将指标归因报告发布到 Amazon S3

创建指标归因 (Amazon CLI)

以下代码演示如何使用 Amazon Command Line Interface 创建指标归因。您指定的角色必须具有 CloudWatch 的 PutMetricData 权限,如果发布到 Amazon S3,则该角色必须拥有对 Amazon S3 存储桶的 PutObject 权限。要使用您在为 Amazon Personalize 创建IAM角色中创建的角色,您可能需要为 CloudWatch 和 Amazon S3 添加策略。有关策略示例,请参阅向 Amazon Personalize 授予访问 CloudWatch 的权限向 Amazon Personalize 授予访问 Amazon S3 存储桶的权限

为每个指标指定名称、事件类型和表达式(函数)。可用函数包括 SUM(DatasetType.COLUMN_NAME)SAMPLECOUNT()。对于 SUM() 函数,指定数据集类型和列名称。例如,SUM(Items.LENGTH)。有关每个参数的信息,请参阅CreateMetricAttribution

aws personalize create-metric-attribution \ --name metric attribution name \ --dataset-group-arn dataset group arn \ --metrics-output-config "{\"roleArn\": \"Amazon Personalize service role ARN\", \"s3DataDestination\":{\"kmsKeyArn\":\"kms key ARN\",\"path\":\"s3://amzn-s3-demo-bucket/folder-name/\"}}" \ --metrics "[{ \"eventType\": \"event type\", \"expression\": \"SUM(DatasetType.COLUMN_NAME)\", \"metricName\": \"metric name\" }]"

创建指标归因 (Amazon SDK)

以下代码演示如何使用 SDK for Python (Boto3) 创建指标归因。您指定的角色必须具有 CloudWatch 的 PutMetricData 权限,如果发布到 Amazon S3,则该角色必须拥有对 Amazon S3 存储桶的 PutObject 权限。要使用您在为 Amazon Personalize 创建IAM角色中创建的角色,您可能需要为 CloudWatch 和 Amazon S3 添加策略。有关策略示例,请参阅向 Amazon Personalize 授予访问 CloudWatch 的权限向 Amazon Personalize 授予访问 Amazon S3 存储桶的权限

为每个指标指定名称、事件类型和表达式(函数)。可用函数包括 SUM(DatasetType.COLUMN_NAME)SAMPLECOUNT()。对于 SUM() 函数,指定数据集类型和列名称。例如,SUM(Items.LENGTH)。有关每个参数的信息,请参阅CreateMetricAttribution

SDK for Python (Boto3)
import boto3 personalize = boto3.client('personalize') metricsList = [{ "eventType": "event type", "expression": "SUM(DatasetType.COLUMN_NAME)", "metricName": "metric name" }] outputConfig = { "roleArn": "Amazon Personalize service role ARN", "s3DataDestination": { "kmsKeyArn": "key ARN", "path": "s3://amzn-s3-demo-bucket/<folder>" } } response = personalize.create_metric_attribution( name = 'metric attribution name', datasetGroupArn = 'dataset group arn', metricsOutputConfig = outputConfig, metrics = metricsList ) metric_attribution_arn = response['metricAttributionArn'] print ('Metric attribution ARN: ' + metric_attribution_arn) description = personalize.describe_metric_attribution( metricAttributionArn = metric_attribution_arn)['metricAttribution'] print('Name: ' + description['name']) print('ARN: ' + description['metricAttributionArn']) print('Status: ' + description['status'])
SDK for Java 2.x
public static String createMetricAttribution(PersonalizeClient personalizeClient, String eventType, String expression, String metricName, String metricAttributionName, String roleArn, String s3Path, String kmsKeyArn, String datasetGroupArn) { String metricAttributionArn = ""; try { MetricAttribute attribute = MetricAttribute.builder() .eventType(eventType) .expression(expression) .metricName(metricName) .build(); ArrayList<MetricAttribute> metricAttributes = new ArrayList<>(); metricAttributes.add(attribute); S3DataConfig s3DataDestination = S3DataConfig.builder() .kmsKeyArn(kmsKeyArn) .path(s3Path) .build(); MetricAttributionOutput outputConfig = MetricAttributionOutput.builder() .roleArn(roleArn) .s3DataDestination(s3DataDestination) .build(); CreateMetricAttributionRequest createMetricAttributionRequest = CreateMetricAttributionRequest.builder() .name(metricAttributionName) .datasetGroupArn(datasetGroupArn) .metrics(metricAttributes) .metricsOutputConfig(outputConfig) .build(); CreateMetricAttributionResponse createMetricAttributionResponse = personalizeClient.createMetricAttribution(createMetricAttributionRequest); metricAttributionArn = createMetricAttributionResponse.metricAttributionArn(); System.out.println("Metric attribution ARN: " + metricAttributionArn); return metricAttributionArn; } catch (PersonalizeException e) { System.out.println(e.awsErrorDetails().errorMessage()); } return ""; }
SDK for JavaScript v3
// Get service clients and commands using ES6 syntax. import { CreateMetricAttributionCommand, PersonalizeClient } from "@aws-sdk/client-personalize"; // create personalizeClient const personalizeClient = new PersonalizeClient({ region: "REGION" }); // set the metric attribution param export const createMetricAttributionParam = { name: "METRIC_ATTRIBUTION_NAME", /* required */ datasetGroupArn: "DATASET_GROUP_ARN", /* required */ metricsOutputConfig: { roleArn: "ROLE_ARN", /* required */ s3DataDestination: { kmsKeyArn: "KEY_ARN", /* optional */ path: "s3://amzn-s3-demo-bucket/<folderName>/", /* optional */ }, }, metrics: [ { eventType: "EVENT_TYPE", /* required for each metric */ expression: "SUM(DatasetType.COLUMN_NAME)", /* required for each metric */ metricName: "METRIC_NAME", /* required for each metric */ } ] }; export const run = async () => { try { const response = await personalizeClient.send( new CreateMetricAttributionCommand(createMetricAttributionParam) ); console.log("Success", response); return response; // For unit tests. } catch (err) { console.log("Error", err); } }; run();