2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWSのAI/ML関連サービス触ってみた Amazon Personalize編

Last updated at Posted at 2025-07-12

はじめに

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バケットを作成します。
image.png

バケットポリシーの設定

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:::<バケット名>/*"
            ]
        }
    ]
}

インタラクションデータのアップロード

アイテムインタラクションデータをバケットにアップロードします。
image.png

今回使用したファイルの中身は次のようなフィールド構成で、
各フィールドに数値が入っているレコードが10万行ほどあります。
※User-Personalizationを使用する場合、少なくとも1000個のデータが必要

USER_ID,ITEM_ID,TIMESTAMP
1,1,964982703
1,3,964981247

4. Amazon Personalizeへのデータインポート

まず、Amazon Personalizeコンソールにアクセスします。

  1. AWSマネジメントコンソールにログイン
  2. Amazon Personalizeサービスに移動
  3. データセットグループセクションで「Create dataset group」をクリック
    image.png

データセットグループの設定

  • 名前: qiita-demo-dataset-group
  • ドメイン: Customを選択

image.png

Create group」をクリックしてデータセットグループを作成します。

データセットのインポート

Create dataset」をクリックし,「Item interactions dataset」をクリックします。
image.png

Import data directly into Amazon Personalize datasets」を選択し「Next」をクリックします。

image.png

  • データセット名: qiita-demo-datasets
  • スキーマ名: qiita-demo-schema

スキーマはデフォルトのスキーマ定義とデータ側の構造が同一なため変更せず「NEXT」をクリックします。

image.png

  • データセットインポートジョブ名: qiita-demo-dataset-import-job

image.png

  • Data location: s3://バケット名/アップロードしたファイル名
    image.png

IAMロールのセクションでは「Create a new IAM role」をクリックします。
image.png

Specific S3 bucket」にバケット名を入力して「Create role」をクリックします。
image.png

上記全項目を入力したら「Start import」をクリックします。

image.png

インポートが完了するまで5~10分ほど待ちます。

5. ソリューションの作成と学習

データのインポートが完了したら、Step3の「Create solutions」をクリックします。
image.png

Solution nameを入力した後、Solution typeで「Item recommendation」を選択し、
Recipeで「aws-user-personalization」を選択して「Next」をクリックします。
※公式ドキュメントではV2推奨

image.png

今回は「Continue with current selection」で続行します。
image.png

トレーニング設定は自動トレーニングのみオフにして「Next」をクリックします。
image.png

Create solution」をクリックします。

image.png

トレーニング完了まで20~30分ほど待ちます。

6. レコメンデーションの取得

トレーニングが完了したら、レコメンデーションを取得するため作成したソリューション内の「Create campaign」をクリックします
image.png

キャンペーン名を入力します。
image.png
その他設定値はデフォルトのまま「Create campaign」をクリックします。
image.png
キャンペーン作成完了まで10~15分ほど待ちます。

キャンペーンがアクティブになったら、レコメンデーションをテストできます。
キャンペーン内の「Test campaign results」にUserIDを入力し、「Get recommendations」をクリックします。
image.png
画面下部にスクロールするとレコメンデーションの結果が表示されます。
image.png
Scoreはおすすめ度の指標であるため、
今回の結果からUSER_IDが3の人にはITEM_IDが216の商品が最もおすすめということがわかります。

7. 感想

Amazon Personalizeを活用することで専門知識がなくても、データさえあればコンソールからレコメンデーションシステムの基盤を作成できることがわかりました。
今回はアイテムインタラクションデータのみを利用したレコメンデーションでしたが、
実際に利用するにはレシピの選定、データセット自体のクリーニング、他のデータセットを含めたうえでのチューニングなどについて習熟しておく必要があると感じました。

参考資料

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?