エムスリーテックブログ

エムスリー(m3)のエンジニア・開発メンバーによる技術ブログです

行動ログデータからのユーザーアンケート予測モデルを作り、ユーザーの嗜好分類をする

こんにちは。エンジニアリンググループ AI・機械学習チームの大垣です。

これは エムスリー Advent Calendar 2019 の10日目の記事です。 前日は id:sora_sakaki による、量子ゲームを開発した話でした。

さて、この記事ではデータエンジニアの皆さんが戦われているであろうログデータの活用の話をします。 もちろんエムスリーでもレコメンドやコンテンツの出し分けなどログデータを活用したシステムが開発されています。

ここでは、そのログに加えて、アンケートを用いることで、解釈しやすいユーザーの嗜好分類を行う話をします。 なおこの内容は本日の Machine Learning Night というイベントで簡単に紹介し、スライドも公開する予定です。ご興味のある方はそちらも是非ご覧ください。

f:id:Hi_king:20191209172340p:plain
webサービスでの行動ログとアンケートの結果を紐づけて予測モデルを作る。アンケート非回答者についても、行動ログと予測モデルを用いて、どちらの回答になりそうかを推定する。

こちらが今回やることの概念図で、一部のユーザーに行ったアンケートの内容をログから推定する仕組みを作ることで、全ユーザーの嗜好を予測したり、それを多軸で行うことでユーザーを解釈しやすい粒度にクラスタリングしたいといった取り組みになります。

なぜ行動ログ分析とアンケートを組み合わせるのか?

ユーザーの特徴づけを行う上で、どのようなコンテンツを好むか、何のためにこのサービスを使ってくれているか、という嗜好の分析は、サービスの発見・改善に直接繋がるため、よく行われます。

その手法として、ここでは、1)ログの類似度を用いた教師なしでの嗜好の分析と、それに対比して、2)ユーザーに直接ヒアリングするという手法を見てみます。

ログから教師なしのクラスタリングを行う

f:id:Hi_king:20191209155132p:plain
教師なしクラスタリングの利用例。類似した行動ログを持つ人がクリックしたコンテンツのうち、まだクリックしてないもの(▲)をレコメンドする。

まずは、行動ログの類似したユーザーは似たような嗜好を持つということを用いて、ユーザーをクラスタリングしていくアイデアについて。機械学習エンジニアには非常に馴染み深い手法であり、図に示す協調フィルタリングによるレコメンドのように、ドメインに特化したロジックを利用せずとも大規模なユーザーに適用できることから非常によく用いられています。

その強みの一方で、クラスタリングされたユーザーの性質の解釈を与えるものではないため、例えば特定のユーザー群に刺さるコンテンツの開発、など分析への利用には一工夫必要です。

仮説に基づいて直接聞き出す

一方で、ログからではなくユーザーの嗜好を直接聞き出すために行われているのが、ユーザーアンケートです。 調査したい内容について仮説をたて、それを検証する設問を作り、ユーザーに調査を行います。 事前に立てた仮説に沿って検証しているため、結果の解釈がしやすく、その先の施策を考える手がかりとなるのですが、一方で、一部のユーザーをサンプリングした結果となるため、アンケートで得た属性をそのまま全ユーザー向けのサービスに利用することはできません。

今回のハイブリッドな方法について

まとめると、2つの手法のpros/consは以下のようになります。

  • ログデータの教師なしクラスタリング
    • Pros: 全サービス、ユーザー、アイテムに適用しやすく、システム化しやすい
    • Cons: ユーザーがどのように分類されているか解釈しにくい
  • ユーザーへの直接のヒアリング
    • Pros: 仮説を持ってアンケートをとるため、結果が解釈しやすい
    • Cons: あくまでもサンプリング調査のため、結果それ自体をシステム化はしにくい

ということで、本稿ではこれら2つの良いところを合わせ、ユーザーに直接ヒアリングした結果から、その結果をシステム活用する方法を探っていきます。


行動ログをすでに持つサービスがユーザーに聞き取り調査を行う際には、2つをハイブリッドに利用できそうです。 例えば、SNSの行動ログを元にして、一部のユーザーの回答から支持政党などの属性を推定する例が研究されています 1 。 今回はそのようなはっきりした属性の判別ではないのですが、この研究と同様に、部分的に観測されているユーザーの回答から、他のユーザーの属性を推定する問題として解いていこうと思います。

f:id:Hi_king:20191209111840p:plain
ログからのアンケートの予測

ということで最初に示した図を再掲します。サンプリング調査として行われたアンケートの結果を教師データとして利用し、そのアンケート回答を各ユーザーの行動ログから推測する問題とします。学習されたモデルを、非回答者の行動ログに適用することで、それぞれのユーザーがもしアンケートに回答していたらどのような回答をするか、という予測が行えるという問題設定になります。

技術的な話題: では特徴量どうするか

さて、ここまでで問題の設定が行えたので、ここからは技術的な、実際どう解いたかという話になります。

まずはログデータの特徴ですが、ここではシンプルなユーザー・アイテム行列をほぼそのまま特徴としました。 各ユーザーが各記事をクリックしたかしてないかの二値の行列です。 実はここにはエムスリーのアクセスログの特徴があり、記事数は比較的少なく(数万次元程度)、かつ、各記事のクリック率がかなり高いという特徴があります(対象ユーザーのうち10%以上が読む記事がいくつもある)。なので、今回いくつか次元圧縮を試したのですが、結局この行列を使い、クリック数が多すぎるもの、少なすぎるものを省く程度に留めました。

次に、とはいえ記事の中身の文書もうまく利用したいと思ったので、出現するワードの特徴を利用することにしました。ドキュメント特徴を作る手法はいくつか考えられるのですが、今回はナイーブに、特徴語の出現回数ワードを利用しました。

この特徴語の選択については、もちろん単純に出現頻度の高い語を利用するという方法もあるのですが、ユーザーの興味を反映し、かつ、ある程度汎用的な語を選びたいと考え、少しひねった方法を利用してみました。 つまり、"このユーザーはこの語があればこの記事が嗜好に合うだろう"という手がかりの候補になるような語を選びたいわけです。 この問題の定式化は悩んだのですが、今回利用したのは以下の図のような方法です。

f:id:Hi_king:20191209174427p:plain
特徴語の発見手順

今回の方法の元となったアイデアは、以前にエムスリーテックブログでも紹介されていた、レコメンドのコールドスタート問題のための、ユーザー・アイテム行列の分解と、テキスト情報をハイブリッドに用いるための手法です 2

www.m3tech.blog

まず、これまでにも何度かでてきたユーザー・アイテム行列から、行列分解によってアイテム毎のアイテム特徴量を作ります。今回はシンプルにSVDを用いました。 これにより、"ユーザーの興味の集まり方を反映した"、アイテムの特徴ベクトルを得ることができます。 次に、アイテムのテキスト情報(ここでは出現単語)からこの特徴ベクトルを予測するようにモデルをトレーニングします。 論文では、クリック履歴が十分ある場合にユーザー・アイテム行列の特徴が、少ない場合にはテキスト情報が効くということでこの手法が提案されています。

ところで今回は、この、テキスト情報から特徴ベクトルを予測するために作られたモデルが重要とした単語を特徴語として用いることにしました。若干特徴語選択のためだけにやるには重い操作ではありますが、今回はそもそもユーザー・アイテム行列を入力に用いているので、多少の追加工程で行うことができました。

最終的なユーザーごとの特徴ベクトルは以下のような形になりました。

f:id:Hi_king:20191209150342p:plain
予測モデルのトレーニング

なお、ここで得られた特徴ベクトルからアンケート結果の推定を行う時には勾配ブースティング木(xgboostライブラリ)を利用しました。 結構過学習が厳しく、ハイパーパラメータのチューニングに2,3日かかりました。 データサイエンスコンペ的な作業で面白かったですが、kaggle等の経験があればもっとサクサクできたかもしれないとも思いました。その辺好きな人も募集してます!

実験

実際のアンケート(約900名)を用いて、それらのうち2/3で学習、残りでテストをする実験を行ったところ、予測結果と実際のスコアはこのようになりました。

f:id:Hi_king:20191209152326p:plain
予測とアンケート結果の比較

各点が1ユーザーを表しています。 実際のアンケートのため設問を公開できないのですが、このアンケートはある傾向を問うように複数の設問が設計されており、ここでは複数の設問の合計点を予測するという問題を解いています。

流石にアンケートに対する主観的な回答という曖昧な教師データですし、バッチリ綺麗に予想できるという結果ではないのですが、意外と行動データからこのような主観的な結果を予測できるというのは面白い話に感じます。また、結果の図を見ていただければわかるように、実測、予測とも0付近に多くのデータが集まっていることがわかります。0付近の回答をされる場合、このアンケートで取りたい軸のどちらの傾向もあまり持たないユーザーと考えられ、予測がとても難しいデータと言えます。一方で、この結果の活用を考えるときに、はっきりその性質のあるユーザーにアプローチしたいという考えかたができるので、実は、"どちらでもない"の3クラス目を作った方がいい場合もあるかもしれません。今後検討してみようと思います。

さて、ここまででやったことは、技術的な検証ですが、最初の動機の部分で述べたように、この属性は全ユーザーについて推定可能で、解釈しやすい属性である、というハイブリッドな特徴があるので、今後レコメンドやコンテンツの出し分けなど、システム化を考えていこうと思っています。また、他のアンケートでも汎用的に使える方法なのかを検証したり、SNSの例のようにユーザーのはっきりした属性を予測することにも使ってみたりと夢が広がります。

[PR] We are hiring!

本文中にも書きましたが、こういう話をサクサク実装して、実用的な精度に持っていくタスク楽しいです。 私が他にやってる、医用画像処理を中心とする診断・治療向けの開発も楽しいです。 ということで、一緒に働く仲間を探してます!

open.talentio.com

jobs.m3.com

参考文献


  1. Pennacciotti, M., and Popescu, A. M, ‘Democrats, republicans and starbucks afficionados: User classification in twitter’, KDD 2011

  2. Yoon Kim, ‘Convolutional Neural Networks for Sentence Classification’, EMNLP 2014