でかいチーズをベーグルする

でかいチーズはベーグルすべきです。

Predicting the Demographics of Twitter Users from Website Traffic Data (AAAI'15) を読んだ

AAAI2015のOutstanding paper award honorable mention。発表聞いた時は何でこれが賞とったのかな?と思ったけど実際論文読んだら結構面白かった。

概要

Twitterユーザのいろいろな属性(年齢、性別、人種、収入、学位、子持ち)を推定する。面白いのはQuantcastのデータを使うところ。QuantcastはあるWebページに訪れる人の年齢とか性別とかの割合を出してる。例えば「LinkedInに訪れる人達の何%は男性です」とか。ここから得られるWebページとTwitterのアカウントを結びつけて、それをフォローしてる人たちの属性を推定する。

具体的には、「あなたはespnとwiredをフォローしてるから男性ですね?」とか、「あなたはPlayStationとsteam_gamesをフォローしてるから18-24歳ですね?」とかいう推定をする。

Research questions

  • Twitterユーザの属性はQuantcastのデータから推定できるか?
  • あるユーザの属性を推定するのにどれくらいの数のfriends(フォローしてるユーザ)が必要か?

提案手法

  • Quantcastから取ってきたWebページに関する情報と、Twitterアカウント (A) とを結びつける。
    • Quantcastからは例えば「LinkedIn -> {男性:60%, 女性:40%, 18-24歳: 20%, 24-34: 30%, ...}」みたいなデータがWebページに対して一つ得られる。
  • 得られたTwitterアカウント (A) それぞれについて、特徴ベクトル (neighbors vector) を構成。
    • (A) をフォローしてるユ―ザがフォローしてるユーザを取得。つまり、(A) のフォロワーのfriendsの集合。これベクトルで表し、neighbors vectorと呼ぶ。neighbors vectorは、(A)に含まれるユーザのフォロワーが平均的にどんなユーザをフォローしてるかを表す。
  • neighbors vectorを入力として、Quantcastから取ってきた情報を出力する回帰モデルを作る。
    • 入力のneighbors vectorが高次元なのと、たくさんある出力を同時にモデル化したいため、Multi-taskのElastic netを使ってる
  • 作ったモデルで学習した結果として、係数βikが得られる。
    • 係数βikの値は、ユーザ i をフォローするユーザが属性 k である度合いみたいなのを表す。
  • この係数βikを用いてユーザの属性を推定する。
    • ユーザ j の属性を推定したい時、j がフォローしてるユーザ i についてβikを合計する。その値が大きければユーザ j は属性 k を持つ可能性が高いとする。

考えはシンプルなんだけど手法の細かいところは結構ごちゃごちゃしててわかりづらい気がする。あと提案モデルで学習した係数をこういうふうに使うのって何か理論的な背景があるのかどうか分からない。

実験

neighbors vectorからQuantcastのデータは回帰できるのか

できた。

Quantcastから得たデータ(例えばLinkedInを訪れる人の60%は男性)と、neighbors vectorから回帰した結果の相関係数は大きかった。

f:id:yamaguchiyuto:20150207020502p:plain

また、各属性 k について、係数βikが大きい上位5ユーザを見てみたら人目でみてわかりやすい結果が出た。

f:id:yamaguchiyuto:20150207020519p:plain

属性推定の精度はどれくらいか

提案手法と、単にあるユーザがフォローしてるユーザをベクトル化してロジスティック回帰する手法を比較したら提案手法が勝った。

属性を推定するのに必要なfriends数はどれくらいか

ランダムに大体10人くらい使えばかなりいい精度で属性推定できた。

感想

着眼点が面白い。誰をフォローしてるかで属性推定する話はまぁよくあるけど、Webページのトラフィックデータを使うとは。提案手法も細かいところはごちゃごちゃしてるけどわかりやすく書かれてた。結果も面白い。