SlideShare a Scribd company logo
CTR予測
&
広告ランキング
Tristan Irvine
2017-01-12
自己紹介
名:Tristan Irvine
年齢:29
入社:去年の10月入社した
前職:質量分析器を設計したり分析したりした。
現在プロジェクト:Glasgow, アメトピの配信ランキングシステムを改善しようとしている。
最近ISE-Crusaderがメーンです。
概略
1)バンディットアルゴリズム
2)ISE-Crusader
3)CTR予測アルゴリズム紹介
バンディットアルゴリズム
「どの広告を配信すればいいか」を答えるアルゴリズム
広告3? - CTRが一番低いんだけど、実績あんまりない。信頼できるか?
広告1? - 実績が十分ある広告の内に一番良さそうです。安全な広告
広告4? - 全く新しい広告を試してみる?
広告1 広告2 広告3 広告4
インプ 100 100 10 0
クリック 30 25 2 0
CTR 0.3 0.25 0.2 ??
CTR確率密度分布
現在CTRへの知識を表示する分布
広告4について何も知らない:平らな分布
広告3の平均は低いんだけど、まだあんまり実
績がないのでエラーが高い=分布が広い
広告1・2はよく知っているので、鋭いピークで
す。
広告1 広告2 広告3 広告4
インプ 100 100 10 0
クリック 30 25 2 0
CTR 0.3 0.25 0.2 ??
元々のアルゴリズム:KLUCB+
UCB (Upper Confidence Bound)系のバン
ディットアルゴリズムは一番高い可能な
CTR順によってランキングする。
この風に、新規広告の探求ともう知られてい
るCTRが良い広告の活用をバランスでき
る。
この場合は、ピンクの広告4はCTR=1かも
しれないので、それを配信する。
でも、ピンクのエラーが低くなるまでに、ずっ
と配信されちゃう!
KLUCBの「KL」はKullback Leibler
Divergenceってこと。二つの確率分布の
差。一番高いCTRの計算はこれを使って
計算される。
入場アルゴリズム:Thompson Sampling
全部の可能なCTRからランダムでサーンプル
する
サーンプルしたCTR順にランキングする
青は0.2 -> 0.4の範囲
黒は0.15 -> 0.35の範囲
赤は0.0 -> 0.6の範囲
ピンクは0 -> 1の範囲
ピンクの勝つ確率は~50%
赤の平均が低くても、ピークが広いので時々青と黒に勝つ 配信される広告はもっとランダ
ムなので、ユーザに対してもっと
新鮮な広告を見ている
コンテキスチュアルバンディット
CTRの確率密度分布は今までに過去実績で計算される。
Beta(click数 + 1, no click数 + 1)
ページ情報・ユーザ属性とかを使えば精度が上がるはずですね!
Beta(imp * CTR + 1 , imp * (1 - CTR) + 1)
でやって見ましょ〜
でもCTRを予測しないといけないんです。
===> ISE-Crusader - リアルタイムCTR予測システム
タスクリスト
新規データをログからとって整理する (Aggregator)
Impressionデータが多すぎるので、ランダムでサーンプルする (Sampler)
新規データを用いてCTR予測モデルを学習させる (Primary/Secondary Learner)
更新したモデルを保存する (モデルストア)
リクエストがきたら候補の広告のCTRを予測する (予測 API)
予測CTRによって広告をランキングして配信する(ISE-Phoenix)
ISE-Crusaderシステム
Clickログ
Inviewログ Sampler
Aggregator
入力データを整
理する
Secondary Learner
実験用モデルの学習
Primary Learner x 2-3
本番モデルの学習
モデルストア
15分間隔でモデル
をアップロード
予測API
Auto-Scaling
ISE Phoenix
~100個の候補広告
予測したCTR
Model
Manager
Model
Manager
Model
Manager
管理画面
機械学習モデル評価 (secondary learner)
可能なCTRモデルは幾つかあります(回帰・協調フィルタリング・ディープラーニングな
どい
本番の前にできるだけ評価したい
Secondary Learnerで同時に複数の候補モデルを回せる LearnerId 3 = Secondary Learner
モデル
種類
現在本番で
使っているモ
デル
評価メトリックス
12時間毎に各学習しているモデルはMetricsを出す
管理画面が読めるデータベースに保存される
保存するメトリックスは:
Count, NNZ_Frac, AUROC, AUPRC, LogLoss, Normalized Entropy, 平均予測
CTR, 平均入力CTR, 入力click数、入力clickなし数
+ スコア分布
三つ大事なメトリックス紹介
AUROC:clickされたデータの予測CTRはclickされていないデータの予測CTRより高いほど大
きー
LogLoss:clickされたデータの予測CTRは1からの距離
clickされていないデータの予測CTRは0からの距離
NNZ_Frac:「Number Non Zero (ウエート) Fraction」-
最初にモデルを作った時は全部のウエート = 0, nnz_frac = 0.
ウエートベクトルがいっぱいのモデル:nnz_frac = 1。その前作り直した方がいい
モデルadp3_biasのスコア分布
00:00 - 12:00 2016-12-09
管理画面メトリックス例
モデル名
一番良いモデル(一応)
新規モデル
何のモデル?!
多分一番面白いことは最後にしちゃった。
それはまだ固定ではないんだから。一つのスーパーモデルとかがないんです
モデル進捗
1). FTRL (google) + Factorization Machine
3). Field-Aware Factorization Machine / TFFM / AdPredictor FFM
モデルの共通こと
素性に対応するウエートベクトルを持ちます
[wad1
, wad2
, wuser1
...]
ある入力データの対応ウエートを足し合わせてスコアを出す
スコア = wT
.x = wad1
xad1
+ wad2
xad2
+ wuser1
xuser1
(xi
= 1 if i is present, else 0)
確率へ変換する(シグモイド関数・累積分布関数)
CTR = 1 / (1 + e-wx
)
CTRカリブレーション(入力しているのはclickデータの100%とimpデータの~10%なの
で)
CTR_calibrated = CTR / (CTR + (1 - CTR)/w) w = サーンプル率
FTRLは基本的に正規化されたロジスティック回帰です
Factorization Machineはオンライン協調フィルタリングアルゴリズムです。スコア計算は
下記
僕が作ったのはFTRLの学習仕方でのFactorization Machine
1). FTRL-FM
ADAGRADと似て
いる学習率は
2). FFM
Factorization Machineの進化アルゴリズム:Field Aware Factorization Machine
生Factorization Machineだと無駄な相互作用項幾つかある
例えば:性別 x 年齢
ランキングしたいのは広告単位です。これは広告と何も関係ないの      
で、雑音になっちゃう
FFMで欲しい相互作用項しか計算する必要ない
と
各相互作用項は別のマトリックスを作るので、雑音が大分減られる。
一緒に考えるとFMより精度がかなり上がる。
リスポンスタイム
予測APIのリスポンスタイムは普段1ms以下です。
(~100個の候補広告のCTRを予測する時間)
ms 単位
まとめ
広告配信アルゴリズムを改善するために頑張ってる!
KLUCB -> Thompson Samplingへ変更したら~2% CPM改善
ISE-CrusaderでCTR予測する。それでランキングの精度が上がって、~7% CPM改善
今まで試してみたアルゴリズムの一番良いのがFFMの種類です。

More Related Content

Viewers also liked

アメブロの大規模システム刷新と それを支えるSpring
アメブロの大規模システム刷新と それを支えるSpringアメブロの大規模システム刷新と それを支えるSpring
アメブロの大規模システム刷新と それを支えるSpring
Takuya Hattori
 
20161110 tristan 広告ランキング
20161110 tristan 広告ランキング20161110 tristan 広告ランキング
20161110 tristan 広告ランキング
Tristan Irvine
 
レスポンシブWebデザインでうまくやるための考え方
レスポンシブWebデザインでうまくやるための考え方レスポンシブWebデザインでうまくやるための考え方
レスポンシブWebデザインでうまくやるための考え方
Hayato Mizuno
 
ニューラルネットと深層学習の歴史
ニューラルネットと深層学習の歴史ニューラルネットと深層学習の歴史
ニューラルネットと深層学習の歴史
Akinori Abe
 
Elastic Beanstalkでアプリ/インフラかんたん一括管理
Elastic Beanstalkでアプリ/インフラかんたん一括管理Elastic Beanstalkでアプリ/インフラかんたん一括管理
Elastic Beanstalkでアプリ/インフラかんたん一括管理
Yusuke Komahara
 
LT Thursday Intro. (Rust使ってみた←釣り)
LT Thursday Intro. (Rust使ってみた←釣り)LT Thursday Intro. (Rust使ってみた←釣り)
LT Thursday Intro. (Rust使ってみた←釣り)
Yuki Katada
 
アメーバブログを支えるデータセンターとインフラ技術
アメーバブログを支えるデータセンターとインフラ技術 アメーバブログを支えるデータセンターとインフラ技術
アメーバブログを支えるデータセンターとインフラ技術
Hiroki NAKASHIMA
 
祭りから半年たったプロジェクトにジョインしてみた
祭りから半年たったプロジェクトにジョインしてみた祭りから半年たったプロジェクトにジョインしてみた
祭りから半年たったプロジェクトにジョインしてみた
Asuka Oizumi
 
Atomic designで助かった人たち
Atomic designで助かった人たちAtomic designで助かった人たち
Atomic designで助かった人たち
Iida Yukako
 
Introduction to Resource Hints
Introduction to Resource HintsIntroduction to Resource Hints
Introduction to Resource Hints
Shogo Sensui
 
アメブロ2016 アメブロフロント刷新にみる ひかりとつらみ
アメブロ2016 アメブロフロント刷新にみる ひかりとつらみアメブロ2016 アメブロフロント刷新にみる ひかりとつらみ
アメブロ2016 アメブロフロント刷新にみる ひかりとつらみ
Kazunari Hara
 
TechFeedのつくりかた - Angular2/Webpack/Ionic2/Cordova実践入門
TechFeedのつくりかた - Angular2/Webpack/Ionic2/Cordova実践入門TechFeedのつくりかた - Angular2/Webpack/Ionic2/Cordova実践入門
TechFeedのつくりかた - Angular2/Webpack/Ionic2/Cordova実践入門
Shumpei Shiraishi
 
BloomFilterを直感的に理解する
BloomFilterを直感的に理解するBloomFilterを直感的に理解する
BloomFilterを直感的に理解する
co-sche
 
Akka/Actor introduction
Akka/Actor introductionAkka/Actor introduction
Akka/Actor introduction
Yuki Katada
 
tvOSネイティブアプリを作る
tvOSネイティブアプリを作るtvOSネイティブアプリを作る
tvOSネイティブアプリを作る
Tomoki Hasegawa
 
AndroidにおけるCocos2d-x製ゲームの画面の録画
AndroidにおけるCocos2d-x製ゲームの画面の録画AndroidにおけるCocos2d-x製ゲームの画面の録画
AndroidにおけるCocos2d-x製ゲームの画面の録画
gomachan_7
 
Apache Drill で見る Twitter の世界
Apache Drill で見る Twitter の世界Apache Drill で見る Twitter の世界
Apache Drill で見る Twitter の世界
Masaru Watanabe
 
F.O.Xを支える技術
F.O.Xを支える技術F.O.Xを支える技術
F.O.Xを支える技術
Yuto Suzuki
 
AbemaTV on tvOS
AbemaTV on tvOSAbemaTV on tvOS
AbemaTV on tvOS
Yuji Hato
 

Viewers also liked (19)

アメブロの大規模システム刷新と それを支えるSpring
アメブロの大規模システム刷新と それを支えるSpringアメブロの大規模システム刷新と それを支えるSpring
アメブロの大規模システム刷新と それを支えるSpring
 
20161110 tristan 広告ランキング
20161110 tristan 広告ランキング20161110 tristan 広告ランキング
20161110 tristan 広告ランキング
 
レスポンシブWebデザインでうまくやるための考え方
レスポンシブWebデザインでうまくやるための考え方レスポンシブWebデザインでうまくやるための考え方
レスポンシブWebデザインでうまくやるための考え方
 
ニューラルネットと深層学習の歴史
ニューラルネットと深層学習の歴史ニューラルネットと深層学習の歴史
ニューラルネットと深層学習の歴史
 
Elastic Beanstalkでアプリ/インフラかんたん一括管理
Elastic Beanstalkでアプリ/インフラかんたん一括管理Elastic Beanstalkでアプリ/インフラかんたん一括管理
Elastic Beanstalkでアプリ/インフラかんたん一括管理
 
LT Thursday Intro. (Rust使ってみた←釣り)
LT Thursday Intro. (Rust使ってみた←釣り)LT Thursday Intro. (Rust使ってみた←釣り)
LT Thursday Intro. (Rust使ってみた←釣り)
 
アメーバブログを支えるデータセンターとインフラ技術
アメーバブログを支えるデータセンターとインフラ技術 アメーバブログを支えるデータセンターとインフラ技術
アメーバブログを支えるデータセンターとインフラ技術
 
祭りから半年たったプロジェクトにジョインしてみた
祭りから半年たったプロジェクトにジョインしてみた祭りから半年たったプロジェクトにジョインしてみた
祭りから半年たったプロジェクトにジョインしてみた
 
Atomic designで助かった人たち
Atomic designで助かった人たちAtomic designで助かった人たち
Atomic designで助かった人たち
 
Introduction to Resource Hints
Introduction to Resource HintsIntroduction to Resource Hints
Introduction to Resource Hints
 
アメブロ2016 アメブロフロント刷新にみる ひかりとつらみ
アメブロ2016 アメブロフロント刷新にみる ひかりとつらみアメブロ2016 アメブロフロント刷新にみる ひかりとつらみ
アメブロ2016 アメブロフロント刷新にみる ひかりとつらみ
 
TechFeedのつくりかた - Angular2/Webpack/Ionic2/Cordova実践入門
TechFeedのつくりかた - Angular2/Webpack/Ionic2/Cordova実践入門TechFeedのつくりかた - Angular2/Webpack/Ionic2/Cordova実践入門
TechFeedのつくりかた - Angular2/Webpack/Ionic2/Cordova実践入門
 
BloomFilterを直感的に理解する
BloomFilterを直感的に理解するBloomFilterを直感的に理解する
BloomFilterを直感的に理解する
 
Akka/Actor introduction
Akka/Actor introductionAkka/Actor introduction
Akka/Actor introduction
 
tvOSネイティブアプリを作る
tvOSネイティブアプリを作るtvOSネイティブアプリを作る
tvOSネイティブアプリを作る
 
AndroidにおけるCocos2d-x製ゲームの画面の録画
AndroidにおけるCocos2d-x製ゲームの画面の録画AndroidにおけるCocos2d-x製ゲームの画面の録画
AndroidにおけるCocos2d-x製ゲームの画面の録画
 
Apache Drill で見る Twitter の世界
Apache Drill で見る Twitter の世界Apache Drill で見る Twitter の世界
Apache Drill で見る Twitter の世界
 
F.O.Xを支える技術
F.O.Xを支える技術F.O.Xを支える技術
F.O.Xを支える技術
 
AbemaTV on tvOS
AbemaTV on tvOSAbemaTV on tvOS
AbemaTV on tvOS
 

20170112 tristan 勉強会_社外