

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

# 创建 Amazon Personalize 指标归因
<a name="creating-metric-attribution"></a>

**重要**  
 创建指标归因并记录事件或导入增量批量数据后，每个指标每月将产生一些 CloudWatch 费用。有关 CloudWatch 定价的信息，请参阅 [Amazon CloudWatch 定价](https://aws.amazon.com/cloudwatch/pricing/)页面。要停止向发送指标 CloudWatch，[请删除指标归因](deleting-metric-attribution.md)。

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

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

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

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

**Topics**
+ [创建指标归因（控制台）](#create-metric-attribution-console)
+ [创建指标归因 (AWS CLI)](#create-metric-attribution-cli)
+ [创建指标归因 (AWS SDKs)](#create-metric-attribution-sdk)

## 创建指标归因（控制台）
<a name="create-metric-attribution-console"></a>

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

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

**创建指标归因**

1. 在[https://console.aws.amazon.com/personalize/家](https://console.aws.amazon.com/personalize/home)中打开 Amazon Personalize 控制台并登录您的账户。

1. 选择您的数据集组。

1. 在导航窗格的**自定义资源**下，选择**指标归因**。

1. 在**指标归因详细信息**中，选择**创建指标归因**。

1. 在**配置指标归因**页面上，为指标归因命名。

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

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

1. 如果您使用 AWS KMS 加密，请在 **KMS 密钥 ARN 中**输入密钥的亚马逊资源名称 (ARN)。 AWS KMS 您必须向 Amazon Personalize 和 Amazon Personalize IAM 服务角色授予使用您密钥的权限。有关更多信息，请参阅 [授予 Amazon Personalize 使用您的 AWS KMS 密钥的权限](granting-personalize-key-access.md)。

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

   要使用您在中创建的角色[为 Amazon Personalize 创建 IAM 角色](set-up-required-permissions.md#set-up-create-role-with-permissions)，您可能需要为 CloudWatch 和 Amazon S3 添加策略。

   有关策略示例，请参阅[让 Amazon Personalize 访问权限 CloudWatch](metric-attribution-requirements.md#metric-attribution-cw-permissions)和[向 Amazon Personalize 授予访问 Amazon S3 存储桶的权限](metric-attribution-requirements.md#metric-attribution-s3-permissions)。

1. 选择**下一步**。

1. 在**定义指标属性**页面上，选择如何定义指标。选择**构建指标属性**以使用生成器工具。选择**输入指标属性**，以 JSON 格式输入指标。
   + 如果您选择**构建指标属性**，请为每个指标提供名称、事件类型并选择一个函数。对于 `SUM()` 函数，选择列名称。选择**添加指标属性**以添加其他指标。
   + 如果您选择**输入指标属性**，请以 JSON 格式输入每个指标。下面演示了如何设置指标格式。

     ```
     {
         "EventType": "watch",
         "MetricName": "MinutesWatchedTracker", 
         "MetricMathExpression": "SUM(Items.LENGTH)"
     }
     ```

1. 选择**下一步**。

1. 在**查看并创建**页面上，查看新指标归因的详细信息。要进行更改，请选择 **Previous**。要创建指标归因，请选择**创建**。指标属性为活动后，您可以开始导入数据并查看结果。有关查看结果的信息，请参阅[在中查看指标数据的图表 CloudWatch](metric-attribution-results-cloudwatch.md)。有关将结果发布到 Amazon S3 的信息，请参阅[将指标归因报告发布到 Amazon S3](metric-attribution-results-s3.md)。

## 创建指标归因 (AWS CLI)
<a name="create-metric-attribution-cli"></a>

 以下代码演示如何使用 AWS Command Line Interface创建指标归因。您指定的角色必须拥有`PutMetricData`访问您的 Amazon S3 存储桶的 CloudWatch 权限，如果发布到 Amazon S3，则必须拥有访问您的 Amazon S3 存储桶的`PutObject`权限。要使用您在中创建的角色[为 Amazon Personalize 创建 IAM 角色](set-up-required-permissions.md#set-up-create-role-with-permissions)，您可能需要为 CloudWatch 和 Amazon S3 添加策略。有关策略示例，请参阅[让 Amazon Personalize 访问权限 CloudWatch](metric-attribution-requirements.md#metric-attribution-cw-permissions)和[向 Amazon Personalize 授予访问 Amazon S3 存储桶的权限](metric-attribution-requirements.md#metric-attribution-s3-permissions)。

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

```
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 SDKs)
<a name="create-metric-attribution-sdk"></a>

 以下代码演示如何使用 SDK for Python (Boto3) 创建指标归因。您指定的角色必须拥有`PutMetricData`访问您的 Amazon S3 存储桶的 CloudWatch 权限，如果发布到 Amazon S3，则必须拥有访问您的 Amazon S3 存储桶的`PutObject`权限。要使用您在中创建的角色[为 Amazon Personalize 创建 IAM 角色](set-up-required-permissions.md#set-up-create-role-with-permissions)，您可能需要为 CloudWatch 和 Amazon S3 添加策略。有关策略示例，请参阅[让 Amazon Personalize 访问权限 CloudWatch](metric-attribution-requirements.md#metric-attribution-cw-permissions)和[向 Amazon Personalize 授予访问 Amazon S3 存储桶的权限](metric-attribution-requirements.md#metric-attribution-s3-permissions)。

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

------
#### [ 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();
```

------