

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

# 針對其他目標最佳化解決方案
<a name="optimizing-solution-for-objective"></a>

**重要**  
根據預設，所有新解決方案都會使用自動訓練。透過自動訓練，您會在解決方案處於作用中狀態時產生訓練成本。為了避免不必要的成本，您可以在完成後[更新解決方案](updating-solution.md)以關閉自動訓練。如需訓練成本的資訊，請參閱 [Amazon Personalize 定價](https://aws.amazon.com/personalize/pricing/)。

 如果您使用使用者個人化配方或個人化排名配方，除了最大化相關性之外，您還可以最佳化目標的 Amazon Personalize 解決方案，例如最大化收入。

 使用項目建議配方，Amazon Personalize 的主要目標是根據歷史和即時項目互動資料，為您的使用者預測最相關的項目。這些是您的使用者最有可能互動的項目 （例如，他們最有可能點按的項目）。如果您有其他目標，例如最大化串流分鐘數或增加收入，您可以建立根據相關性和目標產生建議的解決方案。

若要最佳化其他目標的解決方案，請使用使用者個人化配方或個人化排名配方建立新的解決方案，然後在與您的目標相關的項目資料集中選擇數值中繼資料欄。產生建議時，Amazon Personalize 更重視此資料欄具有較高值的項目。例如，您可以選擇 VIDEO\$1LENGTH 資料欄來最大化串流分鐘，或選擇 PRICE 資料欄來最大化收入。

您可以使用 Amazon Personalize 主控台、 AWS Command Line Interface (AWS CLI) 或 AWS SDKs。如需使用 Amazon Personalize 主控台的詳細資訊，請參閱 [建立解決方案 （主控台）](create-solution.md#configure-solution-console)。

**Topics**
+ [準則和要求](#optimize-objective-guidelines-req)
+ [平衡目標重點和相關性](#balancing-objective-emphasis)
+ [測量最佳化效能](#measuring-performance)
+ [最佳化解決方案 (AWS CLI)](#optimizing-solution-cli)
+ [最佳化解決方案 (AWS SDKs)](#optimizing-solution-sdk)
+ [Jupyter 筆記本範例](#optimization-objective-sample-notebooks)

## 準則和要求
<a name="optimize-objective-guidelines-req"></a>

 目標要求如下：
+ 您只能為您的目標選擇一個資料欄。
+ 資料欄在您的結構描述中必須有數值類型。
+ 資料欄在您的結構描述中不能有 `null`類型。

如需結構描述和資料類型的詳細資訊，請參閱 [為 Amazon Personalize 結構描述建立結構描述 JSON 檔案](how-it-works-dataset-schema.md)。

## 平衡目標重點和相關性
<a name="balancing-objective-emphasis"></a>

 根據您的目標而非相關性建議項目時，可能會有權衡。例如，如果您想要透過建議提高收入，只有昂貴項目的建議可能會降低項目與您的使用者的關係，並減少使用者參與度和轉換率。

若要設定相關性與目標之間的平衡，請在建立解決方案時選擇下列其中一個目標敏感度等級：
+ 關閉：Amazon Personalize 主要使用項目互動資料來預測使用者最相關的項目。
+ 低：Amazon Personalize 不太重視您的目標。透過項目互動資料的相關性更為重要。
+ 中：Amazon Personalize 透過項目互動資料，同等強調您的目標和相關性。
+ 高：Amazon Personalize 更重視您的目標。透過項目互動資料的相關性較不重要。

## 測量最佳化效能
<a name="measuring-performance"></a>

當您為具有最佳化目標的解決方案建立解決方案版本 （訓練模型） 時，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，您預期每個使用者從建議中獲得的平均收入就越多。

如需產生指標的詳細資訊，請參閱 [使用指標評估 Amazon Personalize 解決方案版本](working-with-training-metrics.md)。

## 最佳化解決方案 (AWS CLI)
<a name="optimizing-solution-cli"></a>

 您只能使用 User-Personalization 或 Personalized-Ranking 配方來最佳化目標。若要使用 最佳化其他目標的解決方案 AWS CLI，請建立新的解決方案，並使用 `solutionConfig` 物件中的 `optimizationObjective`金鑰指定您的目標詳細資訊。`optimizationObjective` 具有下列欄位：
+ `itemAttribute`：從與您的目標相關的項目資料集指定數值中繼資料資料欄的名稱。
+ `objectiveSensitivity`：指定解決方案在產生建議時對目標的強調程度。目標敏感度層級會設定 Amazon Personalize 如何根據您的目標與透過項目互動資料之相關性來平衡建議項目。`objectiveSensitivity` 可以是 `OFF`、LOW `MEDIUM`或 `HIGH`。如需詳細資訊，請參閱[平衡目標重點和相關性](#balancing-objective-emphasis)。

以下是 `create-solution` AWS CLI 命令的範例。將 `solution name`、 `dataset group arn`和 `recipe arn`值取代為您自己的值。

對於 `optimizationObjective`，將 取代`COLUMN_NAME`為與您目標相關的項目資料集中的數值中繼資料資料欄名稱。針對 `objectiveSensitivity`，指定 OFF、LOW、MEDIUM 或 HIGH。

```
aws personalize create-solution \
--name solution name \
--dataset-group-arn dataset group arn \
--recipe-arn recipe arn \
--solution-config "{\"optimizationObjective\":{\"itemAttribute\":\"COLUMN_NAME\",\"objectiveSensitivity\":\"MEDIUM\"}}"
```

當您的解決方案準備就緒時，請建立新的解決方案版本 （如需範例命令，請參閱 [建立解決方案 (AWS CLI)](create-solution.md#configure-solution-cli))。建立解決方案版本後，您可以使用解決方案版本指標來檢視最佳化效能。請參閱 [測量最佳化效能](#measuring-performance)。

## 最佳化解決方案 (AWS SDKs)
<a name="optimizing-solution-sdk"></a>

您只能使用 User-Personalization 或 Personalized-Ranking 配方來最佳化目標。

若要使用 AWS SDKs 最佳化其他目標的解決方案，請建立新的解決方案，並使用解決方案 `solutionConfig` 物件中的 `optimizationObjective`金鑰指定您的目標詳細資訊。`optimizationObjective` 具有下列欄位：
+ `itemAttribute`：從與目標相關的資料集群組項目資料集，指定數值中繼資料資料欄的名稱。
+ `objectiveSensitivity`：指定解決方案在產生建議時對目標的強調程度。目標敏感度層級會設定 Amazon Personalize 如何根據您的目標與透過項目互動資料之相關性來平衡建議項目。`objectiveSensitivity` 可以是 `OFF`、 `LOW``MEDIUM`或 `HIGH`。如需詳細資訊，請參閱[平衡目標重點和相關性](#balancing-objective-emphasis)。

使用下列程式碼，透過 適用於 Python (Boto3) 的 AWS SDK 或 建立具有其他目標的解決方案 AWS SDK for Java 2.x。

當您的解決方案準備就緒時，請建立新的解決方案版本 （例如程式碼，請參閱 [建立解決方案版本AWS SDKs)](creating-a-solution-version.md#create-solution-version-sdk))。建立解決方案版本後，您可以使用解決方案版本指標來檢視最佳化效能。請參閱 [測量最佳化效能](#measuring-performance)。

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

 若要建立針對其他目標最佳化的解決方案，請使用下列`create_solution`方法。將 `solution name`、 `dataset group arn`和 `recipe arn`值取代為您自己的值。

對於 `optimizationObjective`，將 取代`COLUMN_NAME`為與您目標相關的項目資料集中的數值中繼資料資料欄名稱。針對 `objectiveSensitivity`，指定 OFF、LOW、MEDIUM 或 HIGH。

```
import boto3

personalize = boto3.client('personalize')

create_solution_response = personalize.create_solution(
    name= 'solution name', 
    recipeArn = 'recipe arn', 
    datasetGroupArn = 'dataset group arn',
    solutionConfig = {
        "optimizationObjective": {
            "itemAttribute": "COLUMN_NAME",
            "objectiveSensitivity": "MEDIUM"
        }
    }
)
solution_arn = create_solution_response['solutionArn']
print('solution_arn: ', solution_arn)
```

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

若要建立針對其他目標最佳化的解決方案，請使用下列`createPersonalizeSolution`方法，並將下列做為參數傳遞：Amazon Personalize 服務用戶端、資料集群組的 Amazon Resource Name (ARN)、解決方案名稱、配方 ARN、項目屬性和目標敏感度層級。

```
public static String createPersonalizeSolution(PersonalizeClient personalizeClient, 
                                             String datasetGroupArn, 
                                             String solutionName, 
                                             String recipeArn,
                                             String itemAttribute, 
                                             String objectiveSensitivity) {
    
    try {
        OptimizationObjective optimizationObjective = OptimizationObjective.builder()
            .itemAttribute(itemAttribute)
            .objectiveSensitivity(objectiveSensitivity)
            .build();
    
        SolutionConfig solutionConfig = SolutionConfig.builder()
            .optimizationObjective(optimizationObjective)
            .build();

        CreateSolutionRequest solutionRequest = CreateSolutionRequest.builder()
            .name(solutionName)
            .datasetGroupArn(datasetGroupArn)
            .recipeArn(recipeArn)
            .solutionConfig(solutionConfig)
            .build();

        CreateSolutionResponse solutionResponse = personalizeClient.createSolution(solutionRequest);
        
        return solutionResponse.solutionArn();

    } catch (PersonalizeException e) {
        System.err.println(e.awsErrorDetails().errorMessage());
        System.exit(1);
    }
    return "";
```

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

```
// Get service clients and commands using ES6 syntax.
import { CreateSolutionCommand, PersonalizeClient } from
  "@aws-sdk/client-personalize";
  
// create the personalizeClient
const personalizeClient = new PersonalizeClient({ region: "REGION"});

// set the solution parameters.
export const createSolutionParam = {
  datasetGroupArn: 'DATASET_GROUP_ARN',              /* required */
  recipeArn: 'RECIPE_ARN',                           /* required */
  name: 'NAME',                                      /* required */
  solutionConfig: {
    optimizationObjective: {
      itemAttribute: "COLUMN_NAME",           /* specify the numerical column from the Items dataset related to your objective */
      objectiveSensitivity: "MEDIUM"          /* specify OFF, LOW, MEDIUM, or HIGH */
    }
  }
};

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

------

## Jupyter 筆記本範例
<a name="optimization-objective-sample-notebooks"></a>

如需示範如何建立針對其他目標型項目中繼資料最佳化的解決方案的範例 Jupyter 筆記本，請參閱 [Amazon Personalize 範例](https://github.com/aws-samples/amazon-personalize-samples) GitHub 儲存庫的 [objective\$1optimization](https://github.com/aws-samples/amazon-personalize-samples/tree/master/next_steps/core_use_cases/objective_optimization) 資料夾