

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# 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()` があります。

 例えば、オンライン動画ストリーミングアプリを使用していて、レコメンデーションのクリック率と視聴された映画の合計時間の 2 つのメトリクスを追跡したいとします。ただし、アイテムデータセット内の各動画には `LENGTH` 属性が含まれます。メトリクス属性を作成し、それぞれにイベントタイプと機能を持つ 2 つのメトリクスを追加します。1 つ目は、`SAMPLECOUNT()` 関数付きの `Click` イベントタイプのものかもしれません。2 つ目は、`Watch` 関数付きの `SUM(Items.LENGTH)` イベントタイプのものかもしれません。

`SUM()` 関数はアイテムデータセットとアイテムインタラクションデータセットの数値列にのみ適用できます。アイテムデータセットの列に `SUM()` 関数を適用するには、まずアイテムメタデータをインポートする必要があります。

 Amazon Personalize コンソール AWS Command Line Interface、または AWS SDKS を使用してメトリクス属性を作成できます。

**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/home](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** にキーの Amazon リソースネーム (ARN) AWS KMS を入力します。Amazon Personalize と Amazon Personalize IAM サービスロールにキーを使用するためのアクセス許可を付与する必要があります。詳細については、「[AWS KMS キーを使用するためのアクセス許可を Amazon Personalize に付与する](granting-personalize-key-access.md)」を参照してください。

1. **[サービスロール]** では、新しいサービスロールを作成するか、または既存のロールを使用するかを選択します。選択するロールには CloudWatch に対して `PutMetricData` アクセス許可が必要です。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. **[確認と作成]** ページで新しいメトリクス属性の詳細を確認します。設定を変更するには、[**戻る**] を選択します。メトリクス属性を作成するには、**[作成]** を選択します。メトリクス属性が有効になっている場合は、データのインポートを開始して結果を表示できます。表示結果については、「[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を使用してメトリクス属性を作成する方法を示しています。指定するロールには CloudWatch `PutMetricData` のアクセス許可と、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) を使用してメトリクス属性を作成する方法を示しています。指定するロールには CloudWatch `PutMetricData` のアクセス許可と、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();
```

------