糞糞糞ネット弁慶

読んだ論文についてメモを書きます.趣味の話は http://repose.hatenablog.com

You Are Where You Go: Inferring Demographic Attributes from Location Check-ins (WSDM 2015) 読んだ

You Are Where You Go: Inferring Demographic Attributes from Location Check-ins

概要

Weibo のチェックインデータと,POI に関する情報 (dianping のレビュー情報) から,ユーザの年齢,性別,学歴,性的嗜好,ステータス (未婚,既婚など),更には血液型と12星座まで予測する.結果,それぞれの属性については高精度に,かつ,血液型と12星座についてはランダムに予測するよりも精度を改善している.
後者二つを予測するという論文はこれまで見たことが無かった.血液型占いで騒いでいる場合じゃない.一体どういうことなのか,分からなかったので読んだ.
おおまかに言うと,ユーザのチェックインデータを加工して特徴ベクトルにし,各属性ごとの二値分類/多値分類を行う.

方向性

著者いわく,チェックインデータに含まれる次の3点がユーザのプロフィールに関係しているという.

  • Temporality (時間性) : 人の行動と時間には強い関係がある (例. 社会人は平日の朝自宅から職場に通勤する,定年した人は平日午後買い物に行く,タクシードライバーは休日の夜中働く).また,チェックインされるカテゴリと時間に強い関係がある(飲食店は昼と夜,交通機関は朝の早い時間など).
  • Spatiality (空間性) : Like/follow/reply/RT といった行動とは違って,チェックインは地理的な制約が加わる (stanford university から 3000マイル離れた northeastern university まで30分の差でチェックインすることはできない).データを見てみると,連続したチェックインの距離差はほとんどが 20km 以下.また,現地民と旅行客でチェックインする場所の分布を見てみると,旅行客がチェックインするエリアは非常に狭い(観光地しか訪れていない)ことがわかる.
  • Location knowledge (場所情報) : チェックインする場所 (POI) の機能も重要.学生は勉強するために学校に行くし,ビジネスマンは働くためにビジネス街に向かう.POIはカテゴリ構造と紐付いているのでこれを利用する.さらに,カテゴリだけでなく,様々な側面からつけられた(5段階評価などの)レビューもあるのでこれも重要.

これらの情報を次の手続きによって抽出する.

特徴量抽出

前準備

北京と上海に住むユーザ 3,354,918 人のデータ, 81,781,544 回のチェックインデータを Weibo からクロール.適当な形でデータを整えた結果,最終的に 159,530 人のユーザを分析に使う.

Spatiality (空間性)

市街地を区切って誰がどの領域に何回チェックインしたかを特徴量にする.領域の区切り方は道路情報とチェックイン情報を組み合わせたセグメンテーション (Discovering Regions of Different Functions in a City Using Human Mobility and POIs (KDD 2014)).

Temporality (時間性)

平日/休日のパターンも考慮したいので,24 時間 x 平日/休日 の 48要素からなる time bin を考え,POIへのチェックインと結びつける.

Location knowledge (場所情報)

手間がかかってる.大まかに流れを書くと

  • Cross domain POI conflation : Weibo のチェックインデータにおける POI と,dianping におけるレビューの POI とを紐付ける
    • 名前,住所,電話番号,距離を使って気合で頑張る
    • Weibo POI の 35% が紐づく
  • Lexicon creation : 二段階でやる
    • POI を いくつかのカテゴリに分類した上で, dianping のレビュー文から log(term frequency) を取った上位200語を lexicon とする
    • その後, Weibo から POI に関するツイートを集め,lexicon に含まれるものを抽出
    • これにより, POI に紐づく (Weibo にもとづく) キーワードが得られる
  • Location knowledge transferring : dianping と紐付いた POI は 35%なのでレビュー情報が不完全.これを埋める
    • POI に紐付いたキーワードを特徴量としてレビューを推定する
    • レビューの各要素は5段階評価なので分類,総合採点は自然数なので回帰
テンソル分解

こうして得られた情報をテンソル分解する.
具体的には ユーザ x location knowledge x contextual feature の三階テンソルにする.
contextual feature については,24 x 平日/休日を示す time bin と region を頑張って「どのregion に time bin でチェックインしたか」を一次元で表現する.
location knowledge については,まずレビューとキーワードを別々にk-meansでクラスタリングし,N_R 次元と N_K 次元のベクトルを作る.あとはそれに POI のカテゴリ情報を 1-of-k 表現したベクトルを用意し,全部をひとまとめにならべて, contextual feature と同様に一次元で表現する.ここらへんの操作は口で説明しにくいので原典参照して欲しい.
このあたり複数テンソルを用意せずに分解していて気合を感じる.
あとはタッカー分解でユーザごとの低次元表現を得る.

推定・実験

プロフィール推定

タッカー分解で得られた特徴量でユーザの属性を推定する.予測対象は以下のもの.

属性 存在する割合[%] 項目
性別 94.02 男,女
年齢 33.16 整数値
学歴 36.72 大卒,否
性的嗜好 2.55 異性愛両性愛,同性愛(男),同性愛(女)
ステータス 2.64 ひとり,探し中,交際中,既婚
血液型 1.64 O,A,B,AB
12星座 58.16 zodiac signってかっこいい

整数値は回帰,それ以外は二値/多値分類.分類器は色々試す.

実験結果

まず注意しなければならないのが評価指標.二値分類はさておき,多値分類の実験結果では,クラスごとの精度/再現率の平均値を取っている.これが重要.
実験結果,大体の属性がいい感じに予測できている.問題は血液型と 12 星座.
血液型の予測精度が 0.3012,再現率が 0.3103.「そもそも一様に分布しておらず, O 型が多いのだから,全部 O と予測してもそれぐらい出るのでは」と一見すると思うけど,クラスごとの平均値なので全ユーザをOと予測しても (1.0 + 0.0 + 0.0 + 0.0) / 4 で 0.25 ぐらいにしかならない.つまり,ランダムに予測するよりは精度が改善している.
12星座についても同様で,精度 0.1303 という数字.どれか一つの星座だと予測しても精度 0.083 ぐらいにしかならないので,やはり,ランダムに予測するより精度が改善している.
著者らも「確かに精度は低いし,すべての属性の中で一番悪いけど,それでもランダムよりましだ」と主張している.
この理由が正直よくわからない.もっというと,どういうメカニズムで血液型や星座とユーザの行動が紐付いているのかがわからない.12星座については,「誕生日によって行動が変わるのでは」という意見も貰ったけれど,しかし時間情報には年月が入ってないので難しいように思える.