はじめまして、AI事業本部 小売セクターでデータサイエンティストをしている早川(@qiringji)です。入社してから早くも2年が経ちました。

今回は広告効果の評価に関する課題感とその解決策について、小売セクターで扱うO2O広告と紐付けつつ整理してみます。この内容は5/28開催のサイバーエージェント 技術カンファレンス CA BASE NEXTで発表する内容のスピンオフ的内容になっております。

トピックが若干散乱しており長文ではあるのですが、お付き合いいただければと思います。

目次

  • O2O広告と小売DX事業
  • (O2O)広告の評価の難しさ
  • A/Bテストとその違和感
  • 薄まった効果:non-compliance
  • 操作変数法の概要と実践
  • 海外小売領域での操作変数法を用いた分析事例
  • おわりに

O2O広告と小売DX事業

本稿の出発点としてO2O(Onlne to Offline)広告にまつわるデータサイエンスの話をします。 ここではO2O広告はオンライン接点からオフラインへ送客・購買促進をする広告全般を指すこととします。O2Oというのは古い言葉のようで、Google Trendで調べてみると2013年ごろに騒がれつつも現在ではあまり頻繁に聞く言葉ではないようです。

こうした言葉のトレンドとは別に、コロナ以前の市場調査では市場規模は拡大していくとの結果が出ています。コロナ以降でも生活必需品を中心としたマーケティング活動のなかには組み込まれていくのではないかと私は考えています。特にサイバーエージェントでも力を入れている小売領域にデジタル化事業の文脈においては、店舗での購買促進を目的としたデジタル広告は重要な事業の一つで、 家電量販店コンビニエンスストアのデータを活用した広告商品づくりも進めています。

(O2O)広告の評価の難しさ

データを活用してよりよい広告配信戦略を立案・実施することはデジタル広告分野の代表的なデータサイエンスの役割です。そしてビジネスの現場では実施された広告配信がよかったのかという評価が日々行われます。こうした評価はデータサイエンスにとっても重要で、たとえば機械学習の損失関数・最適化問題の目的関数の設計に関わってきます。

デジタル広告の分野での代表的な評価方法としては獲得成果一件あたりのコストであるCPA(Cost Per Action/Acquisition)があります。CPAはその計算の背後にどの広告がどの成果につながったかという、広告と成果の紐付け(アトリビューション)の考え方が含まれているのが一般的です。アトリビューションにはさまざまなルールがありその詳細な種類については本稿では深く触れませんが、例えば広告クリックのリダイレクトでアプリがインストールされたら成果、というルールで広告と成果を紐づけていた場合、直感的に成果として認めても良いのではないか?という気がします。

アプリインストールやECサイトであればオンライン広告からのリダイレクトによって商品ページに飛べますが、O2O広告の場合広告から店舗購買への直接の経路はあり得ません。つまりどの広告が成果に紐づいたかを決めるのはより難しく、解釈も容易ではなくなります。また特定の紐付けルールの元で機械学習タスクなどを解く場合は本来行いたい最適化とかけ離れていく場合があります。

納得ができるアトリビューションの定義が難しい状況において、アトリビューションを考えないような広告配信の評価をしていく動機が生まれます。以下ではデジタル広告全般に適用できる代表的な評価方法としてA/Bテストを紹介します。

A/Bテストとその違和感

広告そのものの効果を正しく測るための方法としてA/Bテストは強力な方法です。ここでいうA/Bテストとはユーザを無作為に配信群と非配信群に分けて広告を配信し、2群の成果を比較することで広告効果を計測する方法のことで、より厳密にはRCT(ランダム化比較試験)と呼ばれるものです。基本的にはバイアスなく広告の因果効果を推定できるのでデータサイエンスの立場で評価をしたい場合には積極的に使用します。ビジネス的な場でもきちんと理解が得られれば運用・改善の良い指標となるはずです。

次のような状況を考えてみましょう。配信群と非配信群それぞれ1000人ずつ用意して配信群のみに対して広告配信を行いました。配信終了後各群の購買状況を集計します。配信群では200人が一件ずつ、非配信群では100人が一件ずつ購買したとします。一人当たりの購買数は0.2 vs 0.1となり広告配信によって一人当たり0.1回購買が増加したと推定できます。

ここで配信群1000人のうちの500人のみにしか広告表示が発生しなかったことがわかったとしましょう。これは配信ミスなどではなく、ユーザのスマートフォンをみる頻度が少なく広告接触しなかった、広告配信予算が限られていて全員に行き渡る前に配信が終了した、という場合など通常の広告配信で起こりうることです。しかしながら、広告が半分のユーザにしか当てられていない状態で「広告配信によって一人当たり0.1回購買が増加した」というのは少し違和感があるかもしれません。この違和感をもう少し深く掘り下げたいと思います。

薄まった効果:non-compliance

先の状況で知りたいのは、広告が実際に表示されたら一人当たり平均何件購買が増加するのかということです。仮に配信群全員に広告が当たるとしたらどうなっていのか、と置き換えても良いかもしれません。A/Bテストから得られた「一人当たり0.1回購買が増加した」という結果は広告を表示させようと試みたことの効果であり、広告が表示されたことの効果ではありません。

こうした事例は新薬の臨床試験などでは古くから問題として認識されています。被験者が服薬をするはずだったにもかかわらずしなかった場合に同じ状況となります。服薬指導を遵守しなかったという意味で、こうした状況のことをnon-complianceといいます。また、non-complianceがあった場合でも(それを無視して)各グループのユーザのデータを全て使って解析することをITT(Intent to Treat)解析といいます。

誰に広告表示があったかを考えない状態でのA/Bテストの各グループ間の比較はITT解析と言えます。つまり先ほどの「一人当たり0.1回購買が増加した」というのはITT解析の結果です。ITT解析では薄まった結果が得られますが、一方でその強みは無作為性を保てることにあります。安易に配信群のなかで広告表示があったユーザだけを取り出して非配信群と比較すると、無作為性は失われます。広告表示されやすいユーザほど購買をしやすい、というバイアスが存在した場合には過剰な広告効果を報告してしまうリスクがあり、広告表示されにくいユーザほど購買しやすかった場合には過小な広告効果を報告してしまうリスクがあります。

一方でnon-complianceにより見かけの広告効果が薄まっている状況の解決はどうするべきでしょうか。広告が実際に表示されたことの効果はどのように検証すれば良いのでしょうか。

操作変数法の概要と実践

解決策のひとつとして操作変数法(Instrumental Variables Estimation)を紹介します。

本稿では数式を用いた定義は省略しますが、操作変数法のアイデアを今回の状況に合わせて平たく説明すると、

  • 広告表示と購買が観測できない別の要因によって相関しているような状況下で、
  • (無作為である)広告配信群にアサインされたかという情報を使って、
  • 広告表示が購買に与える直接の影響を検証する

という方法になります。

これを以下の図でもう少し詳しく説明します。図中の矢印は各要素が影響を及ぼしていることを表しています。

広告表示と購買が観測できない別の要因によって相関しているような状況下とは、前節でのバイアスが存在している状況です。例えば若者であるほど、デジタル広告と接触しやすい。若者であるほど購買しやすい、といったことが考えられるとします。実際には③の効果を知りたいのに観測されない他要因(若者かどうか)の影響が乗ってしまい評価が難しくなります。

このバイアスを除くために広告配信群にアサインされたかの情報を使います。広告配信群にアサインされるかどうかは無作為に決まるため、他要因とは相関がありません。すなわち広告配信群へアサインされたかどうかの購買への影響は、広告表示を通してのみ発生すると言えます。

そこで①広告配信群アサインの広告表示への影響(注:ここでは平均処置効果のこと)、②広告配信群アサインの購買への影響をそれぞれ推定して、その二つの推定量から③の直接的な効果を推定します。 実際に②/①が③の効果の一致推定量になることが知られています。(注:実際には広告配信群にアサインした場合に広告が表示されるユーザについての効果で局所的平均処置効果と呼ばれます)

iv_abst

実際にPythonを用いて前述の事例を人工データで再現し、操作変数法の適用で評価がどう変わるかをみてみたいと思います。

設定に合うようにデータを生成します。正の値を取る他要因(Confounding)と0か1の値を取る広告表示(Imp)、広告配信群アサイン(Assign)、購入(Purchase)を生成しました。1がそれらがあったこと、0はなかったことを示します。

import numpy as np
import pandas as pd

np.random.seed(1)
data = pd.DataFrame(np.abs(np.random.multivariate_normal([0.0, 0.0], [[1.0,0.7],[0.7, 1.0]], size=2000)), columns = ['Confounding', 'Imp'])
data['Assign'] = np.hstack([np.ones(1000), np.zeros(1000)])
data['Imp'] = np.argsort(data['Assign'] * data['Imp']).map(lambda x: 0.0 if x < 1500 else 1.0)
data['Purchase'] = data['Imp'] + data['Confounding']
P1 = np.argsort(data['Purchase'].head(1000)).map(lambda x: 0.0 if x < 800 else 1.0)
P0 = np.argsort(data['Purchase'].tail(1000)).map(lambda x: 0.0 if x < 900 else 1.0)
data['Purchase'] = pd.concat([P1, P0])
data.head()

data_example

生成しているコード自体はやや強引で読みにくいですが、

  • 広告配信群と非配信群が1000サンプルずつ存在する
  • 広告表示(Imp)は配信群で500サンプルのみ発生する
  • 購入は配信群と非配信群でそれぞれ200サンプル, 100サンプル発生する

ようになっており、設定通りであることがわかります。また広告配信群へのアサインと他要因(Confounding)の相関は小さいことも確認できます。

 

#各群1000サンプルずつであることの確認
data.groupby('Assign').count()

data_count

#広告表示数、購買数、他要因の和の確認
data.groupby('Assign').sum()[['Imp','Purchase', 'Confounding']]

imp_cv_stats

#広告配信具へのアサインと他要因の相関が小さい
np.corrcoef(data['Assign'], data['Confounding']

correlation

広告表示が発生するかと購買が発生するかどうかには強い相関が現れます。単純な集計による差分は0.27となります。

data.query('Assign == 1.0').groupby('Imp').mean()['Purchase']

biased_comparison

これを操作変数法により分析してみます。前半がOLS(最小二乗回帰)によるITT解析、後半が操作変数法です。ITT解析では前述のとおり一人当たり0.10回購買が増えた、ということが確認できます。一方で操作変数法による推定値では一人当たり0.20回の購買が増えたということが確認できました。また、広告表示を受けた人と受けなかったひとの単純な比較は0.27だったので過大評価となっていました。

import statsmodels.formula.api as smf
from linearmodels.iv import IV2SLS

print('----ITT analysis----')
itt = smf.ols("Purchase ~ 1 + Assign", data=data).fit()
param = itt.params['Assign']
se = itt.bse['Assign']
p_val = itt.pvalues['Assign']
print(f"Parameter: {param}")
print(f"95% CI: {(-1.96*se,1.96*se) + param}")

print('----Instrumental Variables----')
iv = IV2SLS.from_formula("Purchase ~ 1 + [Imp ~ Assign]", data=data).fit()
param = iv.params['Imp']
se = iv.std_errors['Imp']
p_val = iv.pvalues['Imp']
print(f"Parameter: {param}")
print(f"95% CI: {(-1.96*se,1.96*se) + param}")

iv_result

操作変数法での解析により薄まっていた効果から、広告表示することによる効果を取り出すことができました。

これはビジネスの現場においてどう役に立つでしょうか?薄まった効果をクライアントに報告するリスクを防げるかもしれません。また、予算の限界によって広告表示が少なくなってしまっているのであれば予算を増額した際の広告効果のおおまかな見積もりに役に立つかもしれません。いずれにせよこうした手法は少し難解なので、顧客理解を深めながら分析結果を共有することが必須になってくると言えます。

海外小売領域での操作変数法を用いた分析事例

最後に海外小売領域での操作変数法を用いた分析事例として以下の論文を簡単に紹介します。

D. J. Zhang et al. The Value of Pop-Up Stores on Retailing Platforms: Evidence from a Field Experiment with Alibaba, Management Science (2019).

これはAlibabaでの事例で、実店舗のポップアップストアへの来店経験が、その後のオンラインでの購買行動にどう影響を与えたのかを検証しています。

まずポップアップストアの認知のためにアプリで開催の案内のテキストメッセージを送ります。全体のユーザをメッセージを送る群と送らない群に事前に振り分けており、無作為に選ばれた一部のユーザにはメッセージが送られません。ストアの存在を認知したユーザのうち一部が実際にポップアップストアに来店します。ユーザがポップアップストアに来店したかどうかはWi-Fiを用いて計測できるようになっており、来店前後のオンラインでの行動と紐付けて分析が可能です。

実験では、ポップアップストア来店がオンラインでの検索や購買に与える効果を検証することに興味があります。しかし一般にポップアップストアにわざわざ来店することとオンラインでの購買には強い相関がありそうです。そこでZhangらは操作変数法を適用し、メッセージを送る群か、という無作為性をもった情報を利用してポップアップストアに来店することの効果を推定しています。

今回、Online to Offline広告の効果検証の課題感から操作変数法の紹介に至りましたが、こちらはOffline to Onlineな効果検証として参考になる事例と言えます。

最後に

今回はCA BASE NEXTで発表する内容のスピンオフとして操作変数法の適用事例を簡単に紹介しました。今回紹介した広告領域だけでなく、小売DXの事業領域においてデータサイエンス課題はたくさんあります。そんなタスクを解きたい方や新たに定義し遂行していきたい方も絶賛募集中です。

【採用強化中】サイバーエージェントでは、140兆円の小売業界をデジタルで再発明するため、覚悟ある仲間を募集しています。

 

小売の事業としてどういったことをやっているの?どういう人がいるの?という方は5/28開催のCA BASE NEXTをぜひご覧ください。Youtube Liveでの開催ですのでリアルタイムでなくてもご覧になれます。

O2O広告のためのデータサイエンス

O2O広告のためのデータサイエンス

140兆円の巨大市場、小売業界の再発明に挑む開発プロジェクト

140兆円の巨大市場、小売業界の再発明に挑む開発プロジェクト

140兆円の巨大市場、小売業界の再発明に挑む開発組織

140兆円の巨大市場、小売業界の再発明に挑む開発組織

事業立ち上げにデータサイエンティストは必要なのか?

事業立ち上げにデータサイエンティストは必要なのか?

来店促進のためのデフォルメ地図広告自動生成に関する取り組み

来店促進のためのデフォルメ地図広告自動生成に関する取り組み