収益を最大化する最適なフロアプライスにおける理論的アプローチ

この記事はCyberAgent Developers Advent Calendar 2019の16日目の記事です。

adventar.org

今の部署に移ってからずっとDSPの開発を行っていたのですが、今年の5月頃に事業的な方針の変化とともにチームの編成が変わり、広告枠の運用を行うメンバーとの交流が増えました

その運用の中で、収益を最大化するためにフロアプライスを変更するタスクの存在を知り、興味を持ちました

その人曰く、平日や週末でフロアプライスを調整することによってメディアとしての売上が伸びると

たしかにDSPからしても曜日やデマンドの状況によって入札額が変化するので、フロアプライスを調整することによって、収益が変わるということは理解できたのですが、既存の運用ロジックでは決まった曜日に変更したり、フロアプライスも感覚的に設定していたりなどヒューリスティックな部分が多々ありました

そこで、過去の入札額から収益を最大化するようなフロアプライスを決定することができれば、この運用自体を自動化できるとともに、メディア収益が上がるのではということで、合理的なアプローチによる取り組みを行いました

諸々の事情があり、システムに組み込むことができずに今に至るのですが、あまり世に出回っていない情報、かつ有益な考え方だと思ったので、ここに記そうと思います

はじめに

オークション自体複雑なものなので、いきなり収益を最大化するためのフロアプライスを考えることは難しいので、いくつかのステップを追って説明します

まずは、単体のオークションにおける最適なフロアプライスを計算します。次に、より現実に近い複数回のオークションにおける最適なフロアプライスを計算します。ここで、1stプライスの確率分布を推定することが重要になり、極値分布というものを導入します。最後に、この極値分布を現実のオークションにおけるデータに対して適用します

それでは、順番に見ていきましょう

1回のオークションにおける最適なフロアプライス

まずはシンプルに1回のオークションにおいて、フロアプライスをいくらに設定をすれば収益が最大化するか考えてみます

前提条件

今回のオークションでは、下記のような制約条件を設けます

  1. 2ndプライスオークション
  2. 登場人物はデマンドA, デマンドB, フロアプライス
  3. デマンドAは¥100で入札、デマンドBは¥50で入札

近年ヘッダービディングの台頭もあり1stプライスが普及し始めていますが、ここでは広く用いられている2ndプライスオークションを採用します

2ndプライスオークションの場合、デマンド側の戦略としてゲーム理論より、各デマンドが評価する金額で入札することがベストな戦略として知られています

したがって、フロアプライスを変更することによって入札戦略が変わらないと仮定できます

(2ndプライスオークションにおける最適な入札戦略について詳細に知りたい方がいれば、去年の投稿をご確認ください)

planet-meron.hatenablog.com

今回オークションに関わる登場人物は、入札を行うデマンドA・デマンドBとフロアプライスになっています

デマンドA・デマンドBはそれぞれ¥100と¥50で常に入札を行い、フロアプライスを変更することによって最適な収益の値を探していきます

最適なフロアプライスの算出

2ndプライスオークションの場合、収益は全入札の中で2番目に高い金額となります

例えば、フロアプライスを¥10に設定した場合、収益は2番目に入札額が高いデマンドBの¥50となります

また、フロアプライスを¥70に設定すると、収益は2番目に金額の高いフロアプライスの値となり¥70となります

ただし、フロアプライスの金額以上で入札がない場合は、オークションによる落札者がいないということになり、収益は¥0になります

これらのことを考慮し、フロアプライスと収益の関係を表すと次の図のようになります

image.png

図1は横軸が設定されたフロアプライスを表し、縦軸が収益を表しています

図1を見てわかるようにフロアプライスが¥1~50に設定された場合、収益はデマンドBの落札額となり¥50になります

そして、¥51~100の間にフロアプライスを設定した場合、2番目に高い金額はフロアプライスとなるので、収益はフロアプライスと同じ値となります

そしてフロアプライスが¥101よりも大きくなるとフロアプライス以上の入札が無いので、収益は¥0になります

したがって、1回のオークションにおいて最適なフロアプライスは、一番入札額の高いデマンドAと同じ値に設定することということがわかります

複数回のオークションにおける最適なフロアプライス

前節では、1回のオークションにおいて収益を最大化するには、フロアプライスを一番入札額の高い金額と一緒にすればよいということがわかりました

しかし、実際のオークションではいつ・だれに・どんな広告を出すかによって、デマンド側の入札戦略がかわってきます

例えば、同じユーザーに対して同じ広告を出そうとする場合でも、表示回数や時間帯によっても入札額が変わってくるのです

つまり、先程の例のように常に同じ金額で入札してくるとは限らず、ばらつきをもった入札額に対して、最適なフロアプライスを決定する必要があります

前提条件

前節では登場人物としてデマンドA, デマンドBとして、登場人物として設定していましたが、入札条件によって各デマンドの入札額が変わるため、各オークションにおける1stプライスと2ndプライスにのみ着目します

ばらつきをもった入札額を表現するために、1stプライス、2ndプライスの入札額に対して、それぞれ何らかの確率分布で入札されることを想定します

今回はオークションにおける1stプライスと2ndプライスの条件を下記のように正規分布に従うと仮定しました

  1. 1stプライス P_{1st} 、2ndプライスP_{2nd}正規分布に従う
  2. 1stプライスは平均¥100, 分散¥10とする  (X_{1st} \sim N(100, 10))
  3. 2ndプライスは平均¥50, 分散¥10とする  (X_{2nd} \sim N(50, 10))

収益の期待値

さて、1stプライスと2ndプライスを正規分布と仮定しましたが、収益はどのように計算すれば良いでしょうか

それはフロアプライスを決定した時に1stプライスと2ndプライスでそれぞれ収益の期待値を計算すれれば良いのです

それでは、それぞれ見ていきましょう

2ndプライスとフロアプライスを変えた時の収益の期待値

フロアプライスと2ndプライス・収益の関係は、2つの条件を考える必要があります

①フロアプライスが2ndプライスよりも小さい場合は2ndプライスの値が収益となり、②フロアプライスが2ndプライスよりも大きい場合はフロアプライスが収益となります

つまりフロアプライスを決定し、それぞれの条件における期待値を算出して、足し合わせることによって、収益を定義することができます

image.png

フロアプライスをx、2ndプライスの確率密度をf_{2nd}(x)とした時、収益の期待値E_{2nd}[X]は下記のように定義できます

f:id:b0941015:20191216184301p:plain

上記の式より、フロアプライスが低い時は、2ndプライスの分布における期待値が支配的になり、フロアプライスが大きくなると、フロアプライスの値が支配的になることがわかります

1stプライスとフロアプライスを変えた時の収益の期待値

同様に、1stプライスとフロアプライスの収益の関係について見ていきましょう

考え方は一緒で、フロアプライスを決定した時に、フロアプライス以下・以上のそれぞれ条件における期待値を計算することによって算出することができます

フロアプライスをx、1stプライスの確率密度をf_{1st}(x)とした時、収益の期待値E_{1st}[X]は下記のように定義できます

f:id:b0941015:20191216184358p:plain

1stプライスよりもフロアプライスの方が大きい場合収益は0になるので、フロアプライスよりも1stプライスの方が大きい時の期待値のみ算出すれば良いことになります

最適なフロアプライス

以上の結果を元に、複数回のオークションにおけるフロアプライスと収益の関係を表すと下図のようになります

image.png

1回のオークションのフロアプライスと収益との外形は似ていますが、収益が最大化するフロアプライスについては異なっています

今回は¥1単位でしかフロアプライスを変更できない場合、フロアプライスを¥84に設定した時に¥79.1が収益の最大値となります

今回の条件では、前節の最適なフロアプライス¥100よりも小さい値に設定することで収益を最大化することができるという結果になっていますが、1stプライスの分散を変えると¥100よりも大きくなることがあります

つまり、複数回オークションにおける最適なフロアプライスを決定するためには、1stプライスの確率分布を知る必要があり、この1stプライスの確率分布を決定することさえできれば、最適なフロアプライスを決定することができるのです

それでは、1stプライスはどんな確率分布をしているのでしょうか??

ここでは、極値分布というものを紹介します

極値統計学

突然ですが、どんな波が来ても超えないような防波堤を設計する場合、高さをどれくらいにすれば良いでしょうか??

防波堤は人命を守るために重要なものなので、その高さは高ければ高いほど良いように思えますが、高くすればするほど建築コストがかかります

このような状況で、現実的で根拠のある数値を導き出す学問として極値統計学というものが生まれました

極値分布とは

極値統計学の考え方は、特定の期間・回数における最大値にのみ着目します

ある確率分布から、特定の期間・回数を仮定して、観測された最大値のデータを収集するとその分布は極値分布になります

先程の防波堤の例では、特定の期間を1年として、過去10年における各年の波の高さの最大値のみのヒストグラムを作成すると極値分布になるのです

これがオークションにおける1stプライスの確率分布を極値分布として、仮定している理由です

1stプライスは、各デマンドは自身が持っているあらゆる広告の中で最も価値のある広告が選んで入札し、さらに各デマンドの入札額の中で一番高い金額のものになるからです

極値分布は、元となる確率分布によって収束する確率分布が異なります

収束する確率分布はGumbel分布, Fréchet分布, 負のWeibull分布3つが存在します

ここでは詳細について踏み込まないのですが、もし興味ある方はこちらの記事で、それぞれ確率分布がどの極値分布に収束するかなどイメージの参考にしてください 

qiita.com

一般極値分布

先程様々な確率分布が3つの極値分布のどれかに収束するという話をしました

それぞれ異なる式なのですが、パラメータを一つ追加することによって、これらの3つの式を一つの式で表すことができるようになったものを一般極値分布と呼びます

この一般極値分布を使うことによって、3つの極値分布を1つの公式で統一的に扱えることや、複数の極値分布が混合している状況なども表現することが可能になります

過去の入札ログに極値分布を当てはめる

これで過去の1stプライスの入札ログに一般極値分布をあてはめ、最適なフロアプライスを求める理論的な準備が整ったように見えるのですが、実際に観測可能なログにはいくつか注意点があります

実際の入札における制約条件

①フロアプライス以下の1stプライスは使ってはいけない

過去の入札ログから1stプライスだけを抽出する際に、フロアプライス以下の入札額を参照しないように気をつけてください

なぜなら、フロアプライス以下の入札は各デマンドによって挙動が変わる可能性があるからです

各デマンドによって算出された入札額がフロアプライスよりも低い金額の場合、問答無用で入札してくるデマンドもいれば、通信量の節約など不要な入札を行わないデマンドもいます

つまり、フロアプライス以上・以下の入札条件が異なるので、1stプライス全体の確率分布を推定する際は、フロアプライス以上のデータを使ってください

②固定価格入札や異常値を除く

実際に過去の入札ログを眺めるとわかるのですが、特定の入札額における入札が多い場合が散見されます

デマンドによっては固定額で入札する場合や、フロアプライスで入札するデータが多かったりします

したがって、前後の値と明らかに違う場合は一般極値分布で回帰する際に除外したりします

回帰・最適なフロアプライス

以上の前処理を行って、回帰処理を行った結果を下記に示します

image.png

図4において、赤い点が1stプライスのヒストグラムを表し、青い線が一般極値分布で回帰した結果になります

一般極値分布自体1stプライスをよく表していて、図4を見る限りフロアプライスをもっと下げた方が収益が上がるということが見て取れます

まとめ

今回、収益を最大化するようなフロアプライスの算出方法についてステップを踏んで紹介しました

まずは、単体のオークションにおける最適なフロアプライスを計算し、より現実に近い複数回のオークションにおける最適なフロアプライスについても計算をおこないました

ここで最適なフロアプライスを算出するためには、1stプライスの確率分布を推定することが重要になり、一般極値分布というものを導入しました

最後に、実際に計測されるログに対して一般極値分布を適用して、その妥当性について確認を行いました

今回は過去の計測結果を元に分布の作成したのですが、今後は曜日や移動平均を元に1stプライスの確率分布を予測するような形での応用も期待できます

さいごに

丁寧に説明しようと思ったのですが、時間が足りず詳細をだいぶ省いたり、文字だけのわかりにくい説明になってしまったかも知れません。。。

もしもっと詳細について知りたい方がいれば、Twitter(@b0941015)やメール(b0941015@gmail.com)等で直接ご連絡くださいm( )m