inFablic | Fablic, inc. Developer's Blog.

フリマアプリ フリル (FRIL) を運営する Fablic の公式開発者ブログです。Fablic のデザイナー・エンジニア・ディレクターが情報発信していきます。

全国放送のCMで都道府県ごとのCPIを推定する

こんにちは。shobyです。

フリルでは現在全国でCMを放送しており、各CMの効果計測をする必要が生じています。

今回は、CMの費用対効果を測るために、都道府県ごとのCPIを推定する方法をお伝えします。

概要

  • CM投下の最適化粒度
  • 推定CPIと相対比較
  • 都道府県ごとのインストール数を集計する
  • CMによるインストール増加数の推定
  • 都道府県別の推定CPIを活用する

CM投下の最適化粒度

CM投下の最適化に関しては、主に以下の4段階の粒度が存在します。

  1. 都道府県の最適化
  2. 曜日の最適化
  3. 時間帯の最適化
  4. 番組の最適化

今回は、一番粒度の大きい都道府県単位での最適化の話をします。

より効果の高かった都道府県のCM投下量を増やすことが目的です。

推定CPIと相対比較

都道府県単位でのCM投下の最適化には、推定CPIを指標にして相対比較を行います。

CMの費用対効果を測るには、一般的な広告と同様にCPI(Cost Per Install)を指標として用います。 しかし、CMはデジタル広告と異なり、厳密な意味で広告の影響があったインストールの数を計測することができません。

そのため、CMによるインストール増加数を推定することで推定CPIを出し、都道府県ごとに相対比較します。

相対比較であれば、厳密なCPIが求められなくても、CMの投下地域を最適化するための判断材料として利用することができます。

都道府県ごとのインストール数を集計する

FirebaseとBigQueryを利用することで、アプリのインストール元地域を割り出し、集計することができます。

詳細はこちらの記事に書きましたのでご参照ください。

in.fablic.co.jp

CMによるインストール増加数の推定

CM前の期間から通常値(ベースライン)を推定し、ベースラインとの差分をCMによるインストール増加数として考えます。以下の図をご覧ください。

f:id:shoby:20170712201615p:plain

TV Attribution: Measure the impact of TV advertising on your web traffic より引用

図のように、ベースラインが推定できれば、CMによるインストール増加数を測ることができるのが分かると思います。

ベースラインの推定

ベースラインの推定には、RでCausalImpactというGoogle製のpackageを利用します。

google.github.io

CausalImpactは、時系列データにおけるキャンペーンの影響を推定できるpackageです。 キャンペーンの影響を受けたデータに対して、キャンペーンの影響を受けていないデータを元に、キャンペーンの影響を推定できます。

今回は、以下の値を元にCM放送というキャンペーンの影響を推定しました。

  • キャンペーンの影響を受ける値:1日単位のインストール数
  • キャンペーンの影響を受けない値:1日単位の取引完了ユーザー数

フリルの場合、取引完了ユーザー数は、サービスの規模と連動しますが、CMの影響がすぐには反映されないことが事前に分かっていたため、キャンペーンの影響を受けない値として利用しました。

実際にインストール数への影響を推定するコードは以下の通りです。

library(forecast)
library(CausalImpact)

# 外れ値の補正  
cleaned_install_count = tsclean(install_count)

# 影響を受けていない期間と、受けている期間を指定
pre.period <- c(1, cm_start_index - 1)
post.period <- c(cm_start_index, cm_end_index)

# 影響の推定
data <- cbind(cleaned_install_count, order_user_count)
impact <- CausalImpact(data, pre.period, post.period)

plot(impact)

CM期間中には、相乗効果を狙った別のキャンペーンを行うことがあり、インストール数にスパイク状の外れ値が乗ることがあるので、今回はforecastのtsclean関数を使って外れ値を除く前処理を行いました。

実際のplot結果は以下のようになります。

f:id:shoby:20170712202855p:plain

図の一番上がベースラインと実測値、真ん中がベースラインを引いた差分だけ、一番下がベースラインからの差分の累積値です。*1

ベースラインからの差分の累積値を用いることで、CMの影響によるインストール増加数を推定でき、CPIを求めることができます。

total_uplifted_install_count <- max(impact$series$cum.effect, na.rm=TRUE)
cpi <- cost / total_uplifted_install_count

この処理を都道府県ごとのインストール数データに対してそれぞれ適用することで、都道府県別の推定CPIを出すことができます。

都道府県別の推定CPIを活用する

都道府県別の推定CPIを比較し、より費用対効果の高い地域へのCM投下量を増やすことで、同じ広告費でもCMの効果を高めることができます。

特にCMは多額の広告費を用いて、サービスを短期間に成長させることを狙って行うため、CM効果の最適化は、サービスの成長に直結します。

サービス成長のために、より詳細なCM効果分析をしてみてはいかがでしょうか。

また、フリルでのCM分析に関しては、現在進行形で研究中なため、より効果的なCM分析手法があれば、ぜひ共有お願いします。

まとめ

今回は、都道府県単位での分析を行い、より効果の高かった都道府県のCM投下量を増やすことを目的として分析を行いました。

都道府県単位での最適化を行うには、都道府県別の推定CPIを出し、相対比較をします。 CMにより増加したインストール数を推定することで、推定CPIを出すことができます。

CMにより増加したインストール数を推定するには、CM前の期間からベースラインを推定し、ベースラインからの差分を求めます。 ベースラインの推定には、CausalImpactというR packageを利用します。

都道府県別の推定CPIを利用することで、同じ広告費でも高い効果を発揮し、サービスの成長に繋げることができます。

謝辞

この記事を書くにあたり、以下の記事の手法、コードを参考にさせていただきました。ありがとうございました。

*1:青い領域が95%信頼区間