イベントの記録 - Amazon Personalize

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

イベントの記録

Amazon Personalize は、リアルタイムに基づいて推奨事項を作成できます。eventデータのみ、履歴イベントデータのみ (一括レコードのインポート)、または両方の混合物。イベントをリアルタイムで記録し、Amazon Personalize がユーザーの最新のアクティビティから学習し、アプリケーションを使用する際に推奨事項を更新できるようにします。これにより、インタラクションデータが最新の状態に保たれ、Amazon Personalize eの推奨の関連性が向上します。

リアルタイムイベントを記録するには、AWSSDKAWSAmplifyAWS Command Line Interface(AWS CLI). イベントを記録すると、Amazon Personalize は、データセットグループ内のインタラクションデータセットにイベントデータを追加します。

注記

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

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

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

  • Interactions データセットを含むデータセットグループ。これは空の場合があります。あなたが通過した場合開始方法ガイドで作成したものと同じデータセットグループとデータセットを使用できます。データセットグループとデータセットの作成の詳細については、」データの準備とインポート

  • イベントトラッカー。

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

まず、空のインタラクションデータセットから開始し、十分なデータを記録したら、新しく記録されたイベントのみを使用してモデルをトレーニングできます。モデルをトレーニングするための最小データ要件は次のとおりです。

  • 組み合わされたやり取りデータの 1000 レコード (eventType および eventValueThreshold が指定されている場合は、それらを使用したフィルタリング後)

  • 少なくともそれぞれ 2 つのやり取りを持つ 25 人の一意のユーザー

リアルタイムイベントが推奨事項に及ぼす影響

キャンペーンを作成すると、Amazon Personalize は、ユーザーに対するレコメンデーションを生成するときに、既存の商品(最新モデルのトレーニングに使用したデータに含まれる商品)に対して新しい記録されたイベントデータを自動的に使用します。これにより、モデルを再トレーニングする必要はありません(SIMS または Popularity-Count レシピを使用している場合を除く)。

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

  • 記録されたイベントの場合新しいアイテム(モデルのトレーニングに使用したデータに含まれていないアイテム)、ユーザーパーソナライゼーションを使用してモデル(ソリューションバージョン)をトレーニングした場合、Amazon Personalizeは2時間ごとにモデルを自動的に更新し、更新するたびに新しいアイテムが推奨に影響を与えます。「ユーザー・パーソナライゼーションレシピ」を参照してください。

    その他のレシピでは、レコメンデーションに影響を与える新しいレコードのモデルを再トレーニングする必要があります。Amazon Personalize では、新しいアイテムの記録されたイベントが保存されます。新しいソリューションバージョンを作成(新しいモデルのトレーニング)すると、この新しいデータがユーザーの Amazon Personalize レコメンデーションに影響を与えます。

  • 記録されたイベントの場合新しいユーザー(モデルのトレーニングに使用したデータに含まれていないユーザー) の場合、最初に推奨されるのは人気のあるアイテムのみです。ユーザーに対してより多くのイベントを記録するほど、レコメンデーションはより関連性が高くなります。Amazon Personalize eは新しいユーザーデータを保存するので、モデルを再トレーニングして、より関連性の高い推奨事項を確認することもできます。

    新しい匿名ユーザー(ユーザー userId のないユーザー)の場合、Amazon Personalize はsessionIdを渡す PutEvents 操作を使用して、ログイン前にイベントをユーザーと関連付けることができます。これにより、ユーザーが匿名だったときに発生したイベントを含む連続したイベント履歴が作成されます。

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

Anイベントトラッカーは、新しいイベントデータの宛先データセットグループを指定します。イベントトラッカーを作成するには、 CreateEventTracker API オペレーションを作成し、ターゲットの Interactions データセットを含むデータセットグループの Amazon Resource Name (ARN) をパラメータとして渡します。Amazon Personalize コンソールを使用してイベントトラッカーを作成する手順については、イベントトラッカーの作成 (コンソール)

イベントトラッカーを作成すると、レスポンスには追跡 IDを使用するときにパラメータとして渡します。PutEventsオペレーション. Amazon Personalize は、イベントトラッカーで指定したデータセットグループのインタラクションデータセットに新しいイベントデータを追加します。

注記

データセットグループで作成できるイベントトラッカーは 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 オペレーションを呼び出します。次の例は、示していますPutEventsオペレーションを実行します。これは、必要最小限の情報を含む 1 つのイベントを渡します。対応する Interactions スキーマが表示され、Interactions データセットから行の例が表示されます。

アプリケーションが生成されるsessionIdユーザーが最初にウェブサイトにアクセスしたとき、またはアプリケーションを使用するとき。たとえば、汎用一意識別子 (UUID) を生成し、この値をsessionId。Amazon Personalize は、sessionIdを使用して、ログイン前にイベントをユーザーと関連付けることができます(匿名です)。ユーザーがログインし、イベントを送信した後、userIdに設定されている場合、Amazon Personalize は、以前に匿名のイベント履歴データをuserId一致させることによってsessionId。これにより、ユーザーが匿名だったときに発生したイベントを含む連続したイベント履歴が作成されます。最大で 1 人のユーザーを 1 つにマッピングすることをお勧めします。sessionID

イベントリストは Event オブジェクトの配列です。AneventTypeはイベントごとに必要ですが、この例では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' 'フィールドが Interactions スキーマで定義されている場合、プロパティキーはになります。numRatings

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

ユーザー・パーソナライゼーションレシピを使用すると、PutEvents オペレーションでインプレッションデータを記録できます。インプレッションは、ユーザーが特定のアイテムと対話したとき(クリックまたは視聴したときなど)に表示されたアイテムのリストです。Amazon Personalize は、インプレッションデータを使用して探索を導きます。レコメンデーションには、インタラクションデータや関連性の少ないアイテム 詳細については、暗示的および明示的Amazon パーソナライゼーションがモデル化できるインプレッションについては、インプレッションデータ

重要

矛盾する暗黙的および明示的なインプレッションデータをPutEventsリクエストに応じて、Amazon Personalize はデフォルトで明示的なインプレッションを使用します。

ユーザーを表示回数データとして表示する Amazon Personalize 推奨情報を記録するには、recommendationId PutEvents リクエストを送信し、Amazon Personalize はレコメンデーションデータに基づいて暗黙のインプレッションを取得します。

イベントのインプレッションデータを手動で記録するには、 PutEvents コマンドのimpression入力パラメータ。次のコードサンプルは、インクルードする方法を示します。recommendationIdimpressionPython (Boto3) または SDK for Java 2.x 用の SDK のいずれかで 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」を参照してください。

イベントとソリューション

イベントデータを使用するモデルをトレーニングする場合、 CreateSolution オペレーションの 2 つのパラメータが関連します。eventType パラメータは、複数のイベントタイプを記録するときに指定する必要があります。-eventTypeAmazon Personalize がモデルトレーニングのラベルとして使用されるイベントのタイプを示します。

SolutionConfig オブジェクトの eventValueThreshold パラメータは、イベントフィルターを作成します。このパラメータを指定すると、しきい値以上の値を持つイベントのみがモデルのトレーニングに使用されます。eventValueThreshold を使用するときはイベントタイプを指定する必要があります。

Jupyter ノートブック

Amazon Personalize を使用してユーザーのリアルタイム動作に対応する方法を示すサンプル Jupyter ノートブックについては、イベントトラッカーと PutEvents 操作の詳細については、2.view_campaign_and_interactions.ipynbstartedフォルダーのアマゾン-パーソナライズ-サンプルGitHub リポジトリ。