🗂

A/Bテスト:来訪者だけで分析すると危険な理由

に公開

Webサービスやアプリの改善においてA/Bテストは欠かせない意思決定手段です。
しかし実務ではテストの設計は正しいのに分析のしかたで結論が壊れることが少なくありません。典型例が施策のあとに起きた行動(来訪、クリック、開封など)でデータを絞ってから比較してしまうケースです。たとえば「来訪した人だけ」を取り出し処置群と対照群を比べるといった分析です。
この記事ではまず観察データでなぜ単純比較が危ないのかを入り口に因果推論とA/Bテストの最小限の前提を整理します。そのうえで多くの人がやりがちなサイト来訪者だけで比較する分析がなぜ危険なのかを説明します。

1. なぜ観察データの単純比較は危ないのか

まず以下のように整理します。

  • 処置(treatment):施策を受けたかどうか
    T=1 が施策あり、T=0 が施策なし
  • 結果(outcome):見たい指標(売上、購入、継続など)
    これを Y と書きます。

観察データでやりがちなのが次の差を施策の効果とみなすことです。

\mathbb{E}[Y \mid T=1] - \mathbb{E}[Y \mid T=0]

しかし現実には施策Tはランダムに決まっていないことが多いです。たとえば

  • 元々ロイヤルな人ほどクーポンが配られる
  • 離脱しそうな人にだけ通知を出す
  • 特定の行動をした人にだけ施策を出す

などです。

このとき、観測できない要因(購買意欲、ブランドへの熱量、時間の余裕など)を U とすると、

  • U は結果 Y に影響する
  • U は施策割当 T にも影響する

という状況が起こり得ます。すると上の単純比較には、施策の効果だけでなく「もともとの違い」まで混ざってしまいます。これが 交絡 です。

A/Bテストはこの交絡をランダム化によって取り除くための方法です。次にA/Bテストが何を推定しているのかと実際にどう計算するのかを整理します。

2. 潜在結果と平均処置効果

この章では何が知りたいのか(因果効果)、なぜ直接は見えないのか、だからA/Bでは何をどう計算するのかを整理します。

2.1 因果推論の根本問題

理想を言えば同じユーザーに施策を出した場合と出さなかった場合で結果がどう変わるかを知りたいところです。

そこで潜在結果(potential outcomes)として次を定義します。

  • Y_i(1):ユーザー i が施策あり T=1 だったときの結果
  • Y_i(0):ユーザー i が施策なし T=0 だったときの結果

この差

ITE_i = Y_i(1) - Y_i(0)

がユーザー i に対する本当の効果(ITE)です。

ただし、同じユーザーについて Y_i(1)Y_i(0) を同時に観測することはできません。
観測できるのは、実際に割り当てられた世界の結果だけです。

Y_i = Y_i(T_i)

つまりITE は本当は知りたい量として定義できる一方でデータから直接は計算できません。これが因果推論の根本問題です。

2.2 平均処置効果(ATE)

個人ごとの差分(ITE)が見えないため実務では平均的にどれくらい効くかを評価します。平均処置効果(ATE)を

ATE = \tau = \mathbb{E}[Y(1) - Y(0)] = \mathbb{E}[Y(1)] - \mathbb{E}[Y(0)]

と定義します。

A/Bテストではユーザーをランダムに処置群T=1と対照群T=0に割り当てます。SUTVAなどのいくつかの仮定の下では割当Tはユーザーの潜在結果 Y(1), Y(0) と無関係に決まります。結果として2群は同じ母集団からのサンプルとみなせるため処置群と対照群の平均の差を因果効果として解釈しやすくなります。

そのとき ATE \tau は、データ上では 処置群平均 − 対照群平均 として推定できます。推定量は次のとおりです。

\hat{\tau} = \bar{Y}_{T=1} - \bar{Y}_{T=0} = \frac{1}{n_1}\sum_{i:T_i=1}Y_i - \frac{1}{n_0}\sum_{i:T_i=0}Y_i

A/Bテストの基本は、最初の割当 T で分けた2群の平均をそのまま比べることです。

2.3 ランダム化することで処置前の性質が偏らない

以降では、購買意欲やロイヤル度など「処置前に存在するが観測しにくい個体差」をまとめてUと書きます(熱量、購買意欲、ブランドへの愛着など)。ポイントはU は処置の前に決まっているということです。

A/Bテストでは処置Tをランダムに割り当てます。ランダム化が正しく機能していれば、処置前の性質(観測できるものも観測できないものも)が特定の群に偏りにくくなります。数式で言えば、

T \perp\!\!\!\perp U \quad (\Rightarrow\ \mathbb{E}[U\mid T=1]\approx \mathbb{E}[U\mid T=0])

が期待できます(有限サンプルでは多少のズレはあり得ます)。

また潜在結果 Y(1), Y(0) は「処置が行われる前に定義される量」なので、ランダム化によって割当 T は潜在結果とも独立になります:

T \perp\!\!\!\perp (Y(1), Y(0))

ここで、観測結果は割り当てられた潜在結果に一致する(consistency)

Y = Y(T)

を用いると、以下のように導けます:

\mathbb{E}[Y \mid T=1] \underbrace{=}_{Y=Y(T)} \mathbb{E}[Y(1) \mid T=1] \underbrace{=}_{T \perp\!\!\!\perp (Y(1),Y(0))} \mathbb{E}[Y(1)]

同様に、

\mathbb{E}[Y \mid T=0] = \mathbb{E}[Y(0)]

が成り立つため、

\mathbb{E}[Y \mid T=1] - \mathbb{E}[Y \mid T=0] = \mathbb{E}[Y(1)] - \mathbb{E}[Y(0)] = ATE

となります。

3. 落とし穴:来訪者だけで比較する

せっかくランダム化で公平な比較枠組みを作っても分析の段階で介入後に決まる条件でデータを絞るとその公平さが崩れます。実務で多いのが「来訪者だけ」を見てしまうケースです。

3.1 例:クーポン通知の効果検証で来訪者だけを見る

ECの例で整理します。

  • 施策 T:クーポン通知を送る(1)/送らない(0)
  • 中間の行動 X:サイト来訪(来訪=1)
  • 結果 Y:購入金額(観測窓内)
  • 見えない要因 U:元々の熱量(ロイヤル度)

このとき分析者が見たくなるのが次の比較です。

\mathbb{E}[Y \mid T=1, X=1] - \mathbb{E}[Y \mid T=0, X=1]

つまり来訪した人の中で通知あり/なしの購入金額を比べるというものです。

3.2 なぜ来訪者だけに絞るとダメなのか

ポイントは来訪Xが施策Tによって変わり得ることです。

  • 対照群(通知なし T=0)の来訪者は通知がなくても自発的に来る人
    → もともと熱量Uが高い人が多くなりやすい
  • 処置群(通知あり T=1)の来訪者には2種類が混ざる
    1. 通知がなくても来る元々熱量が高い人
    2. 通知で増えた相対的に熱量が低い人

この結果、来訪者に限定した瞬間に

\mathbb{E}[U \mid T=0, X=1] > \mathbb{E}[U \mid T=1, X=1]

のようなズレが起こり得ます。通知が来訪を増やす(TXに影響する)ような施策では特にこの問題が起きやすいです。

この状態で来訪者あたり売上や来訪者の客単価を比べると

  • 対照群:熱狂的ファン中心なのでよく買う
  • 処置群:普通の人が混ざるので平均が下がる

となり、たとえば通知を送ると客単価が下がるという結論が出てしまうことがあります。

重要なのはここで見えている差が通知が購買を悪化させたことを意味しない点です。単に来訪者の構成が変わっただけかもしれません。
このように施策の影響を受けうる変数(来訪、クリック、開封など)で条件を絞ったことで生じる歪みをPost-treatment biasと呼びます。

3.3 正しい分析:割当ユーザーごとに比較する

A/Bテストの基本は、最初にランダムに分けた枠組みを崩さずに比較することです。

来訪しなかった人も含め観測窓内の購入金額は(その窓で買っていなければ)0として、

\mathbb{E}[Y \mid T=1] - \mathbb{E}[Y \mid T=0]

を評価します。

こうすることでランダム化で得た公平さを保ったまま通知がビジネス全体に与えた売上リフト(平均的な効果)を測れます。

最後に

A/Bテストの強みは、ランダム化によって比較の公平さを作れることです。
ただし、その公平さは分析者が介入後の条件で絞った瞬間に成立しなくなります。
実務ではまず割当ユーザーベースで結論を出す。そのうえで、来訪やクリックなどの中間指標はなぜ効いたのかを考えるための材料として扱うことをおすすめします。

DMM Data Blog

Discussion