追加の目的のためのソリューションの最適化 - Amazon Personalize

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

追加の目的のためのソリューションの最適化

重要

デフォルトでは、すべての新しいソリューションで自動トレーニングが使用されます。自動トレーニングでは、ソリューションがアクティブになっている間、トレーニングコストが発生します。不要なコストを避けるために、完了したらソリューションを更新して自動トレーニングをオフにできます。トレーニングコストの詳細については、「Amazon Personalize の料金」を参照してください。

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

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

追加の目的のためにソリューションを最適化するには、User-Personalization レシピまたは Personalized-Ranking レシピを使用して新しいソリューションを作成し、目的に関連する Items データセットの数値メタデータ列を選択します。レコメンデーションを生成する場合、Amazon Personalize は、このデータ列の値がより高いアイテムをより重要視します。例えば、VIDEO_LENGTH 列を選択してストリーミング分を最大化したり、PRICE列を選択して収益を最大化したりできます。

Amazon Personalize コンソールを使用できます。 AWS Command Line Interface (AWS CLI)、または AWS SDKs。Amazon Personalize コンソールの使用については、「」を参照してくださいソリューションの作成 (コンソール)

ガイドラインと要件

目的の要件は次のとおりです。

  • 目的に選択できる列は 1 つだけです。

  • 列は、スキーマ内の数値型である必要があります。

  • 列にスキーマ内の null タイプを含めることはできません。

スキーマとデータ型の詳細については、「データのスキーマJSONファイルの作成」を参照してください。

目的の重点の置き方と関連性のバランシング

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

関連性と目的のバランスを設定するには、ソリューションを作成するときに、次の目的の感度レベルのいずれかを選択します。

  • Off (オフ): Amazon Personalize は、主にアイテムインタラクションデータを使用して、ユーザーにとって最も関連性の高いアイテムを予測します。

  • Low (低): Amazon Personalize は、目的をあまり重要視しません。アイテムインタラクションデータを介した関連性がより重要視されます。

  • Medium (中): Amazon Personalize は、アイテムインタラクションデータを通じて、目的と関連性を同等に重視します。

  • High (高): Amazon Personalize は、目的をより重要視します。アイテムインタラクションデータを介した関連性はあまり重要視されません。

最適化パフォーマンスの測定

最適化の目的を持つソリューションのソリューションバージョンを作成する (モデルをトレーニングする) と、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 ソリューションバージョンの評価」を参照してください。

ソリューションの最適化 (AWS CLI)

User-Personalization または Personalized-Ranking レシピを使用する場合にのみ、目的に合わせて最適化できます。を使用して追加の目標に合わせてソリューションを最適化するには AWS CLI、新しいソリューションを作成し、 solutionConfig オブジェクトの optimizationObjectiveキーを使用して目的の詳細を指定します。optimizationObjective には以下のフィールドがあります。

  • itemAttribute: 目的に関連する Items データセットの数値メタデータ列の名前を指定します。

  • objectiveSensitivity: レコメンデーションを生成するときに、ソリューションが目的を重要視するレベルを指定します。目的の感度レベルは、Amazon Personalize が、目的と、アイテムインタラクションデータを介した関連性に基づいて推奨されるアイテムのバランスをとる方法を設定します。objectiveSensitivity は、OFF、LOW、MEDIUM、または HIGH にすることができます。詳細については、「目的の重点の置き方と関連性のバランシング」を参照してください。

以下は、 の例です。 create-solution AWS CLI コマンド。solution namedataset 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)」を参照してください)。ソリューションバージョンを作成すると、ソリューションバージョンのメトリクスで最適化パフォーマンスを表示できます。「最適化パフォーマンスの測定」を参照してください。

ソリューションの最適化 (AWS SDKs)

User-Personalization または Personalized-Ranking レシピを使用する場合にのみ、目的に合わせて最適化できます。

を使用して追加の目標に合わせてソリューションを最適化するには AWS SDKs、新しいソリューションを作成し、ソリューションの solutionConfig オブジェクトの optimizationObjectiveキーを使用して目的の詳細を指定します。optimizationObjective には以下のフィールドがあります。

  • itemAttribute: 目的に関連する、データグループの Items データセットの数値メタデータ列の名前を指定します。

  • objectiveSensitivity: レコメンデーションを生成するときに、ソリューションが目的を重要視するレベルを指定します。目的の感度レベルは、Amazon Personalize が、目的と、アイテムインタラクションデータを介した関連性に基づいて推奨されるアイテムのバランスをとる方法を設定します。objectiveSensitivity は、OFFLOWMEDIUM、または HIGH にすることができます。詳細については、「目的の重点の置き方と関連性のバランシング」を参照してください。

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

ソリューションの準備が整ったら、新しいソリューションバージョンを作成します (コードの例については、「ソリューションバージョンの作成 (AWS SDKs)」を参照してください)。ソリューションバージョンを作成すると、ソリューションバージョンのメトリクスで最適化パフォーマンスを表示できます。「最適化パフォーマンスの測定」を参照してください。

SDK for Python (Boto3)

追加の目的向けに最適化されたソリューションを作成するには、次の create_solution メソッドを使用します。solution namedataset 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 ノートブック

追加の目的ベースの項目メタデータ用に最適化されたソリューションを作成する方法を示すサンプル Jupyter Notebook については、Amazon Personalize サンプル GitHub リポジトリの objective_optimization フォルダを参照してください。