最先端のデータ解析/Apache Sparkを 利用したレコメンドエンジン開発 サンプルデータの解析からビッグデータの解析へ~ GMOインターネット株式会社 次世代システム研究室 アーキテクト GMOアドパートナーズ株式会社 グループCTO室 アーキテクト 野田 純一
最先端のデータ解析/Apache Sparkを利用したレコメンドエンジン開発
サンプルデータの解析からビッグデータの解析へ~
GMOインターネット株式会社 次世代システム研究室 アーキテクト GMOアドパートナーズ株式会社 グループCTO室 アーキテクト 野田 純一
1
2
3
アジェンダ
次世代システム研究室について
自己紹介
レコメンドエンジンの開発について
2
3
次世代システム研究室ついて
次世代システム研究室はお客様の笑顔のため、No.1 サービスを目指し、GMO インターネットグループの重要なプロジェクトの成功を技術面でサポートする部署です。 R&Dだけの部署ではありません。
4
作ってきたサービス
5
ベトナムラボと協力してサービスを開発
6
次世代システム研究室の研究開発期末に次世代システム研究室の研究発表会を実施。研究内容は業務に関すること、今後業務に活かせそうな最新技術。 !• Apple Watch vs Android Wear • HBase×Impalaで作るアドテク「GMOプライベートDMP」 • リーンスタートアップ、アジャイル開発導入事例
最近の研究資料 http://recruit.gmo.jp/engineer/jisedai/topics/
7
社外での活動(2015年)時期 イベント名 内容6月 HBase Meetup Tokyo
Summer 2015「GMO Private DMP」の開発で得たHadoop関連のノウハウを発表
8月 dots. ビッグデータオールスターズ
社内での研究成果を外部のイベントでも共有
10月 Software Design 2015年11月号 記事掲載
Hadoop関連開発にConoHaを使った場合のクラスタ構成やノウハウを掲載
12月 Embulk Meetup Tokyo #2 次世代システム研究室ブログの内容が好評だったので勉強会でも発表
次世代システム室ブログ http://recruit.gmo.jp/engineer/jisedai/blog/
1
2
3
アジェンダ
次世代システム研究室について
自己紹介
レコメンドエンジンの開発について
8
9
自己紹介 経歴所属GMOインターネット株式会社 次世代システム研究室 アーキテクト GMOアドパートナーズ株式会社 グループCTO室 アーキテクト
前職
2014 ~
株式会社ディー・エヌ・エー ソーシャルゲームのフレームワーク開発(WEB向け、アプリ向け)
GMOインターネット入社 GMO NIKKO社の「GMOプライベートDMP」の開発に関わる レコメンドウィジェット「TAXEL」の開発中
10
最近やっていること 「Sparkが熱い」Software Design 2015年11月号 に執筆記事掲載。 ConoHaを使ったHadoopクラスタの構成事例とSpark SQLを使ったデータ処理の実例を記述。
2015年11月 10日 Cloudera World Tokyo 2015でLT登壇 !ClouderaはHadoopディストリビューションのメジャーなベンダー。Apache Sparkを使ったプログラムについて紹介。
1
2
3
アジェンダ
次世代システム研究室について
自己紹介
レコメンドエンジンの開発について
11
12
推薦記事
広告
リコメンドウィジェット
13
リコメンドウィジェット関連用語用語 解説
回遊率 回遊率とは特定のサイトを訪れた訪問者が、そのサイト内の各ページをどれ位見て回ったかという判断指標です。訪問ページ別の直帰率やリンク元ドメイン別直帰率、重要ページ到達率、ユーザごとの平均PV(Page View)などの数値をもとに回遊の程度は判断されています。
SSP RTBの広告掲載(メディア)側システム ブラウザの広告枠に
対して一番入札額の高い(効果の高い)DSPを決定する。
ネイティブアド 広告をWEB画面やスマフォになじませる手法。
14
ネイティブアドの種類インフィード型 Facebookのフィード広告、Twitterのプ
ロモートツイートなど検索連動型広告型 Yahoo、Google、Bingレコメンドウィジェット型 アウトブレイン、popIn、loglyなど
プロモートリスティング型 「ぐるなび」や「食べログ」の検索連動型広告、サービスの利用体験とシームレスにデザインされた広告
ネイティブ要素を持つインアド型
広告のデザインはメディアと親和性が高くないがコンテンの親和性が高いもの
カスタム型 上記にあてはまらない手法。(もちろん広告はメディアにあわせる)
参考: 日経BPムック「最新マーケティングの教科書2016」
15
推薦記事表示までのフロー
16
リコメンド記事の作成フロー
17
Apache Sparkについて
オープンソースの並列分散処理基板 インメモリー処理 HadoopのMapReduceとは別アプローチ(DAG)での並列分散処理基板を行う APIを利用できる言語はScala, Java, Python, R クラスタ上での処理を前提としており、YARN, Mesos, Spark Standaloneが選択できる
18
Spark SQLの活用(データの集約)
[hive@slave_node1]$ spark-shell --master yarn-client!import org.apache.spark.sql.hive.HiveContext !val hiveCtx = new HiveContext(sc)!val rows = hiveCtx.sql("select uid, url from access_log_data”)!val rdd = rows.distinct.rdd !val pairs = rdd.map( u => (u{0}.asInstanceOf[String], u{1}.asInstanceOf[String])) !val group = pairs.groupByKey()!group.take(10)
クラスタで処理Hiveテーブル使うため
HiveQL重複行を削除
map形式に変換 (ユーザID => ページURL)ユーザIDをキーにデータを集約する
19
Spark MLlibの活用 (相関ルール)
相関ルール「パンとバターの同時購入者の90%はミルクも購入する」というような関係性を算出する。算出処理の引数に confidence(確信度)、support(支持度)などの指標を与えてその数値以上の関係性を導き出す。 !例だとpage1を見てる人にはpage2を推薦(その逆も)、page4を見てる人にはpage5を推薦する(その逆も)・・といった記事ベースのリコメンドを行う。
20
import org.apache.spark.{SparkConf, SparkContext}!import org.apache.spark.rdd.RDD!import org.apache.spark.mllib.fpm.AssociationRules!import org.apache.spark.mllib.fpm.FPGrowth.FreqItemset!!object ArSample {! def main(args: Array[String]): Unit = {!! val conf = new SparkConf().setAppName("Ar Application")! conf.setMaster("local[*]")! val sc = new SparkContext(conf)!! val freqItemsets = sc.parallelize(Seq(! new FreqItemset(Array("http://maru/page1"), 20L),! new FreqItemset(Array("http://maru/page2"), 20L),! new FreqItemset(Array("http://maru/page3"), 20L),! new FreqItemset(Array("http://maru/page4"), 20L),! new FreqItemset(Array("http://maru/page5"), 20L),
例なのでデータを増幅する FreqItemset(データパターン, 頻度)
例としてローカルで起動(本来はクラスタ)
21
new FreqItemset(Array("http://maru/page1", "http://maru/page2"), 19L),! new FreqItemset(Array("http://maru/page4", "http://maru/page5"), 18L)! ));!! val ar = new AssociationRules()! .setMinConfidence(0.6)! val results = ar.run(freqItemsets)!! results.collect().foreach { rule =>! println("[" + rule.antecedent.mkString(",")! + "=>"! + rule.consequent.mkString(",") + "]," + rule.confidence)! }!! sc.stop! }!}!
相関ルールのクラスを作成
Confidence(確信度)の指標を与える
22
開発環境構成(ConoHaで構成)マシン名 CPU メモリgateway 2コア 1GBci_ambari 4コア 4GBmaster_node 6コア 8GBslave_node 6コア 8GB dev-web 2コア 1GBdev-ap 3コア 2GB dev-batch 3コア
ay2GB
23
GMOインターネット グループの強み開発に必要なサーバーインフラをグループ内で調達可能。 Hadoopクラスタの調達、サーバー構成の調整がしやすい。
24
ご清聴ありがとうございました
あんず&このは LINEスタンプ発売中