MoTLab -GO Inc. Engineering Blog-MoTLab -GO Inc. Engineering Blog-

因果推論によるマーケティング効果推定

AI
August 24, 2021

MoTでは、さまざまな施策の効果をデータ分析によって計測し、次の施策に繋げています。本記事ではその例の一つとして、統計的因果推論を用いたマーケティング施策の効果推定事例を紹介します。


AI技術開発部アルゴリズムグループの老木です。タクシーアプリGO では TV 広告や看板など、さまざまな手段を通じて、GO の取り組みをユーザーの皆様にお伝えしています。そのコミュニケーション手段の一つがアプリの push 通知です。

今回、ご紹介するのは「雨の日 push 通知」と呼ばれる、雨が近いタイミングで AI 予約の利用を促す push 通知です。雨の日は需要の高まりからタクシーが不足しがちなため、AI 予約の利用による不意の乗れない状況の回避を促進しています。

An image from Notion

push 通知は送るタイミングやメッセージ内容によりユーザーの反応が異なるため、どのような push 通知が効果的かを測定する必要が出てきます。

効果測定の基本は A/B テスト

効果測定の理想的な手段は A/B テストです。A/B テストでは、ユーザーをランダムに二つのグループに分け、片方に push 通知を送り、もう片方に送りません。この二つのグループ間の振る舞いの差を見ることで、push 通知がユーザーに与えた影響を計測します。

例えば、ユーザー ID の下一桁が偶数ならグループA, 奇数ならグループBとして、push 通知をグループ A にのみ送ります。グループ A の購入率が5%, グループ B の購入率が 3% であれば、push 通知によって 2% 購入率がアップしたと言えます。

しかし、今回分析対象としている 雨の日push 通知は対象となるユーザー全員に送付されており、A/B テストが実施できません。

なぜ A/B テストをしなかったのか?

A/B テストをしない / できない理由はさまざまです。例えば、法改正の効果測定であれば、人によって違う法律を適用するのは不可能です。また、push 通知を一部のユーザーに送らないことで売り上げの絶大な低下が見込まれる場合は、実施が躊躇われるでしょう。

では、今回の雨の日 push 通知はなぜ A/B テストをしなかったのでしょうか? これは、単純に効果測定を考慮していなかったためです。過ぎたことは仕方がありません。今後は A/B テストをするとして、過去に送った通知の効果を計測しないのは少しもったいないです。

そこで統計的因果推論の出番となります。

push 通知の時間差を利用した効果測定

push 通知はインフラの都合上、数時間かけて徐々に送信されます。今回はこの送信時間差に注目しました。例えば、16時から20時まで4時間かけて push 通知を送信していた場合、18時時点では、push 通知を送られているユーザーと送られていないユーザーが存在します。よって、

グループ A : 18時までに push 通知が送られたユーザー

グループ B : 18時までに push 通知が送られていないユーザー

とし、18 時までの行動の差を観察することで push 通知の効果を推定することができます。

ここで、グループ A の購買率が 10%, グループ B の購買率が 8% だったとき、push 通知の効果は 2% の購買率上昇と言えるでしょうか? 残念ながら答えはノーです。push 通知は完全にランダムな順序で送信されていないため、グループ A とグループ B で元々の (push 通知を送らなかった際の) 購買率が異なります。

グループ A は早めに push 通知が送られたグループですが、傾向として昔からサービスを利用しているユーザーがグループ B よりも多いです。下図は、各グループのユーザーがアプリ利用開始から何日経っているかの分布です。グループ A の方が経過日数が長いユーザー、つまり昔からサービスを利用しているユーザーが多いことがわかります。

今回の push 通知対象では、利用期間が長いユーザーは短いユーザーと比べて利用が活発でない傾向がありました。よって、単純にグループ A とグループ B の購買率を比較してしまうと、push 通知の効果が低く見積もられてしまいます。

An image from Notion

ここでは紹介しませんが、他にもグループ A と B では条件の差異がありました。統計的因果推論では、このような条件の違いを補正する手法が整備されています。今回は、傾向スコアによる重み付けや回帰分析を用いて、このような条件の違いを補正し、雨の日 push 通知の効果を推定しました。

統計的因果推論の実行

統計的因果推論ライブラリとして、今回は Microsoft 製ライブラリ dowhy を用いました。 dowhy を用いることで、傾向スコアによる重み付けの適用や、bootstrap 法による効果量の信頼区間算出が簡単にできます。

model = CausalModel(
    data=df.copy(), # DataFrameを書き換える問題があるのでcopyして渡す
    treatment="treatment",
    outcome="outcome",
    graph=gml
)
identified_estimand = model.identify_effect()
estimate = model.estimate_effect(
    identified_estimand, method_name="backdoor.propensity_score_weighting", 
    target_units="ate", 
		confidence_intervals=True # bootstrap法で信頼区間を求める (重い)
)
interval = estimate_logistic.get_confidence_intervals()

傾向スコアの導出にロジスティック回帰しか使えない制限がありますが、少しライブラリのコードをいじれば、他のモデルを用いることも可能です。

因果推論を用いて推定した push 通知の効果は下図の通りです。push 通知を送っていないグループB を 100 とした際の、グループ A の予約率を計測しています。 日によって、push 通知の効果が大きく違うことがわかります。それぞれの日の置かれた状況を精査することで、push 通知に何が重要かの新たな仮説を見出すことができます。

An image from Notion

結果

雨の日 push 通知の効果推定を統計的因果推論を用いて行いました。その結果、

  • push 通知直後の予約利用量の上昇
  • push 通知送信時の天気と効果の関係

などを量的に推定できるようになりました。一方で、A/B テストを行なっていないため、push 通知の長期的な影響といった項目は測定できませんでした。

統計的因果推論は制限もありますが、さまざまな場面での適用可能性を感じます。今後も、活用していきたいです。


We're Hiring!

📢
Mobility Technologies ではともに働くエンジニアを募集しています。

興味のある方は 採用ページ も見ていただけると嬉しいです。

Twitter @mot_techtalk のフォローもよろしくお願いします!