MMM(マーケティングミックスモデル)をRobynでやってみた
この記事は?
マーケティングミックスモデル(MMM)を、facebookが開発しているRライブラリ(Robyn)でやってみた記事です。
MMMとは?
MMMを何のために使うか?
広告を出している企業にとって、チャネルごとの適切なコスト配分は最も気にするポイントですよね。であれば、過去の実績からその問いに答えられるのではないでしょうか。
MMMは何を行うのか
一般的には、売上データと各種チャネルの投資額、その他売り上げに影響を及ぼすさまざまな要因の時系列データの間の関係を仮定し、その仮定のもとで売り上げを各チャネルの貢献量に分解するアルゴリズムです。
たとえば、ある企業が、Web広告、交通広告、TV広告を出していて、売り上げにそれぞれどれだけ貢献しているかを把握したがっているとします。これらのデータだけでも売り上げへの貢献量を各チャネルに分解できるでしょう。
しかし、この企業がアイスクリーム屋だとすると、夏場に売り上げが上がることになりますが、このままだとこの売り上げの向上量も各広告の効果であると解釈されてしまいます。であれば、気温データを追加して、この気温による効果による売り上げ貢献もあると仮定することが良いでしょう。
このように様々な時系列データを追加して、売り上げを様々な効果に分解していくことがMMMの行っていることです。*1
RobynでMMMやってみた
チュートリアルでの問題設定
Robynのチュートリアルでは、次の仮定を置いて問いに答えようとしています。
例えば、Facebookへの投資額は、インプレッション数に影響を与え、インプレッション数がさらに売り上げへ影響を及ぼすと考えます。このように、広告の投資額から売り上げへ直接の効果を考えるのではなく、中間の指標を用いることによってモデルの精度が上がる場合があります。
実際に分析していくデータは次のようなものです。
時系列データのカラム定義を次にまとめます。
カラム名 | 説明 |
---|---|
DATE | 日付 |
revenue | 売り上げ |
tv_S | TV広告への投資量 |
ooh_S | OOH広告への投資量 |
print_S | 印刷媒体広告への投資量 |
search_S | 検索エンジン広告への投資量 |
facebook_S | Facebook広告への投資量 |
search_clicks_P | 検索エンジンでの広告のクリック数 |
facebook_I | Facebook広告のインプレッション数 |
competitor_sales_B | ある同分野競合他社の売り上げ |
ほとんど上記で置いた仮定と対応したカラムです。competitor_sales_Bは業界全体に影響を及ぼす効果をこれで測定できるとします。
プログラムの実行
ここはRobynのドキュメントに従って実行しただけです。
アウトプットの解釈
Robynは様々なプロットを出してくれます。これらを見ていけば売り上げの各要因の寄与と、モデルの妥当を確かめていくことができます。
問いに答えるためのアウトプット(クライアントに見せる系)
各要因の売り上げへの寄与割合
全期間で平均したときの各要因の売り上げへの寄与割合です。 図からわかることは、
- 広告全体による売り上げの寄与割合は約20%でした。つまり、広告を出さなかったらおそらく売り上げは8割になります。
- 検索エンジンの寄与は0%でした。このチャネルには投資しなくてよさそうです。
などがわかります。
時系列での各要因の売り上げへの寄与量
時系列で各要因の売り上げへの寄与量を確かめてみます。 時系列でみて特徴的な部分がわかります。
- 12,1月が売上のピークで、4,5月が谷のようです。(なんの企業なんでしょうね?)
- ときどき絶大な効果を持つ休日があります。なぜ売り上げが上がっているかを深堀すれば、広告の施策に生かせるかもしれません。
各チャネルのROI
各チャネルの効率性を表す図です。全期間での投資量の合計に対して、売り上げへの寄与量が上回っていれば1より大きくなります。
- 印刷媒体は投資量は最も少なかったですが、効率性は最も高いです。ここには投資額を増やしてもよさそうですね。
- 逆にOOH広告、Facebook広告、検索エンジン広告は効率性が1より小さいので投資額を減らすべきでしょう。
ここでの注意点は、この図だけでは最適な投資配分が決められないということです。広告の投資額とリターンの関係は、diminidhing returnであると仮定されることが一般的です。つまり、投資額が小さいうちは効率が良く、投資額が大きくなると効率が悪くなります。 よって、最適な投資配分を求めるためには、このグラフを各チャネルに対してプロットする必要があります。
各チャネルの反応曲線
各チャネルの反応曲線をプロットしました。*2
列が各チャネル、上段のピンク色の線が反応曲線、上段の青線が利益、下段がROIです。よって、最適な投資額は青線が最も上に来たときの横軸となります。印刷媒体は21290であると読み取れますね。(他はプロットの仕方が悪く、つぶれてしまってよくわかりません。。。)
反応曲線を描ければ、残りの2つも描けます。投資額がであるときの利益は、反応曲線を0からまで積分した値からを引けば求められます。また、ROIは反応曲線の微分です。
最適コスト配分
最適な投資配分です。注意点としては検索エンジンチャンネルは効果0なのでうまく計算できず、それを取り除いた前提でのプロットです。 上でROIを確認し、TVとFacebookチャネルは効率が低く、ほかの2つが高いことがわかっていたので、それと整合している結果になっています。トータルのコストを変えることなく、1.3%の売上額向上が見込めそうです。
分析の妥当性を確かめるためのアウトプット(分析者が裏で確かめておく系)
売り上げデータの当てはまり
一般的な時系列モデルの性能の確かめ方は、ある時点までのデータからモデリングして、その時点以降のデータにどれだけ当てはまっているかで評価します。まずはモデルが出力する売り上げデータと実績を比べてみましょう。 テストデータに対するMAPEは約10%でした。売り上げが数千万単位の10%なので、十分な性能といえるでしょう。
残差プロット
予測と実績の差を残差といいます。この残差を3つの観点でプロットしてくれます。 残差分析では、さらにモデルの性能を上げるためのアイデアが得られることがあります。例えば、今回は観測値が極端な部分で予測精度が悪くなる傾向がみられます。これを予測できるような要因を思いつけば、それを観測してモデルに組み込むことによりモデルの性能が上がることがあります。
感想とまとめ
Robynを使用すれば、各種時系列データをインプットすることにより、MMMに必要なアウトプットが一通り得られました。
便利だと思う一方、まだドキュメントが充実してなかったり、プロットがすごくみにくいのが難点かなと思いました。中身のアルゴリズムに関してはこれから勉強して聞こうと思います。