イベントの記録 - Amazon Personalize

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

イベントの記録

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

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

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

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

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

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

  • イベントトラッカー

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

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

  • カタログ内のアイテムを操作したユーザーからのインタラクションレコードは少なくとも1000件です。これらのインタラクションは、一括インポート、ストリーミングイベント、またはその両方から発生する可能性があります。

  • 少なくともそれぞれ 2 つのインタラクションを持つ 25 つの一意のユーザー ID

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

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

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

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

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

  • 新規ユーザー (レコメンダーまたはソリューションバージョンの作成に使用したデータに含まれていなかったユーザー) に関して記録されたイベントについては、レコメンデーションは、最初は人気のあるアイテムのみについてのものとなります。ユーザーのためにより多くのイベントを記録すると、レコメンデーションの関連性が高まります。Amazon Personalize は新しいユーザーデータを保存し、Amazon Personalize がレコメンダーを更新するとき、または新しいソリューションバージョンを手動でトレーニングするときに使用します。

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

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

イベントトラッカーは、新しいイベントデータ用に宛先データセットグループを指定します。イベントトラッカーは、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 オペレーションを呼び出します。次の例で、PutEvents1 つのイベントを渡すオペレーション。対応する 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 である必要があります。

匿名ユーザー向けのイベントの録画

ユーザーがアカウントを作成する前に、ユーザーのイベントを記録できます。これにより、匿名ユーザー向けのレコメンデーションを取得できます。提供できますsessionIdとしてuserIDあなたの中にGetRecommendationsをリクエストします。

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

ユーザーの継続的なイベント履歴を作成するには、少なくとも 1 つのイベントをsessionId匿名のイベントと彼らの新しいイベントからuserId。その後、のイベントをいくつでも記録できますuserId。-sessionId変わる可能性があります。次回の完全再トレーニング中に、Amazon Personalize はuserIdイベントの履歴はsessionId。再トレーニングは、次回、トレーニングモードを FULL に設定して新しいソリューションバージョンを作成するとき (カスタムデータセットグループ) でも、レコメンダー向けの次回の自動再トレーニング (ドメインデータセットグループ) でもかまいません。

再トレーニングが完了すると、匿名セッションからの sessionId で追跡されたアクティビティと、その userId に追跡されたイベントの両方に基づいてレコメンデーションが行われます。

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

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

重要

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

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

イベントのインプレッションデータを手動で記録するには、PutEvents コマンドの impression 入力パラメータにインプレッションをリストします。次のコード例は、recommendationIdimpressionで PutEvents Python (Boto3) または SDK for Java 2.x のいずれかで操作します。両方を含めると、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 のモニタリング」を参照してください。

サンプル Jupyter ノートブック

Amazon Personalize を使用してイベントトラッカーを使用してユーザーのリアルタイムの行動に対応する方法を示すサンプル Jupyter ノートブックについては、PutEvents操作、を参照してください2.view_Campaign_and_Interactions.ipynb()getting_startedのフォルダamazon-personalize-samples GitHub repository。

サンプル実装

レコメンデーションを操作するユーザーからのイベントをストリーミングする方法を示す簡単な例については、streaming_eventsAmazon Personalize サンプル Github リポジトリにあります。

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

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

  • レスポンスキャッシュ

  • アイテムメタデータに基づくレコメンデーションのデコレーション

  • A/B テスト

  • API 認証