【Amazon Personalize】Part.2 映画レコメンデーション作成のデモ

# はじめに
本記事では、Amazon Personalize コンソールを使用して、特定のユーザー向けにパーソナライズされた映画のレコメンデーションを作成してみます。

以下ドキュメントを参考に進めていきます。

https://docs.aws.amazon.com/ja_jp/personalize/latest/dg/getting-started.html

関連記事

- [【Amazon Personalize】Part.1 概要、データセットの要件](https://qiita.com/omiyu/private/d984dd1ce1d2ae7df899)
- [【Amazon Personalize】Part.3 最新アップデート情報](https://qiita.com/omiyu/private/6ed8f022a8ccef20e550)

# 前提条件

1. [AWS アカウントと IAM ユーザーの作成](https://docs.aws.amazon.com/ja_jp/personalize/latest/dg/setup.html#aws-personalize-set-up-aws-account)
1. ユーザーと Amazon Personalize に Amazon Personalize リソースへのフルアクセスを許可する [IAM ポリシーを作成](https://docs.aws.amazon.com/ja_jp/personalize/latest/dg/aws-personalize-set-up-permissions.html#set-up-required-permissions) ➝ アタッチ
1. [IAM サービスロールの作成](https://docs.aws.amazon.com/ja_jp/personalize/latest/dg/aws-personalize-set-up-permissions.html#set-up-create-role-with-permissions)
1. [トレーニングデータを Amazon S3 にアップロード](https://docs.aws.amazon.com/ja_jp/personalize/latest/dg/gs-prerequisites.html#gs-upload-to-bucket)
    1.  [映画のレーティング zip ファイル](http://files.grouplens.org/datasets/movielens/ml-latest-small.zip) を [MovieLens](https://grouplens.org/datasets/movielens) からダウンロード
    1. ratings.csv ファイルの [評価] 列を削除
    1. ヘッダー行を USER_ID,ITEM_ID,TIMESTAMP に置き換えて保存
1. [Amazon Personalize サービスロールに Amazon S3 へのアクセス権限を付与](https://docs.aws.amazon.com/ja_jp/personalize/latest/dg/granting-personalize-s3-access.html)

# 手順

以下の手順で、映画のレコメンデーションを特定のユーザーに返すキャンペーンを作成します。

1. トレーニングデータのインポート
1. ソリューションの作成
1. キャンペーンの作成
1. レコメンドの取得

## 1.トレーニングデータのインポート

[Amazon Personalize コンソール](https://console.aws.amazon.com/personalize/home)を開きます。
[Get started] を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/d666adfd-2b34-341c-0916-90a3ad5f17df.png)

データセットグループを作成します。
データセットグループ名を入力 ➝ ユースケースを選択 ➝ [Create dataset group and continue] を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/59b290e0-5d03-92e5-f3bb-9d6259bad53b.png)

データセット名を入力 ➝ [Create new schema] を選択 ➝ スキーマ名を入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/0778ae52-6763-a43c-2995-e169269b07cb.png)

スキーマの定義を確認後、[Create dataset and continue] で次に進みます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/3bf87804-2aa3-65c6-9163-6426d2c01e7c.png)

インポートソースに S3 を選択 ➝ データセットインポートジョブ名を入力 ➝ 使用するデータの S3 URI を貼り付けます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/eaf63524-1e47-cb69-e40a-ecc1b5eaa2b1.png)

[Finish] で作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/acc6c750-808f-03cd-b8f6-f23bf8b5f168.png)

作成した AmazonPersonalizeFullAccess ロールを指定 ➝ [Finish] を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/5f3f3c6b-08d5-4c82-0acc-ad57a85f6fd8.png)

データのインポートジョブが開始され、ダッシュボードが表示されます。
インポートジョブが完了したら [Create solution] を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/7d1c1768-3ce8-97ca-59f8-59c05c714fbd.png)


## 2. ソリューションの作成

ステップ１でインポートしたデータセットを使用してモデルをトレーニングします。
トレーニングしたモデルはソリューションバージョンと呼ばれます。

ソリューション名を入力 ➝ ソリューションタイプを選択 ➝ レシピを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/58d97ba5-08f2-c6c3-d8f6-c8c60a78cd6a.png)

今回はオプションの設定はしません。
[Create and train solution] を選択してトレーニングを開始します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/82e6ea36-d93d-b427-44b9-4e623fc5c2c6.png)


## 3. キャンペーンの作成

ステップ２で作成したソリューションバージョンをデプロイして、キャンペーンを作成します。

ナビゲーションペインから [Campaigns] を選択 ➝ [Create campaigns] を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/7a74c70a-25c8-2198-70b6-734515299eb4.png)

キャンペーン名、ソリューション、ソリューションバージョン ID、１秒あたりの最小プロビジョンドトランザクションを設定 ➝ [Create campaign] を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/51e6e294-73c1-a4e8-aa2c-8b1f86d6f98d.png)

Exploration weight（インタラクションデータ / 関連性が少ないアイテムをレコメンドに含める頻度）と Exploration item age cut off （アイテムの最大経過日数（最新の対話からの日数））はデフォルト値のままで、 [Create campaign] を選択してキャンペーンの作成を開始します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/ece9830a-ca80-57c1-3b09-0a7dc2ba33b1.png)

キャンペーンの作成が開始されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/01bad5b7-81f7-b1da-ed85-1f818750dab3.png)

## 4. レコメンドの取得
ステップ３で作成したキャンペーンを使用して レコメンデーションを取得します。

[Test campaign results] にて レコメンドを取得するユーザーのユーザー ID を指定 ➝ フィルタは None のままにして ➝ [Get recommendations] を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/390a4d6c-195e-0f15-d9d6-8b1b8a9c8d47.png)

USER_ID  1 のユーザー向けに、推奨アイテムの ID と スコアの一覧が取得できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/f33bf390-b5c0-f562-e3b9-c4c4cb65718d.png)

# おわりに
今回は以下を参考にしました。
https://docs.aws.amazon.com/ja_jp/personalize/latest/dg/getting-started.html
とてもシンプルな手順でレコメンドの作成ができることが分かりました。
次回はユーザーの情報や製品情報も入れてみて、より個人にパーソナライズされた何かしらのレコメンドを作ってみたいです。

また、AWS re:Invent 2021 で新しく公開された機能もあるので、次回まとめていければと思います。（➝[記事](https://qiita.com/omiyu/private/6ed8f022a8ccef20e550)）