Amazon Personalize を使うための予備知識まとめ

Amazon Personalize 使う前に。
2022.08.31

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

おはようございます、もきゅりんです。

Shall we recommend ?

すでに弊社にもいろいろとブログはあるのですが、 Amazon Personalize (以下 Personalize) に興味はあるけど、何も知らない人(少し前の自分と同じ人および未来の自分)用にまとめておきました。

本稿の対象読者は、 Personalize に興味関心があって使ってみたい、ざっと概要を知りたい、機械学習知らん人です。

例えば、自分の最初の Personalize に対するお気持ちは以下になります。

  • 何か、商材とかをレコメンドしてくれる AWSマネージドサービスだよね?
  • でも、何をどうやって、どんなレコメンドしてくれるの?
  • 精度はどうなの?それはどう計測するの?
  • どうやって継続した運用をするの?何に注意すれば良いの?
  • コストはどれくらい?

皆さんも他にも疑問は色々と湧いてくるとは思いますが、こちらを上から1つずつ確認していきましょう。

どういう結果を出せるのか

何か、商材とかをレコメンドしてくれる AWSマネージドサービスなんだよね? でも、何をどうやって、どんなレコメンドしてくれるの?

とりあえず、「何をどうやって」は置いといて、何をしてくれるの?ですが、

何をどうしたいか によります。

まず以下の図をご確認下さい。

あなたのやりたいことは、ドメインデータセットで十分でしょうか。それともカスタムデータセットでしょうか。

ドメインデータセットとカスタムデータセット

2022年8月31日現在、Amazon Personalize を利用するにあたって大きな選択の分岐があり、ドメインデータセットとカスタムデータセットがあります。

ドメインデータセットとカスタムデータセットとで利用方法、レコメンドされる結果が異なります。

ドメインデータセットは、よく利用されるパターンとして AWS が用意してくれているデータセットタイプと考えます。

ドメインデータセットは、選択したドメインによってデータセットとスキーマの要件は決められています。

AWS がいろいろと設定や運用が楽になるように面倒を見てくれる代わりに、 *1柔軟な調整がしにくくなっています。

カスタムデータセットは名前の通り、独自の設定や調整をしやすい柔軟性の高いデータセットです。

その代わり、自身で管理する概念や設定が増えてきます。たとえば、バッチレコメンドやリアルタイムレコメンドのどちらかを選択する必要があります。

以下の表は、それぞれのデータセットでのレコメンドできる結果のまとめです。

ドメインデータセット

VIDEO_ON_DEMAND

ユースケース 必須データ
あなたが観た動画を観ている人が観ている動画(対象者は観ていない) (Because you watched X) インタラクション
観ている動画に類似した動画(対象者は観ていない) (More like X) インタラクションとアイテム
最も人気がある動画 (Most popular) インタラクション
今人気急上昇の動画 (Trending now) インタラクション
あなたへのオススメ動画(対象者は観ていない) (Top picks for you) インタラクションとアイテム

Eコマース

ユースケース 必須データ
よく表示されている商品 (Most viewed) インタラクション
よく購入されている商品 (Best sellers) インタラクションとアイテム
指定したアイテムと一緒に購入されている商品 (Frequently bought together) インタラクション
この商品を見た人はこんな商品も見ています(あなたは購入していない) (Customers who viewed X also viewed) インタラクション
あなたへのオススメ商品(あなたは購入していない) (Recommended for you) インタラクション

あたなへのオススメ商品が動画とは異なり、インタラクションデータのみというのが不思議というか、すごいですね。

カスタムデータセット

レシピ 必須データ
ユーザーへのおすすめアイテム(USER_PERSONALIZATION) インタラクション
厳選されたリストまたは検索結果のランキングをユーザー向けにパーソナライズする(PERSONALIZED_RANKING) インタラクション
類似商品のレコメンド(RELATED_ITEMS) インタラクション
ユーザーセグメントの取得(USER_SEGMENTATION) インタラクション

上記が「どんなレコメンドしてくれるの?」が回答になります。

詳細を確認したい場合は以下ページをご参照下さい。

また、さらに結果にフィルタリングやプロモーションを施すことで、より最適化されたレスポンスを得ることができますが、本稿では触れません。

興味ある方は以下ページをご参照下さい。

データセット

上記の表に記載されている インタラクションアイテム ですが、 Personalize にはドメインデータセットとカスタムデータセットに共通して以下 3つのデータセット の種類があります。

  • インタラクションデータ: レコメンダーまたはカスタムソリューションを作成するのに必須のデータ。 ユーザーとアイテムとのやり取り (クリック、動画視聴、購入など)のデータ、やり取りが発生した場所やデバイスの種類などのコンテキストデータ、アイテムが表示された回数のデータをインポートします。
  • ユーザーデータ: ユーザーに関する (性別やロイヤルティメンバーシップなど) 数値およびカテゴリのメタデータをインポートします。
  • アイテムデータ: アイテムに関する (作成タイムスタンプ、料金、ジャンル、説明、利用可否など) 数値およびカテゴリのメタデータをインポートします。

ドメインデータセット、カスタムデータセットデータセットのタイプごとに異なるデータ要件があります。

それぞれの詳細については、以下ページを参照下さい。

どうやって使うのか

次に「何をどうやって」のイメージです。

ドメインデータセットとカスタムデータセットとで多少設定や名称に差異がありますが、基本的な流れは同様です。

データを入れる、データからレコメンドのためのトレーニングする、データを与えると結果を返してくれる学習器を作成する、学習器にリクエストを投げてレスポンスを受け取ります。

カスタムデータセットでは、データを使って何をしたいかによって レシピ (AWSが用意してくれているトレーニング)を選択して ソリューション を生成します。

リアルタイムでのリクエストとレスポンスが必要な場合は、 キャンペーン を作成します。(バッチレコメンドで十分な場合は、キャンペーンは不要です)

カスタムデータセットでは、その他さらなる最適化のために細かい調整をすることが可能です。

ドメインデータセットの レコメンダー は、カスタムデータセットのソリューションとキャンペーンが合体しているような概念になって、設定はよりスムーズになっています。

ユースケースとレシピ

レコメンドできる結果のまとめで上述したように、どのような結果を Personalize に求めるかによって選択するのが ユースケースレシピ です。

それぞれ、ドメインデータセット、カスタムデータセットで選択する必要があります。

そして、どちらのタイプのデータセットにもレコメンドの内容に影響する設定、「探索 (Exploration) 」があります。

ほぼ原文を邦訳しただけですが、探索とは以下の概念になります。

探索とは、Amazon Personalize がさまざまなアイテムの推奨事項をテストし、インタラクション データがないか、またはほとんどない新しいアイテムにユーザーがどのように反応するかを学習するために使用するプロセスです。

Emphasis on exploring less relevant items: 探索する量を構成します。より多くの探索を行うと、レコメンデーションには、インタラクション データまたは関連性の少ないアイテムが含まれます。値が 1 に近いほど、より多くの探索が行われます。ゼロの場合、探索は行われず、推奨事項は現在のデータ (関連性) に基づいています。

Exploration item age cutoff : 最後のインタラクションからのアイテムの最大経過時間 (日数) を入力します。これにより、アイテム探索の範囲が定義されます。探索中に Amazon Personalize が考慮する項目を増やすには、より大きな値を入力します。

要するに、Personalize は、これまで各ユーザーがあまり関わっていないようなデータを「敢えて」レコメンドし、その反応次第で、各ユーザーの趣向や特徴を学習するようです。

探索 (Exploration) とは、すなわち「冒険度」であると自分は理解しました。

「冒険」を重ねることで、各ユーザーがどう反応するかを観察し、より深くユーザーを理解して、次のアクションを予測していく(という認識です)。

トレーニング(学習)の対象とする、これまであまり関わっていないようなアイテムとこれまでの行動期間の調整によって、「冒険度」を設定します。

(カスタムデータセットでは Emphasis on exploring less relevant items が Exploration weight と称されています。ほぼ同じ説明が記載されていますが、なぜ違う名前にしているかは不明です。)

なお、カスタムデータセットではその他モデルのパフォーマンスを向上させるためのハイパーパラメータがあります。

本稿は概要ということで、カスタムデータセットのレシピのハイパーパラメータについては触れません。

バッチ/リアルタイム学習の選択

カスタムデータセットにおけるバッチ/リアルタイム学習の選択ですが、バッチ学習は学習器を生成するためのトレーニングするためには全データを取り込まなくてはなりません。

このとき以下のような懸念点がありそうです。

  • 取り込むデータのサイズが巨大になってくるとトレーニング時間が長くなる。下手すると営業時間までにトレーニングが間に合わなくなる。
  • 毎回全データを取り込むため、データ取り込みコストが大きくなる。

逆に考えると、バッチ学習での用途は、短期的にはデータに大きな変化は生じず、かつ、利用するために生じるトレーニング時間の制約がシビアではないケースになるでしょうか。(パッと思いつくのはデータのカテゴライズでしょうか。)

リアルタイム学習は、継続的にデータを追加して、変化に対して追随する必要があるケースで使われるでしょう。

リアルタイムのイベント記録については、 Recording events - Amazon Personalize に詳しく記載されていますが、本稿では触れません。

Personalize でどのように追加されたデータをトレーニングで利用するか、またどのようにモデルに反映するかは下記をご参照下さい。

ドメインデータセットとカスタムデータセットとで、それぞれ追加データの反映の仕方は異なっています。

共通しているのは、個々のインタラクションの追加はすぐにレコメンデーションに反映します。(例外もあります)

インタラクション データのない新規ユーザーのおすすめは、最初は最も人気のあるアイテムのみです。

2時間ごとにモデルを自動的に更新するもの、自身で再トレーニングを実行する必要があるものとがあります。

ドメインデータセットのモデルは、作成日から7日ごとに自動的に再トレーニングされます。

評価の仕方

「精度はどうなの?それはどう計測するの?」についての評価の仕方ですが、 レコメンダーの評価 - Amazon Personalize によれば、オンラインのメトリクスとオフラインのメトリクスに大別されます。

オンラインのメトリクスとは、いわゆる Google 広告などのマーケティグツールを利用したクリックレート (CTR) や コンバージョンレート(CVR) を指すようです。

こちらの実績を確認するためには、これらの運用管理が必要となります。基本的には本番環境でしか確認することはできないと考えます。

オフラインメトリクスは、 Personalize がレコメンドモデルのパフォーマンスに対して生成するメトリクスです。

各メトリックが、数値が大きいほど優れているモデルになります。

モデルの良し悪し (精度) を計るには、まずベースラインとなる Popularity-Count レシピの評価メトリクスと比較するのが良さそうです。

この辺りについては、別途ダミーデータを使って、一般的な感覚と大きくレコメンドが乖離しないかを検証してみたブログを書きました。

POS のダミーデータを作って Amazon Personalize を使って商品レコメンドを予測してみる | DevelopersIO

複数のレコメンダー(ソリューション)を作成して、 数値を比較して大きいモデルを選択するのが基本 になります。

  • coverage
  • mean reciprocal rank at 25
  • normalized discounted cumulative gain (NCDG) at K (5, 10, or 25)
  • precision at K

どのようにメトリックを算出しているか、本稿では触れません。

メトリックの詳細は以下ページを参照下さい。

運用と注意事項

継続的な運用面については、データの取り込み方(バッチなのかリアルタイムなのか)やデータの加工処理(いわゆるETL)の設計やそれらを実行するリソース運用管理なども検討材料になってくると思いますが、ひとまず Personalize 自体の運用管理として限定します。

Personalize は AWS マネージドサービスですので、いわゆる保守運用は必要ありません。

とはいえ、責任共有モデルに応じてコンテンツの保護(暗号化や権限管理など)は利用者側の責任ですので、IAM でのセキュリティのベストプラクティス の遵守や S3 バケットポリシー、CloudTrail のロギング、必要に応じて Amazon Macie などのガードレールを設定しましょう。

なお、Personalize は転送中・保管中データの暗号化を実施しています。

これらについては、 Amazon Personalize のセキュリティ - Amazon Personalize をご参照下さい。

Personalize のモニタリングですが、以下のようなメトリクスに大別されます。(CloudWatch ログに何か出力することは現状なさそうです。)

  • データインポートに関するメトリクス(実行時間、サイズ、成功リクエスト数、エラー数)
  • トレーニングに関するメトリクス(実行時間、成功リクエスト数)
  • ランキングリクエストに関するメトリクス(実行時間、成功リクエスト数、4XX、5XXエラー数)
  • レコメンドリクエストに関するメトリクス(実行時間、成功リクエスト数、4XX、5XXエラー数)
  • イベントデータ投入に関するメトリクス(実行時間、成功リクエスト数、4XX、5XXエラー数)
  • ユーザーデータ投入に関するメトリクス(実行時間、成功リクエスト数、4XX、5XXエラー数)

これらのメトリクスにしきい値を設けてアラームを設定することもできます。

その他、レコメンド品質における注意事項としては、以下のようなものがありそうです。

  • カスタムデータセットモデルの再トレーニングの頻度

Maintaining recommendation relevance - Amazon Personalize の Keeping solution versions up to date や Frequently asked questions - Amazon Personalize を確認しましょう。

コスト

最後にコストです。

コストが生じる大雑把なくくりは以下です。

  • 利用するデータサイズが大きいほど、また取り込む回数が増えるほどコストは増します。(1GB あたり 0.05 USD)
  • トレーニング時間が増えるほど、コストは増します。(ドメインデータデータには当てはまりません)
  • レコメンダーを生成すると、ユーザーデータのサイズに応じてコストが発生し続けます。(ドメインデータセットに当てはまります)
  • レコメンデーションやセグメンテーションを実行する回数が増えるほど、コストは増します。

ドメインデータセットのレコメンダーは検証のために生成して、そのままにしておくとビックリすることになります。

当たり前のことですが、利用するケースによってさまざまだと思いますので、料金 - Amazon Personalize | AWS でしっかりと確認しましょう。

さいごに

機械学習系のサービスは油断すると、ビックリする請求額になったりするため、気安く触って検証することを躊躇する自分がいます。

ようやく Personalize の概要を理解して触れられる状態になったと思います。

また折を見て、リアルタイムのイベント記録について検証してみたいと考えています。

以上です。

本稿が、Personalize 触ってみたい人の第一歩として参考になれば幸いです。

脚注

  1. 後述するように、レコメンダー作成日から 7日ごとにレコメンダーの新しいモデルを自動的にトレーニングするものがあります。