PutEvents 오퍼레이션 사용 - Personalize

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

PutEvents 오퍼레이션 사용

데이터 세트 그룹의 항목 상호 작용 데이터 세트이벤트 트래커를 생성하면 항목 상호 작용 이벤트를 기록할 준비가 된 것입니다. 항목 상호 작용 이벤트를 기록하려면 PutEvents API 작업을 사용합니다. 다음 섹션에서는 단일 이벤트를 기록하는 방법, 이벤트 값 데이터로 여러 이벤트를 기록하는 방법, 이벤트에 노출 데이터를 포함하는 방법을 보여줍니다.

익명 사용자를 위한 이벤트를 기록하는 자세한 방법은 익명 사용자를 위한 이벤트 기록 섹션을 참조하세요.

단일 항목 상호 작용 이벤트 기록

다음 예제는 하나의 항목 상호 작용 이벤트를 전달하는 PutEvents 작업을 보여줍니다. 항목 상호 작용 데이터 세트의 예제 행과 함께 해당하는 스키마가 표시됩니다.

애플리케이션은 사용자가 웹 사이트를 처음 방문하거나 애플리케이션을 사용할 때 고유한 sessionId을 생성합니다. 세션 전체의 모든 이벤트에서 동일한 sessionId을 사용해야 합니다. Personalize는 사용자가 로그인하기 전에 sessionId를 사용하여 이벤트를 사용자와 연결합니다(익명 처리). 자세한 정보는 익명 사용자를 위한 이벤트 기록을 참조하세요.

이벤트 목록은 Event객체의 어레이입니다. 각 eventType 이벤트에는 A가 필요합니다. 이벤트 유형 데이터가 없는 경우 요구 사항을 충족하는 자리 표시자 값을 제공할 수 있습니다.

trackingId항목 상호 작용 이벤트 트래커 생성에서 생성한 이벤트 트래커에서 가져온 것입니다. userId, itemIdsentAt파라미터는 해당 과거 Interactions데이터세트의 USER_ID, ITEM_ID 및 TIMESTAMP 필드에 매핑됩니다. 자세한 정보는 스키마을 참조하세요.

해당 데이터 세트 열

Dataset columns: USER_ID, ITEM_ID, TIMESTAMP, EVENT_TYPE Example data: user123, item-xyz, 1543631760, click

코드 예제

SDK for Python (Boto3)
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': 1719511760, 'eventType': 'click', 'itemId': 'ITEM_ID' }] )
SDK for JavaScript v3
// Get service clients module and commands using ES6 syntax. import { PutEventsCommand } from "@aws-sdk/client-personalize-events"; import { personalizeEventsClient } from "./libs/personalizeClients.js"; // Or, create the client here. // const personalizeEventsClient = new PersonalizeEventsClient({ region: "REGION"}); // Convert your UNIX timestamp to a Date. const sentAtDate = new Date(1613443801 * 1000); // 1613443801 is a testing value. Replace it with your sentAt timestamp in UNIX format. // Set put events parameters. var putEventsParam = { eventList: [ /* required */ { eventType: "EVENT_TYPE" /* required */, sentAt: sentAtDate /* required, must be a Date with js */, eventId: "EVENT_ID" /* optional */, itemId: "ITEM_ID" /* optional */, }, ], sessionId: "SESSION_ID" /* required */, trackingId: "TRACKING_ID" /* required */, userId: "USER_ID" /* required */, }; export const run = async () => { try { const response = await personalizeEventsClient.send( new PutEventsCommand(putEventsParam), ); console.log("Success!", response); return response; // For unit tests. } catch (err) { console.log("Error", err); } }; run();
AWS CLI
aws personalize-events put-events \ --tracking-id tracking_id \ --user-id USER_ID \ --session-id session_id \ --event-list '[{ "sentAt": 1719511760, "eventType": "click", "itemId": "ITEM_ID" }]'
SDK for Java 2.x
public static void putEvents(PersonalizeEventsClient personalizeEventsClient, String trackingId, String sessionId, String userId, String itemId, String eventType) { try { Event event = Event.builder() .sentAt(Instant.ofEpochMilli(System.currentTimeMillis() + 10 * 60 * 1000)) .itemId(itemId) .eventType(eventType) .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()); } }

이벤트 값 데이터로 여러 항목 상호 작용 이벤트 기록

다음 예제는 이벤트 유형과 이벤트 값이 서로 다른 여러 항목 상호 작용 이벤트를 기록하는 방법을 보여줍니다.

솔루션을 구성할 때 항목 상호 작용 데이터 세트에 EVENT_TYPE 및 EVENT_VALUE 필드가 포함되어 있는 경우, 특정 값을 임곗값으로 설정하여 교육에서 레코드를 제외할 수 있습니다. 자세한 내용은 교육에 사용할 항목 상호 작용 데이터 선택 섹션을 참조하세요.

특정 레시피에 의해 메타데이터로 사용되는 추가 속성 numRatings의 기록도 보여줍니다.

Dataset columns: USER_ID, ITEM_ID, TIMESTAMP, EVENT_TYPE, EVENT_VALUE, NUM_RATINGS Item 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()); } }
참고

속성 키는 상호작용 스키마의 필드와 일치하는 낙타 대문자 이름을 사용합니다. 예를 들어 상호작용 스키마에서 ‘NUM_RATINGS’ 필드를 정의한 경우 속성 키는 numRatings이 되어야 합니다.

노출 데이터 기록

사용자-개인 맞춤레시피를 사용하거나 도메인 데이터세트 그룹의 데이터세트에 대한 스키마에 IMPRESSIONS 필드를 추가하면 작업에서 노출 데이터를 기록할 수 있습니다. PutEvents 노출은 사용자가 특정 항목과 상호작용(예: 클릭 또는 시청)했을 때 볼 수 있었던 항목의 목록입니다. Personalize는 노출 데이터를 사용하여 탐색을 안내합니다. 이때 상호작용 데이터 또는 관련성이 낮은 항목이 추천에 포함됩니다. Personalize가 모델링할 수 있는 암시적 및 명시적 노출에 대한 자세한 내용은 노출 데이터단원을 참조하세요.

중요

PutEvents 요청에서 암시적 및 명시적 노출 데이터가 충돌하는 경우 Personalize는 기본적으로 명시적 노출을 사용합니다.

Personalize 추천을 기록하려면 사용자에게 노출 데이터로 표시하고 PutEvents요청에 recommendationId을 포함시킵니다. 그러면 Personalize가 추천 데이터를 기반으로 암시적 노출을 도출합니다.

이벤트의 노출 데이터를 수동으로 기록하려면 PutEvents명령의 impression입력 파라미터에 노출을 나열합니다. 다음 코드 샘플은 Python용 SDK (Boto3) 또는 Java 2.x용 SDK를 사용하여 PutEvents 연산에 recommendationId a와 impression an을 포함하는 방법을 보여줍니다. 둘 다 포함시킬 경우 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

노출 데이터 및 추천 ID를 사용하여 이벤트를 기록하러면 다음 putEvents메서드를 사용합니다. 노출 매개 변수의 경우 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()); } }