Amazon Personalizeでレコメンドしたときのメモ



##はじめに
卒検のときのメモです。見にくい部分が多いかもですがご了承ください。

大学の卒業研究でAmazon Personalizeを使った推薦性能の比較実験をしたので、Amazon Personalizeの使い方をメモしたもの。

#1. Amazon Personalizeとは
>Amazon Personalizeは、開発者がアプリケーションを使用する顧客に個別の推奨事項を簡単に追加できるようにする機械学習サービスです。これは、Amazonがパーソナライズシステムを構築した豊富な経験を反映しています。

引用: [What Is Amazon Personalize?](https://docs.aws.amazon.com/personalize/latest/dg/what-is-personalize.html)

#2. Personalzie用IAM作成
rootユーザーとかAdministratorユーザーでAmazon Personalizeを試す人はスキップで。

IAMで以下JSONのポリシーを作成。

```

        {
            "Version": "2012-10-17",
            "Statement": [
                {
                    "Effect": "Allow",
                    "Action": [
                        "personalize:*"
                    ],
                    "Resource": "*"
                },
                {
                    "Effect": "Allow",
                    "Action": [
                        "iam:PassRole"
                    ],
                    "Resource": "*",
                    "Condition": {
                        "StringEquals": {
                            "iam:PassedToService": "personalize.amazonaws.com"
                        }
                    }
                }
            ]
        }
```


作成したポリシーを任意のIAMユーザーにアタッチ。

#3. Personalize用のロールを作成
1. IAM/ポリシーから「AmazonPersonalizeFullAccess」と「AmazonS3FullAccess」をアタッチ
4. IAM/ロールで「ロールの作成」から「AmazonPersonalizeFullAccess」と「AmazonS3FullAccess」を選択
5. Role ARNは後ほど使う

参考: [アクセス許可の設定](https://docs.aws.amazon.com/ja_jp/personalize/latest/dg/aws-personalize-set-up-permissions.html)

#4. トレーニングデータの作成
データセット: https://grouplens.org/datasets/movielens/

上記から好きなデータセットをダウンロード。もちろん、どのデータセットでも大丈夫ですが、このメモはml-latest-smallデータセットで進めてます。

__※ちなみに、movielensはレコメンドの評価でよく使われる有名なデータセットです__

ダウンロードしたml-latest-smallに入っているratings.csvのヘッダーを加工。加工内容は以下の通り。


変更前：

```
userId,movieId,rating,timestamp
```

変更後：

```
USER_ID,ITEM_ID,TIMESTAMP
```

加工したratings.csv をAmazon S3 にアップロード。

#5. PersonalizeからS3にアクセスできるようにする

ファイルをアップロードしたS3のバケットにバケットポリシーを追加する。
アクセス許可 / バケットポリシーから以下のJSONを登録。

```
        {
            "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:::bucket-name",
                        "arn:aws:s3:::bucket-name/*"
                    ]
                }
            ]
        }
```
**※Resourceの「bucket-name」はデータセットをアップロードしたs3のバケット名に変更する**

#6. Personalizeにトレーニングデータをインポート
1. トップページで「Get started」を選択
2. [Dataset group details] で [Dataset group name] に任意のデータセットグループの名前を指定。
3. [next] を選択。
4. [Dataset name] で任意のデータセット名を指定。
5. [Schema selection] で[Create new schema] を選択。
6. [New schema name] で任意のスキーマ名を指定。
7. [Schema definition]には最小限のスキーマが表示されています。最小限スキーマは、アップロードした ratings.csv ファイルに追加したヘッダーと一致。

8. [next] を選択します。

9. [Dataset import job name] に任意のインポートジョブ名を指定。
10. [IAM service role] はデフォルトで選択されている [Enter a custom IAM role ARN] のまま。
11. [Custom IAM roleの ARN] で「Personalize用のIAMロールを作成」で作成したロールを指定。
12. [データの場所] で映画データが保存されているS3の場所を指定。
        
13. [Finish] を選択。data import jobが開始されDashboardが表示されます。

#7. ソリューションの作成
1. [Create solution] を選択。
2. [Solution name] で、ソリューション名を指定。
3. 対象: レシピは「aws-user-personalize」にします。

4. [next] を選択。Solution overviewが表示され確認。

6. [Finish] を選択。モデルのトレーニングが開始され、Dashboardが表示されます。
        
トレーニングが終了したら、Dashboardからキャンペーンを作成。

#8. キャンペーンの作成
やること：作成したソリューションのデプロイしてキャンペーンを作成する

1. [Create new campaign] を選択します。

2. [Campaign name] にキャンペーン名を指定。

3. [Solution] で作成したソリューションを選択。

4. 他はそのまま

5. [Create campaign]を選択。

キャンペーンが開始されて終わると[test campaign results]の項目ができる。

#9. 推薦性能を見る
ソリューションから推薦性能を見ることができます。なお、実際のレコメンドは作成したキャンペーンから行うことができます。

![2021-03-19_14h05_10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/411612/878b7b78-423e-8092-3616-9756ea8b33b1.png)


見ることができる評価指標

- NDCG
- Precision
- MRK
- Coverage

レコメンドの評価指標については、こちらのサイトが参考になります。
https://blog.brainpad.co.jp/entry/2017/08/25/140000

#10. お片付け

dataset、キャンペーン、ソリューション、全体の順でDeleteしました。
多分、キャンペーンからとかだとDeleteできない。紐付いてるからだと思います。

参考サイト：
https://docs.aws.amazon.com/ja_jp/personalize/latest/dg/gs-cleanup.html

#11. 使ってみる上で参考になったサイト
https://docs.aws.amazon.com/ja_jp/personalize/latest/dg/what-is-personalize.html

https://www.youtube.com/watch?v=3blaQhzJhYE&list=WL&index=4&t=2118s

https://www.youtube.com/watch?v=QBymNyWtzX4&list=WL&index=6