Devsumi2013_15-c-7 アドテク・ターゲティング技術
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

Devsumi2013_15-c-7 アドテク・ターゲティング技術

  • 4,295 views
Uploaded on

アドテクの分野で様々なデータをどのような技術を用いて活用しているか、Hadoop,Pigでのデータ整形からMahoutでの分析、モデル作成、KVSの利用など、ターゲティング技術

アドテクの分野で様々なデータをどのような技術を用いて活用しているか、Hadoop,Pigでのデータ整形からMahoutでの分析、モデル作成、KVSの利用など、ターゲティング技術

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
4,295
On Slideshare
3,098
From Embeds
1,197
Number of Embeds
11

Actions

Shares
Downloads
67
Comments
0
Likes
11

Embeds 1,197

http://6109.hidepiy.com 553
http://unsolublesugar.com 192
http://namihira.hatenablog.com 133
http://event.shoeisha.jp 126
http://d.hatena.ne.jp 102
http://www.totalsolution.biz 77
http://intra.iwest.in.infocom.co.jp 5
http://webcache.googleusercontent.com 4
http://cache.yahoofs.jp 3
http://test-event.shoeisha.jp 1
https://kcw.kddi.ne.jp 1

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Developers Summit アドテク・ターゲティング技術 〜Pig, Mahout, KVS〜 太田祐一 15-C-7 株式会社オウルデータ 代表取締役社長 兼 #devsumiC データマイニングエンジニア Developers Summit 2013 Action !Friday, February 15, 13
  • 2. Developers Summit 自己紹介 太田祐一(おおたゆういち) • 最近子供が生まれてイクメンに • もともとは証券会社員 • 独立して失敗 • スペイシーズにData mining engineerとして拾ってもらう • DMP事業が独立して新会社設立(オウルデータ)→代表に Developers Summit 2013 Action ! 2Friday, February 15, 13
  • 3. Developers Summit とにかくデータを集めて触ってみよう! Developers Summit 2013 Action !Friday, February 15, 13
  • 4. Developers Summit とにかくデータを集めて触ってみよう MY RECOMMEND NEXT ACTION! • 今日のお題は所謂�”ビッグデータ”分析 • ビッグデータかどうかは置いておいて、とにか く今あるデータを分散環境で分析してみる! • 分散環境で構築しておけばスケールできる! Developers Summit 2013 Action ! 4Friday, February 15, 13
  • 5. Developers Summit で、アドテクとデータの関係は? Developers Summit 2013 Action !Friday, February 15, 13
  • 6. Developers Summit アドテクって? ”アクション”してもらうためのテクノロジー Developers Summit 2013 Action ! 6Friday, February 15, 13
  • 7. Developers Summit 広告を配信する技術 育児情報サイトの広告 育児情報サイトだから 25〜35歳女性向けの広告を出す Developers Summit 2013 Action ! 7Friday, February 15, 13
  • 8. Developers Summit でも最近はイクメンもけっこう見てますよ? Developers Summit 2013 Action !Friday, February 15, 13
  • 9. Developers Summit オーディエンスターゲティング 育児情報 × 男 出産育児情報サイトを見ている 男だから保険商品をすすめる Developers Summit 2013 Action ! 9Friday, February 15, 13
  • 10. Developers Summit オーディエンスターゲティング 育児情報サイトを見ている男で保険の切替 検討中で、株式投資に興味があり、妻から 旅行に連れて行けとせがまれているけど、 最近車を買ったからお金が無くて・・・ Developers Summit 2013 Action ! 10Friday, February 15, 13
  • 11. Developers Summit オーディエンスターゲティング データがいっぱいあっても活用しきれない 自動で似ている人同士をセグメント化したい Developers Summit 2013 Action ! 11Friday, February 15, 13
  • 12. Developers Summit ターゲティングフロー KVS userId = XYZ site.jp userId = XYZ クッキーから ユーザー識別IDを取得 XYZの情報 KVSからユーザーの 情報取得 Developers Summit 2013 Action ! 12Friday, February 15, 13
  • 13. Developers Summit ターゲティングフロー KVS userId = XYZ site.jp userId = XYZ クッキーから ユーザー識別IDを取得 XYZの情報 KVSからユーザーの 情報取得 ユーザ情報をベクトル化し XYZのベクトル てRandomForest Developers Summit 2013 Action ! 13Friday, February 15, 13
  • 14. Developers Summit ターゲティングフロー KVS userId = XYZ site.jp clusterId = 5 userId = XYZ クッキーから ユーザー識別IDを取得 XYZの情報 KVSからユーザーの 情報取得 ユーザ情報をベクトル化し XYZのベクトル てRandomForest clusterIdを取得して clusterId = 5 結果を利用 Developers Summit 2013 Action ! 14Friday, February 15, 13
  • 15. Developers Summit モデル作成の流れ 各ユーザーの情報をKVSに保存 各ユーザーの特徴をベクトル化 ユーザーベクトルを標準化 ユーザーベクトルをmahoutでk-Means k-Meansした結果からRandom Forestモデルを作成 Developers Summit 2013 Action ! 15Friday, February 15, 13
  • 16. Developers Summit KVSに保存 各ユーザーの情報をKVSに保存 各ユーザーの特徴をベクトル化 ユーザーベクトルを標準化 ユーザーベクトルをmahoutでk-Means k-Meansした結果からRandom Forestモデルを作成 Developers Summit 2013 Action ! 16Friday, February 15, 13
  • 17. Developers Summit KVSに保存 • どのKVSを採用するか? ‣ ‣ 比較してるサイトの情報とかぜんぜんあてにならない • データ形式は何にするか? ‣ JSON? XML? Avro? MessagePack? protobuf? Developers Summit 2013 Action ! 17Friday, February 15, 13
  • 18. Developers Summit ベクトル化 各ユーザーの情報をKVSに保存 各ユーザーの特徴をベクトル化 ユーザーベクトルを標準化 ユーザーベクトルをmahoutでk-Means k-Meansした結果からRandom Forestモデルを作成 Developers Summit 2013 Action ! 18Friday, February 15, 13
  • 19. Developers Summit ベクトル化 {"ユーザーID":12345,"カテゴリ":{"美容":0,"育児":7,"金融":10,"車": 4,"マンガ":1,"家具":2,"家電":8,"ペット":0,"グルメ":4},"金額":7600} 美容 育児 金融 車 マンガ 家具 家電 ペット グルメ 金額 0 7 10 4 1 2 8 0 4 7600 Developers Summit 2013 Action ! 19Friday, February 15, 13
  • 20. Developers Summit ベクトルを標準化 各ユーザーの情報をKVSに保存 各ユーザーの特徴をベクトル化 ユーザーベクトルを標準化 ユーザーベクトルをmahoutでk-Means k-Meansした結果からRandom Forestモデルを作成 Developers Summit 2013 Action ! 20Friday, February 15, 13
  • 21. Developers Summit ベクトルの標準化 美容 育児 金融 車 マンガ 家具 家電 ペット グルメ 金額 お 0 3 7 5 1 0 6 0 3 8000 5 6 0 0 0 4 0 0 5 12000 0 0 1 2 4 3 2 6 3 23000 平均0 標準偏差1 美容 育児 金融 車 マンガ 家具 家電 ペット グルメ 金額 -0.58 0.00 1.14 1.06 -0.32 -1.12 1.09 -0.58 -0.58 -0.82 1.15 1.00 -0.70 -0.93 -0.80 0.80 -0.87 -0.58 1.15 -0.30 -0.58 -1.00 -0.44 -0.13 1.12 0.32 -0.22 1.15 -0.58 1.12 Developers Summit 2013 Action ! 21Friday, February 15, 13
  • 22. Developers Summit Pigを使う 面倒なMapReduceのJavaプログラムやHadoopコマンド を使わずに、Hadoopを操ることができるツール (最初はYahooが作った) ダウンロードして設定ファイルを編集するだけで使うことが できます http://pig.apache.org/releases.html#Download (Hadoop環境があることが前提です) Developers Summit 2013 Action ! 22Friday, February 15, 13
  • 23. Developers Summit PigのUDFを使う UDFを作成することでいろいろできます % git clone https://github.com/gh-gsd/pigudf.git % ant jar.build Developers Summit 2013 Action ! 23Friday, February 15, 13
  • 24. Developers Summit Pigで分散を計算 register path/to/udfs.jar set job.priority very_low; set job.name CalcVariance; define VAR com.gsd.pig.udf.Variance(); A = load mydata as (data:double); B = group A all; C = foreach B generate VAR(A.data); store C into path/to/hdfs/rawdata; Developers Summit 2013 Action ! 24Friday, February 15, 13
  • 25. Developers Summit Mahoutでk-Means 各ユーザーの情報をKVSに保存 各ユーザーの特徴をベクトル化 ユーザーベクトルを標準化 ユーザーベクトルをmahoutでk-Means k-Meansした結果からRandom Forestモデルを作成 Developers Summit 2013 Action ! 25Friday, February 15, 13
  • 26. Developers Summit 主にHadoopを用いてデータマイニングや機械学習をするた めのJavaライブラリ % git clone https://github.com/apache/mahout.git % git checkout mahout-0.7 % mvn install -DskipTests Developers Summit 2013 Action ! 26Friday, February 15, 13
  • 27. Developers Summit k-Means Developers Summit 2013 Action ! 27Friday, February 15, 13
  • 28. Developers Summit Mahout k-Meansのデータ型  key : Text Input :  Value : VectorWritable  key : IntWritable Output :  Value : WeightedVectorWritable Developers Summit 2013 Action ! 28Friday, February 15, 13
  • 29. Developers Summit データを変換 ユーザーベクトルをスペース区切り に整形したテキストファイル   key : Text   Value : VectorWritable % $MAHOUT_HOME/bin/mahout org.apache.mahout.clustering.conversion.InputDriver  -i path/to/hdfs/rawData -o path/to/hdfs/vectorData Developers Summit 2013 Action ! 29Friday, February 15, 13
  • 30. Developers Summit k-Meansコマンド % MAHOUT_HOME/bin/mahout kmeans  -i path/to/hdfs/vectorData  #入力パス -c path/to/hdfs/initialClusters  #初期ノードランダムの場合はどこでも -o path/to/hdfs/kmeansResults  #結果出力パス -k 10  #クラスタ数 -dm org.apache.mahout.common.distance.CosineDistanceMeasure   #距離計算手法 -x 20  #最大イテレーション回数 -xm mapreduce  #初期ランダムの場合は適当 結果は  path/to/hdfs/kmeansResults/clusteredPoints に出力 Developers Summit 2013 Action ! 30Friday, February 15, 13
  • 31. Developers Summit k-Means 結果 (map例) public void map(IntWritable key, WeightedVectorWritable value,  OutputCollector<NullWritable, Text> output, Reporter reporter) { try { StringBuilder sb = new StringBuilder(); sb.append(key.toString()); Iterator<Element> ite = value.getVector().iterator(); while (ite.hasNext()) { sb.append(COMMA + ite.next().get()); } output.collect(NullWritable.get(), new Text(sb.toString())); } catch (InvalidDatastoreException e) { throw new IOException(e); } } Developers Summit 2013 Action ! 31Friday, February 15, 13
  • 32. Developers Summit k-Means 結果 クラスタID ベクトルの値 1,0,3,5,7,1,0,9,8,0,1 5,6,0,0,0,2,0,0,0,0,2 2,0,8,2,0,0,0,0,0,0,0 1,0,4,2,3,0,0,6,7,0,4 4,0,1,1,1,1,1,1,2,0,0 3,5,2,0,1,3,0,9,8,0,1 ・・・ Developers Summit 2013 Action ! 32Friday, February 15, 13
  • 33. Developers Summit ターゲティングフロー KVS userId = XYZ site.jp clusterId = 5 userId = XYZ クッキーから ユーザー識別IDを取得 XYZの情報 KVSからユーザーの 情報取得 ユーザ情報をベクトル化し XYZのベクトル てRandomForest clusterIdを取得して clusterId = 5 結果を利用 Developers Summit 2013 Action ! 33Friday, February 15, 13
  • 34. Developers Summit MahoutでRandom Forest 各ユーザーの情報をKVSに保存 各ユーザーの特徴をベクトル化 ユーザーベクトルを標準化 ユーザーベクトルをmahoutでk-Means k-Meansした結果からRandom Forestモデルを作成 Developers Summit 2013 Action ! 34Friday, February 15, 13
  • 35. Developers Summit 決定木 Developers Summit 2013 Action ! 35Friday, February 15, 13
  • 36. Developers Summit Random Forest c-2 c-5 c-2 Developers Summit 2013 Action ! 36Friday, February 15, 13
  • 37. Developers Summit MahoutでRandom Forest % mahout org.apache.mahout.classifier.df.tools.Describe  -p path/to/cluster_id_to_vector_text_file #入力ファイル -f path/to/dataset.info #データセット出力先 -d L 10 N #データフォーマット % mahout org.apache.mahout.classifier.df.mapreduce.BuildForest  -d path/to/cluster_id_to_vector_text_file  #入力ファイル -ds path/to/dataset.info #データセットファイル -o path/to/decision_forest  #モデル出力先 -t 10   #作成する木の数 Developers Summit 2013 Action ! 37Friday, February 15, 13
  • 38. Developers Summit モデルのテスト % mahout org.apache.mahout.classifier.df.mapreduce.TestForest  -i path/to/test/data  #入力テストデータ -ds path/to/dataset.info #データセットファイル -m path/to/decision_forest/nsl-forest #モデルのパス -a #テスト結果表示 -mr #mapreduceを利用 -o path/to/output/ #テスト結果出力先 Developers Summit 2013 Action ! 38Friday, February 15, 13
  • 39. Developers Summit テスト結果 12/10/13 18:08:56 INFO mapreduce.TestForest: Classification Time: 0h 0m 6s 355 12/10/13 18:08:56 INFO mapreduce.TestForest: ================================== Summary ------------------------------------------------------- Correctly Classified Instances : 17657 78.3224% Incorrectly Classified Instances : 4887 21.6776% Total Classified Instances : 22544 ======================================================= Confusion Matrix ------------------------------------------------------- a b <--Classified as 9459 252 | 9711 a = normal 4635 8198 | 12833 b = anomaly Default Category: unknown: 2 Developers Summit 2013 Action ! 39Friday, February 15, 13
  • 40. Developers Summit ターゲティングフロー KVS userId = XYZ site.jp clusterId = 5 userId = XYZ クッキーから ユーザー識別IDを取得 XYZの情報 KVSからユーザーの 情報取得 ユーザ情報をベクトル化し XYZのベクトル てRandomForest clusterIdを取得して clusterId = 5 結果を利用 Developers Summit 2013 Action ! 40Friday, February 15, 13
  • 41. Developers Summit Classify … // decisionForestを取得 DataInputStream decisionForestBinary = getDecisionForestBinary(); DecisionForest decisionForest = DecisionForest.read(decisionForestBinary); // datasetを取得 DataInputStream datasetBinary = getDatasetBinary(); Dataset dataset = Dataset.read(datasetBinary); // スケール済ベクトルを取得 String scaledVector = getScaledVector(); DataConverter dataConverter = new DataConverter(dataset); Instance instance = dataConverter.convert(scaleVectorString); // ランダム関数 Random random = new Random(); // 結果を得る double id = decisionForest.classify(random, instance); Developers Summit 2013 Action ! 41Friday, February 15, 13
  • 42. Developers Summit モデル作成の流れ 各ユーザーの情報をKVSに保存 各ユーザーの特徴をベクトル化 ユーザーベクトルを標準化 ユーザーベクトルをmahoutでk-Means k-Meansした結果からRandom Forestモデルを作成 Developers Summit 2013 Action ! 42Friday, February 15, 13
  • 43. Developers Summit ありがとうございました。 オウルデータで働きたい! もっとくわしく聞きたい! という方は 「Ask The Speaker」 でお待ちしております。 Developers Summit 2013 Action !Friday, February 15, 13