

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

# 評估 Amazon Personalize 網域建議程式
<a name="evaluating-recommenders"></a>

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

 *離線指標*是 Amazon Personalize 在您建立推薦者時產生的指標。使用離線指標，您可以評估支援建議程式之模型的效能。您可以 檢視修改推薦者的組態的效果，也可以比較使用不同使用案例訓練的推薦者與相同資料集群組中*相同資料*的結果。

避免比較使用不同資料訓練的不同推薦者的指標。指標的差異可能來自資料的差異，而非模型效能。例如，您可能有一個資料集群組，其中包含每個使用者的稀疏`purchase`事件資料，另一個則包含強大的`view`事件資料。根據類似 的指標`precision at K`，根據檢視事件資料訓練的推薦者可能會因為互動次數增加，而不正確地表現得更好。

 為了取得效能指標，Amazon Personalize 會將輸入互動資料分割成訓練集和測試集。訓練集包含 90% 的使用者及其互動資料。測試集包含剩餘的 10% 使用者及其互動資料。

 然後，Amazon Personalize 會使用訓練集建立推薦者。訓練完成後，Amazon Personalize 會將測試集中每個使用者資料中最舊的 90% 作為輸入。然後，Amazon Personalize 會透過比較建議者產生的建議與測試集中每個使用者最新 10% 資料的實際互動來計算指標。

**Topics**
+ [擷取指標](#retrieving-recommender-metrics)
+ [指標定義](#metric-definitions-recommenders)
+ [範例](#working-with-recommender-metrics-example)
+ [其他資源](#additional-metrics-resources-recommenders)

## 擷取指標
<a name="retrieving-recommender-metrics"></a>

建議程式處於作用中狀態後，您可以在 Amazon Personalize 主控台中檢視建議程式的指標，或呼叫 [DescribeRecommender](API_DescribeRecommender.md)操作來擷取指標。

**Topics**
+ [檢視指標 （主控台）](#retrieving-recommender-metrics-console)
+ [擷取指標 (AWS CLI)](#retrieving-recommender-metrics-cli)
+ [擷取指標AWS SDKs)](#retrieving-recommender-metrics-sdk)

### 檢視指標 （主控台）
<a name="retrieving-recommender-metrics-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="retrieving-recommender-metrics-cli"></a>

下列程式碼說明如何使用 取得推薦者的指標 AWS CLI。

```
aws personalize describe-recommender \
--recommender-arn recommender arn
```

以下是針對 VIDEO\$1ON\$1DEMAND 網域使用案例所建立*最佳挑選*之建議者的指標輸出範例。

```
{
    "recommender": {
        "recommenderArn": "arn:aws:personalize:region:acct-id:recommender/recommenderName",
        "datasetGroupArn": "arn:aws:personalize:region:acct-id:dataset-group/dsGroupName",
        "name": "name123",
        "recipeArn": "arn:aws:personalize:::recipe/aws-vod-top-picks",
        "modelMetrics": {
            "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,
        }
        "recommenderConfig": {},
        "creationDateTime": "2022-05-06T10:11:24.589000-07:00",
        "lastUpdatedDateTime": "2022-05-06T10:34:33.270000-07:00",
        "status": "ACTIVE",
    }
}
```

### 擷取指標AWS SDKs)
<a name="retrieving-recommender-metrics-sdk"></a>

下列程式碼說明如何使用適用於 Python 的 SDK (Boto3) 取得推薦者的指標。

```
import boto3

personalize = boto3.client('personalize')

response = personalize.describe_recommender(
    recommenderArn = 'recommender_arn'
)
print(response['recommender']['modelMetrics'])
```

以下是針對 VIDEO\$1ON\$1DEMAND 網域使用案例所建立*之最佳挑選*建議程式的指標輸出範例。

```
{
    "recommender": {
        "recommenderArn": "arn:aws:personalize:region:acct-id:recommender/recommenderName",
        "datasetGroupArn": "arn:aws:personalize:region:acct-id:dataset-group/dsGroupName",
        "name": "name123",
        "recipeArn": "arn:aws:personalize:::recipe/aws-vod-top-picks",
        "modelMetrics": {
            "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,
        }
        "recommenderConfig": {},
        "creationDateTime": "2022-05-06T10:11:24.589000-07:00",
        "lastUpdatedDateTime": "2022-05-06T10:34:33.270000-07:00",
        "status": "ACTIVE",
    }
}
```

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

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

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

**coverage**  
 *涵蓋*範圍的值會告訴您 Amazon Personalize 在互動和項目資料集中唯一項目總數中可能建議的唯一項目比例。較高的涵蓋範圍分數表示 Amazon Personalize 建議更多項目，而不是為不同的使用者重複推薦相同的幾個項目。具有項目探索功能的使用案例，例如*為您 (VIDEO\$1ON\$1DEMAND) 和為您推薦 (ECOMMERCE) 的首選*，其涵蓋範圍高於未涵蓋的範圍。 **

**平均互惠排名為 25**  
此指標會告訴您模型在最高排名位置產生相關建議的能力。如果您要為使用者產生相關的搜尋結果，並且不期望使用者在清單上選擇較低的項目，您可以選擇*平均互惠排名為 25* 的模型。例如，使用者經常在搜尋結果中選擇第一個烹調配方。  
 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`。  


**K (5、10 或 25) 的標準化折扣累積增益 (NDCG)**  
此指標會告訴您模型對建議的排名，其中 K 是 5、10 或 25 個建議的樣本大小。如果您只對排名最高的項目以外的建議排名最感興趣，則此指標很有用 （如需了解，請參閱 `mean reciprocal rank at 25`)。例如，如果您的應用程式一次在輪跳功能中最多顯示 10 部電影，則 的分數`NDCG at 10`會很有用。  
Amazon Personalize 會根據每個使用者在測試集中的排名位置，將權重指派給建議來計算 NDCG。每個建議都會根據其位置的因素進行折扣 （給予較低的權重）。最終指標是測試集中所有使用者的平均值。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，模型就越精確。

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

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

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

**normalized\$1discounted\$1cumulative\$1gain\$1at\$15**  
算式：(1/log(1 \$1 2) \$1 1/log(1 \$1 5)) / (1/log(1 \$1 1) \$1 1/log(1 \$1 2))  
結果：0.6241

**precision\$1at\$15**  
算式：2/5  
結果：0.4000

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

若要深入了解推薦系統的不同類型的指標，請參閱下列外部資源：
+ [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) 