0
Developers         Summit                          アドテク・ターゲティング技術                             〜Pig, Mahout, KVS〜          ...
Developers         Summit                          自己紹介             太田祐一(おおたゆういち)        • 最近子供が生まれてイクメンに        • もともとは証券...
Developers         Summit       とにかくデータを集めて触ってみよう!                          Developers Summit 2013 Action !Friday, Februar...
Developers         Summit                   とにかくデータを集めて触ってみよう     MY     RECOMMEND     NEXT   ACTION!     • 今日のお題は所謂�”ビッグデ...
Developers         Summit                 で、アドテクとデータの関係は?                          Developers Summit 2013 Action !Friday, ...
Developers         Summit                          アドテクって?         ”アクション”してもらうためのテクノロジー                           Develop...
Developers         Summit                          広告を配信する技術            育児情報サイトの広告           育児情報サイトだから           25〜35歳女性...
Developers         Summit        でも最近はイクメンもけっこう見てますよ?                          Developers Summit 2013 Action !Friday, Febr...
Developers         Summit              オーディエンスターゲティング              育児情報 × 男      出産育児情報サイトを見ている      男だから保険商品をすすめる        ...
Developers         Summit              オーディエンスターゲティング    育児情報サイトを見ている男で保険の切替    検討中で、株式投資に興味があり、妻から    旅行に連れて行けとせがまれているけど、...
Developers         Summit              オーディエンスターゲティング                データがいっぱいあっても活用しきれない             自動で似ている人同士をセグメント化したい ...
Developers         Summit                          ターゲティングフロー                                                             ...
Developers         Summit                          ターゲティングフロー                                                             ...
Developers         Summit                          ターゲティングフロー                                                             ...
Developers         Summit                          モデル作成の流れ                   各ユーザーの情報をKVSに保存                   各ユーザーの特徴をベ...
Developers         Summit                           KVSに保存                   各ユーザーの情報をKVSに保存                   各ユーザーの特徴をベク...
Developers         Summit                          KVSに保存         • どのKVSを採用するか?              ‣              ‣ 比較してるサイトの情報...
Developers         Summit                           ベクトル化                   各ユーザーの情報をKVSに保存                   各ユーザーの特徴をベクト...
Developers         Summit                                   ベクトル化           {"ユーザーID":12345,"カテゴリ":{"美容":0,"育児":7,"金融":10,...
Developers         Summit                          ベクトルを標準化                   各ユーザーの情報をKVSに保存                   各ユーザーの特徴をベ...
Developers         Summit                               ベクトルの標準化          美容         育児       金融       車        マンガ       ...
Developers         Summit                           Pigを使う           面倒なMapReduceのJavaプログラムやHadoopコマンド           を使わずに、Had...
Developers         Summit                          PigのUDFを使う           UDFを作成することでいろいろできます      % git clone https://githu...
Developers         Summit                          Pigで分散を計算                register path/to/udfs.jar                set j...
Developers         Summit                          Mahoutでk-Means                   各ユーザーの情報をKVSに保存                   各ユーザ...
Developers         Summit          主にHadoopを用いてデータマイニングや機械学習をするた          めのJavaライブラリ            % git clone https://githu...
Developers         Summit                          k-Means                          Developers Summit 2013 Action !   27Fr...
Developers         Summit              Mahout k-Meansのデータ型                           key        : Text            Input : ...
Developers         Summit                              データを変換                           ユーザーベクトルをスペース区切り                  ...
Developers         Summit                          k-Meansコマンド  % MAHOUT_HOME/bin/mahout kmeans           -i path/to/hdfs/...
Developers         Summit                                 k-Means 結果       (map例)       public void map(IntWritable key, W...
Developers         Summit                          k-Means 結果        クラスタID                   ベクトルの値                      ...
Developers         Summit                          ターゲティングフロー                                                             ...
Developers         Summit                  MahoutでRandom Forest                   各ユーザーの情報をKVSに保存                   各ユーザーの...
Developers         Summit                             決定木                          Developers Summit 2013 Action !   35Fri...
Developers         Summit                          Random Forest                c-2                                       ...
Developers         Summit                  MahoutでRandom Forest  % mahout org.apache.mahout.classifier.df.tools.Describe  ...
Developers         Summit                            モデルのテスト  % mahout org.apache.mahout.classifier.df.mapreduce.TestFores...
Developers         Summit                               テスト結果   12/10/13 18:08:56 INFO mapreduce.TestForest: Classificatio...
Developers         Summit                          ターゲティングフロー                                                             ...
Developers          Summit                                  Classify      …      // decisionForestを取得      DataInputStream...
Developers         Summit                          モデル作成の流れ                   各ユーザーの情報をKVSに保存                   各ユーザーの特徴をベ...
Developers         Summit                          ありがとうございました。                            オウルデータで働きたい!                   ...
Upcoming SlideShare
Loading in...5
×

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

3,933

Published on

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

0 Comments
11 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,933
On Slideshare
0
From Embeds
0
Number of Embeds
10
Actions
Shares
0
Downloads
69
Comments
0
Likes
11
Embeds 0
No embeds

No notes for slide

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

  1. 1. Developers Summit アドテク・ターゲティング技術 〜Pig, Mahout, KVS〜 太田祐一 15-C-7 株式会社オウルデータ 代表取締役社長 兼 #devsumiC データマイニングエンジニア Developers Summit 2013 Action !Friday, February 15, 13
  2. 2. Developers Summit 自己紹介 太田祐一(おおたゆういち) • 最近子供が生まれてイクメンに • もともとは証券会社員 • 独立して失敗 • スペイシーズにData mining engineerとして拾ってもらう • DMP事業が独立して新会社設立(オウルデータ)→代表に Developers Summit 2013 Action ! 2Friday, February 15, 13
  3. 3. Developers Summit とにかくデータを集めて触ってみよう! Developers Summit 2013 Action !Friday, February 15, 13
  4. 4. Developers Summit とにかくデータを集めて触ってみよう MY RECOMMEND NEXT ACTION! • 今日のお題は所謂�”ビッグデータ”分析 • ビッグデータかどうかは置いておいて、とにか く今あるデータを分散環境で分析してみる! • 分散環境で構築しておけばスケールできる! Developers Summit 2013 Action ! 4Friday, February 15, 13
  5. 5. Developers Summit で、アドテクとデータの関係は? Developers Summit 2013 Action !Friday, February 15, 13
  6. 6. Developers Summit アドテクって? ”アクション”してもらうためのテクノロジー Developers Summit 2013 Action ! 6Friday, February 15, 13
  7. 7. Developers Summit 広告を配信する技術 育児情報サイトの広告 育児情報サイトだから 25〜35歳女性向けの広告を出す Developers Summit 2013 Action ! 7Friday, February 15, 13
  8. 8. Developers Summit でも最近はイクメンもけっこう見てますよ? Developers Summit 2013 Action !Friday, February 15, 13
  9. 9. Developers Summit オーディエンスターゲティング 育児情報 × 男 出産育児情報サイトを見ている 男だから保険商品をすすめる Developers Summit 2013 Action ! 9Friday, February 15, 13
  10. 10. Developers Summit オーディエンスターゲティング 育児情報サイトを見ている男で保険の切替 検討中で、株式投資に興味があり、妻から 旅行に連れて行けとせがまれているけど、 最近車を買ったからお金が無くて・・・ Developers Summit 2013 Action ! 10Friday, February 15, 13
  11. 11. Developers Summit オーディエンスターゲティング データがいっぱいあっても活用しきれない 自動で似ている人同士をセグメント化したい Developers Summit 2013 Action ! 11Friday, February 15, 13
  12. 12. Developers Summit ターゲティングフロー KVS userId = XYZ site.jp userId = XYZ クッキーから ユーザー識別IDを取得 XYZの情報 KVSからユーザーの 情報取得 Developers Summit 2013 Action ! 12Friday, February 15, 13
  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. 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. 15. Developers Summit モデル作成の流れ 各ユーザーの情報をKVSに保存 各ユーザーの特徴をベクトル化 ユーザーベクトルを標準化 ユーザーベクトルをmahoutでk-Means k-Meansした結果からRandom Forestモデルを作成 Developers Summit 2013 Action ! 15Friday, February 15, 13
  16. 16. Developers Summit KVSに保存 各ユーザーの情報をKVSに保存 各ユーザーの特徴をベクトル化 ユーザーベクトルを標準化 ユーザーベクトルをmahoutでk-Means k-Meansした結果からRandom Forestモデルを作成 Developers Summit 2013 Action ! 16Friday, February 15, 13
  17. 17. Developers Summit KVSに保存 • どのKVSを採用するか? ‣ ‣ 比較してるサイトの情報とかぜんぜんあてにならない • データ形式は何にするか? ‣ JSON? XML? Avro? MessagePack? protobuf? Developers Summit 2013 Action ! 17Friday, February 15, 13
  18. 18. Developers Summit ベクトル化 各ユーザーの情報をKVSに保存 各ユーザーの特徴をベクトル化 ユーザーベクトルを標準化 ユーザーベクトルをmahoutでk-Means k-Meansした結果からRandom Forestモデルを作成 Developers Summit 2013 Action ! 18Friday, February 15, 13
  19. 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. 20. Developers Summit ベクトルを標準化 各ユーザーの情報をKVSに保存 各ユーザーの特徴をベクトル化 ユーザーベクトルを標準化 ユーザーベクトルをmahoutでk-Means k-Meansした結果からRandom Forestモデルを作成 Developers Summit 2013 Action ! 20Friday, February 15, 13
  21. 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. 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. 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. 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. 25. Developers Summit Mahoutでk-Means 各ユーザーの情報をKVSに保存 各ユーザーの特徴をベクトル化 ユーザーベクトルを標準化 ユーザーベクトルをmahoutでk-Means k-Meansした結果からRandom Forestモデルを作成 Developers Summit 2013 Action ! 25Friday, February 15, 13
  26. 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. 27. Developers Summit k-Means Developers Summit 2013 Action ! 27Friday, February 15, 13
  28. 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. 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. 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. 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. 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. 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. 34. Developers Summit MahoutでRandom Forest 各ユーザーの情報をKVSに保存 各ユーザーの特徴をベクトル化 ユーザーベクトルを標準化 ユーザーベクトルをmahoutでk-Means k-Meansした結果からRandom Forestモデルを作成 Developers Summit 2013 Action ! 34Friday, February 15, 13
  35. 35. Developers Summit 決定木 Developers Summit 2013 Action ! 35Friday, February 15, 13
  36. 36. Developers Summit Random Forest c-2 c-5 c-2 Developers Summit 2013 Action ! 36Friday, February 15, 13
  37. 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. 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. 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. 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. 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. 42. Developers Summit モデル作成の流れ 各ユーザーの情報をKVSに保存 各ユーザーの特徴をベクトル化 ユーザーベクトルを標準化 ユーザーベクトルをmahoutでk-Means k-Meansした結果からRandom Forestモデルを作成 Developers Summit 2013 Action ! 42Friday, February 15, 13
  43. 43. Developers Summit ありがとうございました。 オウルデータで働きたい! もっとくわしく聞きたい! という方は 「Ask The Speaker」 でお待ちしております。 Developers Summit 2013 Action !Friday, February 15, 13
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×