

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

# 取得個人化排名 （自訂資源）
<a name="rankings"></a>

個人化排名是建議項目的清單，而這些建議項目會針對特定使用者重新排名。若要取得個人化排名，請呼叫 [GetPersonalizedRanking](API_RS_GetPersonalizedRanking.md) API 操作，或從主控台中的行銷活動取得建議。

**注意**  
您必須已使用類型為 PERSONALIZED\$1RANKING 的配方，建立支持行銷活動的解決方案。如需詳細資訊，請參閱[選擇配方](working-with-predefined-recipes.md)。

**Topics**
+ [個人化排名評分的運作方式](#how-ranking-scoring-works)
+ [取得個人化排名 （主控台）](get-ranking-recommendations-console.md)
+ [取得個人化排名 (AWS CLI)](get-personalized-rankings-cli.md)
+ [取得個人化排名 (AWS SDKs)](get-personalized-rankings-sdk.md)
+ [個人化執行範例筆記本](#real-time-recommendations-personalized-ranking-example)

## 個人化排名評分的運作方式
<a name="how-ranking-scoring-works"></a>

就像 `GetRecommendations`操作針對使用 User-Personalization-v2 和 User-Personalization 配方建立的解決方案傳回的分數一樣，`GetPersonalizedRanking`分數總和為 1，但只有輸入項目會收到分數和建議分數通常較高。如果項目在最新的訓練期間不存在，則會獲得 0 分。

在數學上，GetPersonalizedRanking 的評分函數與 `GetRecommendations` 相同，不同之處在於它只考慮輸入項目。這意味著分數接近 1 的可能性越高，因為提高分數的其他選擇較少：

![\[描述用來計算排名中每個項目分數的公式。\]](http://docs.aws.amazon.com/zh_tw/personalize/latest/dg/images/get_personalized_ranking.png)


# 取得個人化排名 （主控台）
<a name="get-ranking-recommendations-console"></a>

若要從 Amazon Personalize 主控台取得使用者的個人化排名，請選擇您正在使用的行銷活動，然後提供其使用者 ID、指定您要為使用者排名的項目清單、選擇性選擇篩選條件，以及選擇性提供任何內容資料。

**取得使用者的個人化排名**

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

1. 選擇包含您正在使用之行銷活動的資料集群組。

1. 在導覽窗格中，選擇**行銷活動**。

1. 在**行銷活動**頁面上，選擇目標行銷活動。

1.  在**測試行銷活動結果**下，輸入您要取得建議之使用者的使用者 **ID**。

1. 針對**項目 IDs**，輸入要為使用者排名的項目清單。

1. 選擇性地選擇篩選條件。如需詳細資訊，請參閱[篩選建議和使用者客群](filter.md)。

1. 如果您在行銷活動的建議中啟用中繼資料，請針對**項目資料集欄**選擇您要包含在建議結果中的中繼資料欄。如需啟用中繼資料的詳細資訊，請參閱 [建議中的項目中繼資料](campaigns.md#create-campaign-return-metadata)。

1. 如果您的行銷活動使用內容中繼資料 （如需需求，請參閱 [提高與內容中繼資料的建議相關性](contextual-metadata.md))，請選擇性地提供內容資料。

   對於每個內容，對於**金鑰**，輸入中繼資料欄位，對於**值**，輸入內容資料。

1. 選擇**取得個人化項目排名**。包含依使用者預測興趣順序排名的項目的資料表隨即出現。

# 取得個人化排名 (AWS CLI)
<a name="get-personalized-rankings-cli"></a>

下列程式碼範例示範如何使用 取得個人化排名的不同變化 AWS CLI。

**Topics**
+ [取得個人化排名](#personalized-ranking-cli-sample)
+ [在個人化排名中包含項目中繼資料](#getting-personalized-ranking-with-metadata-cli)

## 取得個人化排名
<a name="personalized-ranking-cli-sample"></a>

 使用下列`get-personalized-ranking`命令，透過 取得個人化排名 AWS CLI。為您的行銷活動指定 Amazon Resource Name (ARN)、使用者的 User ID，並提供要為使用者排名的項目 IDs 清單 （各自以空格分隔）。要排名的項目必須位於您用來訓練解決方案版本的資料中。隨即顯示排名建議清單。Amazon Personalize 會考慮使用者最感興趣的清單中的第一個項目。

```
aws personalize-runtime get-personalized-ranking \
--campaign-arn Campaign ARN \
--user-id 12 \
--input-list 3 4 10 8 12 7
```

## 在個人化排名中包含項目中繼資料
<a name="getting-personalized-ranking-with-metadata-cli"></a>

如果您在行銷活動的建議中啟用中繼資料，您可以指定要包含在回應中的項目資料集中繼資料欄。如需啟用中繼資料的詳細資訊，請參閱 [建議中的項目中繼資料](campaigns.md#create-campaign-return-metadata)。

下列程式碼範例示範如何在個人化排名的請求中指定中繼資料欄。

```
aws personalize-runtime get-personalized-ranking \
--campaign-arn Campaign ARN \
--user-id 12 \
--input-list 3 4 10 8 12 7
--metadata-columns "{\"ITEMS\": ["\"columnNameA"\","\"columnNameB"\"]}"
```

# 取得個人化排名 (AWS SDKs)
<a name="get-personalized-rankings-sdk"></a>

下列程式碼範例示範如何使用 AWS SDKs 取得個人化排名的不同變化。

**Topics**
+ [取得個人化排名](#personalized-ranking-sdk-sample)
+ [在個人化排名中包含項目中繼資料](#getting-personalized-ranking-with-metadata-sdk)
+ [使用內容中繼資料取得個人化排名](#personalized-ranking-contextual-metadata-example)

## 取得個人化排名
<a name="personalized-ranking-sdk-sample"></a>

下列程式碼說明如何取得使用者的個人化排名。指定使用者的 ID 和要為使用者排名的項目 IDs 清單。項目 IDs 必須在您用來訓練解決方案版本的資料中。會傳回排名建議清單。Amazon Personalize 會考慮使用者最感興趣的清單中的第一個項目。

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

```
import boto3

personalizeRt = boto3.client('personalize-runtime')

response = personalizeRt.get_personalized_ranking(
    campaignArn = "Campaign arn",
    userId = "UserID",
    inputList = ['ItemID1','ItemID2']
)

print("Personalized Ranking")
for item in response['personalizedRanking']:
    print (item['itemId'])
```

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

```
public static List<PredictedItem> getRankedRecs(PersonalizeRuntimeClient personalizeRuntimeClient,
                                                String campaignArn,
                                                String userId,
                                                ArrayList<String> items) {

    try {
        GetPersonalizedRankingRequest rankingRecommendationsRequest = GetPersonalizedRankingRequest.builder()
                .campaignArn(campaignArn)
                .userId(userId)
                .inputList(items)
                .build();
  
        GetPersonalizedRankingResponse recommendationsResponse =
                personalizeRuntimeClient.getPersonalizedRanking(rankingRecommendationsRequest);
        List<PredictedItem> rankedItems = recommendationsResponse.personalizedRanking();
        int rank = 1;
        for (PredictedItem item : rankedItems) {
            System.out.println("Item ranked at position " + rank + " details");
            System.out.println("Item Id is : " + item.itemId());
            System.out.println("Item score is : " + item.score());
            System.out.println("---------------------------------------------");
            rank++;
        }
        return rankedItems;
    } catch (PersonalizeRuntimeException e) {
        System.err.println(e.awsErrorDetails().errorMessage());
        System.exit(1);
    }
    return null;
}
```

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

```
// Get service clients module and commands using ES6 syntax.
import { GetPersonalizedRankingCommand } from "@aws-sdk/client-personalize-runtime";
import { personalizeRuntimeClient } from "./libs/personalizeClients.js";
// Or, create the client here.
// const personalizeRuntimeClient = new PersonalizeRuntimeClient({ region: "REGION"});

// Set the ranking request parameters.
export const getPersonalizedRankingParam = {
  campaignArn: "CAMPAIGN_ARN" /* required */,
  userId: "USER_ID" /* required */,
  inputList: ["ITEM_ID_1", "ITEM_ID_2", "ITEM_ID_3", "ITEM_ID_4"],
};

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

------

## 在個人化排名中包含項目中繼資料
<a name="getting-personalized-ranking-with-metadata-sdk"></a>

如果您在行銷活動的建議中啟用中繼資料，您可以指定要包含在回應中的項目資料集中繼資料欄。如需啟用中繼資料的詳細資訊，請參閱 [建議中的項目中繼資料](campaigns.md#create-campaign-return-metadata)。

下列程式碼範例示範如何在個人化排名的請求中指定中繼資料欄。

```
import boto3

personalizeRt = boto3.client('personalize-runtime')

response = personalizeRt.get_personalized_ranking(
    campaignArn = "Campaign arn",
    userId = "UserID",
    inputList = ['ItemID1','ItemID2'],
    metadataColumns = {
      "ITEMS": ['columnNameA','columnNameB']
    }
)

print("Personalized Ranking")
for item in response['personalizedRanking']:
    print (item['itemId'])
    print (item['metadata'])
```

## 使用內容中繼資料取得個人化排名
<a name="personalized-ranking-contextual-metadata-example"></a>

使用下面的程式碼來根據情境中繼資料取得個人化排名。對於 `context`，針對每個索引鍵/值對，提供中繼資料欄位作為索引鍵，而內容資料作為值。在下列範例程式碼中，金鑰為 `DEVICE`，值為 `mobile phone`。將這些值和 `Campaign ARN`和 `User ID`取代為您自己的值。也`inputList`請變更為您用來訓練解決方案的資料中的項目 IDs 清單。Amazon Personalize 會考慮使用者最感興趣的清單中的第一個項目。

```
import boto3

personalizeRt = boto3.client('personalize-runtime')

response = personalizeRt.get_personalized_ranking(
    campaignArn = "Campaign ARN",
    userId = "User ID",
    inputList = ['ItemID1', 'ItemID2'],
    context = {
      'DEVICE': 'mobile phone'
    }
)

print("Personalized Ranking")
for item in response['personalizedRanking']:
  print(item['itemId'])
```

## 個人化執行範例筆記本
<a name="real-time-recommendations-personalized-ranking-example"></a>

 如需示範如何使用個人化排名配方的範例 Jupyter 筆記本，請參閱[個人化排名範例](https://github.com/aws-samples/amazon-personalize-samples/blob/master/next_steps/core_use_cases/personalized_ranking/personalize_ranking_example.ipynb)。