

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# 追加の目的のためのソリューションの最適化
<a name="optimizing-solution-for-objective"></a>

**重要**  
デフォルトでは、すべての新しいソリューションで自動トレーニングが使用されます。自動トレーニングでは、ソリューションがアクティブな間はトレーニングコストが発生します。不要なコストを避けるために、完了したら[ソリューションを更新](updating-solution.md)して自動トレーニングを無効にすることができます。トレーニングのコストの詳細については、「[Amazon Personalize の料金](https://aws.amazon.com/personalize/pricing/)」を参照してください。

 User-Personalization レシピまたは Personalized-Ranking レシピを使用すると、収益の最大化などの最大の関連性に加えて、目的に合わせて Amazon Personalize ソリューションを最適化できます。

 アイテムレコメンデーションレシピを備えた Amazon Personalize の主な目的は、履歴およびリアルタイムのアイテムインタラクションデータに基づいて、ユーザーにとって最も関連性の高いアイテムを予測することです。これらは、ユーザーが操作する可能性が最も高いアイテムです (例えば、ユーザーがクリックする可能性が最も高いアイテム)。ストリーミング時間 (分) の最大化や収益の増加など、追加の目的がある場合は、関連性と目的の両方に基づいてレコメンデーションを生成するソリューションを作成できます。

追加の目的のためにソリューションを最適化するには、User-Personalization レシピまたは Personalized-Ranking レシピを使用して新しいソリューションを作成し、目的に関連する Items データセットの数値メタデータ列を選択します。レコメンデーションを生成する場合、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>

 目的の要件は次のとおりです。
+ 目的に選択できる列は 1 つだけです。
+ 列は、スキーマ内の数値型である必要があります。
+ 列にスキーマ内の `null` タイプを含めることはできません。

スキーマとデータ型の詳細については、「[Amazon Personalize スキーマのスキーマ JSON ファイルの作成](how-it-works-dataset-schema.md)」を参照してください。

## 目的の重点の置き方と関連性のバランシング
<a name="balancing-objective-emphasis"></a>

 関連性よりも目的に基づいてアイテムを推奨する場合、トレードオフが生じる可能性があります。例えば、レコメンデーションを通じて収益を増やしたい場合、高額なアイテムのみのレコメンデーションでは、ユーザーとの関係においてアイテムの関連性が低下し、ユーザーのエンゲージメントとコンバージョンが減少する可能性があります。

関連性と目的のバランスを設定するには、ソリューションを作成するときに、次の目的の感度レベルのいずれかを選択します。
+ Off (オフ): Amazon Personalize は、主にアイテムインタラクションデータを使用して、ユーザーにとって最も関連性の高いアイテムを予測します。
+ Low (低): Amazon Personalize は、目的をあまり重要視しません。アイテムインタラクションデータを介した関連性がより重要視されます。
+ Medium (中): Amazon Personalize は、アイテムインタラクションデータを通じて、目的と関連性を同等に重視します。
+ High (高): 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` は、1 以下 0 超の 10 進値に正規化されたすべての `rewards_per_user` の平均です。値が 1 に近いほど、レコメンデーションから期待できるユーザーあたりの平均利益が大きくなります。

例えば、クリックから得られる収益を最大化することが目的の場合、Amazon Personalize は、ユーザーが上位 25 位の最も高額なレコメンデーションからクリックしたアイテムによって生成された合計収益を、ユーザーがクリックしたすべての推奨アイテムからの収益で除することにより、各ユーザースコアを計算します。その後、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`: 目的に関連する Items データセットの数値メタデータ列の名前を指定します。
+ `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` を、目的に関連する Items データセットの数値メタデータ列名に置き換えます。`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`: 目的に関連する、データグループの Items データセットの数値メタデータ列の名前を指定します。
+ `objectiveSensitivity`: レコメンデーションを生成するときに、ソリューションが目的を重要視するレベルを指定します。目的の感度レベルは、Amazon Personalize が、目的と、アイテムインタラクションデータを介した関連性に基づいて推奨されるアイテムのバランスをとる方法を設定します。`objectiveSensitivity` は、`OFF`、`LOW`、`MEDIUM`、または `HIGH` にすることができます。詳細については、「[目的の重点の置き方と関連性のバランシング](#balancing-objective-emphasis)」を参照してください。

次のコードを使用して、 AWS SDK for Python (Boto3) または AWS SDK for Java 2.xで追加の目的を持つソリューションを作成します。

ソリューションの準備が整ったら、新しいソリューションバージョンを作成します (コードの例については、「[ソリューションバージョンの作成 (AWS SDK)](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` を、目的に関連する Items データセットの数値メタデータ列名に置き換えます。`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 リソースネーム (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) フォルダを参照してください。