この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。
Amazon Personalizeはフルマネージド型の機械学習サービスで、用意したデータをもとにユーザーへのおすすめ商品・情報を生成します。
"ユーザーへのおすすめ商品"というのが曲者で、サービス名が"Personalize(パーソナライズ)"なだけに"一人ひとり(person)にあわせて変更された"情報が生成されるのです。
場合によっては、"20代女性におすすめの商品を提案したい"場合や、"北海道に住んでいる方におすすめ求人をお知らせしたい"なんてこともありますよね?
Amazon Personalizeでは、年齢や地域のなどの属性に合わせたおすすめ情報の生成は可能なのでしょうか。
今回の記事では、Amazon Personalizeで年代別や地域別などの属性情報でおすすめを引き出せるか、と題し、わたしが考察した結果を紹介します。
ユーザーIDではなく、行動履歴データの属性をもとに推薦情報を取得できるか
■結論
直接取得することはできない。
■じゃあ、どうすればいいだろうか
Personizeから取得できる推薦情報はあくまでUserIdを基準にした情報のみでした。
なぜ属性情報に基づいた推薦情報が得られないのかというと、Amazon Personalizeが提供するAPIによるものです。
Amazon Personalizeにおいて推薦情報を取得するための主なAPIは、GetRecommendationsとGetPersonalizedRankingの2つです。
●GetRecommendations:
このAPIは指定したユーザーIDに対して推薦アイテムのリストを取得します。ターゲットとなるユーザーに対して、最も関連性の高いアイテムをリストとして提供します。通常のパーソナライゼーションのシナリオ、例えばオンラインストアのホームページやプロダクトページでのアイテム推薦などに適しています。
●GetPersonalizedRanking:
このAPIは、指定されたユーザーに対して与えられたアイテムリストを再ランク付けします。すでにあるアイテムリストを、指定したユーザーの興味や行動に基づいて再ランク付けする場合に使用します。例えば、ユーザーがショッピングカートに追加したアイテムの中から、どれが最も購入する可能性が高いかをランク付けするシナリオなどに適しています。
そして、GetRecommendations APIの場合、主な引数はuserIdです。以下はGetRecommendations APIで利用できる主な引数の概要です。
引数名 | 必須 | 概要 |
---|---|---|
userId | 必須 | 推薦を受け取りたいユーザーのID。 |
itemId | オプション | この項目を基準に推薦を生成します。この引数は、ユーザーが現在閲覧しているアイテムや最近のアイテムなどを基準に、その関連の推薦を取得したい場合に使います。 |
campaignArn | 必須 | 使用するキャンペーンのARN (Amazon Resource Name)。 |
numResults | オプション | 返されるアイテムの数を指定します。デフォルトでは、キャンペーンで設定された数のアイテムが返されます。 |
filterArn | オプション | 推薦結果をフィルタリングするためのフィルターのARN。このオプションを使うと、特定の条件に一致するアイテムを結果から除外したり、特定の条件に一致するアイテムのみを結果に含めることができます。 |
filterValues | オプション | filterArnで指定されたフィルターの動的なパラメーターの値。例えば、特定のカテゴリやブランドを動的にフィルタリングする場合などに利用します。 |
じゃあ、どうすればいいだろうか
■属性に基づいた推薦情報を取得する方法
Amazon Peronalizeで用意されているAPIでは行動履歴データにあるデータや年齢別・地域別などの属性を推薦情報として直接取得することはできません。
しかし、間接的に属性に基づいた推薦情報を取得することができます。
年齢別にオススメ求人情報を取得したい場合を想定すると、以下の4つの方法が考えられます。
●方法1. 代表的なユーザー選定
各年齢層の代表的なユーザーIDを使用して推薦を取得する方法です。
利用可能なデータを分析して、各年齢層の代表的なユーザーの行動や属性を理解し、データ分析の結果を元に、各年齢層の代表的なユーザーを選定します。選定した代表ユーザーのユーザーIDをもとに推薦情報を取得し、展開します。
●方法2. ダミーアカウント利用
各年齢・性別のダミーアカウントを用意・運用し、ダミーアカウントのユーザーIDをもとにPeronalizeから推薦情報を取得する方法です。
このアカウントは、各年齢・性別・地域の平均的な属性を持つようにします。このアカウントに関連するデータは実際のユーザーのデータと一致していないと意味がなく、また、各年齢の代表的な嗜好や行動が変わった際には、ダミーアカウントのデータも定期的に更新や見直しが必要になります。
●方法3. フィルタリング機能
Amazon Personalizeにあるフィルタリング機能を利用する方法です。
Amazon Personalizeでは、推薦を取得する際に、特定のアイテムやユーザーの属性に基づいて結果をフィルタリングすることができます。
これにより、ユーザーに表示される推薦アイテムをより細かくコントロールすることができます。
しかし、あくまでフィルタリングです。
例えば、「20代のユーザーにおすすめ情報を提供したい」と考えた場合、20代に人気のある求人を提供するのではなく、そのユーザーの推薦リストに100のアイテムが含まれているとして、その中からユーザーの年齢が20代であることを条件に「20代に人気のあるアイテムだけを取得したい」というフィルタを適用し、その100のアイテムの中から20代に人気のあるアイテムだけが選択される、ということです。
その100のアイテムリストの中に、20代に人気ベスト10までのアイテムが入ってない場合は提供されず、人気ではないおすすめ情報が提供されてしまいます。
●方法4. データセットのセグメント化
データセットをはじめから属性別に分けて、トレーニングし、推薦情報を取得する方法です。
データセットを異なる年齢層やセグメントに分け、それぞれのセグメント用に異なるモデルをトレーニングし、特定のセグメントのユーザーに最適化された推薦を得ることができます。
4つの方法を紹介しましたが、どれも一長一短で、運用面で難がありますよね。しいて言うなら、「方法4. データセットのセグメント化」がベターな方法だと思います。最初に構成さえ決めてしまえば、運用は自動化できるはずです。
今回の考察は以上です。実際に試してみて、どれがいいかまた追記させていただきます。
まとめ:Amazon Personalizeで年代・地域別の属性で推薦情報を取得できるか【考察】
年代別や地域別などの属性情報でおすすめ情報を引き出す方法として、4つの方法を提示しました。
わたしが調べた内容なので、ほかにもいい方法があるかもしれまん。
正直パーソナライズされた推薦情報なら、それでいいじゃないかと思う方もいるかと思います。
今回考えたこの問題を考えたキッカケはCold Startにも対応できる、もしくはもっと大きな範囲での推薦情報の方がクリックしてくれるのでは?と思ったからです。
もし他にいい方法がありましたらぜひ教えてください。結構本気で探しています。
参考リンク:AWS公式ドキュメント
↓ほかの協栄情報メンバーも機械学習・AIに関する記事を公開しています。ぜひ参考にしてみてください。
■Amazon CodeWhispererを試してみた(dapeng)
https://cloud5.jp/amazon-codewhisperer/
■Amazon Personalizeの使い方や事例を紹介【ハンズオンあり】(齊藤弘樹)
https://cloud5.jp/saitou-amazonpersonalize-entry/
■Amazon Personalizeの使い方や事例を紹介【ハンズオンあり】 part2(齊藤弘樹)
https://cloud5.jp/saitou-amazonpersonalize-handson/
参考リンク:AWS公式ドキュメント
↓ほかの協栄情報メンバーも機械学習・AIに関する記事を公開しています。ぜひ参考にしてみてください。
■Amazon CodeWhispererを試してみた(dapeng)
https://cloud5.jp/amazon-codewhisperer/
■Amazon Personalizeの使い方や事例を紹介【ハンズオンあり】(齊藤弘樹)
https://cloud5.jp/saitou-amazonpersonalize-entry/
■Amazon Personalizeの使い方や事例を紹介【ハンズオンあり】 part2(齊藤弘樹)
https://cloud5.jp/saitou-amazonpersonalize-handson/
■Amazon Personalize学習用ダミーデータをPythonで作ってみた(齊藤弘樹)
https://cloud5.jp/saitou-personalize-create-dammydata/