

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

# メトリクス属性によるレコメンデーション効果の測定
<a name="metric-attributions"></a>

 アイテムレコメンデーションの影響を測定するために、メトリクス属性を作成できます。メトリクス属性は、インポートしたアイテムインタラクションとアイテムのデータ、および指定したメトリクスに基づいてレポートを作成します。**例えば、ユーザーが視聴した映画の合計時間やクリックイベントの総数などです。Amazon Personalize は 15 分間のウィンドウで計算を集計します。ストリーミングされるインタラクションデータと増分バルクデータについては、Amazon Personalize は自動的に Amazon CloudWatch にメトリクスレポートを送信します。バルクデータの場合は、レポートを Amazon S3 バケットに発行することを選択できます。

 インポートするインタラクションごとに、さまざまなキャンペーン、レコメンダー、サードパーティを比較するためのソースデータを含めます。ユーザーに見せたレコメンデーションのレコメンデーション ID や、サードパーティーなどのイベントソースを含めることができます。

 例えば、2 つの Amazon Personalize レコメンダーからのおすすめ映画を表示するビデオストリーミングアプリがあるとします。どのレコメンダーが最も多くの視聴イベントを生成しているかを確認したい場合は、視聴イベントの総数を追跡するメトリクス属性を作成できます。そうすれば、ユーザーがレコメンデーションに反応した際の動画再生イベントを記録し、各イベントの `recommendationId` に組み込むことができます。Amazon Personalize `recommendationId` はを使用して各レコメンダーを識別します。イベントを記録すると、両方のレコメンダーについて 15 分ごとに集計された視聴イベントの合計を CloudWatch で表示できます。イベントに `recommendationId` または `eventAttributionSource` を含める方法を示すコードサンプルについては、「[イベントメトリクスと属性レポート](event-metrics.md)」を参照してください。

**Topics**
+ [メトリクス属性のガイドラインと要件](metric-attribution-requirements.md)
+ [Amazon Personalize メトリクス属性の作成](creating-metric-attribution.md)
+ [Amazon Personalize メトリクス属性の更新](updating-metric-attribution.md)
+ [Amazon Personalize メトリクス属性の削除](deleting-metric-attribution.md)
+ [CloudWatch でのメトリクスデータのグラフの表示](metric-attribution-results-cloudwatch.md)
+ [Amazon S3 へのメトリクス属性レポートの発行](metric-attribution-results-s3.md)

# メトリクス属性のガイドラインと要件
<a name="metric-attribution-requirements"></a>

 Amazon Personalize は、メトリクス属性を作成した後にのみ、レコメンデーションのインパクトの計算とレポートを開始します。最も完全な履歴を構築するには、インタラクションデータをインポートする前にメトリクス属性を作成することをお勧めします。Amazon Personalize コンソールでアイテムインタラクションデータセットのデータセットインポートジョブを作成する場合、新しいタブでメトリクス属性を作成するオプションがあります。その後、インポートジョブに戻って完了できます。

 メトリクス属性を作成してイベントを記録したり、増分一括データをインポートしたりすると、メトリクスごとに毎月いくらかの CloudWatch コストが発生します。CloudWatch の料金については、[[Amazon CloudWatch の料金]](https://aws.amazon.com/cloudwatch/pricing/) ページをご覧ください。CloudWatch へのメトリクスの送信を停止するには、[メトリクス属性を削除](deleting-metric-attribution.md)します。

 レコメンデーションのインパクトを長期的に確認するには、顧客がレコメンデーションに反応するたびにデータをインポートし続けてください。すでにデータをインポートしている場合でも、メトリクス属性を作成して、レコメンデーションの影響の測定を開始できます。ただし、Amazon Personalize は、作成前にインポートしたデータについてはレポートしません。

メトリクス属性を含むレポートを生成するためのガイドラインと要件は次のとおりです。
+ CloudWatch にデータにアクセスしてデータを格納するには、Amazon Personalize のアクセス許可を付与する必要があります。IAM ポリシーの例については、「[Amazon Personalize に対する CloudWatch へのアクセスの付与](#metric-attribution-cw-permissions)」を参照してください。
+ Amazon S3 にメトリクスを発行するには、Amazon Personalize にバケットへの書き込み権限を付与します。また、メトリクス属性にバケットパスを指定する必要があります。IAM ポリシーの例については、「[Amazon Personalize に対する、Amazon S3 リソースへのアクセス許可の付与](#metric-attribution-s3-permissions)」を参照してください。
+  CloudWatch にメトリクスを発行するには、レコードが 14 日未満である必要があります。データが古い場合、これらのレコードは計算やレポートに含まれません。
+  重複するイベント (すべての属性が完全に一致するイベント) をインポートすると、メトリクスが不正確になるなど、予期しない動作が発生する可能性があります。インポートする前にバルクデータから重複レコードを削除し、`PutEvents` 操作で重複するイベントをインポートしないようにすることをお勧めします。
+ アイテムインタラクションデータセットには `EVENT_TYPE` 列が必要です。
+ Action インタラクションデータセット内のデータのメトリックレポートを作成することはできません。
+ データセットグループごとに最大 1 つのメトリクス属性を作成できます。各メトリクス属性には最大 10 個のメトリクスを含めることができます。

ソースを比較するには、各インタラクションイベントに `recommendationId` または `eventAttributionSource` が含まれている必要があります。固有のイベント属性ソースは最大 100 個まで提供できます。`PutEvents` のコードの例については、「[イベントメトリクスと属性レポート](event-metrics.md)」を参照してください。
+  `recommendationId` を指定すると、Amazon Personalize はソースキャンペーンまたはレコメンダーを自動的に判断し、レポートの EVENT\$1ATTRIBUTION\$1SOURCE 列で識別します。
+  両方の属性を指定した場合、Amazon Personalize は `eventAttributionSource` のみを使用します。
+  ソースを指定しない場合、Amazon Personalizeはレポートでソース `SOURCE_NAME_UNDEFINED` にラベルを付けます。

**Topics**
+ [Amazon Personalize に対する CloudWatch へのアクセスの付与](#metric-attribution-cw-permissions)
+ [Amazon Personalize に対する、Amazon S3 リソースへのアクセス許可の付与](#metric-attribution-s3-permissions)

## Amazon Personalize に対する CloudWatch へのアクセスの付与
<a name="metric-attribution-cw-permissions"></a>

**重要**  
アクセス許可を付与すると、Amazon Personalize は少量のデータを CloudWatch に配置して検証します。これには 0.30 USD 未満の 1 回限りのコストが発生します。CloudWatch の料金の詳細については、「[Amazon CloudWatch の料金](https://aws.amazon.com/cloudwatch/pricing/)」を参照してください。

Amazon Personalize に CloudWatch へのアクセスを許可するには、新しい AWS Identity and Access Management (IAM) ポリシーを Amazon Personalize サービスロールにアタッチし、ロールに CloudWatch の`PutMetricData`アクションを使用するアクセス許可を付与します。以下のポリシーの例は、`PutMetricData` のアクセス許可を付与します。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "cloudwatch:PutMetricData"
      ],
      "Resource": "*"
    }
  ]
}
```

------

## Amazon Personalize に対する、Amazon S3 リソースへのアクセス許可の付与
<a name="metric-attribution-s3-permissions"></a>

 Amazon Personalize で Amazon S3 バケットへのアクセス許可を付与するには
+ Amazon Personalize サービスロールに IAM ポリシーをアタッチして、バケットの `PutObject` アクションを使用するアクセス許可をロールに付与します。

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Id": "PersonalizeS3BucketAccessPolicy",
      "Statement": [
          {
              "Sid": "PersonalizeS3BucketAccessPolicy",
              "Effect": "Allow",
              "Action": [
                  "s3:PutObject"
              ],
              "Resource": [
                  "arn:aws:s3:::amzn-s3-demo-bucket",
                  "arn:aws:s3:::amzn-s3-demo-bucket/*"
              ]
          }
      ]
  }
  ```

------
+ `PutObject` アクションを使用するための許可を、Amazon Personalize プリンシパルに付与するバケットポリシーを出力の Amazon S3 バケットにアタッチします。

   AWS Key Management Service (AWS KMS) を暗号化に使用する場合は、Amazon Personalize と Amazon Personalize IAM サービスロールにキーを使用するアクセス許可を付与する必要があります。詳細については、「[AWS KMS キーを使用するためのアクセス許可を Amazon Personalize に付与する](granting-personalize-key-access.md)」を参照してください。

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Id": "PersonalizeS3BucketAccessPolicy",
      "Statement": [
          {
              "Sid": "PersonalizeS3BucketAccessPolicy",
              "Effect": "Allow",
              "Principal": {
                  "Service": "personalize.amazonaws.com"
              },
              "Action": [
                  "s3:PutObject"
              ],
              "Resource": [
                  "arn:aws:s3:::amzn-s3-demo-bucket",
                  "arn:aws:s3:::amzn-s3-demo-bucket/*"
              ]
          }
      ]
  }
  ```

------

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

------

# Amazon Personalize メトリクス属性の更新
<a name="updating-metric-attribution"></a>

 メトリクス属性を更新すると、メトリクスを追加および削除したり、出力設定を変更したりできます。Amazon Personalize コンソール AWS Command Line Interface、または AWS SDKS を使用してメトリクス属性を更新できます。

**Topics**
+ [メトリクス属性の更新 (コンソール)](#updating-metric-attribution-console)
+ [メトリクス属性の更新 (AWS CLI)](#updating-metric-attribution-cli)
+ [メトリクス属性の更新 (AWS SDK)](#updating-metric-attribution-sdk)

## メトリクス属性の更新 (コンソール)
<a name="updating-metric-attribution-console"></a>

Amazon Personalize コンソールでメトリクス属性を更新するには、**[メトリクス属性]**ページで変更を行います。

**メトリクス属性を更新するには**

1. [https://console.aws.amazon.com/personalize/home](https://console.aws.amazon.com/personalize/home) で Amazon Personalize コンソールを開き、アカウントにサインインします。

1. データセットグループを選択します。

1. ナビゲーションペインで **[メトリクス]** を選択します。

1. 一番下のセクションで、**[メトリクス属性]** タブまたは **[メトリクス属性設定]** タブを選択し、変更を開始します。
   + メトリクスを追加または削除するには、**[メトリクス属性]** タブを選択し、**[属性の編集]** を選択します。**[メトリクス属性の編集]** ページで変更を加え、**[更新]** を選択して変更を保存します。
   + Amazon S3 出力バケットまたは IAM サービスロールを変更するには、**[メトリクス属性設定の編集**] タブを選択し、**[属性設定の編集]** ページで変更を行います。**[更新]** を選択して変更を保存します。

## メトリクス属性の更新 (AWS CLI)
<a name="updating-metric-attribution-cli"></a>

メトリクス属性を作成したら、 AWS Command Line Interface (AWS CLI) を使用してメトリクスを追加および削除し、出力設定を変更できます。次のコードは、`update-metric-attribution` コマンドを使用してメトリクスを削除する方法を示しています。

```
aws personalize update-metric-attribution \
--metric-attribution-arn metric attribution arn \
--remove-metrics metricName1 metricName2
```

 次のコードは、メトリクスを追加して新しい出力の設定を指定する方法を示しています。

```
aws personalize update-metric-attribution \
--metric-attribution-arn metric attribution arn \
--metrics-output-config "{\"roleArn\": \"new role ARN\", \"s3DataDestination\":{\"kmsKeyArn\":\"kms key ARN\",\"path\":\"s3://amzn-s3-demo-bucket2/new-folder-name/\"}}" \
--add-metrics "[{
  \"eventType\": \"event type\",
  \"expression\": \"SUM(DatasetType.COLUMN_NAME)\",
  \"metricName\": \"metric name\"
}]"
```

 成功した場合、Amazon Personalize は更新したメトリクス属性の ARN を返します。すべてのパラメータの詳細なリストについては、「[UpdateMetricAttribution](API_UpdateMetricAttribution.md)」を参照してください。

## メトリクス属性の更新 (AWS SDK)
<a name="updating-metric-attribution-sdk"></a>

メトリクス属性を作成した後、メトリクスを追加または削除したり、出力の設定を変更したりできます。次のコードは、メトリクス属性からメトリクスを削除する方法を示しています。

------
#### [ SDK for Python (Boto3) ]

```
import boto3
            
personalize = boto3.client('personalize')

metricsToRemove = ["metricName1", "metricName2"]
            
response = personalize.update_metric_attribution(
  metricAttributionArn = "metric attribution ARN",
  removeMetrics = metricsToRemove
)
```

------
#### [ SDK for Java 2.x ]

```
public static void removeMetrics(PersonalizeClient client,
                                 String metricAttributionArn,
                                 String metric1Name,
                                 String metric2Name) {

    ArrayList<String> metricsToRemove = new ArrayList<>(Arrays.asList(metric1Name, metric2Name));
    
    try {
    
        UpdateMetricAttributionRequest request = UpdateMetricAttributionRequest.builder()
                .metricAttributionArn(metricAttributionArn)
                .removeMetrics(metricsToRemove)
                .build();
                
        UpdateMetricAttributionResponse response = client.updateMetricAttribution(request);
        System.out.println(response);
        
    } catch (PersonalizeException e) {
        System.out.println(e.awsErrorDetails().errorMessage());
    }
}
```

------
#### [ SDK for JavaScript v3 ]

```
// Get service clients and commands using ES6 syntax.
import {UpdateMetricAttributionCommand, PersonalizeClient } from
  "@aws-sdk/client-personalize";

// create personalizeClient
const personalizeClient = new PersonalizeClient({
  region: "REGION"
});

// set the update request param
export const updateMetricAttributionParam = {
  metricAttributionArn: "METRIC_ATTRIBUTION_ARN",    /* required */
  removeMetrics: ["METRIC_NAME_1", "METRIC_NAME_2"]    /* specify list of names of metrics to delete */
};
export const run = async () => {
  try {
    const response = await personalizeClient.send(
      new UpdateMetricAttributionCommand(updateMetricAttributionParam)
    );
    console.log("Success", response);
    return response; // For unit tests.
  } catch (err) {
    console.log("Error", err);
  }
};
run();
```

------

 次のコードは、メトリクスを追加して新しい出力の設定を指定する方法を示しています。

------
#### [ SDK for Python (Boto3) ]

```
import boto3

personalize = boto3.client('personalize')

newMetrics = [{ 
      "eventType": "event type",
      "expression": "SUM(DatasetType.COLUMN_NAME)",
      "metricName": "metric name"
}]

newOutputConfig = {
  "roleArn": "Amazon Personalize service role ARN", 
  "s3DataDestination": {
    "kmsKeyArn": "key ARN", 
    "path": "s3://amzn-s3-demo-bucket/<folder>"
  }
}

response = personalize.update_metric_attribution(
  metricAttributionArn = "metric attribution arn",
  metricsOutputConfig = newOutputConfig,
  addMetrics = newMetrics
)
```

------
#### [ SDK for Java 2.x ]

```
public static void addMetricsAndUpdateOutputConfig(PersonalizeClient personalizeClient,
                                                String metricAttributionArn,
                                                String newMetric1EventType,
                                                String newMetric1Expression,
                                                String newMetric1Name,
                                                String newMetric2EventType,
                                                String newMetric2Expression,
                                                String newMetric2Name,
                                                String roleArn,
                                                String s3Path,
                                                String kmsKeyArn) {
    try {
    
        MetricAttribute newAttribute = MetricAttribute.builder()
                .eventType(newMetric1EventType)
                .expression(newMetric1Expression)
                .metricName(newMetric1Name)
                .build();
                
        MetricAttribute newAttribute2 = MetricAttribute.builder()
                .eventType(newMetric2EventType)
                .expression(newMetric2Expression)
                .metricName(newMetric2Name)
                .build();

        ArrayList<MetricAttribute> newAttributes = new ArrayList<>(Arrays.asList(newAttribute, newAttribute2));

        S3DataConfig newDataDestination = S3DataConfig.builder()
                .kmsKeyArn(kmsKeyArn)
                .path(s3Path)
                .build();

        MetricAttributionOutput newOutputConfig = MetricAttributionOutput.builder()
                .roleArn(roleArn)
                .s3DataDestination(newDataDestination)
                .build();
                
        UpdateMetricAttributionRequest request = UpdateMetricAttributionRequest.builder()
                .metricAttributionArn(metricAttributionArn)
                .metricsOutputConfig(newOutputConfig)
                .addMetrics(newAttributes)
                .build();
                
        UpdateMetricAttributionResponse response = personalizeClient.updateMetricAttribution(request);
        System.out.println("New metrics added!");
        System.out.println(response);
        
    } catch (PersonalizeException e) {
        System.out.println(e.awsErrorDetails().errorMessage());
    }
}
```

------
#### [ SDK for JavaScript v3 ]

```
// Get service clients and commands using ES6 syntax.
import {UpdateMetricAttributionCommand, PersonalizeClient } from
  "@aws-sdk/client-personalize";

// create personalizeClient
const personalizeClient = new PersonalizeClient({
  region: "REGION"
});

export const updateMetricAttributionParam = {
  metricAttributionArn: "METRIC_ATTRIBUTION_ARN",
  addMetrics: [
    {
      eventType: "EVENT_TYPE",                      /* required for each metric */
      expression: "SUM(DatasetType.COLUMN_NAME)",   /* required for each metric */
      metricName: "METRIC_NAME",                    /* required for each metric */
    }
  ],
  metricsOutputConfig: {
    roleArn: "ROLE_ARN",                      /* required */
    s3DataDestination: {                
      kmsKeyArn: "KEY_ARN",                                                      /* optional */
      path: "s3://amzn-s3-demo-bucket/<folderName>/",    /* optional */
    },
  }
};

export const run = async () => {
  try {
    const response = await personalizeClient.send(
      new UpdateMetricAttributionCommand(updateMetricAttributionParam)
    );
    console.log("Success", response);
    return response; // For unit tests.
  } catch (err) {
    console.log("Error", err);
  }
};
run();
```

------

成功した場合、Amazon Personalize は更新したメトリクス属性の ARN を返します。すべてのパラメータの詳細なリストについては、「[UpdateMetricAttribution](API_UpdateMetricAttribution.md)」を参照してください。

# Amazon Personalize メトリクス属性の削除
<a name="deleting-metric-attribution"></a>

レポートが不要になった場合は、メトリクス属性を削除できます。メトリクス属性を削除すると、そのメトリクスと出力設定もすべて削除されます。

 メトリクス属性を削除すると、Amazon Personalize は PutEvents に関連するレポートと増分バルクデータを CloudWatch に自動的に送信しなくなります。すでに CloudWatch に送信されたデータ、または Amazon S3 に発行されたデータは影響を受けません。Amazon Personalize コンソール、または AWS SDKS を使用して AWS Command Line Interface、メトリクス属性を削除できます。

**Topics**
+ [メトリクス属性の削除 (コンソール)](#deleting-metric-attribution-console)
+ [メトリクス属性の削除 (AWS CLI)](#deleting-metric-attribution-cli)
+ [メトリクス属性の削除 (AWS SDKs)](#deleting-metric-attribution-sdk)

## メトリクス属性の削除 (コンソール)
<a name="deleting-metric-attribution-console"></a>

メトリクス属性の概要ページでメトリクス属性を削除します。

**メトリクス属性を削除するには**

1. [https://console.aws.amazon.com/personalize/home](https://console.aws.amazon.com/personalize/home) で Amazon Personalize コンソールを開き、アカウントにサインインします。

1. データセットグループを選択します。

1. ナビゲーションペインで **[メトリクス]** を選択します。

1. **[削除]** を選択し、削除を確定します。

## メトリクス属性の削除 (AWS CLI)
<a name="deleting-metric-attribution-cli"></a>

を使用してメトリクス属性を削除するには AWS CLI、次のように `delete-metric-attribution` コマンドを使用します。

```
aws personalize delete-metric-attribution --metric-attribution-arn metric attribution ARN
```

## メトリクス属性の削除 (AWS SDKs)
<a name="deleting-metric-attribution-sdk"></a>

 次のコードは、SDK for Python (Boto3) を使用してメトリクス属性を削除する方法を示しています。

------
#### [ SDK for Python (Boto3) ]

```
import boto3
            
personalize = boto3.client('personalize')

response = personalize.delete_metric_attribution(
  metricAttributionArn = 'metric attribution ARN'
)
```

------
#### [ SDK for Java 2.x ]

```
public static void deleteMetricAttribution(PersonalizeClient client, String metricAttributionArn) {

    try {
    
        DeleteMetricAttributionRequest request = DeleteMetricAttributionRequest.builder()
                .metricAttributionArn(metricAttributionArn)
                .build();
                
        DeleteMetricAttributionResponse response = client.deleteMetricAttribution(request);
        if (response.sdkHttpResponse().statusCode() == 200) {
            System.out.println("Metric attribution deleted!");
        }
        
    } catch (PersonalizeException e) {
        System.out.println(e.awsErrorDetails().errorMessage());
    }
}
```

------
#### [ SDK for JavaScript v3 ]

```
// Get service clients and commands using ES6 syntax.
import { DeleteMetricAttributionCommand, PersonalizeClient } from
  "@aws-sdk/client-personalize";

// create personalizeClient
const personalizeClient = new PersonalizeClient({
  region: "REGION"
});

export const deleteMetricAttributionParam = {
  metricAttributionArn: "METRIC_ATTRIBUTION_ARN",
};
export const run = async () => {
  try {
    const response = await personalizeClient.send(
      new DeleteMetricAttributionCommand(deleteMetricAttributionParam)
    );
    console.log("Success", response);
    return response; // For unit tests.
  } catch (err) {
    console.log("Error", err);
  }
};
run();
```

------

# CloudWatch でのメトリクスデータのグラフの表示
<a name="metric-attribution-results-cloudwatch"></a>

**重要**  
 メトリクス属性を作成してイベントを記録したり、増分バルクデータをインポートしたりすると、メトリクスごとに毎月いくらかの CloudWatch コストが発生します。CloudWatch の料金については、[[Amazon CloudWatch の料金]](https://aws.amazon.com/cloudwatch/pricing/) ページをご覧ください。CloudWatch [へのメトリクスの送信を停止するには、メトリクス属性を削除します](deleting-metric-attribution.md)。

 メトリクス属性を作成すると、Amazon Personalize はメトリクスを [PutEvents](API_UBS_PutEvents.md) および 増分バルクデータから Amazon CloudWatch に自動的に送信します。CloudWatch コンソールを使用してメトリクスを選択し、そのメトリクスデータのグラフを作成できます。これらのグラフは、さまざまなレコメンダーやキャンペーンのパフォーマンスと影響を視覚的に検査して比較するのに役立ちます。

ソースを比較するには、各インタラクションイベントに `recommendationId` または `eventAttributionSource` が含まれている必要があります。このデータをイベントに含める方法を示すコードサンプルについては、「[イベントメトリクスと属性レポート](event-metrics.md)」を参照してください。

CloudWatch でメトリクスを表示するには、[メトリクスのグラフ化](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/graph_a_metric.html)にある手順を実行します。さまざまな詳細レベルでデータを表示できます。**グラフ化できる最小期間は** 15 分です。過去 2 週間の Amazon Personalize データは CloudWatch で表示できます。古いデータは無視されます。検索語には、メトリクス属性を作成したときにメトリクスに付けた名前を指定します。

次に、メトリクスが CloudWatch でどのように表示されるかの例を示します。このメトリクスには、2 人の異なるレコメンダーの 15 分ごとのクリックスルー率が表示されます。

![\[2 人の異なるレコメンダーの 15 分ごとのクリックスルー率のグラフを示します。\]](http://docs.aws.amazon.com/ja_jp/personalize/latest/dg/images/metric-attribution-cw-example.png)


# Amazon S3 へのメトリクス属性レポートの発行
<a name="metric-attribution-results-s3"></a>

すべてのバルクデータについて、メトリクス属性の作成時に Amazon S3 バケットを指定すると、インタラクションデータのデータセットインポートジョブを作成するたびに、Amazon S3 バケットにメトリクスレポートを発行することを選択できます。

Amazon S3 にメトリクスを発行するには、メトリクス属性で Amazon S3 バケットへのパスを指定します。次に、データセットのインポートジョブを作成する際に、レポートを Amazon S3 に発行します。ジョブが完了すると、Amazon S3 バケット内のメトリクスを見つけることができます。メトリクスを発行するたびに、Amazon Personalize は Amazon S3 バケットに新しいファイルを作成します。ファイル名には、次のようなインポート方法と日付が含まれます。

`AggregatedAttributionMetrics - ImportMethod - Timestamp.csv`

次に、メトリクスレポートの CSV ファイルの最初の数行がどのように表示されるかの例を示します。この例のメトリクスは、2 人の異なるレコメンダーによる 15 分間隔での合計クリック数を報告しています。各レコメンデーションは、EVENT\$1ATTRIBUTION\$1SOURCE 列の Amazon リソースネーム (ARN) によって特定されます。

```
METRIC_NAME,EVENT_TYPE,VALUE,MATH_FUNCTION,EVENT_ATTRIBUTION_SOURCE,TIMESTAMP
COUNTWATCHES,WATCH,12.0,samplecount,arn:aws:personalize:us-west-2:acctNum:recommender/recommender1Name,1666925124
COUNTWATCHES,WATCH,112.0,samplecount,arn:aws:personalize:us-west-2:acctNum:recommender/recommender2Name,1666924224
COUNTWATCHES,WATCH,10.0,samplecount,arn:aws:personalize:us-west-2:acctNum:recommender/recommender1Name,1666924224
COUNTWATCHES,WATCH,254.0,samplecount,arn:aws:personalize:us-west-2:acctNum:recommender/recommender2Name,1666922424
COUNTWATCHES,WATCH,112.0,samplecount,arn:aws:personalize:us-west-2:acctNum:recommender/recommender1Name,1666922424
COUNTWATCHES,WATCH,100.0,samplecount,arn:aws:personalize:us-west-2:acctNum:recommender/recommender2Name,1666922424
......
.....
```

## バルクデータのメトリクスを Amazon S3 (コンソール) に発行する
<a name="metric-attribution-results-s3-console"></a>

Amazon Personalize コンソールで Amazon S3 バケットにメトリクスを発行するには、データセットのインポートジョブを作成し、**[イベントメトリクスを S3 に公開する]** で **[このインポートジョブのメトリクスを公開]** を選択します。

 手順については、「[データセットのインポートジョブの作成 (コンソール)](bulk-data-import-step.md#bulk-data-import-console)」を参照してください。

## バルクデータのメトリクスを Amazon S3 に発行する (AWS CLI)
<a name="metric-attributinon-resuslts-s3-cli"></a>

 AWS Command Line Interface (AWS CLI) を使用して Amazon S3 バケットにメトリクスを発行するには、次のコードを使用してデータセットのインポートジョブを作成し、 `publishAttributionMetricsToS3`フラグを指定します。特定のジョブのメトリクスを発行しない場合は、フラグを省略します。各パラメータについては、「[CreateDatasetImportJob](API_CreateDatasetImportJob.md)」を参照してください。

```
aws personalize create-dataset-import-job \
--job-name dataset import job name \
--dataset-arn dataset arn \
--data-source dataLocation=s3://amzn-s3-demo-bucket/filename \
--role-arn roleArn \
--import-mode INCREMENTAL \
--publish-attribution-metrics-to-s3
```

## Amazon S3 (AWS SDKs) へのバルクデータのメトリクスの発行
<a name="metric-attributinon-resuslts-s3-sdk"></a>

 AWS SDKs を使用して Amazon S3 バケットにメトリクスを発行するには、データセットのインポートジョブを作成し、true `publishAttributionMetricsToS3` に設定します。各パラメータについては、「[CreateDatasetImportJob](API_CreateDatasetImportJob.md)」を参照してください。

------
#### [ SDK for Python (Boto3) ]

```
import boto3

personalize = boto3.client('personalize')

response = personalize.create_dataset_import_job(
    jobName = 'YourImportJob',
    datasetArn = 'dataset_arn',
    dataSource = {'dataLocation':'s3://amzn-s3-demo-bucket/file.csv'},
    roleArn = 'role_arn',
    importMode = 'INCREMENTAL',
    publishAttributionMetricsToS3 = True
)

dsij_arn = response['datasetImportJobArn']

print ('Dataset Import Job arn: ' + dsij_arn)

description = personalize.describe_dataset_import_job(
    datasetImportJobArn = dsij_arn)['datasetImportJob']

print('Name: ' + description['jobName'])
print('ARN: ' + description['datasetImportJobArn'])
print('Status: ' + description['status'])
```

------
#### [ SDK for Java 2.x ]

```
public static String createPersonalizeDatasetImportJob(PersonalizeClient personalizeClient,
                                                      String jobName,
                                                      String datasetArn,
                                                      String s3BucketPath,
                                                      String roleArn,
                                                      ImportMode importMode,
                                                      boolean publishToS3) {

  long waitInMilliseconds = 60 * 1000;
  String status;
  String datasetImportJobArn;
  
  try {
      DataSource importDataSource = DataSource.builder()
              .dataLocation(s3BucketPath)
              .build();
      
      CreateDatasetImportJobRequest createDatasetImportJobRequest = CreateDatasetImportJobRequest.builder()
              .datasetArn(datasetArn)
              .dataSource(importDataSource)
              .jobName(jobName)
              .roleArn(roleArn)
              .importMode(importMode)
              .publishAttributionMetricsToS3(publishToS3)
              .build();
  
      datasetImportJobArn = personalizeClient.createDatasetImportJob(createDatasetImportJobRequest)
              .datasetImportJobArn();
      
      DescribeDatasetImportJobRequest describeDatasetImportJobRequest = DescribeDatasetImportJobRequest.builder()
              .datasetImportJobArn(datasetImportJobArn)
              .build();
  
      long maxTime = Instant.now().getEpochSecond() + 3 * 60 * 60;
  
      while (Instant.now().getEpochSecond() < maxTime) {
  
          DatasetImportJob datasetImportJob = personalizeClient
                  .describeDatasetImportJob(describeDatasetImportJobRequest)
                  .datasetImportJob();
  
          status = datasetImportJob.status();
          System.out.println("Dataset import job status: " + status);
  
          if (status.equals("ACTIVE") || status.equals("CREATE FAILED")) {
              break;
          }
          try {
              Thread.sleep(waitInMilliseconds);
          } catch (InterruptedException e) {
              System.out.println(e.getMessage());
          }
      }
      return datasetImportJobArn;
  
  } catch (PersonalizeException e) {
      System.out.println(e.awsErrorDetails().errorMessage());
  }
  return "";
}
```

------
#### [ SDK for JavaScript v3 ]

```
// Get service clients and commands using ES6 syntax.
import { CreateDatasetImportJobCommand, PersonalizeClient } from
  "@aws-sdk/client-personalize";

// create personalizeClient
const personalizeClient = new PersonalizeClient({
  region: "REGION"
});

// Set the dataset import job parameters.
export const datasetImportJobParam = {
  datasetArn: 'DATASET_ARN', /* required */
  dataSource: {  
    dataLocation: 's3://amzn-s3-demo-bucket/<folderName>/<CSVfilename>.csv'  /* required */
  },
  jobName: 'NAME',                        /* required */
  roleArn: 'ROLE_ARN',                    /* required */
  importMode: "FULL",                     /* optional, default is FULL */
  publishAttributionMetricsToS3: true     /* set to true to publish metrics to Amazon S3 bucket */
};

export const run = async () => {
  try {
    const response = await personalizeClient.send(new CreateDatasetImportJobCommand(datasetImportJobParam));
    console.log("Success", response);
    return response; // For unit tests.
  } catch (err) {
    console.log("Error", err);
  }
};
run();
```

------