【Amazon Personalize】クリスマスギフトのレコメンド機能を構築しよう!

AWS

2025.12.5

Topics

この記事はNHN テコラス Advent Calendar 2025 の 5 日目の記事です。

はじめに

こんにちは、Paseri です。
今年も、12 月に入ってクリスマスが近づいてまいりました。
そろそろパーティの交換会などに向けて、皆さんプレゼントを用意する頃ではないでしょうか?

せっかく用意するプレゼントは、自分も気に入ったアイテムを渡したいですよね。
昨今の EC サイトでは、「あなたへおすすめの商品」などのレコメンド機能があることが多いと思います。

今回は、そんな EC サイトで利用されるレコメンド機能を AWS のサービスで再現してみよう!ということで記事にさせていただきました!

本記事では、Amazon Personalize を実際に構築しつつご紹介いたします!

サービス紹介

Amazon Personalize とは?

機械学習の結果から、ユーザーに対してアイテムのレコメンドを生成してくれるフルマネージドのサービスです。
EC サイトで購入された商品の記録などから、ユーザーへおすすめの商品を提案してくれます。

詳細:Amazon Personalize とは – Amazon Personalize

料金

Personalize の料金は、利用するレシピ(事前定義された機械学習アルゴリズム)によって異なります。
今回は「User-Personalization-v2」というレシピを利用したため、抜粋して以下に記載します。

項目 料金
データインジェスト 0.05USD/GB
トレーニング 0.002USD/1000件
推論 0.15USD/1000件

詳細:料金 – Amazon Personalize | AWS

事前データの準備

今回、学習させるデータは生成 AI に出力させました。

用意したファイルとしては以下の 3 つになります。

  • interactions:ユーザーの購買記録を記載。
  • items:クリスマスアイテムのデータを記載。
  • users:ユーザー情報を記載。

また、Personalize 上での学習には interactions 用のデータが最低 1000 行、users は最低 25 名の情報が必要となります。

生成 AI に出力させたファイルは以下になります。

  • インタラクションデータ:interactions.csv
    どのユーザーが何の商品を購入したかが記録として記載されています。

  • クリスマス商品データ:christmas_gift_data.csv
    商品名やカテゴリに加えて、子供向け、男の子向け、女の子向けなどターゲット層のデータも記載されています。

  • ユーザー情報:users.csv
    年齢、名前、所在地などのデータが記載されています。

Amazon S3 バケットの作成

トレーニング用のデータを格納するための S3 バケットを作成します。
今回は、デフォルト設定のまま名前だけ設定したバケットを利用します。

バケットが作成できたら、事前準備した学習データをアップロードしておきます。

Personalize からバケットにアクセスできるようにバケットポリシーも編集しておきます。

{
    "Version": "2012-10-17",
    "Id": "PersonalizeS3BucketAccessPolicy",
    "Statement": [
        {
            "Sid": "PersonalizeS3BucketAccessPolicy",
            "Effect": "Allow",
            "Principal": {
                "Service": "personalize.amazonaws.com"
            },
            "Action": [
                "s3:GetObject",
                "s3:ListBucket",
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::paseri-christmas-gift-personalize-data",
                "arn:aws:s3:::paseri-christmas-gift-personalize-data/*"
            ]
        }
    ]
}

これで学習用データの準備は完了です!

Amazon Personalize の構築

基本的な構築の流れとしては以下の 3 段階で進んでいきます。

  1. データセット(学習用データ)の作成
  2. ソリューション(学習モデル)の作成
  3. キャンペーンの作成

データセット作成

まずはデータセットを作成して、モデルがトレーニングに利用するためのデータを設定します。

Personalize 画面の、左タブにある「Create dataset group」を選択すると作成画面に移動できます。

名前は任意のものを記入します。
今回は EC サイトでのレコメンドを想定しているので、ドメインは「E-commerce」を選択します。

「Create group」を選択して戻ると、データセットの作成に必要な設定が各ステップに記載されるようになります。

「item interactions dataset」からインタラクションデータを読み込みます。

各項目の名前は、任意のものを記載しています。

スキーマ定義は interactions.csv の項目に合わせて記載します。

{
  "type": "record",
  "name": "Interactions",
  "namespace": "com.amazonaws.personalize.schema",
  "fields": [
    {
      "name": "USER_ID",
      "type": "string"
    },
    {
      "name": "ITEM_ID", 
      "type": "string"
    },
    {
      "name": "TIMESTAMP",
      "type": "long"
    },
    {
      "name": "EVENT_TYPE",
      "type": "string"
    }
  ],
  "version": "1.0"
}

インタラクションデータを読み取るためのジョブを定義します。
Data location には、作成した S3 バケットの interactions.csv があるパスを記載します。

IAM ロールは自動生成のものを使用します。
生成された IAM ロールには、S3 バケットに対する許可と Personalize の FullAccess 権限が付与されていました。

データの読み取りが完了すると Datasets のステータスが Active になっていました。
これを「Items」と「Users」でも設定します。

Items スキーマの設定です。

{
  "type": "record",
  "name": "Items",
  "namespace": "com.amazonaws.personalize.schema", 
  "fields": [
    {
      "name": "ITEM_ID",
      "type": "string"
    },
    {
      "name": "CATEGORY_L1",
      "type": "string",
      "categorical": true
    },
    {
      "name": "CATEGORY_L2",
      "type": "string",
      "categorical": true
    },
    {
      "name": "PRICE",
      "type": "float"
    },
    {
      "name": "AGE_GROUP", 
      "type": "string",
      "categorical": true
    },
    {
      "name": "GENDER",
      "type": "string",
      "categorical": true
    }
  ],
  "version": "1.0"
}

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
    },
    {
      "name": "INCOME_LEVEL",
      "type": "string", 
      "categorical": true
    },
    {
      "name": "FAMILY_STATUS",
      "type": "string",
      "categorical": true
    }
  ],
  "version": "1.0"
}

これでそれぞれのデータセットが作成できました!

学習データの分析

この操作は必須ではありませんが、取り込んだデータの内容を分析させることでより精度を上げるための提案をしてもらうこともできます。

分析結果は「View analysis」から確認できます。
洞察のところに、学習データに対する推奨事項などを提案してくれます。
(画像は日本語にブラウザ翻訳したものです。)

またインタラクションやアイテムなど取り込んだデータの統計も確認することができました。



次のステップでも、ユースケースベースのレコメンド機能を定義したり、フィルターをかけることもできますが今回は割愛します。

ソリューションの作成

次にソリューションを作成します。
ソリューションは、Personalize における機械学習モデルのようなものです。

左タブにある「Solutions and recipes」から「Create solution」を選択して設定画面へ移動します。

今回は、ユーザー情報をもとに分析をしていくので以下の設定をしておきます。

  • Solution type:Item recommendation
  • Recipe:aws-user-personalization-v2

今回は作って終わりなので、トレーニング設定の自動トレーニングを無効にしておきます。
そのほかの設定はデフォルトのままで進みます。

レビュー画面を確認して、設定内容に問題無ければそのままソリューションを作成します。

ソリューションはすぐに作成されますが、ソリューションバージョン(モデルトレーニング)の作成には、20 分~ 48 時間かかるそうです。

トレーニング完了後の画面です。
今回は 2 時間程度でトレーニングが完了しました。

これで、用意したデータをもとにモデルのトレーニングも完了しました!

キャンペーンの作成

最後に、作成したソリューションを利用するためのキャンペーンを作成してみます。
キャンペーンを作成することで、ソリューションに対して API 経由でのレコメンド取得ができるようになります。

左タブの「Campaigns」から「Create campaign」を選択します。

先ほど作成したソリューションを指定し、ソリューションバージョンは自動的に最新のものを参照する設定にしています。
そのほかの設定はデフォルトのまま作成します。

Status が Active になれば設定完了です。
これで作成したモデルを利用できるようになりました!

モデルを使ってみる

作成したモデルは、コンソールと AWS CLI から利用できます。

コンソールの場合は、「Personalization API」のタブからユーザー ID を指定すればレコメンドを生成することができます。

今回は、仮に「user_025」へのレコメンドを生成してみます。
user_025 は、37 歳の男性で東京在住しており結婚して子供がいる人物です。
過去に、「スマートウォッチ」や「クリスマス限定モノポリー」、「サンタクロースの冒険小説」など本人が利用する物に加え子供と遊べるような商品を購入していました。

レコメンドの生成は、User ID に「uer_025」と記入して「Get recommendations」で実行するだけです。

すると、おすすめのギフトがスコア順に記載されるようになりました。
スコアの高いギフトがよりおすすめ度の高いアイテムとなっています。

ちなみに結果で出たギフトは、上から順に「雪の結晶マスク」「雪景色カレンダー」「USB-Cケーブル」「クリスマス限定トランプ」「クリスマスかるた」でした。
スマートウォッチの充電で利用できるケーブルや、家族で遊べるギフトがレコメンドされていそうです!

CLI の場合、以下のコマンドを実行することでレコメンドの取得ができます。

aws personalize-runtime get-recommendations \
  --campaign-arn arn:aws:personalize:ap-northeast-1:XXXXXXXXXXXX:campaign/paseri-christmas-gift-campaign \
  --user-id user_001 \
  --num-results 5

CLI を実行することで、JSON 形式でレコメンド情報を取得することができました。

まとめ

今回は、Amazon Personalize を利用してクリスマスギフトのレコメンド機能を構築してみました!
モデルトレーニング用のアルゴリズムが、レシピとして既に定義されているので実装が比較的簡単にできるのはいいですね!

少しでも参考になれば幸いです!
最後までお読み頂きありがとうございました!

NHN テコラスの採用情報はこちら

テックブログ新着情報のほか、AWSやGoogle Cloudに関するお役立ち情報を配信中!

Paseri

2024年新卒入社。うどん好きな初心者クラウドエンジニア。

Recommends

こちらもおすすめ

Special Topics

注目記事はこちら