はじめに
MLAとMLSの資格勉強中、選択肢に触ったことのないAI/ML関連のサービスが多く出てきてイメージが湧きにくいと感じたため、簡単なハンズオンを実施してみることにしました。
本記事では、Amazon Personalizeを使用してレコメンデーションを提供するハンズオンを実施します。
1. Amazon Personalizeとは
概要
Amazon Personalizeは、AWSが提供するマネージドなレコメンデーションサービスです
ユースケース
- 商品レコメンデーション: 「この商品を買った人は、これも買っています」
- パーソナライズされたランキング: ユーザーごとに最適化された商品リスト
- 関連商品: 特定商品に関連する商品の推薦
- パーソナライズされたカテゴリ: ユーザーが興味を持つカテゴリの推薦
2. データ準備
必要なデータ
Amazon Personalizeでは、以下のようなトレーニング用のデータを使用します。
今回は公式ハンズオンに沿って、User-Personalization-v2レシピを使用して、レコメンデーションさせるため、必須のデータセットであるアイテムインタラクションデータのみ用意しています。
ユーザーメタデータ
ユーザーの属性情報を含むデータセット
必須フィールド:USER_ID
USER_ID,AGE,GENDER,INTEREST
5,34,Male,hiking
6,56,Female,music
8,65,Male,movies|TV shows|music
アイテムメタデータ
商品の属性情報を含むデータセット
必須フィールド:ITEM_ID
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."
アクションメタデータ
ユーザーに提案するアクションの属性情報を含むデータセット
アクションの例
- モバイルアプリのインストール
- メールへの登録
- プレミアムサービスへのアップグレード
必須フィールド:ACTION_ID
ACTION_ID,VALUE,MEMBERSHIP_LEVEL,CREATION_TIMESTAMP,REPEAT_FREQUENCY
1,10,Deluxe|Premium,1510003267,7
2,5,Basic,1580003267,7
3,5,Preview,1590003267,3
4,10,Deluxe|Platinum,1560003267,4
アイテムインタラクションデータ
ユーザーと商品の相互作用を記録するデータセット
必須フィールド:USER_ID、ITEM_ID、EVENT_TYPE、TIMESTAMP
USER_ID,ITEM_ID,EVENT_TYPE,EVENT_VALUE,TIMESTAMP
196,242,watch,.50,881250949
186,302,watch,.75,891717742
22,377,click,,878887116
244,51,click,,880606923
166,346,watch,.50,886397596
298,474,watch,.25,884182806
115,265,click,,881171488
253,465,watch,.50,891628467
305,451,watch,.75,886324817
アクションインタラクションデータ
ユーザーとアクションの相互作用を記録するデータセット
必須フィールド:USER_ID、ACTION_ID、EVENT_TYPE、TIMESTAMP
USER_ID,ACTION_ID,EVENT_TYPE,TIMESTAMP
35,73,Viewed,1586731606
54,35,Not taken,1586731609
9,33,Viewed,1586735158
23,10,Taken,1586735697
27,11,Taken,1586735763
3. データのアップロード
S3バケットの作成
データをインポートするために使用するS3バケットを作成します。
バケットポリシーの設定
Personalize側からアクセスできるようにバケットポリシーを以下のように修正します。
{
"Version": "2012-10-17",
"Id": "PersonalizeS3BucketAccessPolicy",
"Statement": [
{
"Sid": "PersonalizeS3BucketAccessPolicy",
"Effect": "Allow",
"Principal": {
"Service": "personalize.amazonaws.com"
},
"Action": [
"s3:GetObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::<バケット名>",
"arn:aws:s3:::<バケット名>/*"
]
}
]
}
インタラクションデータのアップロード
アイテムインタラクションデータをバケットにアップロードします。
今回使用したファイルの中身は次のようなフィールド構成で、
各フィールドに数値が入っているレコードが10万行ほどあります。
※User-Personalizationを使用する場合、少なくとも1000個のデータが必要
USER_ID,ITEM_ID,TIMESTAMP
1,1,964982703
1,3,964981247
…
4. Amazon Personalizeへのデータインポート
まず、Amazon Personalizeコンソールにアクセスします。
データセットグループの設定
-
名前:
qiita-demo-dataset-group
-
ドメイン:
Custom
を選択
「Create group」をクリックしてデータセットグループを作成します。
データセットのインポート
「Create dataset」をクリックし,「Item interactions dataset」をクリックします。
「Import data directly into Amazon Personalize datasets」を選択し「Next」をクリックします。
-
データセット名:
qiita-demo-datasets
-
スキーマ名:
qiita-demo-schema
スキーマはデフォルトのスキーマ定義とデータ側の構造が同一なため変更せず「NEXT」をクリックします。
-
データセットインポートジョブ名:
qiita-demo-dataset-import-job
IAMロールのセクションでは「Create a new IAM role」をクリックします。
「Specific S3 bucket」にバケット名を入力して「Create role」をクリックします。
上記全項目を入力したら「Start import」をクリックします。
インポートが完了するまで5~10分ほど待ちます。
5. ソリューションの作成と学習
データのインポートが完了したら、Step3の「Create solutions」をクリックします。
Solution nameを入力した後、Solution typeで「Item recommendation」を選択し、
Recipeで「aws-user-personalization」を選択して「Next」をクリックします。
※公式ドキュメントではV2推奨
今回は「Continue with current selection」で続行します。
トレーニング設定は自動トレーニングのみオフにして「Next」をクリックします。
「Create solution」をクリックします。
トレーニング完了まで20~30分ほど待ちます。
6. レコメンデーションの取得
トレーニングが完了したら、レコメンデーションを取得するため作成したソリューション内の「Create campaign」をクリックします
キャンペーン名を入力します。
その他設定値はデフォルトのまま「Create campaign」をクリックします。
キャンペーン作成完了まで10~15分ほど待ちます。
キャンペーンがアクティブになったら、レコメンデーションをテストできます。
キャンペーン内の「Test campaign results」にUserIDを入力し、「Get recommendations」をクリックします。
画面下部にスクロールするとレコメンデーションの結果が表示されます。
Scoreはおすすめ度の指標であるため、
今回の結果からUSER_IDが3の人にはITEM_IDが216の商品が最もおすすめということがわかります。
7. 感想
Amazon Personalizeを活用することで専門知識がなくても、データさえあればコンソールからレコメンデーションシステムの基盤を作成できることがわかりました。
今回はアイテムインタラクションデータのみを利用したレコメンデーションでしたが、
実際に利用するにはレシピの選定、データセット自体のクリーニング、他のデータセットを含めたうえでのチューニングなどについて習熟しておく必要があると感じました。