创建 Amazon Personalize 指标归因 - Amazon Personalize

创建 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 控制台、AWS Command Line Interface 或 AWS 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. 如果将 AWS KMS 用于加密,则对于 KMS 密钥 ARN,输入 AWS KMS 密钥的 Amazon 资源名称 (ARN)。您必须向 Amazon Personalize 和 Amazon Personalize IAM 服务角色授予使用您密钥的权限。有关更多信息,请参阅 向 Amazon Personalize 授予使用您 AWS 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

创建指标归因 (AWS CLI)

以下代码演示如何使用 AWS 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\" }]"

创建指标归因 (AWS 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();