Amazon Personalizeをつかって簡単レコメンデーション

記事タイトルとURLをコピーする

2019/06/12にAmazon Personalizeの一般提供が開始されました。

Amazon Personalize の一般提供開始と東京リージョンラウンチのおしらせ

モデル(Personalizeではレシピと呼ばれる)をトレーニングし、レコメンデーション機能が簡単に作成できるAWSサービスです。

今回はこのAmazon Personalizeをつかって、社内で利用しているピアボーナ制度(Unipos)のデータをもとに、「この人へポイントを送った人はこの人へも送っています」のようなレコメンデーションをしたいと思います。

S3に学習データ保存

今回はUniposの6か月分の投稿一覧(拍手ランキング)をPersonalizeへインポートするために加工しました。

こんな感じの5800行くらいのCSVを...


sender,receiver,sendersGroup,receiversGroup,contents,dateAndTimeOfThePost,numberOfMembersWhoClapped,numberOfClaps,pointsOfThePost,sendersEMailAddress,receiversEMailAddress,cardUrl
Foo Foo,Bar Bar,CI部,サービス開発部,"感謝感激!",XX/XX/XX XX:XX,20,30,2,foofoo@example.com,barbar@example.com,https://unipos.me/cards/xxxxx
Bar Bar,Hoge Hoge,サービス開発部,CI部,"ありがとう!",XX/XX/XX XX:XX,20,20,2,barbar@example.com,hogehoge@example.com,https://unipos.me/cards/xxxxx
...

こんな感じに加工。


"USER_ID","ITEM_ID","TIMESTAMP"
"foofoo@example.com","barbar@example.com",xxxxxxxxxx
"barbar@example.com","hogehoge@example.com",xxxxxxxxxx
...

形式についてはドキュメントを確認ください。 USER_IDITEM_IDとあるようにホントはIDでやるのが好ましいのかもしれませんが、今回はメールアドレスで利用しました。

こちらのCSVをS3へ保存すれば準備はOKです。

Dataset Groups作成

Personalizeでは、学習データのインポートやトレーニング(Solutionの作成)等はDataset Groupという単位で行います。

まずはDataset Groupを作成します。

Dataset Group名をいれます

Datasetのインポート

上記手順で「Next」をクリックするとそのままDatasetの設定へ移ります。

Dataset名をいれます。

Schemaを作成します。 Schema definitionはデフォルトのままとしました。

import job名をいれます。

初回利用の場合、IAMロールがないので「Create an IAM role」を選択し、IAMロールを作成します。 最低限のIAMポリシーで作成したい場合は、IAMのコンソールから作成することをお勧めします。

学習データを保存したS3パスを入力し、「Start Import」でimport jobが開始します。

Import job statusが「Active」となれば、import完了です。

Solution作成

続いてSolutionを作成します。Solutionとは、Recipeを使ったトレーニング済みのモデルのことだと思ってください。Solutionの作成はつまりトレーニングです。

Solution名を入れ、今回RecipeはManualで選択しました。 似たアイテムをレコメンドしたいのでRecipeはSIMSを選択しました。

あとはトレーニングが終わるまで待ちます。

作成したSolutionからSolution versionを確認し、Solution version statusが「Active」となればトレーニング終了です。

Campaign作成

最後にCampaignを作成します。Campaignは予測を行うエンドポイントのようなものです。

Campaign名をいれて、Solutionは先ほど作成したものを選択します。 Minimum provisioned transactions per secondはデフォルトの1としました。

しばらく待って、CampaignのStatusが「Active」となれば作成完了です。

レコメンドしてみる

実際に使用するとなると、LambdaやEC2からSDkを使用して使うことになると思いますが、マネコンからもお試し程度にレコメンドの結果をみることができます。 作成したCampaignの「Test campaign results」からそれが可能です。

実際にITEM_ID(今回はユーザーのメールアドレス)を入れてみました。

ふむ...見た感じレコメンドできているような気がしないでもないでした。 たしかに、ITEM_IDで入れたユーザーと同じ部署・プロジェクトのユーザーがレコメンドされるのである程度の精度は出ているようでした。

ちなみに今回のRecipeは、当てはまるITEM_IDがなければ人気なITEM_IDが返されるというものになっています。

まとめ

今回はUniposのデータを使いAmazon Personalizeを使用してみました。RecipeとかCampaignとか他の機械学習系のサービスでは見慣れない用語・コンポーネントが登場して戸惑いましたが、理解してしまえば簡単にレコメンデーションができるようになりました。