

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

# レコメンデーションに影響を与えるリアルタイムイベントの記録
<a name="recording-events"></a>

 イベントとは、ユーザーとカタログとのやり取りのことです。**アイテムの購入や動画の視聴など、*アイテム*とのやり取りや、クレジットカードの申請やメンバーシッププログラムへの登録などの*アクション*の実行の場合があります。

Amazon Personalize は、リアルタイムイベントデータのみ、履歴イベントデータのみ、または両方の組み合わせに基づいてレコメンデーションを作成できます。お客様がレコメンデーションに反応する様子をリアルタイムで記録します。これにより、インタラクションデータが蓄積され、データが最新の状態に保たれます。また、Amazon Personalize にユーザーの現在の関心を伝えることができるため、レコメンデーションの関連性が高まります。

ドメインのユースケースやカスタムレシピが[リアルタイムのパーソナライズ](use-case-recipe-features.md#about-real-time-personalization)をサポートしている場合、Amazon Personalize はイベントをリアルタイムで使用して、ユーザーの関心の高まりに応じてレコメンデーションを更新および調整します。

リアルタイムイベントの記録方法は、インポートするインタラクションデータの種類によって異なります。
+ アイテムインタラクションでは、[PutEvents](API_UBS_PutEvents.md) API オペレーションを使用してリアルタイムイベントを記録します。**Amazon Personalize は、このデータをデータセットグループの[アイテムインタラクション](interactions-datasets.md)データに追加します。詳細については、「[リアルタイムのアイテムインタラクションイベントの記録](recording-item-interaction-events.md)」を参照してください。
+ アクションインタラクションでは、[PutActionInteractions](API_UBS_PutActionInteractions.md) API オペレーションを使用してリアルタイムイベントを記録します。**Amazon Personalize は、これを使用して、データセットグループの[アクションインタラクションデータセット](action-interactions-datasets.md)に新しいデータを追加します。PERSONALIZED\$1ACTIONS レシピのみがアクションインタラクションデータを使用します。詳細については、「[リアルタイムのアクションインタラクションイベントの記録アクションインタラクションイベントの記録](recording-action-interaction-events.md)」を参照してください。

**Topics**
+ [リアルタイムイベントがレコメンデーションに与える影響](#recorded-events-influence-recommendations)
+ [リアルタイムのアイテムインタラクションイベントの記録](recording-item-interaction-events.md)
+ [リアルタイムのアクションインタラクションイベントの記録](recording-action-interaction-events.md)
+ [匿名ユーザー向けのイベントの記録](#recording-anonymous-user-events)
+ [サードパーティーのイベント追跡サービス](#record-events-third-parties)
+ [サンプル実装](#recording-events-sample-architecture)

## リアルタイムイベントがレコメンデーションに与える影響
<a name="recorded-events-influence-recommendations"></a>

 レシピがリアルタイムのパーソナライズをサポートしている場合、レコメンダーまたはカスタムキャンペーンを作成すると、Amazon Personalize はインポートから数秒以内に既存の商品またはアクションについて新しく記録されたイベントデータを使用します。リアルタイムパーソナライゼーションをサポートしているユースケースとレシピは次のとおりです。
+ [おすすめ (eコマース ユースケース)](ECOMMERCE-use-cases.md#recommended-for-you-use-case)
+ [上位のおすすめ (VIDEO\$1ON\$1DEMAND ユースケース)](VIDEO_ON_DEMAND-use-cases.md#top-picks-use-case)
+ [User-Personalization-v2 レシピ](native-recipe-user-personalization-v2.md)
+ [User-Personalization レシピ](native-recipe-new-item-USER_PERSONALIZATION.md)
+ [Personalized-Ranking-v2 レシピ](native-recipe-personalized-ranking-v2.md)
+ [Personalized-Ranking レシピ](native-recipe-search.md)
+ [Next-Best-Action レシピ](native-recipe-next-best-action.md)

Trending-Now レシピを使用すると、Amazon Personalize は設定可能な間隔で新しいイベントデータの項目を自動的に検討します。新しいソリューションバージョンを作成する必要はありません。詳細については、「[Trending-Now レシピ](native-recipe-trending-now.md)」を参照してください。

 イベント内のアイテム、アクション、またはユーザーが新しい場合、Amazon Personalize がデータをどのように使用するかは、ユースケースまたはレシピによって異なります。詳細については、「[トレーニング後のデータセット内のデータの更新](updating-datasets.md)」を参照してください。

# リアルタイムのアイテムインタラクションイベントの記録
<a name="recording-item-interaction-events"></a>

 アイテムインタラクションイベントは、ユーザーとカタログ内のアイテムとのやり取りです。**例えば、ユーザーが靴を購入したり、映画を見たりする場合です。

お客様におすすめの商品を見せながら、商品とのやり取りをリアルタイムで記録します。これにより、インタラクションデータが蓄積され、データが最新の状態に保たれます。また、Amazon Personalize にユーザーの現在の関心を伝えることができるため、レコメンデーションの関連性が高まります。

 [PutEvents](API_UBS_PutEvents.md) API オペレーションを使用してアイテムインタラクションイベントを記録します。Amazon Personalize は、イベントデータをデータセットグループの*アイテムインタラクションデータセット*に追加します。まったく同じタイムスタンプとプロパティを持つ 2 つのイベントを記録した場合、Amazon Personalize はどちらかのイベントのみを保持します。 AWS SDKs、 AWS Amplify、または AWS Command Line Interface () を使用して、アイテムインタラクションイベントを記録できますAWS CLI。

Apache Kafka を使用している場合は、Amazon Personalize 用 Kafka コネクタを使用して、Amazon Personalize にアイテムインタラクションをリアルタイムでストリーミングできます。**詳細については、*personalize-kafka-connector* の Github リポジトリにある「[Amazon Personalize 用 Kafka コネクタ](https://github.com/aws/personalize-kafka-connector/blob/main/README.md)」を参照してください。

 AWS Amplify には、ウェブクライアントアプリケーションからのアイテムインタラクションイベントを記録するための JavaScript ライブラリと、サーバーコードでイベントを記録するためのライブラリが含まれています。詳細については、[Amplify のドキュメント](https://docs.amplify.aws/)を参照してください。

**Topics**
+ [アイテムインタラクションイベントの記録とモデルのトレーニングに関する要件](#recording-events-requirements)
+ [アイテムインタラクションイベントトラッカーの作成](event-get-tracker.md)
+ [1 つのアイテムインタラクションイベントの記録](putevents-example.md)
+ [複数のアイテムインタラクションイベントをイベント値データと共に記録する](recording-events-example-event-value.md)
+ [インプレッションデータを使用したアイテムインタラクションイベントの記録](putevents-including-impressions-data.md)
+ [イベントメトリクスと属性レポート](event-metrics.md)

## アイテムインタラクションイベントの記録とモデルのトレーニングに関する要件
<a name="recording-events-requirements"></a>

アイテムインタラクションイベントを記録するには、以下が必要です。
+ `Item interactions` データセットを含むデータセットグループ。これは空の場合があります。[入門チュートリアル](getting-started.md) ガイドを完了した場合は、作成したものと同じデータセットグループおよびデータセットを使用できます。データセットグループとデータセットの作成については、「[Amazon Personalize データセットへのトレーニングデータのインポート](import-data.md)」を参照してください。
+ イベントトラッカー。
+ [PutEvents](API_UBS_PutEvents.md) API オペレーションの呼び出し。
+  AWS Lambda 関数を使用して PutEvents オペレーションを呼び出す場合、関数の実行ロールには、 `Resource`要素`*`のワイルドカードを使用して`personalize:PutEvents`アクションを実行するアクセス許可が必要です。

空のアイテムインタラクションデータセットから始めて、十分なデータを記録したら、新しく記録されたイベントのみを使用してモデルをトレーニングできます。すべてのユースケース (ドメインデータセットグループ) とレシピ (カスタムデータセットグループ) では、トレーニング前にインタラクションデータに以下が含まれている必要があります。
+ カタログ内のアイテムを操作したユーザーからのアイテムインタラクションレコードが少なくとも 1000 件ある。これらのインタラクションは、一括インポート、ストリーミングイベント、あるいはその両方からのものである。
+ それぞれに 2 回以上のアイテムインタラクションを伴う 25 個以上のユニークユーザー ID。

質の高いレコメンデーションを行うには、1,000 人以上のユーザーからのアイテムインタラクションが少なくとも 50,000 件あり、それぞれ 2 回以上のアイテムインタラクションがあることが推奨されます。

# アイテムインタラクションイベントトラッカーの作成
<a name="event-get-tracker"></a>

アイテムインタラクションイベントを記録する前に、イベントトラッカーを作成する必要があります。イベントトラッカーは、新しいイベントデータをデータセットグループのアイテムインタラクションデータセットに送信します。****

イベントトラッカーは、Amazon Personalize コンソールまたは [CreateEventTracker](API_CreateEventTracker.md) API 操作を使用して作成します。ターゲットのアイテムインタラクションデータセットを含むデータセットグループの Amazon リソースネーム (ARN) をパラメータとして渡します。Amazon Personalize コンソールを使用してイベントトラッカーを作成する手順については、「[イベントトラッカーの作成 (コンソール)](importing-interactions.md#event-tracker-console)」を参照してください。

 イベントトラッカーには、[PutEvents](https://docs.aws.amazon.com/personalize/latest/dg/API_UBS_PutEvents.html) 操作を使用するときにパラメータとして渡す*追跡 ID* が含まれています。その後、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 JavaScript v3 ]

```
// Get service clients module and commands using ES6 syntax.
import { CreateEventTrackerCommand } from "@aws-sdk/client-personalize";
import { personalizeClient } from "./libs/personalizeClients.js";

// Or, create the client here.
// const personalizeClient = new PersonalizeClient({ region: "REGION"});

// Set the event tracker's parameters.
export const createEventTrackerParam = {
  datasetGroupArn: "DATASET_GROUP_ARN" /* required */,
  name: "NAME" /* required */,
};

export const run = async () => {
  try {
    const response = await personalizeClient.send(
      new CreateEventTrackerCommand(createEventTrackerParam),
    );
    console.log("Success", response);
    return response; // For unit tests.
  } catch (err) {
    console.log("Error", err);
  }
};
run();
```

------
#### [ 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;
}
```

------

# 1 つのアイテムインタラクションイベントの記録
<a name="putevents-example"></a>

データセットグループの*アイテムインタラクションデータセット*と[イベントトラッカー](event-get-tracker.md)を作成したら、アイテムインタラクションイベントを記録する準備が整います。次の例は、1 つのアイテムインタラクションイベントを渡す `PutEvents` オペレーションを示しています。対応するスキーマが表示され、アイテムインタラクションデータセットから行の例が表示されます。

 アプリケーションは、ユーザーが最初にウェブサイトにアクセスしたとき、またはアプリケーションを使用したときに、一意の `sessionId` を生成します。セッション中のすべてのイベントで同じ `sessionId` を使用する必要があります。Amazon Personalize は、`sessionId` を使用して、ユーザーがログインする前にイベントをそのユーザーに関連付けます (匿名)。詳細については、「[匿名ユーザー向けのイベントの記録](recording-events.md#recording-anonymous-user-events)」を参照してください。

イベントリストは [Event](API_UBS_Event.md) オブジェクトの配列です。各イベントには `eventType` が必要です。イベントタイプデータがない場合は、要件を満たすプレースホルダー値を指定できます。

`trackingId` は、[アイテムインタラクションイベントトラッカーの作成](event-get-tracker.md) で作成したイベントトラッカーから取得されます。`Interactions` の `userId`、`itemId`、`sentAt` パラメータは、対応する履歴データセットの USER\$1ID、ITEM\$1ID、TIMESTAMP フィールドにマップされます。詳細については、「[Amazon Personalize スキーマのスキーマ JSON ファイルの作成](how-it-works-dataset-schema.md)」を参照してください。

**対応するデータセット列**

```
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.
const 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());
        }
}
```

------

# 複数のアイテムインタラクションイベントをイベント値データと共に記録する
<a name="recording-events-example-event-value"></a>

データセットグループの*アイテムインタラクションデータセット*と[イベントトラッカー](event-get-tracker.md)を作成したら、アイテムインタラクションイベントを記録する準備が整います。次の例は、イベントタイプとイベント値が異なる複数のアイテムインタラクションイベントを記録する方法を示しています。

 ソリューションを設定するときに、インタラクションデータセットに EVENT\$1TYPE フィールドと EVENT\$1VALUE フィールドが含まれている場合、トレーニングからレコードを除外するためのしきい値として特定の値を設定できます。**詳細については、「[トレーニングに使用するアイテムインタラクションデータの選択](event-values-types.md)」を参照してください。

------
#### [ 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
            })
        }, {
        'eventId': 'event2',
        'sentAt': 1553631782,
        'eventType': 'rating',
        'properties': json.dumps({
            'itemId': 'movie_ten',
            'eventValue': 3
            })
        }]
)
```

------
#### [ 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\$1RATINGS」がインタラクションスキーマで定義されている場合、プロパティキーは `numRatings` である必要があります。

# インプレッションデータを使用したアイテムインタラクションイベントの記録
<a name="putevents-including-impressions-data"></a>

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

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

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

イベントのインプレッションデータを手動で記録するには、[PutEvents](API_UBS_PutEvents.md) コマンドの `impression` 入力パラメータにインプレッションをリストします。次のコードサンプルは、SDK for Python (Boto3) または the SDK for Java 2.x のいずれかを使用して PutEvents 操作に `recommendationId` と `impression` を含める方法を示しています。両方を含めると、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());
    }
}
```

------

# イベントメトリクスと属性レポート
<a name="event-metrics"></a>

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

 レコメンデーションの影響を示す CloudWatch レポートを生成するには、メトリクス属性を作成し、リアルタイムのレコメンデーションでユーザーインタラクションを記録します。メトリクス属性の作成方法については、「[Amazon Personalize レコメンデーションの影響の測定](measuring-recommendation-impact.md)」を参照してください。

 イベントごとに、ユーザーに表示したレコメンデーションのレコメンデーション ID を含めてください。または、サードパーティなどのイベントソースを含めてください。このデータをインポートして、さまざまなキャンペーン、レコメンダー、サードパーティを比較します。インポートできるイベント属性ソースは最大 100 個です。
+  `recommendationId` を指定すると、Amazon Personalize はソースキャンペーンまたはレコメンダーを自動的に判断し、レポートの EVENT\$1ATTRIBUTION\$1SOURCE 列で特定します。
+  両方の属性を指定した場合、Amazon Personalize は `eventAttributionSource` のみを使用します。
+  ソースを指定しない場合、Amazon Personalize はレポートでソース `SOURCE_NAME_UNDEFINED` にラベルを付けます。

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

```
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)
```

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

```
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)
```

# リアルタイムのアクションインタラクションイベントの記録
<a name="recording-action-interaction-events"></a>

アクションインタラクションイベントは、ユーザーとアクションの間のインタラクションです。****例えば、ユーザーがメンバーシッププログラムに登録したり、クレジットカードを申請したりする場合です。

PERSONALIZED\$1ACTIONS カスタムレシピを使用する場合は、お客様がアクションレコメンデーションとやり取りするときに、リアルタイムのアクションインタラクションイベントを記録します。これにより、インタラクションデータが蓄積され、データが最新の状態に保たれます。また、Amazon Personalize にユーザーの現在の関心を伝えることができるため、レコメンデーションの関連性が高まります。PERSONALIZED\$1ACTIONS カスタムレシピのみがアクションインタラクションデータを使用します。

[PutActionInteractions](API_UBS_PutActionInteractions.md) API オペレーションでアクションインタラクションイベントを記録します。Amazon Personalize は、これを使用して、データセットグループの[アクションインタラクションデータセット](action-interactions-datasets.md)に新しいデータを追加します。

アクションインタラクションイベントには、次のいずれかのイベントタイプ属性が必要です。
+ 実行済み - ユーザーが推奨されるアクションを実行したときの実行済みイベントを記録します。**
+ 未実行 - ユーザーが閲覧後にアクションを実行しないという意図的な選択をした場合に、未実行イベントを記録します。**例えば、ユーザーに対してアクションを表示したときに、ユーザーが*いいえ*を選択した場合です。未実行イベントは、お客様がそのアクションに興味がないことを示している可能性があります。**
+ 閲覧済み - ユーザーがアクションを実行するかしないかの選択をする前にアクションを示したときに、閲覧済みイベントを記録します。**Amazon Personalize は、閲覧イベントを使用してユーザーの関心を学習します。**例えば、ユーザーが表示されたアクションを実行しなかった場合、このユーザーは今後、このアクションに興味を持たなくなる可能性があります。

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

**Topics**
+ [アクションインタラクションイベントを記録するための要件](#recording-action-interaction-requirements)
+ [アクションインタラクションイベントトラッカーの ID を検索する](action-interaction-tracker-id.md)
+ [1 つのアクションインタラクションイベントの記録](record-single-action-interaction.md)
+ [複数のアクションインタラクションイベントの記録](recording-multiple-action-interactions.md)

## アクションインタラクションイベントを記録するための要件
<a name="recording-action-interaction-requirements"></a>

リアルタイムのアクションインタラクションイベントを記録するには、以下が必要です。
+ `Action interactions dataset` を含むデータセットグループ。これは空の場合があります。データセットグループとデータセットの作成については、「[Amazon Personalize データセットへのトレーニングデータのインポート](import-data.md)」を参照してください。
+ イベントトラッカーの ID。この ID は PutActionInteractions オペレーションで指定します。アクションインタラクションデータセットを作成すると、Amazon Personalize は自動的にアクションインタラクションイベントトラッカーを作成します。詳細については、「[アクションインタラクションイベントトラッカーの ID を検索する](action-interaction-tracker-id.md)」を参照してください。
+ [PutActionInteractions](API_UBS_PutActionInteractions.md) オペレーションの呼び出し。

# アクションインタラクションイベントトラッカーの ID を検索する
<a name="action-interaction-tracker-id"></a>

アクションインタラクションデータセットを作成すると、Amazon Personalize は自動的にアクションインタラクションイベントトラッカーを作成します。**トラッカーの ID は PutActionInteractions API オペレーションで指定します。Amazon Personalize は、これを使用して、データセットグループのアクションインタラクションデータセットに新しいデータを送信します。**

 イベントトラッカーの ID は、Amazon Personalize コンソールのアクションインタラクションデータセットの詳細ページで確認できます。また、DescribeDataset API オペレーションを呼び出して ID を検索することもできます。次の Python コードは、アクションインタラクションデータセットのトラッキング ID を出力します。

```
import boto3
      
personalize = boto3.client(service_name='personalize')

response = personalize.describe_dataset(
  datasetArn="Action interactions dataset ARN"
)

print(response['trackingId'])
```

# 1 つのアクションインタラクションイベントの記録
<a name="record-single-action-interaction"></a>

アクションインタラクションデータセットを作成したら、[PutActionInteractions](API_UBS_PutActionInteractions.md) オペレーションでアクションインタラクションイベントを記録する準備が整います。次の例は、TAKEN イベントを渡す `PutActionInteractions` オペレーションを示しています。このイベントは、Amazon Personalize からのレコメンデーションをユーザーに表示し、ユーザーがクレジットカードの申請などのアクションを実行したときに記録できます。

`actionInteractions` は ActionInteraction オブジェクトの配列です。`trackingId` これは、アクションインタラクションデータセットを作成したときに Amazon Personalize が作成したイベントトラッカーからのものです。詳細については、「[アクションインタラクションイベントトラッカーの ID を検索する](action-interaction-tracker-id.md)」を参照してください。

アプリケーションは、ユーザーが最初にウェブサイトにアクセスしたとき、またはアプリケーションを使用したときに、一意の `sessionId` を生成します。セッション中のすべてのイベントで同じ `sessionId` を使用する必要があります。Amazon Personalize は、`sessionId` を使用して、ユーザーがログインする前にイベントをそのユーザーに関連付けます (匿名)。詳細については、「[匿名ユーザー向けのイベントの記録](recording-events.md#recording-anonymous-user-events)」を参照してください。

`userId`、`actionId`、および `sentAt` パラメータは、アクションインタラクションデータセットの USER\$1ID、ACTION\$1ID、EVENT\$1TYPE、TIMESTAMP の各フィールドにマップされます。

**対応するアクションインタラクションデータセット**

```
USER_ID, ACTION_ID, TIMESTAMP, EVENT_TYPE
user123, action-xyz, 1543631760, TAKEN
```

**コードサンプル**

------
#### [ AWS CLI ]

```
aws personalize-events put-action-interactions \
--tracking-id 12345678-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
--action-interactions '[{
  "userId": "user123",
  "sessionId": "abcdefg",
  "timestamp": 1543631760,
  "eventType": "TAKEN",
  "actionId": "action-xyz"}]'
```

------
#### [ SDK for Python (Boto3) ]

```
import boto3

personalize_events = boto3.client(service_name='personalize-events')

response = personalize_events.put_action_interactions(
  trackingId='12345678-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
  actionInteractions=[{
    'userId': 'user123',
    'sessionId': 'abcdefg',
    'timestamp': 1543631760,
    'eventType': 'Taken',
    'actionId': 'action-xyz'
  }]
)
```

------

# 複数のアクションインタラクションイベントの記録
<a name="recording-multiple-action-interactions"></a>

次のコードは、同じ sessionId を持つ同じユーザーの複数のアクションインタラクションイベントを記録する方法を示しています。

**対応するアクションインタラクションデータセット**

```
USER_ID, ACTION_ID, EVENT_TYPE, TIMESTAMP
user123, action123, Taken, 1543531139
user123, action345, Not Taken, 1543531139
```

------
#### [ AWS CLI ]

```
aws personalize-events put-action-interactions \
--tracking-id 6ddfe6b7-cd83-4dd4-b09d-4c35ecbacfe1 \
--action-interactions '[{
  "userId": "user123",
  "sessionId": "abcdefg",
  "timestamp": 1543531139,
  "eventType": "Taken",
  "actionId": "action123"
},
{
  "userId": "user123",
  "sessionId": "abcdefg",
  "timestamp": 1543531139,
  "eventType": "Not Taken",
  "actionId": "action345"}]'
```

------
#### [ SDK for Python (Boto3) ]

```
import boto3

personalize_events = boto3.client(service_name='personalize-events')

response = personalize_events.put_action_interactions(
  trackingId='12345678-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
  actionInteractions=[{
    'userId': 'user123',
    'sessionId': 'abcdefg',
    'timestamp': 1697848587,
    'eventType': 'Taken',
    'actionId': 'action123'
  },
  {
    'userId': 'user123',
    'sessionId': 'abcdefg',
    'timestamp': 1697848622,
    'eventType': 'Not Taken',
    'actionId': 'action345'
  }]
)
```

------

## 匿名ユーザー向けのイベントの記録
<a name="recording-anonymous-user-events"></a>

**重要**  
1 人のユーザーに対して `sessionId` と `userId` を持つイベントを少なくとも 1つ記録しないと、Amazon Personalize は `sessionId` のみに追跡されたアクティビティをトレーニング時に使用しません。また、トレーニングが完了すると、`sessionId` に追跡されたアクティビティに基づくレコメンデーションは行われなくなります。これにより、ログイン前後の userId の継続的なイベント履歴が作成されます。

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

匿名ユーザー (ログインしていないユーザー) のイベントを記録するには、イベントごとに `sessionId` のみを指定します。アプリケーションは、ユーザーが最初にウェブサイトにアクセスしたとき、またはアプリケーションを使用したときに、一意の `sessionId` を生成します。セッション中のすべてのイベントで同じ `sessionId` を使用する必要があります。Amazon Personalize は、`sessionId` を使用して、ユーザーがログインする前にイベントをユーザーに関連付けます。

Amazon Personalize は、匿名ユーザーからのイベントを、`userId` に関連付けるまでトレーニングに使用しません。詳細については、「[匿名ユーザー向けの継続的なイベント履歴の作成](#recording-events-building-continuous-event-history)」を参照してください。

匿名ユーザーが[リアルタイムでパーソナライズ](use-case-recipe-features.md#about-real-time-personalization)できるようにするには、[GetRecommendations](API_RS_GetRecommendations.md) リクエストまたは GetActionRecommendations リクエストで userId として sessionId を指定します。
+ PutEvents オペレーションと sessionId と userId を使用してアイテムインタラクションイベントを記録する方法を示すコードサンプルについては、「[1 つのアイテムインタラクションイベントの記録](putevents-example.md)」を参照してください。
+ PutActionInteractions オペレーションと sessionId と userId を使用してアクションインタラクションイベントを記録する方法を示すコードサンプルについては、「[1 つのアクションインタラクションイベントの記録](record-single-action-interaction.md)」を参照してください。

### 匿名ユーザー向けの継続的なイベント履歴の作成
<a name="recording-events-building-continuous-event-history"></a>

 匿名ユーザーのイベント履歴を作成し、Amazon Personalize がトレーニング時にそのイベントを使用できるようにするには、`sessionId` と `userId` の両方を使用して少なくとも 1 つのイベントを記録します。そうすれば、`userId` のイベントをいくつでも記録できます。`userId` を提供し始めると、`sessionId` は変わる可能性があります。次回の完全再トレーニング時に、Amazon Personalize は `userId` を元のユーザー履歴に追跡された匿名ユーザー履歴と関連付けます。`sessionId`

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

**注記**  
 ユーザーがアカウントを作成せず、Amazon Personalize にトレーニング時にそのデータを使用させたい場合は、`sessionId` をイベント内 `userId` として使用できます。ただし、ユーザーが最終的にアカウントを作成した場合、そのユーザーの匿名ブラウジングで発生したイベントを新しい `userId` に関連付けることはできません。

## サードパーティーのイベント追跡サービス
<a name="record-events-third-parties"></a>

以下のカスタマーデータプラットフォーム (CDP) は、アプリケーションからイベントデータを収集して、Amazon Personalize に送信するのに役立ちます。
+ **Amplitude** — Amplitude を使用してユーザーアクションを追跡し、ユーザーの行動を理解するのに役立ちます。Amplitude と Amazon Personalize の使用方法については、 AWS パートナーネットワーク (APN) のブログ記事「[Amplitude と Amazon Personalize によるパーソナライゼーションの効果の測定](https://aws.amazon.com/blogs/apn/measuring-the-effectiveness-of-personalization-with-amplitude-and-amazon-personalize/)」を参照してください。
+ **セグメント** — セグメントを使用してデータを Amazon Personalize に送信できます。セグメントと Amazon パーソナライズの統合についての詳細は、「[Amazon Personalize デスティネーション](https://segment.com/docs/connections/destinations/catalog/amazon-personalize/)」を参照してください。

## サンプル実装
<a name="recording-events-sample-architecture"></a>

イベントトラッカーと [PutEvents](API_UBS_PutEvents.md) 操作を使用してユーザーのリアルタイムの動作に反応するために Amazon Personalize を使用する方法を示すサンプル Jupyter Notebook については、[amazon-personalize-samples](https://github.com/aws-samples/amazon-personalize-samples) GitHub リポジトリの **getting\$1started** フォルダにある「[2.View\$1Campaign\$1And\$1Interactions.ipynb](https://github.com/aws-samples/amazon-personalize-samples/blob/master/getting_started/notebooks/2.View_Campaign_And_Interactions.ipynb)」を参照してください。

 レコメンデーションを操作するユーザーからのイベントをストリーミングする方法を示す例については、Amazon Personalize サンプル GitHub リポジトリの「[streaming\$1events](https://github.com/aws-samples/amazon-personalize-samples/tree/master/next_steps/operations/streaming_events)」を参照してください。

 Amazon Personalize リソースとクライアントアプリケーションの間にリアルタイム APIs[「リアルタイムパーソナライゼーション APIs](https://github.com/aws-samples/personalization-apis)」を参照してください。 AWS GitHub このプロジェクトには、以下の実装方法が含まれています。
+ ユーザーコンテキストとユーザーイベントの収集
+ レスポンスキャッシュ
+ アイテムメタデータに基づくレコメンデーションのデコレーション
+ A/B テスト
+  API 認証 