「Amazon Personalizeを使用してリアルタイムで個別のおすすめを実施しましょう」
「Amazon Personalizeを活用して、リアルタイムでパーソナライズされた個別のおすすめを提供しましょう!」
基本的に、機械学習(ML)技術はデータから学習し、予測を行います。ビジネスはMLを活用した個別化サービスを使用して、顧客体験を向上させます。このアプローチにより、ビジネスはデータを活用して具体的な洞察を得ることができ、収益やブランドのロイヤリティの成長を支援することができます。
Amazon PersonalizeはMLによるデジタルトランスフォーメーションを加速し、既存のウェブサイト、アプリケーション、メールマーケティングシステムなどに個別化された推薦を統合することをより簡単にします。Amazon Personalizeは、MLの専門知識を必要とせずにカスタマイズされた個別化エンジンを迅速に実装することができます。Amazon Personalizeは必要なインフラストラクチャを用意し、データの処理、特徴の識別、最適なアルゴリズムの使用、モデルのトレーニング、最適化、ホスティングなど、機械学習(ML)パイプライン全体を管理します。結果はAPIを介して提供され、最低料金や事前のコミットメントは必要ありません。
記事「Amazon Personalizeを使用したリアルタイムの個別化推薦の設計」では、Amazon PersonalizeとAWSの特化データサービスを使用して、リアルタイムの個別化推薦システムの参考実装を紹介しています。
ソリューションの概要
リアルタイムの個別化推薦ソリューションは、Amazon Personalize、Amazon Simple Storage Service(Amazon S3)、Amazon Kinesis Data Streams、AWS Lambda、およびAmazon API Gatewayを使用して実装されます。
- 2024年のトップ10のAI主導のデータ分析企業
- 「NVIDIA Grace Hopperスーパーチップは、グローバルの研究施設、システムメーカー、クラウドプロバイダーで40以上のAIスーパーコンピュータを駆動しています」
- 「Pythonによるロジスティック回帰のエラーのデバッグのベストプラクティス」
アーキテクチャの実装手順は以下の通りです:
- データの準備 – データセットグループ、スキーマ、アイテム、相互作用、ユーザーデータを表すデータセットの作成から始めます。
- モデルのトレーニング – データのインポート後、ユースケースにマッチするレシピを選択し、ソリューションの作成を行ってモデルのトレーニングを行います。ソリューションバージョンが準備できたら、ソリューションバージョン用のキャンペーンを作成できます。
- リアルタイムの推薦の取得 – キャンペーンを作成すると、アプリケーションでキャンペーンへの呼び出しを統合することができます。その際、GetRecommendationsやGetPersonalizedRanking APIを使用して、Amazon Personalizeからリアルタイムの推薦をリクエストします。
詳細については、Amazon Personalizeを使用したリアルタイムの個別化推薦の設計を参照してください。
以下の図は、ソリューションのアーキテクチャを示しています。
実装
この実装は、ユーザーが映画データベースとのやり取りを通じて時間の経過とともにリアルタイムの映画推薦をするというユースケースで実演されます。
このソリューションは以下の手順で実装されます:
- 前提条件(データの準備)
- 開発環境のセットアップ
- ソリューションの展開
- ソリューションバージョンの作成
- キャンペーンの作成
- イベントトラッカーの作成
- 推薦の取得
- リアルタイムのやり取りを取り込む
- リアルタイムの推薦を検証する
- クリーンアップ
前提条件
始める前に、以下の前提条件を満たしていることを確認してください:
- トレーニングデータの準備 – データを準備し、S3バケットに指示に従ってアップロードします。この特定のユースケースでは、相互作用データとアイテムデータをアップロードします。相互作用は、トレーニングデータとして記録してインポートするイベントです。Amazon Personalizeは、主に相互作用データをインポートする相互作用データセットに基づいて推薦を生成します。クリック、ウォッチ、またはライクなど、複数のイベントタイプを記録することができます。Amazon Personalizeによって作成されたモデルは、ユーザーの過去の相互作用に基づいて提案できますが、これらの提案の品質は、モデルがユーザーやアイテムの関連性に関するデータを持っている場合に向上することができます。ユーザーがアイテムデータセットでドラマとして分類された映画に関与した場合、Amazon Personalizeは同じジャンルの映画(アイテム)を提案します。
- 開発環境のセットアップ – AWS Command Line Interface (AWS CLI)をインストールします。
- AWSアカウントでCLIを構成する – AWS CLIを構成してAWSアカウント情報を使用します。
- AWS Cloud Development Kit (AWS CDK)をインストールおよびブートストラップ
ソリューションの展開
ソリューションを展開するには、以下の手順を実行します:
- リポジトリをクローンしてデスクトップの新しいフォルダに保存します。
- スタックをAWS環境に展開します。
ソリューションバージョンの作成
ソリューションは、Amazon Personalizeのレシピ、カスタマイズされたパラメータ、および1つ以上のソリューションバージョン(トレーニング済みモデル)の組み合わせを指します。前の手順でCDKプロジェクトを展開すると、自動的にユーザパーソナライゼーションレシピを持つソリューションが作成されます。ソリューションバージョンはトレーニングされた機械学習モデルを指します。実装用のソリューションバージョンを作成します。
キャンペーンの作成
キャンペーンは、プロビジョニングされたトランザクション容量を持つソリューションバージョン(トレーニングモデル)を展開し、リアルタイムの推薦を生成します。実装用のキャンペーンを作成します。
イベントトラッカーの作成
Amazon Personalizeは、リアルタイムのイベントデータのみ、過去のイベントデータのみ、または両方に基づいて推薦を行うことができます。リアルタイムイベントを記録して相互作用データを構築し、ユーザーの最新のアクティビティから学習するために、Amazon Personalizeがデータを新鮮に保ち、Amazon Personalizeの推薦の関連性を向上させます。イベントを記録するには、イベントトラッカーを作成する必要があります。イベントトラッカーは、新しいイベントデータをデータセットグループの相互作用データセットにリダイレクトします。実装用のイベントトラッカーを作成します。
おすすめを取得する
この使用例では、相互作用データセットは映画のIDで構成されています。そのため、ユーザーに提示されるおすすめは、彼らの個人の好みに最も適合する映画のIDで構成されています。これは、ユーザーの過去の相互作用から決定されます。ユーザーの関連付けられたuserID
、ユーザーのために必要なおすすめの結果の数、およびキャンペーンARNを使用して、getRecommendations
APIを使用してユーザーのためのパーソナライズされたおすすめを取得できます。キャンペーンARNは、Amazon Personalizeコンソールメニューで見つけることができます。
たとえば、以下のリクエストは、userId
が429のユーザーに対して5つのおすすめを取得します。
curl --location 'https://{your-api-id}.execute-api.{your-region}.amazonaws.com/prod/getRecommendations?campaignArn={campaignArn}&userId=429&numResults=5'
リクエストからのレスポンスは次のようになります:
{ "$metadata": { "httpStatusCode": 200, "requestId": "7159c128-4e16-45a4-9d7e-cf19aa2256e8", "attempts": 1, "totalRetryDelay": 0 }, "itemList": [ { "itemId": "596", "score": 0.0243044 }, { "itemId": "153", "score": 0.0151695 }, { "itemId": "16", "score": 0.013694 }, { "itemId": "261", "score": 0.013524 }, { "itemId": "34", "score": 0.0122294 } ], "recommendationId": "RID-1d-40c1-8d20-dfffbd7b0ac7-CID-06b10f"}
API呼び出しによって返されるアイテムは、Amazon Personalizeがユーザーに基づいて提案する映画です。
このコンテキストでは、提供されるスコア値は、0から1.0の範囲の浮動小数点数を表します。これらの値は、この使用例の現在のキャンペーンと関連するレシピに基づいて決定されます。これらの値は、総合的なデータセットに存在するすべてのアイテムに割り当てられたスコアの集計に基づいて決定されます。
リアルタイムの相互作用を取り込む
前の例では、映画データベースとの過去の相互作用に基づいて、IDが429のユーザーに対しておすすめが取得されました。リアルタイムのおすすめの場合、アイテムとのユーザーの相互作用はリアルタイムでAmazon Personalizeに取り込まれる必要があります。これらの相互作用はAmazon Personalizeのイベントトラッカーを介しておすすめシステムに取り込まれます。相互作用のタイプ、またはEventType
とも呼ばれるものは、相互作用データセット(EVENT_TYPE
)の同じ名前の列によって指定されます。この例では、イベントは「ウォッチ」または「クリック」というタイプにすることができますが、アプリケーションの要件に合わせて独自のイベントタイプを持つことができます。
この例では、アイテムのユーザーとのイベントを生成する公開APIは、「interactions」パラメータを受け取ります。これは、現在のタイムスタンプでの1つの要素(itemId
)に対するユーザー(UserId
)のイベント(interactions
)の数を示します。 trackingId
パラメータはAmazon Personalizeコンソールやイベントトラッカーリクエストの作成の応答に見つけることができます。
この例では、「putEvent」リクエストを示します。現在のタイムスタンプで、ユーザーの相互作用の時間に「sentAt」を設定する必要があります。ただし、本番では、この「sentAt」はユーザーの相互作用の時点に設定する必要があります。次の例では、この投稿のAPIリクエストを記述したエポック時刻形式の時点に設定します。イベントはAPI Gatewayを介してAmazon Kinesis Data Streamsに送信されるため、ストリーム名とPartitionKeyパラメータを送信する必要があります。
curl --location 'https://iyxhva3ll6.execute-api.us-west-2.amazonaws.com/prod/data' --header 'Content-Type: application/json' --data '{ "stream-name": "my-stream","Data": {"userId" : "429", "interactions": 1, "itemId": "185", "trackingId" : "c90ac6d7-3d89-4abc-8a70-9b09c295cbcd", "eventType": "click", "sentAt":"1698711110"},"PartitionKey":"userId"}'
以下のような確認応答を受け取ります:
{ "Message": "イベントの送信に成功しました", "data": { "EncryptionType": "KMS", "SequenceNumber": "49..........1901314", "ShardId": "shardId-xxxxxxx" }}
リアルタイムレコメンデーションの検証
インタラクションのデータセットが更新されたため、新しいインタラクションを考慮してレコメンデーションが自動的に更新されます。リアルタイムで更新されたレコメンデーションを検証するために、同じユーザーID 429に対して再度getRecommendations APIを呼び出すことができます。その結果は以前のものと異なるはずです。以下の結果は、idが594の新しいレコメンデーションと、idが16、596、153、261のレコメンデーションのスコアが変更されたことを示しています。これらのアイテムは新しい映画ジャンル(「Animation|Children|Drama|Fantasy|Musical」)をトップ5のレコメンデーションに提供しています。
リクエスト:
curl --location 'https://{your-api-id}.execute-api.{your-region}.amazonaws.com/prod/getRecommendations?campaignArn={campaignArn} &userId=429&numResults=5'
レスポンス:
{ "$metadata": { "httpStatusCode": 200, "requestId": "680f2be8-2e64-47d7-96f7-1c4aa9b9ac9d", "attempts": 1, "totalRetryDelay": 0 }, "itemList": [ { "itemId": "596", "score": 0.0288085 }, { "itemId": "16", "score": 0.0134173 }, { "itemId": "594", "score": 0.0129357 }, { "itemId": "153", "score": 0.0129337 }, { "itemId": "261", "score": 0.0123728 } ], "recommendationId": "RID-dc-44f8-a327-482fb9e54921-CID-06b10f"}
このレスポンスは、Amazon Personalizeから提供されたレコメンデーションがリアルタイムで更新されたことを示しています。
クリーンアップ
不要な料金を回避するために、リソースをクリーンアップして、ソリューションの実装をクリーンアップします。
結論
この記事では、Amazon Personalizeを使用してリアルタイムの個別推奨システムを実装する方法を紹介しました。Amazon Personalizeとのインタラクションは、curlというコマンドラインツールを使用して実行されましたが、これらのAPI呼び出しはビジネスアプリケーションに統合され、同じ結果を得ることができます。
ユースケースに新しいレシピを選択するには、リアルタイムパーソナライゼーションを参照してください。Amazon Personalizeによって行われるレコメンデーションの影響を測定するには、レコメンデーションの影響を測定することを参照してください。
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles