Feedforce Developer Blog

フィードフォース開発者ブログ

広告の複数媒体に対するCPA最小化・ROAS最大化となる予算配分を計算しよう

こんにちは 機械学習エンジニアの八百俊哉です。

今回は複数媒体へ広告を出稿する際に、多くの方が悩まれるであろう「各媒体への予算配分」に関して有効な配分手法を紹介します。

今回の記事で登場する広告用語

  • 媒体・・・広告の配信先や配信手法
  • ROAS・・・広告経由で発生した売り上げを広告費用で割った値(広告の費用対効果)
  • CPA・・・1件のコンバージョン(目標)を獲得するのにかかった広告コスト

広告運用者が抱える課題とは?

1つの媒体のみで運用している場合は別ですが、複数の媒体で広告配信を行っている場合は、どの媒体に対していくら予算を割り振れば良いのかわからない場合があると思います。

過去の実績を元に成果が良い媒体に対して、多く予算を割り振れば良いことは理解しているものの、「どれくらい」「どの媒体から」予算を割り振れば良いのかは経験則や簡単な分析で決めている方も多いのではないでしょうか?

今回はこれらの課題を解決するために、数学的に根拠のある予算配分方法について紹介しようと思います。

まず今回の手法を紹介するにあたり、例題がある方が話が進めやすいので以下の広告運用者さんを例に考えます。

広告運用者○○さん

現在A,B,Cの3媒体で広告配信を行っています。

全体のROASを高めるために予算配分を見直したいと考えています。

3媒体での合計予算は3万円です。

では、実際にどのようにして最適な予算を求めるのか見ていきましょう。

過去の実績から各媒体の実績をシミュレーションします

最初に過去の実績から各媒体での予算とROASの傾向を、式で表現します。

ここでROASを最大化するということは、限られた予算の中で売り上げを最大化すると言い換えることができるので、今回は  (予算,売り上げ) を2次回帰で近似します。

今回の例だと媒体A,B,Cに対してそれぞれ近似式が用意できるので以下のように表現できます。(各媒体の予算を x_1,x_2,x_3とします)

 \displaystyle
Aの売り上げ(x_1) = a_A x_1^2 + b_A x_1
 \displaystyle
Bの売り上げ(x_2) = a_B x_2^2 + b_B x_2
 \displaystyle
Cの売り上げ(x_3) = a_C x_3^2 + b_C x_3


予算が0円の時は、原点を通る(売り上げが0円)になるように切片は使用していないです。

ラグランジュの未定乗数法を用いて最適な予算配分を見つける

ラグランジュの未定乗数法とは?

ラグランジュの未定乗数法とは、

束縛条件のもとで最適化を行うための数学的な方法である。いくつかの変数に対して、いくつかの関数の値を固定するという束縛条件のもとで、別のある1つの関数の極値を求める

ja.wikipedia.org

少し小難しく聞こえますが、今回の例題に当てはめて考えてみます。

いくつかの変数に対して(各媒体の予算)

いくつかの関数の値を固定する束縛条件(3媒体の総予算は3万円)

別のある関数の極値を求める(3媒体の売り上げが最大となるポイントを求める)

ラグランジュの未定乗数法とは、上のような条件を満たす予算 x_1,x_2,x_3を見つけてくれる手法です。

ラグランジュの未定乗数法では、媒体A,B,Cのそれぞれの (予算,売り上げ) に対して近似式が二階微分可能である必要があるため、今回の例では2次回帰で近似を行いました。

また今回は、3媒体の総予算(束縛条件)が広告によって全て使用されるという仮説のもとで計算しています。予算を全て使わない場合は、計算が複雑になってしまうので今回は紹介しません。

実際にどのように計算するのか検証します

まず初めに束縛条件 x_1,x_2,x_3 を定義します。今回の束縛条件は、それぞれの予算 x_1,x_2,x_3を足し合わせたものが30000円になるということですので、以下のように書けます。

 
x_1 + x_2 + x_3 = 30000
\tag{1}


ここで式(1)を変換し、 g(x_1,x_2,x_3)とおきます。


g(x_1,x_2,x_3) = x_1 + x_2 + x_3 - 30000 = 0


また、今回最大にしたい3媒体の総売り上げを f(x_1,x_2,x_3)と置きます。


\begin{aligned}
 f(x_1,x_2,x_3) &= Aの売り上げ(x_1) + Bの売り上げ(x_2) + Cの売り上げ(x_3) \\
&= a_A x_1^2 + b_A x_1 + a_B x_2^2 + b_B x_2 + a_C x_3^2 + b_C x_3
\end{aligned}


ここで未定乗数 \lambda  f(x_1,x_2,x_3),g(x_1,x_2,x_3)を用いてラグランジュ関数 Lを作ります。


\begin{aligned}
L(x_1,x_2,x_3,\lambda) &= a_A x_1^2 + b_A x_1 + a_B x_2^2 + b_B x_2 + a_C x_3^2 + b_C x_3 - \lambda (x_1 + x_2 + x_3 - 30000)
\end{aligned}


それぞれの変数で偏微分すると以下のようになります。


\begin{aligned}
\frac{\partial L}{\partial x_1} &= 2 a_A x_1 + b_A - \lambda  = 0\\
\frac{\partial L}{\partial x_2} &= 2 a_B x_2 + b_B - \lambda = 0\\
\frac{\partial L}{\partial x_3} &= 2 a_C x_3 + b_C - \lambda = 0\\
\frac{\partial L}{\partial \lambda} &= - x_1 - x_2 - x_3 + 30000 = 0\\
\end{aligned}


これら4変数の4元連立方程式を説くと、予算30000円で総売り上げが最大になる予算配分 x_1,x_2,x_3が求まります。

今回は、ROASを最大化するための方法を紹介しましたがCPAを最小化する場合は2次回帰式を求める際に (cost,cv)としてcvを最大化するようにラグランジュを適応することで求めることができます。

また今回の例では3媒体までの予算配分を計算しましたが、媒体数を増やしても計算速度が極端に遅くなることがないところが今回の手法の良いところです。

この手法の課題点

ここまで「ネット広告の複数媒体に対するCPA最小化・ROAS最大化となる予算配分」を紹介しましたが、この手法には2つほど課題があります。

まず一つ目が、最適予算 (x_1,x_2,x_3)にマイナスの結果が得られる可能性があるということです。売り上げを最大化しようとするあまり、もともとROASが低い媒体に対しては予算を割り振らずにマイナスの予算を割り振り、そのほかのROASが高い媒体により多くの予算を割り振ろうとしてしまうことが確認できています。

次に、媒体の周期性や外部要因を一切考慮していないということです。広告は少なからず外部要因によって成果が左右されますが、この手法では過去の実績のみを用いて最適予算を割り振るので外部要因は一切考慮されていないということに注意が必要です。

まとめ

いかがだったでしょうか。 今回は、ラグランジュの未定乗数法を用いて複数媒体への予算配分方法を紹介しました。流石に手作業では計算できないので私はpythonで上記の流れを実装しています。

ラグランジュの未定乗数法は、理系の方は大学の数学の講義で習っていたかもしれないです。私も大学の時に習いましたが、当時は何に使うのか一切わかりませんでした。社会人になって学生の時に学んだことが活用できると、学んだ甲斐があったと感じることができて良いです。

最後まで読んでいただきありがとうございます。