「知っ得ハンズオンはじめてのAmazon Personalize」に参加してきたのでまとめる

# Amazon Personalizeハンズオン

[知っ得ハンズオンはじめてのAmazon Personalize](https://amazonpersonalize20190819.splashthat.com/) に参加して、
初めてAmazon Personalizeを触ったので、まとめてみました。

<img width="548" alt="2019-08-19_181356.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182636/31f94a6e-85c3-c534-299c-cb63001512c4.png">

## 座学パート

### AWSのミッション

「全ての開発者に機械学習を」

### 機械学習とAI

蓄積された **データ** をもとに一定の推察を得るアルゴリズムの育成
※投資フェーズ

→　データサイエンティスト
　　　プライバシーの造詣
　　　全社のデータ戦略
　　　最新アルゴリズムの追求

ユーザに付加価値として推察を提供する **ビジネスロジック**
※回収フェーズ

→　フロントエンドエンジニア
　　　プライバシーの造詣
　　　Webサービスへの組み込み
　　　UXのエキスパート

### Amazon Personalizeとは

・レコメンデーションサービス（個人化推薦）
・機械学習経験不要
・Amazon.comと同様のテクノロジー（DeepLearning）

### 補足事項

* Personalizeで読み込ませるデータに、時系列の項目は必須
* アクティビティストリームは、動的にアイテムが変わる場合に有効。
　静的なアイテムを取り扱う場合は、有効にする必要はない。
* 再計算されるタイミングは、アンドキュメント（公式に文書化されていない）。
一方で、インジェクションを行うと再計算が実行される。
つまり1週間で一回再実行することで計算をさせることも運用上組み込んでもいい。
* 基本的にはAutoMLを選択肢、データを読み込ませて自動でアルゴリズム選択を任せるのがいい。
* [Amazon Forecast](https://aws.amazon.com/jp/forecast/)という制度の高い時系列予測サービスが現在プレビュー版で提供されている

## ハンズオンパート

### AWSから提供された資料

* ハンズオンの作業手順が記載されたドキュメント
* ハンズオンで利用するテストCSVデータ（ユーザID、映画のID、時系列）

### ハンズオン概要

#### S3

* 前述のCSVデータを格納するS3バケットを作成（※）

* 作成したS3バケットにバケットポリシーを適用

```
{
    "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:::<S3-bucket-name>",
                "arn:aws:s3:::<S3-bucket-name>/*"
            ]
        }
    ]
}
```

※既にあるS3バケットを利用してもいいですが、
　上記のS3バケットポリシーでPersonalizeからアクセスする権限を付与するので、
　ハンズオン後にS3ごと削除することを踏まえると、新規で作成しました

#### Amazon Personalize

- Dataset Groupを作成
<img width="1368" alt="2019-08-19_190000.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182636/bd41e383-16ac-d5c3-136b-dfdc99a446bd.png">
- user-item interaction dataを作成
<img width="1368" alt="2019-08-19_190132.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182636/a7d840d1-4288-7bf8-b954-9e530d410614.png">
    - PersonalizeからS3を読み込むIAM Roleを作成
<img width="1368" alt="2019-08-19_190243.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182636/254db1c3-7f98-c86c-6773-831241730d21.png">
- S3から先程アップロードしたファイルの読み込み開始 
<img width="1368" alt="2019-08-19_190342.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182636/0210b69e-30ab-a922-992d-f0577c81256b.png">
- solution作成
<img width="1368" alt="2019-08-19_191738.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182636/22637974-e024-2342-3fe2-dc094510a7d0.png">
- campaign作成
<img width="1368" alt="2019-08-19_202048.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182636/b7476ee5-527e-3ff0-641e-75e50e42fb96.png">

このcampaignが、推論モデルのエンドポイントという形で提供されたら、あとはテスト

- Test Campaign results

そのまま画面から推論モデルの検証
<img width="1367" alt="2019-08-19_203220.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182636/e2b51221-78fd-cdca-2bb8-8ff0df4605b9.png">
- AWS CLI

別途、[LightSail](https://aws.amazon.com/jp/lightsail/)でAmazonLinuxのインスタンスを作成し、
AWS configureでプロファイル設定後、AWS CLIで推論モデルを実行検証
<img width="754" alt="2019-08-19_203329.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182636/cd34e430-a879-7a3b-8735-ab343522d45b.png">

画面、AWS CLIから取得された結果が同じなので、無事にハンズオン完了しました。

## 受講してみて 

ここまで簡単にモデルができるというのは、個人的には参加してよかったです。

今まで機械学習というと、どうしてもデータサイエンティストのように大量のデータを前にして、
どういったモデルを適用して、検証をするか設計するというところでいつも詰まっていました。
特に前述した、[強調フィルタリング](https://www.albert2005.co.jp/knowledge/marketing/recommendation_basics/collaborative_filtering)というのはシンプルなロジックでいて、
なかなか厄介でレコメンデーションのモデル作成に手を焼きました。（過去形）

また、ノンプログラミングで実装できるというところで、
エンジニアを抱えていないけど、機械学習を取り組める膨大なデータを持っている事業を行っている方も、
このPersonalizeを活用できますね。