Real-Time Floor pricing
概要
はてなの2018年サマーインターンで機械学習を使って広告収益をX%くらい上げてきた(Xの数値は諸事情で詳しくは言えないけど10いかないくらい)
ちゃんとはてなの人に記事の公開許可もらってます
前提知識
- Ad Exchange の広告枠の値段はセカンドプライス・オークションで決まる
- 最高額で入札した人が2番目に高い金額の入札額を払う
- フロアプライスという最低落札価格を設定できる
- ならフロアプライスが採用される
- ならセカンドプライスが採用される
- なら不成立
つまり、フロアプライスを最適化すると収益があがる!
→ じゃあ広告枠毎にフロアプライスを最適化しよう!(RTF)
用語定義
- : ファーストプライスの推定値
- : セカンドプライスの推定値
- : 最適なフロアプライスの推定値
処理の流れ
- 複数の特徴量からを計算
- からを計算
- からを計算
学習をPythonでやってから推論処理をTypeScriptに移植
各処理の詳細
1. 諸特徴量からを計算
諸特徴量→多項式基底*1→線形回帰*2→という処理の流れをPipeline*3でくっつけて計算した
絶対偏差は以下のような感じ
平均偏差 | ¥30 |
25% | ¥4 |
50% | ¥10 |
75% | ¥23 |
100% | ¥8153 |
標準偏差 | ¥124 |
2. からを計算
グラフを見てみるとの比率が多項式近似できそうだったので、多項式近似した(オレンジ色の線が近似)
横軸がでグラフの右の方が分散大きく見えるが、大体は0円から500円くらいに分布していてそれより上は実質使われないので最終的な収益には大きな影響を与えなかったと考えられる
の比率が計算できたのでこの値にを掛けてを算出した
本当はを諸特徴量から直接計算したい所だがデータが取れなかった
3. からを計算
とし、とは実際に運用しながら山登り法っぽい感じで最適化していった
式に落とし込むと以下のような感じ、ただし収益関数をとし、は一定の期間同じ数値が使われて次の一定期間では+1した値になる
本当はが決まったときのの確率密度関数をノンパラメトリックに推定してどうのこうのっていうのを考えていたがのときの期待値の計算が難しそうだしそもそも確率密度関数の推定も収益が上がるくらいの精度でるか心配だったので今回の手法を選択した
結果
収益が増加した!!!
展望
- 、を諸特徴量の関数と仮定する
- 、を使った一次関数ではなくを追加して二次関数にしてみる
- 、の学習に使うデータを増やす
- パラメータの更新を自動化