Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

hivemallを使って4日間で性別推定した話

6,041 views

Published on

・Scaleout社(DSP)のデータについて
・hivemallの利用事例(性別年代推定)

Published in: Data & Analytics

hivemallを使って4日間で性別推定した話

  1. 1. 1 hivemallを使って 4日間で性別推定した話
  2. 2. 2 自己紹介 名前 : 渡辺将人 職業 : フリーランスのIT系なんでも屋 現在はScaleout社のデータ分析の仕事を手伝い中 (Webサイトのカテゴリ分類とか、ユーザの行動から性別年 代推定とか、さらっとできることを担当)                 副業募集中デス
  3. 3. 3 本日のお題  Scaleout社(DSP)のデータについて  hivemallの利用事例(性別年代推定)
  4. 4. 4 DSPについて というオークション形式の広告の買い付けを 日に何十億回とやるシステム というオークション形式の広告の買い付けを 日に何十億回とやるシステム SSP「今、この枠にリクエスト来てるけど、 広告出さない?」 DSP「その枠だったら、0.042円で買うよ」 SSP「他の会社が高値付け たから、そっちに売っちゃった」 SSP「よし、売った」
  5. 5. 5 1日のリクエスト  日によって増減があるけど数十億/日 (日々増加してて辛い)  ユーザ数は約1億弱 (過去2週間以内に3日間以上リクエストが来てるユーザ。2週間以 内に消されたクッキーも含んでる)
  6. 6. 6 ログに記録されてる主な情報  広告枠のID (どのURLに貼れている広告はたいていわかる。どの場所に表示 されるかは実はよくわからない)  Cookieに記録されているユーザのID (Cookieが消えればなくなる揮発性)  HTTPリクエストに含まれる一般的な情報 (user-agent / referer等々) 広告オークション市場のログが 記録されているとも言える 広告オークション市場のログが 記録されているとも言える
  7. 7. 7 性別・年代推定について ● 性別ははっきりした傾向を持つ行動をしていれ ば、85%以上は正解できる ● 年代は難しく50%弱しか精度が出ない (ないよりはマシ程度) という情報があるという前提で ここから性別・年代推定のお話 という情報があるという前提で ここから性別・年代推定のお話
  8. 8. 8 推定方法 ● Demographic Prediction Based on User’s Browsing Behavior を少し参考に (http://www2007.org/papers/paper686.pdf) ● Microsoftが出した論文で、ユーザの行動履歴から性 別は約80%、年代は約60%推定できたらしい
  9. 9. 9 利用データ ● 閲覧サイト(ドメイン) : 約14万件 (一部ドメインは下位階層まで取得) ● 閲覧サイトのカテゴリ : 146件 (カテゴリ分類器で自動分類したもの+出現上位のみ人力) ● 閲覧広告サイト : 可変(3000〜6000件) (クリック・コンバージョンに限らず広告サイトへのリーチ) 15万次元 × 300万のsparseな行列 hiveならこれくらいは軽い 15万次元 × 300万のsparseな行列 hiveならこれくらいは軽い
  10. 10. 10 書いたコード(1) ● hivemallの形式で情報を出力するMapReduce 処理 (64行。Scala。Hiveでcreate tableの際に指定したseparatorで区 切ってwriteして、LOAD DATA INPATH) (そのうちUDFで書こうと思って半年間放置) ID0001 ["101511:0.5","2117:0.027","2114:0.027","2017:0.189","2015:1.0", ... ID0002 ["118882:0.5","2020:1.0","102901:1.0","2105:0.25","127341:0.5","2015:0.5", ... ID0003 ["2117:0.0714","2014:0.142","103698:1.0","100757:0.5","2015:1.0", ...
  11. 11. 11 書いたコード(2) hivemallで教育用データを準備するクエリ (51 行。testデータ分割。rand_amplify x3) ● hivemallでtrainするクエリ (28行。multiclass_scw利用) ● 検定用クエリ(53行。80%でtrain、20%でtest) 呼び出すシェルを含めても200行ちょっと 書くだけなら1日、あと3日は検証 呼び出すシェルを含めても200行ちょっと 書くだけなら1日、あと3日は検証
  12. 12. 12 正解率 ● hivemallでのclassification case when sum(m.weight * t.value) > 0.0 then 1 else -1 end (https://github.com/myui/hivemall/wiki/Iteration-training-of-new20- binary-multiclass-classification-with-CW-multiclass-CW) ● 0.0付近のデータは「男性なのか女性なのかよくわか らない人」が集まる ● 分類を0.0からずらすと正解率が変化する case when sum(m.weight * t.value) > 1.0 then 1 when sum(m.weight * t.value) < -1.0 then -1 else 0 end ●
  13. 13. 13 正解率の変化(男性) ● 0.5 0.529 ● 1.0 0.584 ● 1.5 0.627 ● 2.0 0.668 ● 2.5 0.705 ● 3.0 0.724 ● 3.5 0.751 ● 4.0 0.773 ● 4.5 0.790 ● 5.0 0.804 ● 5.5 0.822 ● 6.0 0.833 ● 6.5 0.846 ● 7.0 0.849 ● 7.5 0.861 ● 8.0 0.862 ● 8.5 0.871 ● 9.0 0.867 ● 9.5 0.876 ● 10 0.875 ● sum(m.weight * t.value)が0.0〜0.5区間は正解率52.9% 5.0~5.5区間で80.4%、9.5〜10.0区間で87.5% ● sum(m.weight * t.value)が0.0〜0.5区間は正解率52.9% 5.0~5.5区間で80.4%、9.5〜10.0区間で87.5%
  14. 14. 14 正解率の変化(女性) ● -0.5 0.558 ● -1.0 0.600 ● -1.5 0.650 ● -2.0 0.686 ● -2.5 0.718 ● -3.0 0.739 ● -3.5 0.766 ● -4.0 0.776 ● -4.5 0.794 ● -5.0 0.808 ● -5.5 0.816 ● -6.0 0.823 ● -6.5 0.828 ● -7.0 0.844 ● -7.5 0.848 ● -8.0 0.851 ● -8.5 0.858 ● -9.0 0.865 ● -9.5 0.865 ● -10 0.871 ● sum(m.weight * t.value)が-0.0〜-0.5区間は正解率55.8% 5.0~5.5区間で80.8%、9.5〜10.0区間で87.1% ● sum(m.weight * t.value)が-0.0〜-0.5区間は正解率55.8% 5.0~5.5区間で80.8%、9.5〜10.0区間で87.1%
  15. 15. 15 実行時間(train) ● train_multiclass_scw利用 (scw, cw, lr等使ってみましたが、accuracyはほぼ同じくらいで日 によって逆転するくらいの僅差) ● rand_amplify x3  cpu_time: 2:45:08, real: 5:31 ● rand_amplify x6  cpu_time: 5:25:19, real: 7:09 ● rand_amplify x9  cpu_time: 8:11:15, real: 6:01 ● rand_amplify x12  cpu_time: 10:02:07, real: 6:18
  16. 16. 16 実行時間(graph) cpu timeは増加 2953x+1604 実行時間は ほぼ一定 並列化の恩恵でほぼ同時間で処理可能並列化の恩恵でほぼ同時間で処理可能
  17. 17. 17 hivemallのメリット ● 学習コストが低い (Mahout, Pythonも使ってるけど、最も楽だった。Hive運用してる会社が 少ないのがデメリットか) ● 引き継ぎが楽 (最も強調したいメリット。流しのdata miningエンジニアは、作ったは良 いけど引き継げる相手がいないことが多い) ● データ量の増加に対応しやすい (作り始めた時は対象ユーザが2000万だった)
  18. 18. 18 今後の課題 ● 正解データなしでも推測できるようにしたい (確実に男性or女性が来ているサイトをシードに推測すれば、正解デー タの束縛から解放される) ● サイトのドメインではなくurl+トピック抽出で推定 (同じスケート関連のニュースでも、羽生結弦と浅田真央のタグでは傾 向が違うはず) ● 年代推定の精度を上げる (topic使用。活動時間からの推定)
  19. 19. 19 最後に Scaleout社では大量データと戯れて過ごしたい エンジニアを募集しています

×