20
CTR予測 & 広告ランキング Tristan Irvine 2017-01-12

20170112 tristan 勉強会_社外

Embed Size (px)

Citation preview

Page 1: 20170112 tristan 勉強会_社外

CTR予測 &

広告ランキングTristan Irvine2017-01-12

Page 2: 20170112 tristan 勉強会_社外

自己紹介

名:Tristan Irvine

年齢:29

入社:去年の10月入社した

前職:質量分析器を設計したり分析したりした。

現在プロジェクト:Glasgow, アメトピの配信ランキングシステムを改善しようとしている。

最近ISE-Crusaderがメーンです。

Page 3: 20170112 tristan 勉強会_社外

概略

1)バンディットアルゴリズム

2)ISE-Crusader

3)CTR予測アルゴリズム紹介

Page 4: 20170112 tristan 勉強会_社外

バンディットアルゴリズム

「どの広告を配信すればいいか」を答えるアルゴリズム

広告3? - CTRが一番低いんだけど、実績あんまりない。信頼できるか?

広告1? - 実績が十分ある広告の内に一番良さそうです。安全な広告

広告4? - 全く新しい広告を試してみる?

広告1 広告2 広告3 広告4

インプ 100 100 10 0

クリック 30 25 2 0

CTR 0.3 0.25 0.2 ??

Page 5: 20170112 tristan 勉強会_社外

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 ??

Page 6: 20170112 tristan 勉強会_社外

元々のアルゴリズム:KLUCB+

UCB (Upper Confidence Bound)系のバン

ディットアルゴリズムは一番高い可能な

CTR順によってランキングする。

この風に、新規広告の探求ともう知られてい

るCTRが良い広告の活用をバランスでき

る。

この場合は、ピンクの広告4はCTR=1かもしれないので、それを配信する。

でも、ピンクのエラーが低くなるまでに、ずっと配信されちゃう!

KLUCBの「KL」はKullback Leibler Divergenceってこと。二つの確率分布の

差。一番高いCTRの計算はこれを使って

計算される。

Page 7: 20170112 tristan 勉強会_社外

入場アルゴリズム:Thompson Sampling全部の可能なCTRからランダムでサーンプル

する

サーンプルしたCTR順にランキングする

青は0.2 -> 0.4の範囲

黒は0.15 -> 0.35の範囲

赤は0.0 -> 0.6の範囲

ピンクは0 -> 1の範囲

ピンクの勝つ確率は~50%赤の平均が低くても、ピークが広いので時々青と黒に勝つ 配信される広告はもっとランダ

ムなので、ユーザに対してもっと新鮮な広告を見ている

Page 8: 20170112 tristan 勉強会_社外

コンテキスチュアルバンディット

CTRの確率密度分布は今までに過去実績で計算される。

Beta(click数 + 1, no click数 + 1)

ページ情報・ユーザ属性とかを使えば精度が上がるはずですね!

Beta(imp * CTR + 1 , imp * (1 - CTR) + 1)

でやって見ましょ〜

でもCTRを予測しないといけないんです。

===> ISE-Crusader - リアルタイムCTR予測システム

Page 9: 20170112 tristan 勉強会_社外

タスクリスト

新規データをログからとって整理する (Aggregator)

Impressionデータが多すぎるので、ランダムでサーンプルする (Sampler)

新規データを用いてCTR予測モデルを学習させる (Primary/Secondary Learner)

更新したモデルを保存する (モデルストア)

リクエストがきたら候補の広告のCTRを予測する (予測 API)

予測CTRによって広告をランキングして配信する(ISE-Phoenix)

Page 10: 20170112 tristan 勉強会_社外

ISE-Crusaderシステム

Clickログ

Inviewログ Sampler

Aggregator 入力データを整理する

Secondary Learner実験用モデルの学習

Primary Learner x 2-3本番モデルの学習

モデルストア

15分間隔でモデルをアップロード

予測APIAuto-ScalingISE Phoenix

~100個の候補広告

予測したCTR

Model Manager

Model Manager

Model Manager

管理画面

Page 11: 20170112 tristan 勉強会_社外

機械学習モデル評価 (secondary learner)可能なCTRモデルは幾つかあります(回帰・協調フィルタリング・ディープラーニングな

どい

本番の前にできるだけ評価したい

Secondary Learnerで同時に複数の候補モデルを回せる LearnerId 3 = Secondary Learner

モデル種類

現在本番で使っているモデル

Page 12: 20170112 tristan 勉強会_社外

評価メトリックス

12時間毎に各学習しているモデルはMetricsを出す

管理画面が読めるデータベースに保存される

保存するメトリックスは:

Count, NNZ_Frac, AUROC, AUPRC, LogLoss, Normalized Entropy, 平均予測

CTR, 平均入力CTR, 入力click数、入力clickなし数

+ スコア分布

Page 13: 20170112 tristan 勉強会_社外

三つ大事なメトリックス紹介

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

Page 14: 20170112 tristan 勉強会_社外

管理画面メトリックス例

モデル名

一番良いモデル(一応)

新規モデル

Page 15: 20170112 tristan 勉強会_社外

何のモデル?!

多分一番面白いことは最後にしちゃった。

それはまだ固定ではないんだから。一つのスーパーモデルとかがないんです

モデル進捗

1). FTRL (google) + Factorization Machine3). Field-Aware Factorization Machine / TFFM / AdPredictor FFM

Page 16: 20170112 tristan 勉強会_社外

モデルの共通こと

素性に対応するウエートベクトルを持ちます

[wad1, wad2, wuser1...]

ある入力データの対応ウエートを足し合わせてスコアを出す

スコア = wT.x = wad1xad1 + wad2xad2 + wuser1xuser1 (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 = サーンプル率

Page 17: 20170112 tristan 勉強会_社外

FTRLは基本的に正規化されたロジスティック回帰です

Factorization Machineはオンライン協調フィルタリングアルゴリズムです。スコア計算は

下記

僕が作ったのはFTRLの学習仕方でのFactorization Machine

1). FTRL-FM

ADAGRADと似ている学習率は

Page 18: 20170112 tristan 勉強会_社外

2). FFMFactorization Machineの進化アルゴリズム:Field Aware Factorization Machine

生Factorization Machineだと無駄な相互作用項幾つかある

例えば:性別 x 年齢

ランキングしたいのは広告単位です。これは広告と何も関係ないの      

で、雑音になっちゃう

FFMで欲しい相互作用項しか計算する必要ない

各相互作用項は別のマトリックスを作るので、雑音が大分減られる。

一緒に考えるとFMより精度がかなり上がる。

Page 19: 20170112 tristan 勉強会_社外

リスポンスタイム

予測APIのリスポンスタイムは普段1ms以下です。

(~100個の候補広告のCTRを予測する時間)

ms 単位

Page 20: 20170112 tristan 勉強会_社外

まとめ

広告配信アルゴリズムを改善するために頑張ってる!

KLUCB -> Thompson Samplingへ変更したら~2% CPM改善

ISE-CrusaderでCTR予測する。それでランキングの精度が上がって、~7% CPM改善

今まで試してみたアルゴリズムの一番良いのがFFMの種類です。