はじめに
Amazon Personalize とは
Amazon Personalize は、アプリケーションを使用するユーザー向けに個別化したレコメンデーションを簡単に追加できる、開発者向けの機械学習サービスです。
抜粋:https://docs.aws.amazon.com/ja_jp/personalize/latest/dg/what-is-personalize.html
関連記事
ワークフロー
- 入力データをフォーマットして Amazon S3 にアップロードするか、リアルタイムのイベントデータを送信する。
- データに適用するトレーニングレシピ (アルゴリズム) を選択する。
- レシピを使用してソリューションバージョンをトレーニングする。
- ソリューションバージョンをデプロイする。
- レコメンデーションを取得する。
詳細:https://docs.aws.amazon.com/ja_jp/personalize/latest/dg/personalize-workflow.html
レシピの種類
Amazon Personalize では、ユースケースに合わせてレシピ(アルゴリズム)の選択をします。
① USER_PERSONALIZATION レシピ
ユーザー向けにパーソナライズされた推奨事項を提供する。
② PERSONALIZED_RANKING レシピ
特定のアイテムリストをユーザーの嗜好に合わせて並び替えて提供する。
例:特定カテゴリーのアイテムリストからユーザー毎に並び替えて表示。
③ RELATED_ITEMS レシピ
類似アイテムを提供する。
例:よく一緒に購入される商品や、ほかのユーザーも視聴した映画など
詳細:https://docs.aws.amazon.com/ja_jp/personalize/latest/dg/determining-use-case.html#use-cases
データについての要件
データセットの種類
次の3つの種類があります。
種類 | 説明 | 例 |
---|---|---|
Users | ユーザーに関するメタデータ | 年齢、性別、ロイヤリティメンバーシップなど |
Items | アイテムに関するメタデータ | 価格、SKU タイプ、在庫状況など |
Interactions(必須) | ユーザーとアイテム間の対話からの履歴データとリアルタイムデータ | ユーザーの場所やデバイスなど、ユーザーの閲覧コンテキストに関するインプレッションデータやコンテキストメタデータ |
データセットの要件
各データセットには必須フィールド、予約キーワード、および必須のデータ型があります。
予約キーワード:メタデータ以外のオプションのフィールド
| データセットタイプ | 必須フィールド | 予約キーワード | 詳細 |
|:-----------|------------|:------------|:------------|リンク
|ユーザー|USER_ID (string)
1つのメタデータフィールド (カテゴリstringまたは数値型)| | リンク|
|アイテム|ITEM_ID (string)
1 つのメタデータフィールド (カテゴリまたはテキストstringフィールドまたは数値フィールド)|TIMESTAMP (long)|リンク |
|インタラクション|USER_ID (string)
ITEM_ID (string)
TIMESTAMP (long)|EVENT_TYPE (string)
EVENT_VALUE (float,null)
印象 (string) RECOMMENDATION_ID (string,null)|リンク |
スキーマの要件
データセットを追加する前に、そのデータセットにスキーマを定義する必要があります。
データセットの作成後はスキーマを変更できません。
- Avro 形式であること。
- スキーマフィールドの順序とデータファイル内の対応する列ヘッダーの順序を一致させる。
- 各データセットタイプには、スキーマ内に特定の非メタデータフィールドが必要。(前表参照)
- ネストされた構造のないフラット JSON ファイルであること。
- スキーマフィールドは一意の英数字の名前。
Items データ
価格、SKU タイプ、在庫状況などのアイテムに関するメタデータを格納します。
詳細:https://docs.aws.amazon.com/ja_jp/personalize/latest/dg/items-datasets.html
- Items スキーマの例
{
"type": "record",
"name": "Items",
"namespace": "com.amazonaws.personalize.schema",
"fields": [
{
"name": "ITEM_ID",
"type": "string"
},
{
"name": "GENRES",
"type": [
"null",
"string"
],
"categorical": true
},
{
"name": "CREATION_TIMESTAMP",
"type": "long"
},
{
"name": "DESCRIPTION",
"type": [
"null",
"string"
],
"textual": true
},
],
"version": "1.0"
}
- Items データの例
ITEM_ID,GENRES,CREATION_TIMESTAMP,DESCRIPTION
1,Adventure|Animation|Children|Comedy|Fantasy,1570003267,"This is an animated movie that features action, comedy, and fantasy. Audience is children. This movie was released in 2004."
2,Adventure|Children|Fantasy,1571730101,"This is an adventure movie with elements of fantasy. Audience is children. This movie was release in 2010."
3,Comedy|Romance,1560515629,"This is a romantic comedy. The movie was released in 1999. Audience is young women."
4,Comedy|Drama|Romance,1581670067,"This movie includes elements of both comedy and drama as well as romance. This movie was released in 2020."
...
...
Users データ
年齢、性別、ロイヤリティメンバーシップなどの、ユーザーに関するメタデータを格納します。
詳細:https://docs.aws.amazon.com/ja_jp/personalize/latest/dg/users-datasets.html
- Users スキーマの例
{
"type": "record",
"name": "Users",
"namespace": "com.amazonaws.personalize.schema",
"fields": [
{
"name": "USER_ID",
"type": "string"
},
{
"name": "AGE",
"type": "int"
},
{
"name": "GENDER",
"type": "string",
"categorical": true
}
],
"version": "1.0"
}
- Users データの例
USER_ID,AGE,GENDER
5,34,Male
6,56,Female
8,65,Male
...
...
Interactions データ
ユーザーとアイテム間のやりとりの履歴データとリアルタイムデータを格納します。
- インプレッションデータ:ユーザーが特定のアイテムと対話したとき(クリックまたは視聴したときなど)に表示されたアイテムのリスト
- コンテキストメタデータ:イベント発生時にユーザーの環境で収集する対話データ(ユーザーのデバイス情報など)
詳細:https://docs.aws.amazon.com/ja_jp/personalize/latest/dg/interactions-datasets.html
- Interactions スキーマの例
{
"type": "record",
"name": "Interactions",
"namespace": "com.amazonaws.personalize.schema",
"fields": [
{
"name": "USER_ID",
"type": "string"
},
{
"name": "ITEM_ID",
"type": "string"
},
{
"name": "EVENT_TYPE",
"type": "string"
},
{
"name": "EVENT_VALUE",
"type": [
"float",
"null"
]
},
{
"name": "LOCATION",
"type": "string",
"categorical": true
},
{
"name": "DEVICE",
"type": [
"string",
"null"
],
"categorical": true
},
{
"name": "TIMESTAMP",
"type": "long"
},
{
"name": "IMPRESSION",
"type": "string"
}
],
"version": "1.0"
}
- Interactions データの例
USER_ID,ITEM_ID,EVENT_TYPE,EVENT_VALUE,LOCATION,DEVICE,TIMESTAMP,IMPRESSION
35,73,click,,Ohio,Tablet,1586731606,73|70|17|95|96|92|55|45|16|97|56|54|33|94|36|10|5|43|19|13|51|90|65|59|38
54,35,watch,0.75,Indiana,Cellphone,1586735164,35|82|78|57|20|63|1|90|76|75|49|71|26|24|25|6|37|85|40|98|32|13|11|54|48
9,33,click,,Oregon,Cellphone,1586735158,68|33|62|6|15|57|45|24|78|89|90|40|26|91|66|31|47|17|99|29|27|41|77|75|14
23,10,watch,0.25,California,Tablet,1586735697,92|89|36|10|39|77|4|27|79|18|83|16|28|68|78|40|50|3|99|7|87|49|12|57|53
27,11,watch,0.55,Indiana,Tablet,1586735763,11|7|39|95|71|1|6|40|41|28|99|53|68|76|0|65|69|36|22|42|34|67|24|20|66
...
...
さいごに
次回は実際に使ってみて手順をまとめたいと思います。(➝記事)