イベントの記録 - Amazon Personalize

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

イベントの記録

ドメインデータセットグループとカスタムデータセットグループの両方を使用すると、Amazon Personalize は、リアルタイムイベントデータのみ、履歴イベントデータのみ (「バルクレコードのインポート」を参照)、または両方の組み合わせに基づいてレコメンデーションを作成できます。イベントをリアルタイムで記録して、Amazon Personalize がユーザーの最新のアクティビティから学習し、ユーザーがアプリケーションを使用するごとにレコメンデーションを更新できるようにします。これにより、インタラクションデータが最新の状態に保たれ、Amazon Personalize のレコメンデーションの関連性が向上します。

AWS SDK、AWS Amplify、または AWS Command Line Interface (AWS CLI) を使用して、リアルタイムのイベントを記録できます。イベントを記録すると、Amazon Personalize は、イベントデータをデータセットグループの Interactions データセットに追加します。タイムスタンプとプロパティがまったく同じ2つのイベントを記録した場合、Amazon Personalize はどちらかのイベントのみを保持します。

AWSAmplify には、 JavaScript ウェブクライアントアプリケーションからのイベントを記録するためのライブラリと、サーバーコードにイベントを記録するためのライブラリが含まれています。詳細については、「Amplify-分析」を参照してください。

イベントの記録とモデルのトレーニングに関する要件

イベントを記録するには、以下が必要です。

  • Interactions データセットを含むデータセットグループ。これは空の場合があります。開始方法 ガイドを完了した場合は、作成したものと同じデータセットグループおよびデータセットを使用できます。データセットグループとデータセットの作成については、「データの準備とインポート」を参照してください。

  • イベントトラッカー

  • PutEvents オペレーションの呼び出し。

空の Interactions データセットから始めて、十分なデータを記録したら、新しく記録されたイベントのみを使用してモデルをトレーニングできます。すべてのユースケース(ドメインデータセットグループ)とレシピ(カスタムデータセットグループ)では、トレーニングの前にインタラクションデータに次のものが含まれている必要があります。

  • カタログ内のアイテムとやり取りしたユーザーからのインタラクションレコードは最低1000件です。これらのインタラクションは、一括インポートによるものでも、ストリーミングイベントによるものでも、その両方によるものでもかまいません。

  • 少なくともそれぞれ 2 つのインタラクションを持つ 25 以上の一意のユーザー Id が必要です。

リアルタイムイベントがレコメンデーションに与える影響

キャンペーン (カスタムソリューションの場合) またはレコメンダー (ドメインデータセットグループの場合) を作成すると、Amazon Personalize は、レコメンデーションを生成する際に、既存のアイテム (最新モデルのトレーニングまたは最新のレコメンダーの作成に使用したデータに含めたアイテム) に関して記録された新しいイベントデータを自動的に使用します。これは、モデルの再トレーニングを必要としません (カスタムソリューションに SIMS または Popularity-Count レシピを使用している場合を除く)。

代わりに、Amazon Personalize は、新しく記録されたイベントデータをユーザーの履歴に追加します。その後、Amazon Personalize は、ユーザー (およびこのユーザーのみ) 向けのレコメンデーションを生成するときに、変更されたデータを使用します。

  • 新しいアイテム (モデルのトレーニングに使用したデータに含めなかったアイテム) に関して記録されたイベントについては、[Top picks for you] (上位のおすすめ) および [Recommended for you] (おすすめ商品) のユースケース) 向けにレコメンダーを作成したか、User-を使用してモデル (ソリューションバージョン) をトレーニングした場合パーソナライゼーション、Amazon Personalize は、2 時間ごとにモデルを自動的に更新します。各更新が完了すると、新しいアイテムがレコメンデーションに影響を与えます。User-Personalization レシピの自動更新については、「User-Personalization レシピ」を参照してください。

    その他のドメインのユースケースでは、Amazon Personalize は、レコメンダーの作成日から 7 日ごとにレコメンダー用の新しいモデルを自動的にトレーニングします。その他のカスタムレシピについては、新しいレコードがレコメンデーションに影響を与えることができるように、モデルを再トレーニングする必要があります。Amazon Personalize は、新しいアイテムに関して記録されたイベントを保存します。新しいソリューションバージョンを作成すると (新しいモデルをトレーニングすると)、この新しいデータは、ユーザー向けの Amazon Personalize のレコメンデーションに影響を与えます。

  • 新規ユーザー (レコメンダーまたはソリューションバージョンの作成に使用したデータに含まれていなかったユーザー) に関して記録されたイベントについては、レコメンデーションは、最初は人気のあるアイテムのものとなります。ユーザーデータセットにユーザーに関するメタデータを提供し、ユーザーカスタマイズやパーソナライズランキングなどのメタデータを使用するレシピを選択すると、これらの人気アイテムの方がユーザーにとってより関連性が高くなります。

    ユーザーのためにより多くのイベントを記録すると、レコメンデーションの関連性が高まります。Amazon Personalize は新しいユーザーデータを保存し、Amazon Personalize が自動更新を実行するとき、または新しいソリューションバージョンを手動でトレーニングするときにトレーニングに使用されます。

    新規の匿名ユーザー (userId を持たないユーザー) については、Amazon Personalize は、ユーザーがログインする前に、PutEvents 操作で渡した sessionId を使用してイベントをそのユーザーに関連付けます。詳細については、以下を参照してください。匿名ユーザーのイベントを記録する

以下のレシピとユースケースでは、レコメンデーションをリアルタイムで更新できます。ユーザーへのレコメンデーションは、アイテムとのやり取りを記録すると更新されます。

  • User-Personalization レシピ

  • Personalized-Ranking レシピ

  • あなたにおすすめ (E コマースのユースケース)

  • 上位のおすすめ (VIDEO_ON_ON_ON_ON_ON_ON_ON_ON_ON_ON_ON

イベントトラッカーの作成

イベントトラッカーは、新しいイベントデータ用に宛先データセットグループを指定します。イベントトラッカーは、Amazon Personalize コンソールまたは CreateEventTracker API 操作を使用して作成します。ターゲットの Interactions データセットを含むデータセットグループの Amazon リソースネーム (ARN) をパラメータとして渡します。Amazon Personalize コンソールを使用してイベントトラッカーを作成する手順については、「イベントトラッカーの作成 (コンソール)」を参照してください。

イベントトラッカーには追跡 ID が含まれます。これは、PutEvents操作を使用するときにパラメータとして渡します。その後、Amazon Personalize は、イベントトラッカーで指定したデータセットグループの Interactions データセットに新しいイベントデータを追加します。

注記

データセットグループ用に作成できるイベントトラッカーは 1 つだけです。

Python
import boto3 personalize = boto3.client('personalize') response = personalize.create_event_tracker( name='MovieClickTracker', datasetGroupArn='arn:aws:personalize:us-west-2:acct-id:dataset-group/MovieClickGroup' ) print(response['eventTrackerArn']) print(response['trackingId'])

イベントトラッカーの ARN と追跡 ID が表示されます。次に例を示します。

{ "eventTrackerArn": "arn:aws:personalize:us-west-2:acct-id:event-tracker/MovieClickTracker", "trackingId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" }
AWS CLI
aws personalize create-event-tracker \ --name MovieClickTracker \ --dataset-group-arn arn:aws:personalize:us-west-2:acct-id:dataset-group/MovieClickGroup

イベントトラッカーの ARN と追跡 ID が表示されます。次に例を示します。

{ "eventTrackerArn": "arn:aws:personalize:us-west-2:acct-id:event-tracker/MovieClickTracker", "trackingId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" }
SDK for Java 2.x
public static String createEventTracker(PersonalizeClient personalizeClient, String eventTrackerName, String datasetGroupArn) { String eventTrackerId = null; String eventTrackerArn = null; long maxTime = 3 * 60 * 60; long waitInMilliseconds = 30 * 1000; String status; try { CreateEventTrackerRequest createEventTrackerRequest = CreateEventTrackerRequest.builder() .name(eventTrackerName) .datasetGroupArn(datasetGroupArn) .build(); CreateEventTrackerResponse createEventTrackerResponse = personalizeClient.createEventTracker(createEventTrackerRequest); eventTrackerArn = createEventTrackerResponse.eventTrackerArn(); eventTrackerId = createEventTrackerResponse.trackingId(); System.out.println("Event tracker ARN: " + eventTrackerArn); System.out.println("Event tracker ID: " + eventTrackerId); maxTime = Instant.now().getEpochSecond() + maxTime; DescribeEventTrackerRequest describeRequest = DescribeEventTrackerRequest.builder() .eventTrackerArn(eventTrackerArn) .build(); while (Instant.now().getEpochSecond() < maxTime) { status = personalizeClient.describeEventTracker(describeRequest).eventTracker().status(); System.out.println("EventTracker status: " + status); if (status.equals("ACTIVE") || status.equals("CREATE FAILED")) { break; } try { Thread.sleep(waitInMilliseconds); } catch (InterruptedException e) { System.out.println(e.getMessage()); } } return eventTrackerId; } catch (PersonalizeException e){ System.out.println(e.awsErrorDetails().errorMessage()); System.exit(1); } return eventTrackerId; }

PutEvents操作によるイベントの記録

イベントを記録するには、PutEvents オペレーションを呼び出します。以下の例は、1PutEvents つのイベントを渡す操作を示しています。対応する Interactions スキーマが表示され、Interactions データセットから行の例が表示されます。

アプリケーションは、ユーザーが最初にウェブサイトにアクセスしたとき、またはアプリケーションを使用したときに、sessionId を生成します。Amazon Personalize は、sessionId を使用して、ユーザーがログインする前にイベントをそのユーザーに関連付けます (匿名)。詳細については、を参照してください匿名ユーザーのイベントを記録する

イベントリストは Event オブジェクトの配列です。各イベントについて eventType が必要ですが、この例では、eventType データはスキーマに含まれていないため、トレーニングでは使用されません。要件を満たすためにプレースホルダーの値を指定できます。

InteractionsuserIditemIdsentAt パラメータは、対応する履歴データセットの USER_ID、ITEM_ID、TIMESTAMP フィールドにマップされます。詳細については、「データセットとスキーマ」を参照してください。

対応するインタラクションスキーマ

Interactions schema: USER_ID, ITEM_ID, TIMESTAMP Interactions dataset: user123, item-xyz, 1543631760

コードサンプル

Python
import boto3 personalize_events = boto3.client(service_name='personalize-events') personalize_events.put_events( trackingId = 'tracking_id', userId= 'USER_ID', sessionId = 'session_id', eventList = [{ 'sentAt': TIMESTAMP, 'eventType': 'eventTypePlaceholder', 'itemId': 'ITEM_ID' }] )
AWS CLI
aws personalize-events put-events \ --tracking-id tracking_id \ --user-id USER_ID \ --session-id session_id \ --event-list '[{ "sentAt": "TIMESTAMP", "eventType": "eventTypePlaceholder", "itemId": "ITEM_ID" }]'
SDK for Java 2.x
public static void putEvents(PersonalizeEventsClient personalizeEventsClient, String trackingId, String sessionId, String userId, String itemId) { try { Event event = Event.builder() .sentAt(Instant.ofEpochMilli(System.currentTimeMillis() + 10 * 60 * 1000)) .itemId(itemId) .eventType("typePlaceholder") .build(); PutEventsRequest putEventsRequest = PutEventsRequest.builder() .trackingId(trackingId) .userId(userId) .sessionId(sessionId) .eventList(event) .build(); int responseCode = personalizeEventsClient.putEvents(putEventsRequest) .sdkHttpResponse() .statusCode(); System.out.println("Response code: " + responseCode); } catch (PersonalizeEventsException e) { System.out.println(e.awsErrorDetails().errorMessage()); } }

この例を終了したら、必要なプロパティのみを使用してモデルのトレーニングに進みます。

次の例は、イベント値でトレーニングするデータを送信する方法を示しています。また、異なる種類 ('like' と 'rating') の複数のイベントが渡される様子も示します。この場合は、CreateSolution オペレーションでトレーニングするイベントタイプを指定する必要があります (次の 「イベントとソリューション」を参照)。この例では、特定のレシピによってメタデータとして使用される追加のプロパティ numRatings の記録も示しています。

Interactions schema: USER_ID, ITEM_ID, TIMESTAMP, EVENT_TYPE, EVENT_VALUE, NUM_RATINGS Interactions dataset: user123, movie_xyz, 1543531139, rating, 5, 12 user321, choc-ghana, 1543531760, like, 4 user111, choc-fake, 1543557118, like, 3
Python
import boto3 import json personalize_events = boto3.client(service_name='personalize-events') personalize_events.put_events( trackingId = 'tracking_id', userId= 'user555', sessionId = 'session1', eventList = [{ 'eventId': 'event1', 'sentAt': '1553631760', 'eventType': 'like', 'properties': json.dumps({ 'itemId': 'choc-panama', 'eventValue': 4, 'numRatings': 0 }) }, { 'eventId': 'event2', 'sentAt': '1553631782', 'eventType': 'rating', 'properties': json.dumps({ 'itemId': 'movie_ten', 'eventValue': 3, 'numRatings': 13 }) }] )
AWS CLI
aws personalize-events put-events \ --tracking-id tracking_id \ --user-id user555 \ --session-id session1 \ --event-list '[{ "eventId": "event1", "sentAt": "1553631760", "eventType": "like", "properties": "{\"itemId\": \"choc-panama\", \"eventValue\": \"true\"}" }, { "eventId": "event2", "sentAt": "1553631782", "eventType": "rating", "properties": "{\"itemId\": \"movie_ten\", \"eventValue\": \"4\", \"numRatings\": \"13\"}" }]'
SDK for Java 2.x
public static void putMultipleEvents(PersonalizeEventsClient personalizeEventsClient, String trackingId, String sessionId, String userId, String event1Type, Float event1Value, String event1ItemId, int event1NumRatings, String event2Type, Float event2Value, String event2ItemId, int event2NumRatings) { ArrayList<Event> eventList = new ArrayList<Event>(); try { Event event1 = Event.builder() .eventType(event1Type) .sentAt(Instant.ofEpochMilli(System.currentTimeMillis() + 10 * 60 * 1000)) .itemId(event1ItemId) .eventValue(event1Value) .properties("{\"numRatings\": "+ event1NumRatings +"}") .build(); eventList.add(event1); Event event2 = Event.builder() .eventType(event2Type) .sentAt(Instant.ofEpochMilli(System.currentTimeMillis() + 10 * 60 * 1000)) .itemId(event2ItemId) .eventValue(event2Value) .properties("{\"numRatings\": "+ event2NumRatings +"}") .build(); eventList.add(event2); PutEventsRequest putEventsRequest = PutEventsRequest.builder() .trackingId(trackingId) .userId(userId) .sessionId(sessionId) .eventList(eventList) .build(); int responseCode = personalizeEventsClient.putEvents(putEventsRequest) .sdkHttpResponse() .statusCode(); System.out.println("Response code: " + responseCode); } catch (PersonalizeEventsException e) { System.out.println(e.awsErrorDetails().errorMessage()); } }
注記

プロパティキーは、Interactions スキーマのフィールドと一致するキャメルケース名を使用します。例えば、フィールド「NUM_RATINGS」がインタラクションスキーマで定義されている場合、プロパティキーは numRatings である必要があります。

匿名ユーザーのイベントを記録する

ユーザーがアカウントを作成する前に、ユーザーのイベントを記録できます。これにより、匿名ユーザー向けの推奨事項を取得できます。sessionIduserIDGetRecommendationsをリクエストのとおりに提供できます。

匿名ユーザーのイベントを記録して、ログイン前後のイベントを含む継続的なイベント履歴を構築します。これにより、Amazon Personalize はユーザーに関するより多くのインタラクションデータを提供し、より関連性の高いレコメンデーションを生成するのに役立ちます。

ユーザーの継続的なイベント履歴を構築するには、sessionId匿名イベントとその新しいイベントから取得したイベントを少なくとも 1userId つ記録します。その後、のイベントをいくつでも記録できますuserIdsessionId変更できます。次回のフル再トレーニング時に、Amazon PersonalizeuserIdsessionId はをに追跡されたイベント履歴に関連付けます。再トレーニングは、次回トレーニングモードを FULL に設定して新しいソリューションバージョンを作成するとき(カスタムデータセットグループ)にすることも、レコメンダー向けの次回の自動再トレーニング(ドメインデータセットグループ)にすることもできます。

再トレーニングが完了すると、匿名セッションのSessionIDに追跡されたアクティビティと、そのuserId に追跡されたイベントの両方に基づいて推奨事項が作成されます。

インプレッションデータの記録

User-Personalizationレシピを使用するか、ドメインデータセットグループのデータセットのスキーマに IMPRESSIONS フィールドを追加すると、 PutEventsオペレーションのインプレッションデータを記録できます。インプレッションは、ユーザーが特定のアイテムを操作した (例えば、クリックや視聴した) ときに表示されたアイテムのリストです。Amazon Personalize は、インプレッションデータを使用して探索をガイドします。レコメンデーションには、インタラクションデータや関連性が少ないアイテムが含まれます。Amazon Personalize がモデル化できる暗黙的および明示的なインプレッションについては、「インプレッションデータ」を参照してください。

重要

PutEvents リクエストで競合する暗黙的および明示的なインプレッションデータを提供する場合、Amazon Personalize は、デフォルトで明示的なインプレッションを使用します。

ユーザーに表示する Amazon Personalize のレコメンデーションをインプレッションデータとして記録するには、PutEvents リクエストに recommendationId を含めます。Amazon Personalize は、レコメンデーションデータに基づいて暗黙的なインプレッションを派生させます。

イベントのインプレッションデータを手動で記録するには、PutEvents コマンドの impression 入力パラメータにインプレッションをリストします。次のコードサンプルは、SDK for the (Boto3) または the SDK for Java 2.x のいずれかを使用して、と animpression を含める方法を示しています。recommendationId PutEvents 両方を含めると、Amazon Personalize は、デフォルトで明示的なインプレッションを使用します。

SDK for Python (Boto3)
import boto3 personalize_events = boto3.client(service_name='personalize-events') personalize_events.put_events( trackingId = 'tracking_id', userId= 'userId', sessionId = 'sessionId', eventList = [{ 'eventId': 'event1', 'eventType': 'rating', 'sentAt': 1553631760, 'itemId': 'item id', 'recommendationId': 'recommendation id', 'impression': ['itemId1', 'itemId2', 'itemId3'] }] )
SDK for Java 2.x

次の putEvents メソッドを使用して、インプレッションデータと recommendationId を使用してイベントを記録します。インプレッションのパラメータについては、itemId ArrayList のリストをとして渡します。

public static void putEvents(PersonalizeEventsClient personalizeEventsClient, String trackingId, String sessionId, String userId, String eventType, Float eventValue, String itemId, ArrayList<String> impressions, String recommendationId) { try { Event event = Event.builder() .eventType(eventType) .sentAt(Instant.ofEpochMilli(System.currentTimeMillis() + 10 * 60 * 1000)) .itemId(itemId) .eventValue(eventValue) .impression(impressions) .recommendationId(recommendationId) .build(); PutEventsRequest putEventsRequest = PutEventsRequest.builder() .trackingId(trackingId) .userId(userId) .sessionId(sessionId) .eventList(event) .build(); int responseCode = personalizeEventsClient.putEvents(putEventsRequest) .sdkHttpResponse() .statusCode(); System.out.println("Response code: " + responseCode); } catch (PersonalizeEventsException e) { System.out.println(e.awsErrorDetails().errorMessage()); } }

イベント指標とアトリビューションレポート

Amazon Personalize に送信されるイベントのタイプと数をモニタリングするには、Amazon CloudWatch メトリクスを使用します。詳細については、「Amazon Personalize のモニタリング」を参照してください。

CloudWatch レコメンデーションの影響を示すレポートを生成するには、指標アトリビューションを作成し、リアルタイムのレコメンデーションによるユーザーインタラクションを記録します。メトリックアトリビューションの作成については、を参照してくださいレコメンデーションの影響を測定する

各イベントには、ユーザーに表示したレコメンデーションのレコメンデーション ID を含めてください。または、サードパーティなどのイベントソースを含めてください。このデータをインポートして、さまざまなキャンペーン、レコメンダー、サードパーティを比較します。最大100のイベントアトリビューションソースをインポートできます。

  • を指定するとrecommendationId、Amazon Personalize はソースキャンペーンまたはレコメンダーを自動的に判断し、EVENT_ATTRIBUTION_SOURCE 列のレポートで識別します。

  • 両方の属性を指定した場合、Amazon Personalize ズはのみを使用しますeventAttributionSource

  • ソースを指定しない場合、Amazon PersonalizeSOURCE_NAME_UNDEFINED はレポートでソースにラベルを付けます。

次のコードは、eventAttributionSource PutEvents オペレーション内のイベントにを提供する方法を示しています。

response = personalize_events.put_events( trackingId = 'eventTrackerId', userId= 'userId', sessionId = 'sessionId123', eventList = [{ 'eventId': 'event1', 'eventType': 'watch', 'sentAt': '1667260945', 'itemId': '123', 'metricAttribution': { 'eventAttributionSource': 'thirdPartyServiceXYZ' } }] ) statusCode = response['ResponseMetadata']['HTTPStatusCode'] print(statusCode)

次のコードは、recommendationId PutEvents オペレーション内のイベントにを指定する方法を示しています。

response = personalize_events.put_events( trackingId = 'eventTrackerId', userId= 'userId', sessionId = 'sessionId123', eventList = [{ 'eventId': 'event1', 'eventType': 'watch', 'sentAt': '1667260945', 'itemId': '123', 'recommendationId': 'RID-12345678-1234-1234-1234-abcdefghijkl' }] ) statusCode = response['ResponseMetadata']['HTTPStatusCode'] print(statusCode)

サンプル Jupyter ノートブック

イベントトラッカーとPutEvents操作を使用してユーザーのリアルタイムの動作に反応するために Amazon Personalize を使用する方法を示すサンプル Jupyter ノートブックについては、amazon-personalize-samples GitHub リポジトリ。

サンプル実装

レコメンデーションを操作しているユーザーからのイベントをストリーミングする方法を示す簡単な例については、Amazon Personalize サンプル Github リポジトリの streaming_events を参照してください。

Amazon Personalize リソースとクライアントアプリケーションの間に位置するリアルタイム API をデプロイするためのソースコードとサポートファイルを含む完全な例については、AWSサンプル Github リポジトリの「リアルタイムパーソナライゼーション API」を参照してください。このプロジェクトには、以下の実装方法が含まれます。

  • ユーザーコンテキストとユーザーイベントの収集

  • レスポンスキャッシュ

  • アイテムメタデータに基づくデコレーションに関する推奨事項

  • A/B テスト

  • API 認証