狠狠撸

狠狠撸Share a Scribd company logo
効果のある
クリエイティブ広告の
見つけ方
自己紹介
● サイバー何ちゃらの新卒1年目
● 配属の結果,CTRひたすら予測するマンにならないといけないので色々勉強中
研修ではGo触ったりしてましたが今は Pythonメイン
● twitter:@coldstart_p(前のは恥ずかしくなって変えました )
github:https://github.com/ykaneko1992 (今日のシミュレーションのコードをあげます)
今日の話
Contextual Banditにおいて,
決定的アルゴリズムのUCBよりベイズ的アプローチのThompson
Samplingの方がよくなる,というお話
元ネタ
● 元ネタ:Dimakopoulou, Maria, Susan Athey, and Guido Imbens. "Estimation Considerations in
Contextual Bandits." arXiv preprint arXiv:1711.07077 (2017).
→ 元々はContextual Banditは推定法に対してsensitiveだというモチベーションから,パラメトリック
な手法とノンパラメトリックな手法での推定法を提案した論文
● 全部紹介していると時間がないので,パラメトリックな手法のみの紹介に絞ります
→ generalized random forestを使用したノンパラ推定や, Inversed Propensity Score(IPW)を用い
た補正などが紹介されているので興味があれば元論文を読んでください
どっちの広告を出すべきか?
広告A
CTR:15%
クリック数:1500
imp数: 10000
広告B
CTR:10%
クリック数:10
imp数:100
問題:
次のユーザーにどちらの広告を
配信すべきか?
→Bの方がいい可能性もある
→どれくらいimp数重ねればいい?
 試行の中で利益得るには?
バンディット(Bandit)アルゴリズム
● モチベ:「どちらの広告を配信すべきか」という意思決定を N回繰り返して,最終的に多くのク
リック数を得たい
● Aだけ配信してると,実は Bの方がよかった場合には損
→Bが本当はどんなCTRなのかを確認しつつ,適度に Aでクリックを稼ぎたい!
● 本当のCTRの確認に極振りすると A/Bテストになるが,要はこれも損をしてる
● クリック率の期待値と分散を用いて,上のことを行うのが バンディットアルゴリズム
● 詳しく知りたい人は本多?中村本参照
どっちの広告を出すべきか?(続)
広告A
CTR:15%
imp数:20000
CTR(男女別)
男性:25% 女性: 2%
広告A
CTR:12%
imp数:10000
CTR(男女別)
男性:1% 女性: 20%
問題:
次のユーザーにどちらの広告を
配信すべきか?
→男女の差異が非常に大きい
→通常のBanditだと男女差を考慮
できない
Contextual Bandit
● クリック率の期待値と分散を,特定の変数(コンテクスト,今回は男女)ごとに変えれば,男
女で取る選択肢を変えることができる
→Contextual Bandit
● 具体的には,変数ごとに回帰モデルを持つなどして実行する
どうやって選択肢を選ぶのか
● 以下の2つの方法(本田?中村 3章)
1.UCB アルゴリズム
→信頼区間の上限 (Upper Confidence Bound :UCB) が最大になる選択肢を引く
= 決定論的アルゴリズム
2.Thompson Sampling(TS)
→その選択肢が最適である 事後確率に従って選択肢をランダムに選択
=ランダムアルゴリズム (ベイズ戦略)
● Thompson Samplingの方がいい! という話をします
論文のシミュレーション設定
● 選択肢3つ(0,1,2),コンテクスト2つ(X_0, X_1),選択肢の利得は以下の図 (グラフの縦軸は報酬の
期待値)
● 利得の式に1次項と2次項が入っていることに注意
手法
1. コンテクストを50セット用意して,一様ランダムに選択肢を引く (コールドスタート)
2. 各選択肢ごとにブートストラップを用いて復元抽出をして(今回は 100回)リッジ回帰を回す
これによって,各選択肢ごとに標本分布の平均と分散が得られる
3. 平均,分散を元に次の 10セットを以下の基準で選択をする (バッチ学習)
UCB:                
となる選択肢を選ぶ
TS:
に従い各選択肢で乱数を生成し,乱数が最大になった選択肢を選ぶ
4. 各バッチごとに10セットのコンテクストを追加して 2,3のプロセスを繰り返す.
● 今回はパラメトリックなのでリッジ回帰をまわす時は1次項と2次項を含めて回す
シミュレーション
● Rでシミュレーションを回してみた
● 下の図(再掲)を上から見て2次元化したものを再現する
つまり,右上に赤(0),左下に青(2)が来るようになればうまくいっていると言える
シミュレーション(左が鲍颁叠,右が罢厂)
シミュレーション(左が鲍颁叠,右が罢厂)
シミュレーション(左が鲍颁叠,右が罢厂)
シミュレーション(左が鲍颁叠,右が罢厂)
シミュレーション(左が鲍颁叠,右が罢厂)
シミュレーション(左が鲍颁叠,右が罢厂)
シミュレーション(左が鲍颁叠,右が罢厂)
シミュレーション(左が鲍颁叠,右が罢厂)
シミュレーション(左が鲍颁叠,右が罢厂)
シミュレーション(左が鲍颁叠,右が罢厂)
シミュレーション(左が鲍颁叠,右が罢厂)
シミュレーション(左が鲍颁叠,右が罢厂)
シミュレーション(左が鲍颁叠,右が罢厂)
シミュレーション(左が鲍颁叠,右が罢厂)
シミュレーション(左が鲍颁叠,右が罢厂)
シミュレーション(左が鲍颁叠,右が罢厂)
シミュレーション(左が鲍颁叠,右が罢厂)
シミュレーション(左が鲍颁叠,右が罢厂)
シミュレーション(左が鲍颁叠,右が罢厂)
シミュレーション(左が鲍颁叠,右が罢厂)
まとめ
● TSの方が,UCBよりよくなった
● TSの方が良くなる理由としては,UCBだと決定的アルゴリズムなので,フィードバック
ループのような状況に陥りやすいという問題があるからと思われる
● (时间があれば)ノンパラの方の再现などもしてみたい
シミュレーション結果(論文)
上がTS,下がUCB → TSの方がうまくいってる

More Related Content

効果のあるクリエイティブ広告の見つけ方(Contextual Bandit + TS or UCB)