前回述べたような課題がありながら、一方で具体的な方法論として一例を示すことは可能です。本稿はその方法の一例をあげ、具体的な分析の作業を紹介します。

MMMに必要なデータ

MMMの実行のためには過去の広告出稿とその応答(例として売上やコンバージョン数などの成果に係る指標)のデータが時系列で整理されていることが必要です。具体的なデータの例としては以下のような形式が考えられます。(データはこの記事の為に作成した完全なダミーデータです)

時系列は日次データであることが望まれます。仮に週次や年次データが必要な場合でも日次を集約することで対応できます。またその逆にログデータなどtimestampがあるデータがあればそれを元に日次データを作成できます。細分化された時間間隔はより大きいものを兼ねると認識していれば良いでしょう。timestamp→hour→day→week→quater→yearと変換できます。

MMMの手法

MMMの手法としては以下のモデルが考えられます。

グラフィカルモデルを除くモデルは広い意味で構造方程式モデリングに含まれます。説明変数に広告投下量を用い、応答変数に売上などの成果変数を用いてモデリングします。

モデルリング実践

手法としては今回は非線形多重回帰を用います。メリットとしてモデリングが容易であること、係数パラメータからROIを算出出来る事、構造方程式モデルへの拡張が可能な事が挙げられます。デメリットとしてはTV広告や新聞広告の投下量間での相関が高い場合多重共線性を引き起こす恐れがあることです。

モデル式

以下ではモデル式を記述します。約束事として

yt:=時間tでの売上

(TV)t:=時間tでのTV投下量、(新聞)t:=時間tでの新聞への広告投下量

m月dmy:=m月に相当する場合は1それ以外はは0を取る変数

e:=時間tでの誤差 (但し誤差正規分布に従い、全てのtで同じ分布とする。)

インクリメンタルパート

y(売上等)は広告投下に比例する部分(インクリメンタル)がありこれをインクリメンタルパートと呼びます。モデル式では

yt=β1*(TV)t+β2*(新聞)t+β0+e

と記述できます。

シーズナルパート

例えばビールは広告投下量とは無関係に気温に比例して売上が伸びると考えるのが妥当です。このような季節効果の部分をシーズナルパートと呼びダミー変数として利用します。

yt=β1*(TV)t+β2*(新聞)t+β3*(4月dmy)+β0+e

上記では例として4月のみですが、夏場に売上が上がる生ビール等の商材であれば、6/7/8月dmyとして3項追加します。

変数変換

広告と売上の関係はy=axのような一次関数になるという仮定は色んな意味で無理があります。通常広告費用はある一定を超えるとその成果は頭うちになります。実際に散布図を書いてみると分かるのですが広告投下量に対して売上は逓減していく形になります。これを表現するためにx→log(x)とします。これはy=a*log(x)のaがxが1%増加した時にyがa増加する事を意味します。

下図参照

yt=β1*log(TV)t+β2*log(新聞)t+β3*(4月dmy)+β0+e

上記の例では説明変数側のみlogを噛ませていますが、データとの整合性を見ながらyにもlogを噛ます場合もあります。

Adstock

TV広告などのマス広告は放送日以降までその効果が減衰しながら続くと仮定できます。その減衰効果をモデル式に加えます。(以下はTVのみにアドストックを考慮しています)

yt=β1*log(TV)t+β11*log(TV)t-1+β12*log(TV)t-2+….+β2*log(新聞)t+β3*(4月dmy)+β0+e

yt=β1*log(TV)t+Σβ1i*log(TV)t-i+β2*log(新聞)t+β3*(4月dmy)+β0+e

上の式2点間違いがありました。logを取る前にβ1iを乗する必要がります。またβ1は広くかかっている必要があります。以下修正です

yt=β1*(log(TV)t+log(β11*(TV)t-1)+log(β12*(TV)t-2)+….+β2*log(新聞)t+β3*(4月dmy)+β0+e

yt=β1*(log(TV)t+Σlog(β1i*(TV)t-i))+β2*log(新聞)t+β3*(4月dmy)+β0+e

上記式では2点問題があり、まずβ11>β12>…と減衰していく仮定が織り込まれていません。またパラメータ推定の際β11…β1mと仮定した期間分のm個のパラメータを推定しなければなりません。mが小さい場合は良いのですが大きくなると過剰に適合したモデルができる可能性があります。ここでλ^(m)=β1mと定義しモデルを

yt=β1*log(TV)t+Σλ^(i)*log(TV)t-i+β2*log(新聞)t+β3*(4月dmy)+β0+e 

yt=β1*(log(TV)t+Σlog(λ^(i)*(TV)t-i))+β2*log(新聞)t+β3*(4月dmy)+β0+e 

但し (0<λ<1)

とします。こうすることで上記2点の問題がクリアになります。

減衰させる期間mをどうするかという問題があります。これは顧客の担当者と打ち合わせを行い、納得感のある物を探すのがベターです。理想としてはm自身を推定すべきパラメータとしてモデルを比較する方法がありますが、ここでは話が複雑になるので立ち入りません。

パラメータ推定

モデル式ができたならば後はパラメータを推定するだけです。解くべき問題は実際の売上データYtに対して

誤差2乗和 argmin l(β1,β2,β3,β0,λ) = (Yt-yt)^(2)

を制約条件 0<λ<1の元で解く事です。

一方でλパラメータが複数の変数にかかっている為通常のRやPythonの回帰モデルのソルバーでは解けません。従ってExcelのソルバーなどで上記式を最適化計算で解きます。

しかしこれでも十分ではない場合があります。λの項はn乗根になっている為最適化の解が一意に定まらない場合があります。(2次関数は下に凸ですから最小値は1つであった事を思い出して下さい。一方で3次関数は関数の定義域によって最小値が異なります)

これに対処する方法として計算統計学的手法があります。具体的な内容はここでは割愛しますがこのような単純な回帰モデルの推定はさほど難しくなく実践できます。

予算最適化

得られたモデル式をyとします。そして予算制約と獲得すべき売上を制約条件として以下

argmax (y) (yはモデル式より得られた予想売上)

制約条件1 0<(TV投下量)<10000000 , 0<(新聞投下量)<5000000  (予算制約)

制約条件2 10000000<=売上 (売上制約 最低限確保しなければならない売上)

を解き得られた解が最適な予算配分となります。

MMMについてのご相談は株式会社Crosstab https://crosstab.co.jp までお願い致します。