イベントの記録 - Amazon Personalize

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

イベントの記録

ドメインデータセットグループとカスタムデータセットグループの両方を使用すると、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 つだけを保存します。

Apache Kafka を使用している場合は、Amazon Personalize の Kafka コネクタを使用して Amazon Personalize にリアルタイムでデータをストリーミングできます。詳細については、Github リポジトリの Amazon Personalize 用 Kafka コネクタを参照してくださいpersonalize-kafka-connector

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

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

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

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

  • イベントトラッカー

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

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

  • カタログ内のアイテムを操作したユーザーからのインタラクションを最低1000件記録します。これらのインタラクションは、一括インポート、ストリーミングイベント、あるいはその両方による可能性があります。

  • 25以上のユニークなユーザーIDで、それぞれに少なくとも2つのインタラクションがあります。

品質を推奨するには、少なくとも1,000人のユーザーから50,000件以上のインタラクションがあり、それぞれ2回以上のインタラクションがあることをおすすめします。

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

キャンペーン (カスタムソリューションの場合) またはレコメンダーの作成後、Amazon Personalize は、パーソナライズされたレコメンデーションを生成する際に、インポートから数秒以内に既存のアイテムに関して記録された新しいイベントデータを自動的に使用します。既存の項目は、最新のトレーニングで使用したデータに含まれていた項目です。

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

関連商品、最も閲覧数の多い商品、人気上昇中の商品など、パーソナライズされていないレコメンデーションについては、モデルを再トレーニングするか、レコメンダーが自動的に更新されるまで待つ必要があります。

  • 新しいアイテム (モデルのトレーニングに使用したデータに含めなかったアイテム) に関して記録されたイベントについては、[Top picks for you] (上位のおすすめ) および [Recommended for for you] (おすすめ商品) のユースケース (ドメインデータセットグループの場合) 向けにレコメンダーを作成したか、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 を使用してイベントをそのユーザーに関連付けます。詳細については、「匿名ユーザーのためにより多くのイベントを記録する」を参照してください。

以下のレシピとユースケースは、レコメンデーションのリアルタイム更新をサポートしています。ユーザーへのレコメンデーションは、アイテムとのインタラクションを記録すると更新されます。

  • User-Personalization レシピ

  • Personalized-Ranking レシピ

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

  • おすすめ商品 (VIDEO_DEMAND のユースケース)

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

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

イベントトラッカーには、PutEventsオペレーションを使用するときにパラメータとして渡す追跡 ID が含まれています。その後、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 オペレーションを呼び出します。次の例は、1 PutEvents つのイベントを渡す操作を示しています。対応する 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 はユーザーに関するより多くのインタラクションデータを提供し、より関連性の高いレコメンデーションの生成に役立ちます。

ユーザーの継続的なイベント履歴を作成するには、匿名イベントのイベントと新しいイベントを含むイベントを少なくとも 1 userId つ記録します。sessionIdその後、のイベントをいくつでも記録できますuserIdsessionId彼らは変わる可能性があります。次回の完全な再トレーニングでは、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 入力パラメータにインプレッションをリストします。次のコードサンプルは、Python 用 SDK (Boto3) または SDK for Java 2.x 用 SDK PutEvents のいずれかを使用してオペレーションに a と an impression を含める方法を示しています。recommendationId両方を含めると、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 Personalize SOURCE_NAME_UNDEFINED はレポートでソースにラベルを付けます。

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

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)

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

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 ノートブック

Amazon Personalize を使用して、PutEventsイベントトラッカーとオペレーションを使用するユーザーのリアルタイムの行動に対応する方法を示すサンプル Jupyter ノートブックについては、リポジトリの getting_started フォルダーにある 2.view_Campaign_and_Interactions.ipynb を参照してください。amazon-personalize-samplesGitHub

サードパーティーのイベント追跡サービス

以下の顧客データプラットフォーム (CDP) は、アプリケーションからイベントデータを収集して Amazon Personalize に送信するのに役立ちます。

サンプル実装

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

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

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

  • レスポンスキャッシュ

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

  • A/B テスト

  • API 認証