

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

# 使用指標評估 Amazon Personalize 解決方案版本
<a name="working-with-training-metrics"></a>

 您可以透過離線和線上指標評估解決方案版本的效能。*線上指標*是您在使用者與即時建議的互動中觀察到的經驗結果。例如，您可以在使用者瀏覽目錄時記錄使用者的點擊率。您負責產生和記錄任何線上指標。

 *離線指標*是 Amazon Personalize 在您訓練解決方案版本時產生的指標。使用離線指標，您可以評估模型的效能。您可以檢視修改解決方案超參數的效果，也可以比較在相同資料集群組中*相同資料*上以不同配方訓練的模型結果。

避免比較使用不同資料訓練之不同解決方案版本的指標。指標的差異可能來自資料的差異，而非模型效能。例如，您可能有一個資料集群組，其中包含每個使用者的稀疏`purchase`事件資料，另一個則包含強大的`view`事件資料。根據 等指標`precision at K`，根據檢視事件資料訓練的解決方案版本可能會因為互動次數增加，而不正確地顯示效能更佳。

 為了取得效能指標，Amazon Personalize 會將輸入互動資料分割成訓練集、測試集，以及 PersonalIZED\_ACTIONS 驗證集。分割取決於您選擇的配方類型：
+  對於 USER\_SEGMENTATION 配方，訓練集包含每個使用者互動資料的 80%，而測試集包含每個使用者互動資料的 20%。
+  對於所有其他配方類型，訓練集包含 90% 的使用者及其互動資料。測試集包含剩餘的 10% 使用者及其互動資料。

 然後，Amazon Personalize 會使用訓練集建立解決方案版本。訓練完成後，Amazon Personalize 會將測試集中每個使用者資料中最舊的 90% 解決方案版本做為輸入。然後，Amazon Personalize 會將解決方案版本產生的建議與測試集中每個使用者最新 10% 資料的實際互動進行比較，以計算指標。

若要產生用於比較的基準，我們建議您使用 配方，該[熱門計數](native-recipe-popularity.md)配方建議使用最熱門的 K 項目。

**Topics**
+ [擷取解決方案版本指標](#working-with-training-metrics-metrics)
+ [指標定義](#metric-definitions)
+ [範例](#working-with-training-metrics-example)
+ [其他資源](#additional-metrics-resources)

## 擷取解決方案版本指標
<a name="working-with-training-metrics-metrics"></a>

建立解決方案版本後，您可以使用指標來評估其效能。您可以使用 Amazon Personalize 主控台、AWS Command Line Interface(AWS CLI) 和 AWSSDKs擷取解決方案版本的指標。

**Topics**
+ [擷取解決方案版本指標 （主控台）](#retrieving-solution-version-metrics-console)
+ [擷取解決方案版本指標 (AWS CLI)](#retrieve-metrics-cli)
+ [擷取解決方案版本指標 AWSSDKs)](#retrieve-metrics-sdks)

### 擷取解決方案版本指標 （主控台）
<a name="retrieving-solution-version-metrics-console"></a>

若要在主控台中檢視推薦者指標，您可以導覽至解決方案版本的詳細資訊頁面。

1. 在 [https://console.aws.amazon.com/personalize/home](https://console.aws.amazon.com/personalize/home)：// 開啟 Amazon Personalize 主控台並登入您的帳戶。

1. 在**資料集群組**頁面上，選擇您的自訂資料集群組。

1. 從導覽窗格中，選擇**自訂資源**，然後選擇**解決方案和配方**。

1. 選擇您的解決方案。

1. 在**解決方案版本**中，選擇您的解決方案版本以檢視其詳細資訊頁面。這些指標會列在底部窗格中**的解決方案版本指標**索引標籤上。如需指標的定義，請參閱 [指標定義](#metric-definitions)。

   現在您已評估解決方案版本，您可以針對使用案例部署具有最佳指標的解決方案版本來建立行銷活動。如需部署解決方案的詳細資訊，請參閱 [使用行銷活動部署 Amazon Personalize 解決方案版本建立行銷活動](campaigns.md)。

### 擷取解決方案版本指標 (AWS CLI)
<a name="retrieve-metrics-cli"></a>

您透過呼叫 [GetSolutionMetrics](API_GetSolutionMetrics.md) 操作來擷取特定解決方案版本的指標。下列程式碼說明如何使用 擷取指標AWS CLI。

```
personalize get-solution-metrics --solution-version-arn {{solution version ARN}}
```

以下是使用具有額外最佳化目標的[使用者個人化](native-recipe-new-item-USER_PERSONALIZATION.md)配方建立之解決方案版本的輸出範例。

```
{
    "solutionVersionArn": "arn:aws:personalize:us-west-2:acct-id:solution/SolutionName/<version-id>",
    "metrics": {
        "coverage": 0.27,
        "mean_reciprocal_rank_at_25": 0.0379,
        "normalized_discounted_cumulative_gain_at_5": 0.0405,
        "normalized_discounted_cumulative_gain_at_10": 0.0513,
        "normalized_discounted_cumulative_gain_at_25": 0.0828,
        "precision_at_5": 0.0136,
        "precision_at_10": 0.0102,
        "precision_at_25": 0.0091,
        "average_rewards_at_k": 0.653
    }
}
```

如需每個指標的說明，請參閱 [指標定義](#metric-definitions)。現在您已評估解決方案版本，您可以針對使用案例部署具有最佳指標的解決方案版本來建立行銷活動。如需部署解決方案的詳細資訊，請參閱 [使用行銷活動部署 Amazon Personalize 解決方案版本建立行銷活動](campaigns.md)。

### 擷取解決方案版本指標 AWSSDKs)
<a name="retrieve-metrics-sdks"></a>

您透過呼叫 [GetSolutionMetrics](API_GetSolutionMetrics.md) 操作來擷取特定解決方案版本的指標。使用以下程式碼來擷取指標。

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

```
import boto3

personalize = boto3.client('personalize')

response = personalize.get_solution_metrics(
    solutionVersionArn = '{{solution version arn}}')

print(response['metrics'])
```

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

```
public static void getSolutionVersionMetrics(PersonalizeClient personalizeClient, String solutionVersionArn) {

    try {
        GetSolutionMetricsRequest request = GetSolutionMetricsRequest.builder()
                .solutionVersionArn(solutionVersionArn)
                .build();
        Map<String, Double> metrics = personalizeClient.getSolutionMetrics(request).metrics();
        metrics.forEach((key, value) -> System.out.println(key + " " + value));
    } catch (PersonalizeException e ) {
        System.err.println(e.awsErrorDetails().errorMessage());
        System.exit(1);
    }
}
```

------

以下是使用具有額外最佳化目標的[使用者個人化](native-recipe-new-item-USER_PERSONALIZATION.md)配方建立之解決方案版本的輸出範例。

```
{
    "solutionVersionArn": "arn:aws:personalize:us-west-2:acct-id:solution/MovieSolution/<version-id>",
    "metrics": {
        "coverage": 0.27,
        "mean_reciprocal_rank_at_25": 0.0379,
        "normalized_discounted_cumulative_gain_at_5": 0.0405,
        "normalized_discounted_cumulative_gain_at_10": 0.0513,
        "normalized_discounted_cumulative_gain_at_25": 0.0828,
        "precision_at_5": 0.0136,
        "precision_at_10": 0.0102,
        "precision_at_25": 0.0091,
        "average_rewards_at_k": 0.653
    }
}
```

如需每個指標的說明，請參閱 [指標定義](#metric-definitions)。現在您已評估解決方案版本，您可以針對使用案例部署具有最佳指標的解決方案版本來建立行銷活動。如需部署解決方案的詳細資訊，請參閱 [使用行銷活動部署 Amazon Personalize 解決方案版本建立行銷活動](campaigns.md)。

## 指標定義
<a name="metric-definitions"></a>

Amazon Personalize 為解決方案版本產生的指標如下所述：
+ *相關建議*是使用者實際互動項目的建議。這些項目來自測試集中每個使用者互動資料的最新 10%。
+ *排名*是指建議項目位於建議清單中的位置。位置 1 (清單最上方) 被認為是與使用者最相關。

對於每個指標，數字越大 （越接近 1) 越好。若要深入探索，請參閱 中列出的資源[其他資源](#additional-metrics-resources)。

**coverage**  
*涵蓋*範圍的值會告訴您唯一項目 （適用於項目建議）、動作 （適用於動作建議） 或使用者 （適用於使用者區段建議） 的比例，Amazon Personalize 可能會從資料集中唯一記錄的總數中建議。  
較高的涵蓋範圍分數表示 Amazon Personalize 建議更多的目錄，而不是重複相同的記錄。特徵項目探勘的配方，例如使用者個人化，其涵蓋範圍高於不涵蓋範圍的配方，例如類似項目。

**平均互惠排名為 25**  
此指標會告訴您模型在排名最高的位置產生相關項目建議的能力。  
 如果您要為使用者產生項目搜尋結果，而且不預期使用者選擇清單中較低的項目，您可以選擇*平均互惠排名為 25 *的模型。例如，使用者經常在搜尋結果中選擇第一個烹調配方。Amazon Personalize 不會為 PersonalIZED\_ACTIONS 或 USER\_SEGMENTATION 配方產生此指標。  
 Amazon Personalize 會使用建議請求的平均互惠排名分數來計算此指標。每個互惠排名分數的計算方式如下：`1 / the rank of the highest item interacted with by the user`，其中可能的總排名為 25。系統會忽略使用者與之互動的其他較低排名的項目。如果使用者選擇第一個項目，則分數為 1。如果他們未選擇任何項目，則分數為 0。  
 例如，您可能會向三個不同的使用者顯示 25 個建議：  
+ 如果使用者 1 按一下排名 *4* 的項目且排名 *10* 的項目，則其互惠排名分數為 *1/4*。
+ 如果使用者 2 按一下排名 *2* 的項目、排名 *4* 的項目，以及排名 *12* 的項目，則其互惠排名分數為 1/2。
+ 如果使用者 3 在排名 *6* 的單一項目上按一下，則其互惠排名分數為 1/6。
 所有建議請求 （在此案例中為 3) 的平均互惠排名計算為 `(1/4 + 1/2 + 1/6) / 3 = .3056`。  


**標準化折扣累積收益 (NDCG) at K (5/10/25)**  
此指標會告訴您模型對項目或動作建議的排名，其中 K 是 5、10 或 25 個建議的樣本大小。如果您只對排名最高的項目或動作以外的建議排名最感興趣，則此指標很有用 （如需了解，請參閱 `mean reciprocal rank at 25`)。例如，如果您的應用程式一次在輪跳功能中最多顯示 10 部電影，則 的分數`NDCG at 10`會很有用。  
Amazon Personalize 會根據每個使用者在測試集中的排名位置，將權重指派給建議來計算 NDCG。每個建議都會根據其位置的因素進行折扣 （給予較低的權重）。最終指標是測試集中所有使用者`NDCG at K`的平均值。`NDCG at K` 假設清單上較低的建議與清單上較高的建議不相關。  
Amazon Personalize 使用加權係數 `1/log(1 + position)`，其中清單頂端是位置 `1`。

**K 的精確度**  
此指標會根據 K (5、10 或 25) 建議的樣本大小，告訴您模型的建議相關性。  
 Amazon Personalize 會根據測試集中每個使用者前 K 個建議中的相關建議數量，除以 K，其中 K 為 5、10 或 25。最終指標是測試集中所有使用者的平均值。  
例如，如果您向使用者建議 10 個項目，且使用者與其中 3 個項目互動，則 K 的精確度為 3 個正確預測的項目，除以總計 10 個建議的項目：`3 / 10 = .30`。  
此指標會獎勵相關項目的精確建議。分數越接近 1，模型就越精確。

**precision**  
如果您使用 Next-Best-Action 配方訓練解決方案版本，Amazon Personalize 會產生`precision`指標，而不是 `precision at K`。此指標會告訴您模型在預測使用者實際將採取的動作方面有多好。  
 為了計算 `precision`，對於資料集中的每個動作，Amazon Personalize 會將正確預測要採取動作的使用者數量除以建議動作的總次數。然後，Amazon Personalize 會計算資料集中所有動作的平均值。  
例如，如果建議 100 名使用者執行動作，而 60 名使用者採取動作，而 40 名未採取動作的使用者，則動作`precision`的 為：`60 / 100 = .60`。然後，Amazon Personalize 會將此計算套用至所有動作，並傳回平均值。  
此指標會獎勵相關動作的精確建議。分數越接近 1，模型就越精確。

**average\_rewards\_at\_k**  
當您為具有最佳化目標的解決方案建立解決方案版本 （訓練模型） 時，Amazon Personalize 會產生 `average_rewards_at_k` 指標。的分數`average_rewards_at_k`會告訴您解決方案版本在實現目標方面的表現。若要計算此指標，Amazon Personalize 會計算每個使用者的獎勵，如下所示：  
`rewards_per_user = total rewards from the user's interactions with their top 25 reward generating recommendations / total rewards from the user's interactions with recommendations`  
最終`average_rewards_at_k`是所有`rewards_per_user`標準化為小於或等於 1 且大於 0 的十進位值的平均值。值越接近 1，每個使用者從建議中預期的平均增益就越多。  
例如，如果您的目標是從點擊中最大化收入，Amazon Personalize 會將使用者點擊的項目所產生的總收入除以使用者點擊的所有建議項目中的收入，以計算每個使用者分數。然後，Amazon Personalize 會傳回所有使用者分數的標準化平均值。越接近 `average_rewards_at_k` 1，您預期每個使用者從建議中獲得的平均收入就越多。  
 如需詳細資訊，請參閱[針對其他目標最佳化解決方案](optimizing-solution-for-objective.md)。

**normalized\_discounted\_cumulative\_gain\_with\_event\_weights\_at\_k**  
 當您為具有事件組態的解決方案建立解決方案版本 （訓練模型） 時，Amazon Personalize 會產生 `normalized_discounted_cumulative_gain_with_event_weights_at_k` 指標。的分數`normalized_discounted_cumulative_gain_with_event_weights_at_k`會說明解決方案版本在考量您為每個事件類型設定的事件權重時的效能。  
 它類似於 K 的標準化折扣累積收益 (NDCG)，但每個正確預測的獎勵都會加權。相反地，在 K 的原始 NDCG 中，每個正確的預測都會具有 1 的權重。例如，在「購買」權重 0.3 和「按一下」權重 0.1 的情況下，正確預測「購買」項目將得到 1.5 的獎勵，而預測「按一下」項目將得到 0.5 的獎勵。  
 如需詳細資訊，請參閱[使用事件組態最佳化解決方案](optimizing-solution-events-config.md)。

**趨勢預測準確性**  
如果您已使用[Trending-Now](native-recipe-trending-now.md)配方訓練解決方案版本，則模型所建議項目的熱門度會提高。趨勢預測準確性越高 （越接近 1)，模型正確識別趨勢項目就越好。  
 為了計算熱門度加速，Amazon Personalize 會將所有建議項目的熱門度增加速率除以前 25 個趨勢項目的總熱門度增加。這些項目來自測試集中的實際互動。  
 根據您的資料分佈和針對趨勢探索頻率選擇的內容，趨勢預測準確性的值可以是 0.0。

**命中 （命中 K)**  
如果您使用 USER\_SEGMENTATION 配方訓練解決方案版本，則預測最相關 K 結果中符合實際使用者的平均使用者數量。實際使用者是指實際與測試集中項目互動的使用者。K 是最相關使用者的前 1%。值越高，預測的準確性就越高。

**召回 （在 K 召回）**  
如果您使用 USER\_SEGMENTATION 配方訓練解決方案版本，預測最相關 K 結果中符合實際使用者的平均預測使用者百分比。實際使用者是指實際與測試集中項目互動的使用者。K 是最相關使用者的前 1%。值越高，預測的準確性就越高。

**取回**  
如果您使用 Next-Best-Action 配方訓練解決方案版本，此指標會說明您的解決方案版本在探索使用者將互動的動作方面有多好。  
 為了計算 `recall`，對於資料集中的每個動作，Amazon Personalize 會將正確預測要採取動作的使用者數量，除以實際在測試集中採取動作的使用者總數。然後，Amazon Personalize 會計算資料集中所有動作的平均值。  
例如，如果 100 個使用者在測試集中採取動作，而 Amazon Personalize 預測其中 50 個使用者會採取動作，則動作`recall`的 為：`50 / 100 = .50`。然後，Amazon Personalize 會將此計算套用至所有動作，並傳回平均值。

**曲線下面積 (AUC)**  
如果您使用 PersonalIZED\_ACTIONS 配方訓練解決方案版本，則為解決方案版本的接收者操作特性曲線下的區域。此指標會告訴您解決方案版本在正確識別使用者將採取的動作方面的表現。  
接收者操作特性曲線會繪製解決方案版本的效能。它會以不同的閾值繪製真陽性 （正確預測為相關的動作） 和偽陽性 （錯誤預測為相關的動作） 率。曲線下面積 (AUC) 是根據其曲線摘要解決方案版本效能的分數。  
 解決方案版本的 AUC 可以介於 0 到 1 之間。越接近 1，模型越能為您的使用者預測相關動作。

**項目熱門度**  
如果您使用`aws-semantic-similarity`配方訓練解決方案版本，此指標會測量項目相較於目錄中其他項目的參與程度 （例如，檢視、共用等）。項目熱門度分數越高 （越接近 1)，相較於其他項目，項目累積的使用者互動越多。  
若要計算項目熱門度，Amazon Personalize 會計算與每個項目互動的唯一使用者總數 （透過檢視、點選、購買等事件）。然後，系統會針對資料集中的所有項目標準化每個項目的原始參與計數，導致分數介於 0 到 1 之間。接近 0 的分數表示參與度低，而接近 1 的分數表示目錄中項目的平均參與度高。

**項目新鮮度**  
如果您使用`aws-semantic-similarity`配方訓練解決方案版本，此指標會測量項目相對於其他項目新增至目錄的時間。項目新鮮度分數越高 （越接近 1)，項目建立的時間就越近。  
若要計算項目新鮮度，Amazon Personalize 會使用項目資料集中的 CREATION\_TIMESTAMP 來決定每個項目的存留期。存留期的計算方式為訓練時間和項目建立時間戳記之間的差異。然後，這些年齡會在所有項目中標準化，較新的項目獲得接近 1 的分數。接近 0 的分數表示較舊的項目，而接近 1 的分數表示平均目錄中較新的項目。

**項目相似性**  
如果您已使用`aws-semantic-similarity`配方訓練解決方案版本，則此指標會根據輸入項目的內容、屬性和中繼資料，測量與語意相關的建議項目如何。項目相似性分數 （越接近 1) 越高，建議項目與參考項目的特性越接近。  
為了計算項目相似性，Amazon Personalize 會使用衍生自項目中繼資料和屬性的語意內嵌 (Amazon Personalize)，計算每個建議項目與輸入項目之間的相似性分數。接近 0 的分數平均表示目錄中的項目之間的語意相似性低，而接近 1 的分數平均表示目錄中的項目之間的語意相似性高。此指標可協助您了解模型在建議中擷取語意關係的能力。

## 範例
<a name="working-with-training-metrics-example"></a>

以下是為特定使用者產生建議清單的解決方案版本之簡單範例。第二個與第五個建議符合此使用者的測試資料中的記錄。這些是相關建議。如果 `K` 設定為 `5`，則會為使用者產生以下指標。

**reciprocal\_rank**  
算式：1/2  
結果：0.5000

**normalized\_discounted\_cumulative\_gain\_at\_5**  
算式：(1/log(1 \+ 2) \+ 1/log(1 \+ 5)) / (1/log(1 \+ 1) \+ 1/log(1 \+ 2))  
結果：0.6241

**precision\_at\_5**  
算式：2/5  
結果：0.4000

## 其他資源
<a name="additional-metrics-resources"></a>

如需使用 A/B 測試評估解決方案版本的資訊，請參閱[使用 A/B 測試來測量 Amazon Personalize 產生之建議的有效性](https://aws.amazon.com/blogs/machine-learning/using-a-b-testing-to-measure-the-efficacy-of-recommendations-generated-by-amazon-personalize/)。若要深入了解推薦系統的不同類型的指標，請參閱下列外部資源：
+ [MRR 與 MAP 與 NDCG：排名感知評估指標以及何時使用它們](https://medium.com/swlh/rank-aware-recsys-evaluation-metrics-5191bba16832/)
+  [折扣累積收益：您應該知道的排名指標](https://medium.com/@maeliza.seymour/discounted-cumulative-gain-the-ranking-metrics-you-should-know-about-e1d1623f8cd9) 
+  [Recommender Systems 在 k 的召回和精確度](https://medium.com/@bond.kirill.alexandrovich/precision-and-recall-in-recommender-systems-and-some-metrics-stuff-ca2ad385c5f8) 
+  [Recommender Systems 的排名評估指標](https://towardsdatascience.com/ranking-evaluation-metrics-for-recommender-systems-263d0a66ef54) 
+  [接收器操作特性](https://en.wikipedia.org/wiki/Receiver_operating_characteristic) 