Rで実施するマーケティング・ミックスモデリング
RobynというRのパッケージでマーケティング・ミックスモデル(MMM)が簡単に、かつ、高速に、かつ、かなりアクション実行に直結するようなアウトプットを出せる形で実行できるため、一部抜粋にはなるのですが、ご紹介をしたいと思います。
使用するパッケージとコードは以下のサイトから取ってきたものを私の環境で実施したものです。RobynはFacebookのマーケティングサイエンスチームが開発したOpenSourceのR言語ベースのパッケージです。
早速なのですが、アウトプットとして出てくる内容がかなり有用なので、その中でも特に良いと思ったものについて今回は紹介していきます。
まず使用していくデータは以下のような週単位に集約されたデータで、今回は売上を予測していくモデルを作っていくことを前提にします。予測対象についてはRevenueなのですが、CVにしても実施可能です。
投資している金額のシェアと実際に売上に与えている影響のシェアとROI
このグラフかなり強力でして、解釈は以下のようにします。
広告チャネル別の支出金額のシェア(Spend Share)と影響の程度のシェア(Effect Share)、ROIの関係性を示すグラフ
この例だと、ROIが100%を超えているPrint広告(新聞やマガジン広告)が支出シェアが8.5%に対して、影響のシェアが20.1%と高く、伸びる可能性が高い。一方で、Facebookは支出が多い(18.2%)ものの、実際に売上に与える影響は0%と全く存在しない結果となっている(いわゆるさちった状態)
モデルの予測と実際の値の差
予測したい数値(今回は売上)が、どの程度予測できているかを示すグラフ
この例だと、破線の予測(Predicted)が線の実際値(Actual)に近似しているようにみえるため、係数上もR^2が0.94と高く、ブレを表すNRMSEが0.05と低い結果となりました。
最適な予算配分シェアと実際の予算配分のシェア
これもかなり強力です。このグラフが導き出している結論は、
支出をそのままとして最適な予算配分をすると、今よりも32.1%売上があがる
となっているからです。そのためには、OOH(看板広告のようなイメージ)を現状の40.8%から28.5%までトータルの予算シェアを減らせという所まで右のグラフは提案してくれています。
実際にコードで以下のようなものを実行していくのですが、アウトプットが出てくるたびにアクション可能なイメージがどんどん浮かび上がってきます。皆さんもぜひ、体感してみてください。
InputCollect <- robyn_inputs(
dt_input = dt_simulated_weekly
,dt_holidays = dt_prophet_holidays
,date_var = "DATE" # date format must be "2020-01-01"
,dep_var = "revenue" # there should be only one dependent variable
,dep_var_type = "revenue" # "revenue" or "conversion"
,prophet_vars = c("trend", "season", "holiday") # "trend","season", "weekday" & "holiday"
,prophet_country = "DE"# input one country. dt_prophet_holidays includes 59 countries by default
,context_vars = c("competitor_sales_B", "events") # e.g. competitors, discount, unemployment etc
,paid_media_spends = c("tv_S","ooh_S", "print_S" ,"facebook_S", "search_S") # mandatory input
,paid_media_vars = c("tv_S", "ooh_S" , "print_S" ,"facebook_I" ,"search_clicks_P") # mandatory.
# paid_media_vars must have same order as paid_media_spends. Use media exposure metrics like
# impressions, GRP etc. If not applicable, use spend instead.
,organic_vars = c("newsletter") # marketing activity without media spend
,factor_vars = c("events") # specify which variables in context_vars or organic_vars are factorial
,window_start = "2016-11-23"
,window_end = "2018-08-22"
,adstock = "geometric" # geometric, weibull_cdf or weibull_pdf.
)