

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 測量 Amazon Personalize 建議的影響
<a name="measuring-recommendation-impact"></a>

當您的客戶與建議互動時，您可以衡量 Amazon Personalize 建議如何協助您達成目標。您可以識別哪些行銷活動和推薦者對關鍵績效指標的影響最大。例如，您可以識別哪些資源產生最多觀看分鐘、最多點選次數或最多購買次數。您也可以將 Amazon Personalize 建議的效能與第三方服務產生的建議進行比較。

 當您知道哪個行銷活動或推薦者產生了最大的影響時，您可以採取動作來進一步受益於其建議。例如，您可能會提高網站上的建議顯著性，以增加參與度。或者，您可能會在行銷活動中提供建議，例如個人化電子郵件或目標性廣告。

 如果您識別的資源沒有預期的影響，您可以採取動作來改善建議。例如，您可以使用 Amazon Personalize 主控台來分析用來建立資源的訓練資料、進行建議的資料改善，然後再次匯入資料。如需分析資料的詳細資訊，請參閱 [分析 Amazon Personalize 資料集中的資料品質和數量](analyzing-data.md)。

以下可協助您衡量建議的影響：
+ [指標屬性](metric-attributions.md)：Amazon Personalize 指標屬性會根據您指定的指標以及您匯入的項目互動和項目資料來建立報告。例如，使用者監看的電影總長度，或點選事件總數。建立指標屬性後，Amazon Personalize 會自動從 [PutEvents](API_UBS_PutEvents.md) API 操作將事件指標和增量大量資料傳送至 Amazon CloudWatch。對於大量資料，您可以選擇將報告發佈至 Amazon S3 儲存貯體。
+  [A/B 測試](ab-testing-recommendations.md)：使用 Amazon Personalize 建議執行 A/B 測試涉及顯示不同使用者群組不同類型的建議並比較結果。您可以使用 A/B 測試來協助比較和評估不同的建議策略、評估模型效能，以及測量建議的影響。

**Topics**
+ [使用指標屬性測量建議影響](metric-attributions.md)
+ [使用 A/B 測試測量建議影響](ab-testing-recommendations.md)

# 使用指標屬性測量建議影響
<a name="metric-attributions"></a>

 若要測量項目建議的影響，您可以建立指標屬性。*指標屬性*會根據您匯入的項目互動和項目資料，以及您指定的指標來建立報告。例如，使用者監看的電影總長度，或點選事件總數。Amazon Personalize 會在 15 分鐘的時段內彙總計算。對於串流互動資料和增量大量資料，Amazon Personalize 會自動將指標報告傳送至 Amazon CloudWatch。對於大量資料，您可以選擇將報告發佈至 Amazon S3 儲存貯體。

 對於您匯入的每個互動，請包含來源資料來比較不同的行銷活動、推薦者和第三方。您可以包含顯示使用者或事件來源之建議的建議 ID，例如第三方。

 例如，您可能有一個影片串流應用程式，顯示來自兩個不同 Amazon Personalize 推薦者的電影建議。如果您想要查看哪個推薦者產生最多的監看事件，您可以建立追蹤監看事件總數的指標屬性。然後，您可以在使用者與建議互動時記錄監看事件，並在每個事件`recommendationId`中包含 。Amazon Personalize 使用 `recommendationId`來識別每個建議者。當您記錄事件時，您可以檢視 CloudWatch 中兩個建議程式每 15 分鐘彙總的觀看事件總計。如需示範如何為事件包含 `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 不會報告您在建立之前匯入的資料。

以下是使用指標屬性產生報告的指導方針和要求：
+ 您必須授予 Amazon Personalize 存取並將資料放入 CloudWatch 的許可。如需政策範例，請參閱[授予 Amazon Personalize 對 CloudWatch 的存取權](#metric-attribution-cw-permissions)。
+ 若要將指標發佈至 Amazon S3，請授予 Amazon Personalize 寫入儲存貯體的許可。您還必須在指標屬性中提供儲存貯體路徑。如需政策範例，請參閱[讓 Amazon Personalize 存取您的 Amazon S3 儲存貯體](#metric-attribution-s3-permissions)。
+  若要將指標發佈至 CloudWatch，記錄必須少於 14 天。如果您的資料較舊，這些記錄將不會包含在計算或報告中。
+  匯入重複事件 （完全符合所有屬性的事件） 可能會導致非預期的行為，包括不正確的指標。我們建議您在匯入之前從任何大量資料中移除重複的記錄，並避免使用 `PutEvents`操作匯入重複的事件。
+ 您的項目互動資料集必須具有 `EVENT_TYPE`欄。
+ 您無法為動作互動資料集中的資料建立指標報告。
+ 每個資料集群組最多可以建立一個指標屬性。每個指標屬性最多可以有 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 的一次性成本。如需 CloudWatch 定價的詳細資訊，請參閱 [Amazon CloudWatch 定價](https://aws.amazon.com/cloudwatch/pricing/)頁面。

若要授予 Amazon Personalize 對 CloudWatch 的存取權，請將新的 AWS Identity and Access Management (IAM) 政策連接至您的 Amazon Personalize 服務角色，以授予角色使用 `PutMetricData` Action for CloudWatch 的許可。下列政策範例會授予`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 儲存貯體：
+ 將 IAM 政策連接至您的 Amazon Personalize 服務角色，授予該角色在您的儲存貯體上使用 `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/*"
              ]
          }
      ]
  }
  ```

------
+ 將儲存貯體政策連接至您的輸出 Amazon S3 儲存貯體，以授予 Amazon Personalize 原則使用 `PutObject` 動作的許可。

   如果您使用 AWS Key Management Service (AWS KMS) 進行加密，則必須授予 Amazon Personalize 和 Amazon Personalize IAM 服務角色許可，才能使用您的金鑰。如需詳細資訊，請參閱[授予 Amazon Personalize 許可以使用您的 AWS KMS 金鑰](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()`。

 例如，您可能有一個線上影片串流應用程式，並想要追蹤兩個指標：建議的點擊率，以及觀看電影的總長度，其中項目資料集中的每個影片都包含`LENGTH`屬性。您可以建立指標屬性，並新增兩個指標，每個指標都有 事件類型和 函數。第一個可能適用於具有 `SAMPLECOUNT()`函數`Click`的事件類型。第二個可能適用於具有 `SUM(Items.LENGTH)`函數`Watch`的事件類型。

您只能將`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 for **Amazon S3 資料輸出路徑**，請輸入目的地 Amazon S3 儲存貯體。這可讓 選項在您每次建立資料集匯入任務時發佈指標。使用下列語法：

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

1. 如果您使用 AWS KMS 進行加密，請在 **KMS 金鑰 ARN** 中輸入金鑰 AWS KMS 的 Amazon Resource Name (ARN)。您必須授予 Amazon Personalize 和 Amazon Personalize IAM 服務角色許可，才能使用您的金鑰。如需詳細資訊，請參閱[授予 Amazon Personalize 許可以使用您的 AWS KMS 金鑰](granting-personalize-key-access.md)。

1. 在 **IAM 角色**中，選擇建立新的服務角色或使用現有的服務角色。您選擇的角色必須具有 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. 在**檢閱和建立頁面上**，檢閱新指標屬性的詳細資訊。若要進行變更，請選擇 **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。您指定的角色必須具有 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>

 下列程式碼說明如何使用適用於 Python 的 SDK (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 服務角色，請選擇**編輯指標屬性組態**索引標籤，然後在**編輯屬性組態**頁面上進行變更。選擇 **Update (更新)** 以儲存您的設定。

## 更新指標屬性 (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 Command Line Interface或 AWS SDKS 刪除指標屬性。

**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>

 下列程式碼說明如何使用適用於 Python 的 SDK (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 分鐘。您可以在 CloudWatch 中檢視過去 2 週內的 Amazon Personalize 資料 – 會忽略較舊的資料。針對搜尋詞彙，指定您在建立指標屬性時給出指標的名稱。

以下是指標如何在 CloudWatch 中顯示的範例。指標顯示兩個不同建議程式每 15 分鐘的點擊率。

![\[針對兩個不同的建議者，顯示每 15 分鐘的點擊率圖表。\]](http://docs.aws.amazon.com/zh_tw/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 檔案的前幾列可能如何出現的範例。此範例中的指標會報告在 15 分鐘的間隔內，來自兩個不同建議程式的點選總數。在 EVENT\$1ATTRIBUTION\$1SOURCE 欄中，透過其 Amazon Resource Name (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 中為此匯入任務**選擇發佈指標。 ** 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>

若要使用 SDK 將指標發佈至 Amazon S3 儲存貯體，請建立資料集匯入任務並`publishAttributionMetricsToS3`設為 true。 AWS SDKs 如需每個參數的資訊，請參閱 [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();
```

------

# 使用 A/B 測試測量建議影響
<a name="ab-testing-recommendations"></a>

 執行 A/B 測試包含執行具有多個變化的實驗並比較結果。使用 Amazon Personalize 建議執行 A/B 測試需要顯示不同使用者群組不同類型的建議，然後比較結果。您可以使用 A/B 測試來協助比較和評估不同的建議策略，並測量建議的影響。

例如，您可以使用 A/B 測試來查看 Amazon Personalize 建議是否會提高點擊率。若要測試此案例，您可能會顯示一組非個人化使用者建議，例如特色產品。此外，您可能會顯示 Amazon Personalize 產生的另一個群組個人化建議。當您的客戶與項目互動時，您可以記錄結果，並查看哪些策略會產生最高的點擊率。

使用 Amazon Personalize 建議執行 A/B 測試的工作流程如下：

1. **規劃您的實驗** – 定義可量化的假設、識別業務目標、定義實驗變化，以及判斷您的實驗時間範圍。

1. **分割您的使用者** – 將使用者分割為兩個或多個群組，其中包含一個控制群組和一或多個實驗群組。

1. **執行實驗** – 向實驗群組中的使用者顯示修改後的建議。顯示控制群組建議中的使用者，沒有變更。記錄他們的互動與建議，以追蹤結果。

1. **評估結果** – 分析實驗結果，以判斷修改是否對實驗群組造成統計上顯著的差異。

**Topics**
+ [A/B 測試最佳實務](#ab-testing-best-practices)

## A/B 測試最佳實務
<a name="ab-testing-best-practices"></a>

使用下列最佳實務來協助您設計和維護 Amazon Personalize 建議的 A/B 測試。
+ 識別可量化的業務目標。確認您要比較的不同建議都與此業務目標相符，而且與不同或無法量化的目標無關。
+ 定義符合您業務目標的可量化假設。例如，您可能會預測，自有自訂內容的提升將導致這些項目的點選次數增加 20%。您的假設會決定您為實驗群組所做的修改。
+ 定義與您的假設相關的關鍵績效指標 KPIs)。您可以使用 KPIs 來測量實驗的結果。這些可能如下：
  + 點擊率
  + 監看時間
  + 總價
+ 根據您的假設，確認實驗中的使用者總數夠大，足以達到統計上顯著的結果。
+ 在開始實驗之前，定義您的流量分割策略。避免在實驗執行時變更流量分割。
+ 為您的實驗群組和控制群組保持應用程式或網站的使用者體驗相同，但與實驗相關的修改除外 （例如，模型）。使用者體驗的變化，例如 UI 或延遲，可能會導致誤導的結果。
+ 控制外部因素，例如假日、持續行銷活動和瀏覽器限制。這些外部因素可能會導致誤導的結果。
+ 除非與您的假設或業務需求直接相關，否則請避免變更 Amazon Personalize 建議。套用篩選條件或手動變更順序等變更可能會導致誤導的結果。
+ 當您評估結果時，請確定結果在得出結論之前具有統計顯著性。業界標準是 5% 的顯著水準。