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

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

创建指标归因

重要

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

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

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

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

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

创建指标归因(控制台)

要使用 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://<name of your S3 bucket>/<folder> path>

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

  8. IAM 角色中,选择创建新服务角色或使用现有角色。您选择的角色必须具有PutMetricData权限 CloudWatch。如果您想发布到 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。要创建指标归因,请选择创建。指标属性为活动后,您可以开始导入数据并查看结果。有关查看结果的信息,请参阅发布和查看结果

创建指标归因 (Amazon CLI)

以下代码演示如何使用 Amazon Command Line Interface创建指标归因。您指定的角色必须拥有PutMetricData访问您的 Amazon S3 存储桶的 CloudWatch 权限,如果发布到 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://bucket-name/folder-name/\"}}" \ --metrics "[{ \"eventType\": \"event type\", \"expression\": \"SUM(DatasetType.COLUMN_NAME)\", \"metricName\": \"metric name\" }]"

创建指标归因 (Amazon SDK)

以下代码演示如何使用 SDK for Python (Boto3) 创建指标归因。您指定的角色必须拥有PutMetricData访问您的 Amazon S3 存储桶的 CloudWatch 权限,如果发布到 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://<name of your S3 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://<name of your output S3 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();