Upload
tristan-irvine
View
570
Download
0
Embed Size (px)
Citation preview
CTR予測 &
広告ランキングTristan Irvine2017-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分間隔でモデルをアップロード
予測APIAuto-ScalingISE 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 Machine3). Field-Aware Factorization Machine / TFFM / AdPredictor FFM
モデルの共通こと
素性に対応するウエートベクトルを持ちます
[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 = サーンプル率
FTRLは基本的に正規化されたロジスティック回帰です
Factorization Machineはオンライン協調フィルタリングアルゴリズムです。スコア計算は
下記
僕が作ったのはFTRLの学習仕方でのFactorization Machine
1). FTRL-FM
ADAGRADと似ている学習率は
2). FFMFactorization 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の種類です。