ch3-2 内的妥当性への脅威

この節の主題は 内的妥当性(internal validity) である。内的妥当性とは、 結果を他の集団や他の期間へ一般化することは脇に置いて、「この実験の、この期間の、この集団に限ってみても、得られた介入効果の推定は正しいか」 という性質を指す。言い換えれば、「外側へ広げて通用するか(外的妥当性)」を問う前に、まず「内側で筋が通っているか」を問うのが内的妥当性である。

A/B テストの強みは、ランダム割当によって「介入の有無」以外の条件を両群で揃えられる点にある。だからこそ、観測された差を介入の因果効果として解釈できる。ところが、この理屈を成り立たせている前提が現場ではしばしば破れる。前提が破れると、ランダム化したはずなのに群間に系統的な差が生じ、 介入効果の推定が偏る(バイアスがかかる) 。この節では、その代表的な脅威を順に見ていく。

  • SUTVA の違反 ―― 実験単位どうしが干渉してしまう。

  • 生存者バイアス ―― 生き残った単位だけを見て誤った結論を出す。

  • Intention-to-Treat ―― 割当どおりに扱われなかった単位の処理。

  • サンプル比率のミスマッチ(SRM)―― 群の人数比が設計とずれる。これは多くの不具合が表面化する「総合的な健康診断」であり、本節で最も紙幅を割く。

SUTVA の違反 ―― 実験単位が互いに干渉する

コントロール実験の分析では、 SUTVA(Stable Unit Treatment Value Assumption、安定単位処置値仮定) を置くのが一般的である(Imbens and Rubin 2015)。これは、各実験単位(たとえば profile やユーザー)の行動が、 自分自身がどちらの群に割り当てられたかだけで決まり、他の単位がどちらに割り当てられたかには影響されない という仮定である。

この仮定があるからこそ、「介入群の平均」と「対照群の平均」を素直に比べられる。もし他人の割当が自分の結果に漏れ出す(干渉・spillover が起きる)と、対照群が「介入の影響をまったく受けていない純粋な比較対象」でなくなり、差が薄まったり歪んだりする。教科書が挙げる違反しやすい設定は次のとおりである。

  • 機能がユーザーのネットワークに波及し得る ソーシャルネットワーク

  • ピアツーピア通話を行う Skype のようなコミュニケーションツール (通話相手にも介入が伝わる)。

  • 共同編集を支える 文書作成ツール(Microsoft Office や Google Docs など)

  • 双方向マーケットプレイス(広告オークション、Airbnb、eBay、Lyft、Uber など) 。たとえば、ある群で価格を下げる介入をすると、同じオークションに参加している対照群の結果にも影響が及ぶ。「相手側」を通じた干渉である。

  • 共有リソース(CPU・ストレージ・キャッシュなど) (Kohavi and Longbotham 2010)。介入群がメモリをリークし、ガベージコレクションやスワップでプロセスが遅くなれば、同じマシンに同居する全群が割を食う。教科書の例では、ある介入が特定シナリオでマシンをクラッシュさせ、 対照群のユーザーまで巻き添えでダウンした 。結果として主要メトリクスの差は消えてしまった(本当は介入が有害なのに、対照群も同じだけ害を受けたため差が出ない)。

介入群の不具合が共有リソースを通じて対照群にも波及する介入群メモリリークで重い対照群本来は影響なしのはず共有サーバ・キャッシュ遅延やクラッシュが伝播両群とも悪化するため、差が消えて「影響なし」に見えてしまう
共有リソースを介した干渉では、介入の害が対照群にも及ぶ。両群が同じだけ悪化すると群間差はゼロに近づき、有害な介入を見逃す危険がある。

Hulu での具体例 :一見すると動画配信は単独ユーザーの体験に閉じており、SUTVA を破りにくいように思える。しかし、次のような経路で干渉が起こり得る。

  • 共有される人気・トレンド特徴量 :「今人気の作品」棚や、人気度を入力特徴に使うランキングモデルは、 全ユーザーの視聴ログから集計 されることが多い。介入群のランキング変更が特定作品(たとえば『葬送のフリーレン』)の視聴を押し上げると、その作品のグローバルな人気スコアが上がり、 対照群が見る「人気棚」やスコアまで変わってしまう 。これは相手側を通じた干渉と同型である。

  • 同一アカウント内の profile :割当単位を profile にした場合でも、同じ世帯アカウントを家族が共有していると、介入群の profile の視聴履歴が「あなたへのおすすめ」の世帯横断的なシグナルに混ざり、対照群の profile の推薦に漏れ出すことがある。

  • 共有インフラ :介入群向けの新しい推薦サービスがレイテンシを悪化させ、同じ API ゲートウェイやキャッシュを使う対照群の応答まで遅くなる、という古典的な共有リソース問題も起こり得る。

これらの違反への対処(クラスタ単位での割当など)は第 22 章で扱う。ここで重要なのは、 「単独ユーザーの体験だから干渉はない」と決めつけず、共有される特徴量・モデル・インフラを通じた漏れ出しを疑う ことである。

生存者バイアス ―― 戻ってきた機体だけを見る誤り

生存者バイアス(survivorship bias) とは、 何らかの過程を「生き残った」単位だけを分析対象にしてしまい、脱落した単位を無視することで生じる偏り である。たとえば「過去 2 か月間ずっとアクティブだった profile だけ」を分析対象にすると、その間に離脱した profile が体系的に抜け落ちる。

この偏りの古典的な例が、第二次世界大戦で爆撃機に装甲を追加する場面である。軍は、帰還した機体の被弾箇所を記録し、「最も多く撃たれている場所(翼や胴体)に装甲を足そう」と考えた。これは直感的にもっともらしい。しかし統計学者の Abraham Wald は逆だと指摘した。弾痕はほぼ一様に分布するはずである。にもかかわらず、エンジンやコックピットに弾痕が少ないのは、 そこを撃たれた機体は墜落して帰還できず、検査対象に残らなかった からである。したがって装甲を足すべきは、 帰還機に弾痕が「ない」場所 なのである(Denrell 2005、Dmitriev et al. 2016)。

帰還した機体の弾痕(赤)。装甲すべきは弾痕の「ない」場所エンジンエンジン緑=弾痕がない=撃たれた機は帰還できなかった → ここに装甲を
帰還機の被弾分布だけを見ると「翼や胴体を補強」と結論しがちだが、それは生存者バイアスである。撃たれて墜ちた機が抜けているため、弾痕のないエンジン・コックピットこそ補強すべき箇所だと分かる。

Hulu での具体例 :新しい推薦ロジックを評価するとき、「実験期間の最後までアクティブだった profile」だけで視聴指標を比べたくなる。しかし、もし新ロジックが一部のユーザーにとって体験を悪化させ、 その不満を持った profile が期間中に視聴をやめて(あるいは解約して)離脱した とすると、彼らは分析対象から消える。残った「生存者」は、新ロジックでも満足している人ばかりなので、平均視聴時間や継続率はむしろ良く見えてしまう。これはまさに「帰還した爆撃機だけを見る」状況であり、 有害な介入を「良い」と誤判定する 危険がある。対策としては、離脱した profile も含めて割当時点の母集団全体で評価する(次の Intention-to-Treat の考え方)こと、そして解約・離脱そのものをガードレール指標として監視することが挙げられる。

Intention-to-Treat ―― 「割当どおり」に分析する

実験のなかには、 群に依存した非ランダムな欠損 が起こるものがある。すなわち、介入群に割り当てられたのに、実際にはその介入を受けなかった(受けることを選ばなかった)単位が出る場合である。例を挙げる。

  • 医療では、投薬治療に割り当てられた患者でも、副作用があれば服薬をやめてしまうことがある。

  • オンラインでは、すべての広告主に「キャンペーン最適化」を提案できても、実際に最適化を実行するのは一部の広告主だけ、ということが起こる。

ここで、 「実際に介入を受けた人」だけを取り出して分析すると、選択バイアスが入り、一般に介入効果が誇張される 。なぜなら、「最後までやり切った人」「提案を受け入れた人」は、もともと意欲が高い・状態が良いといった点で systematically 偏っているからである。

この問題を避ける原則が Intention-to-Treat(ITT、割当意図に基づく分析) である。ITT とは、 最初の割当が実際に実行されたかどうかに関わらず、当初割り当てた群のまま分析する という方針である。したがって ITT で測る介入効果は、「介入を実際に適用された場合の効果」ではなく、「介入群に割り当てるという意図(その後の脱落も込み)の効果」になる。これは一見すると効果を過小評価するように思えるが、 現実に起こる脱落も含めた、実運用に即した正直な効果 を与える。

割当後に一部が介入を受けなくても、割当のまま分析するランダム割当対照群に割当介入群に割当実際に受けた受けず脱落ITT は割当群全体で比較する「受けた人」だけを抜き出すと選択バイアスで効果を誇張する
介入群に割り当てた後で一部が脱落しても、ITT では割り当てたまま全員を分析に残す。実際に受けた人だけを取り出すと、意欲の高い人に偏って効果が過大評価される。

なお、ディスプレイ広告やメールマーケティングでは、対照群への影響(広告を見なかったこと)を直接観察できないことがあり、この問題に対処するための ITT ベースの手法が提案されている(Barajas et al. 2016)。

Hulu での具体例 :「新しいおすすめ特集ページ」を介入群に出すが、そこに到達するには利用者が自分でバナーをタップする必要がある、という実験を考える。ここで「実際に特集ページを開いた profile」だけを介入効果の対象にすると、もともと能動的で視聴意欲の高いユーザーばかりが残り、効果は大きく見える。正しくは、 バナーをタップしたか否かに関わらず、介入群に割り当てた profile 全員 を ITT で分析する。同様に、新ランキングをアプリ更新で配信する実験では、 アプリを更新しなかったために旧ランキングのままだった profile も、介入群として残して評価する のが ITT の立場である。

サンプル比率のミスマッチ(SRM)

サンプル比率のミスマッチ(SRM、Sample Ratio Mismatch) とは、 群に割り当てられた実験単位の比率が、設計で意図した比率から有意にずれている状態 を指す。たとえば、対照群と介入群を 1 対 1(50:50)に割り当てる設計なのに、実際の人数比が大きく偏っていたら、それは多くの場合、 デバッグを要する深刻な不具合のサインである (第 21 章参照)。

ここで前節の p 値の定義が効いてくる。50:50 で割り当てる設計なら、「観測される比率は 1.0 に近いはず、すなわち差はないはず」というのが帰無仮説である。p 値は、 この帰無仮説(設計どおりに割り当てられている)のもとで、観測された比率かそれ以上に極端な偏りが偶然生じる確率 を表す。だから、SRM 検定の p 値が極端に小さい(たとえば 0.001 以下)なら、「偶然ではここまで偏らない=割当やロギングのどこかが壊れている」と判断できる。実務では、 p 値がしきい値を下回ったら強い警告を出し、スコアカードやレポート自体を非表示にする 運用が推奨される。歪んだ土台の上で介入効果を論じても無意味だからである。

ワークド例:わずか 1% の偏りが「赤信号」になる

SRM 検定を実数で確かめる。50:50 を意図した実験で、観測された人数が次だったとする。

観測人数 OO 設計上の期待人数 EE
Control 100,000100{,}000 99,00099{,}000
Treatment 98,00098{,}000 99,00099{,}000
合計 198,000198{,}000 198,000198{,}000

人数比は 98,000/100,000=0.9898{,}000 / 100{,}000 = 0.98 で、一見すると「ほぼ半々」に思える。しかし帰無仮説(各単位が確率 0.50.5 で介入群に入る)のもとで検定すると、話は変わる。介入群に入る割合の観測値は次である。

p^=98,000198,0000.49495\hat{p} = \frac{98{,}000}{198{,}000} \approx 0.49495

帰無仮説 p0=0.5p_0 = 0.5 のもとでの標準誤差は次になる。

SE=p0(1p0)N=0.5×0.5198,0000.001124\text{SE} = \sqrt{\frac{p_0(1-p_0)}{N}} = \sqrt{\frac{0.5 \times 0.5}{198{,}000}} \approx 0.001124

したがって検定統計量は次である。

z=p^p0SE=0.494950.50.0011244.49z = \frac{\hat{p} - p_0}{\text{SE}} = \frac{0.49495 - 0.5}{0.001124} \approx -4.49

両側 p 値はおよそ 7×1067 \times 10^{-6} 、すなわち 0.000007 程度である。同じことをカイ二乗適合度検定で書いても結論は変わらない。

χ2=(100,00099,000)299,000+(98,00099,000)299,00020.2\chi^2 = \frac{(100{,}000 - 99{,}000)^2}{99{,}000} + \frac{(98{,}000 - 99{,}000)^2}{99{,}000} \approx 20.2

これは自由度 1 のカイ二乗分布で z2=(4.49)220.2z^2 = (-4.49)^2 \approx 20.2 に対応し、やはり p7×106p \approx 7 \times 10^{-6} である。つまり、 見た目はたった 2% の人数差(1% の比率ずれ)でも、標本が大きいと「偶然ではまず起こらない」レベルに達し、SRM の赤信号が灯る 。標本が大きいほど小さな偏りでも検出できるため、SRM 検定は強力な健康診断になるのである。

SRM を引き起こす代表的な原因

SRM はそれ自体が原因ではなく、 背後の不具合が表面化した症状 である。教科書が挙げる代表的な原因を、Hulu の文脈に置き換えながら見ていく。

1. ブラウザのリダイレクト (Kohavi and Longbotham 2010)

A/B テストを実装する手軽な方法として、介入群を別ページへリダイレクトする手がある。シンプルでエレガントだが、一貫して SRM を引き起こすことが知られている。理由は複数ある。

  • パフォーマンスの違い :リダイレクトは数百ミリ秒の遅延を生み、主要メトリクスに悪影響を与える(第 5 章)。ラボでは速く見えても、実ユーザーの回線では無視できない。

  • ボット :ロボットはリダイレクトの扱いが一様でない。http-equiv="REFRESH" メタタグに従わないボットもあれば、リダイレクト先を「新しいページ」とみなして頻繁にクロールするボットもある。これが片方の群だけ人数を膨らませたり削ったりする。

  • 非対称なリダイレクト :介入ページに飛ばされたユーザーが、その URL をブックマークしたり友人に共有したりすると、本来は対照群であるはずの人が介入ページに入り込む。多くの実装はリダイレクト先で「本当に介入群か」を再確認しないため、汚染源になる。

教訓は、 リダイレクト実装を避けてサーバーサイドの仕組みを選ぶ ことである。どうしても避けられないなら、 対照群と介入群の両方を同じようにリダイレクトし、ペナルティを対称にする

2. 計測の欠損 (Kohavi and Longbotham 2010 ほか)

クリック計測はしばしば Web ビーコン(クリックを知らせる 1×1 の GIF)で行われるが、これは欠損率が高い(クリックの 100% は記録されない)ことで知られる。欠損がすべての群で同程度なら問題にならないが、 特別な処理が欠損率を群ごとに変えてしまう と SRM が生じる。とりわけ、シングルクリックしかしない非アクティブなユーザーで起こりやすい。ビーコンをページ内の別の位置に置くと、発火タイミングの差で実験が歪む。

Hulu での具体例 :再生開始やクリックを GA4 のイベントとして送る際、介入群だけ UI 構成が変わってイベント発火位置やタイミングがずれると、離脱の速いライトユーザーのイベントが片群で取りこぼされ、SRM につながる。

3. 残留効果・キャリーオーバー(繰り越し)効果

新しい実験は新しいコードを含むため、バグ混入率が高くなりがちである。深刻なバグで実験を一時中断し、修正後に再開することはよくあるが、その時点で 一部のユーザーは既に影響を受けてしまっている 。バグの残留影響が数か月続くこともある(Kohavi et al. 2012、Lu and Liu 2014)。だからこそ、 バグ修正後の本実験の前に A/A テスト(第 19 章)を行い、ユーザーを積極的に再ランダム化する ことが重要である。

逆向きの例もある。LinkedIn では「People You May Know(知り合いかも)」アルゴリズムの新版が訪問数を大きく増やし、非常に有益だと分かった。ところが一度実験を止めて再開したところ、 先行実験のキャリーオーバー効果が強く残り、SRM が生じて結果が無効になった (Chen, Liu and Xu 2019)。

さらに、 ブラウザクッキー内の残留情報 も実験を汚す。たとえば、介入群に教育的メッセージを表示するが、迷惑にならないよう表示は 3 回までとし、その回数をクッキーで数える設計を考える。実験を再開すると、一部の介入群ユーザーは既に count > 0 のクッキーを持つため、メッセージが減る・出ない状態になり、介入効果が希釈されたり SRM が起きたりする(Chen et al. 2019)。

Hulu での具体例 :「新規エピソード公開のお知らせ」を介入群に最大 3 回まで表示する実験で、表示回数をクライアント側(デバイスのローカルストレージや clientId 紐付けのカウンタ)で管理していたとする。実験をやり直すと、前回のカウンタが残った profile では表示回数が減り、効果が薄まる。再実験時は カウンタをリセットし、profile を再ランダム化する 必要がある。

4. 不適切なランダム化ハッシュ関数

Zhao et al.(2016)は、Yahoo! が割当に Fowler-Noll-Vo ハッシュを使っていたと記す。これは単層のランダム化では問題なかったが、 重複する(複数同時に走る)実験へ一般化したとき、並行実験間でユーザーを適切に分配できなかった 。暗号学的ハッシュである MD5 は質が良いが(Kohavi et al. 2009)遅い。Microsoft は非暗号の Jenkins SpookyHash を使っている。

Hulu での具体例profile_id をハッシュして群に振り分ける際、ハッシュが弱いと、同時に走る複数の推薦実験のあいだで割当が相関し、ある実験の介入群が別の実験の介入群と体系的に重なってしまう。これは SRM や交絡の原因になるため、 実験 ID を salt に混ぜた質の高いハッシュ を使う必要がある。

5. トリガーが介入の影響を受ける

実験を一部のセグメントだけにトリガー(発火)させることはよくある。たとえば米国のユーザーだけをトリガーし、その中でランダムに群分けする。問題は、 トリガー条件が「時間とともに変わる属性」に基づき、しかもその属性が介入の影響を受け得る 場合である。例として、「3 か月間アクティブでなかったユーザー」をトリガーにメールキャンペーンを打つとする。キャンペーンが効けば、それらのユーザーはアクティブになり、 次回のキャンペーンのトリガー母集団が群ごとに変わって SRM が生じる

Hulu での具体例 :「30 日間視聴のない profile」を対象に再エンゲージメントのプッシュ通知を送る実験で、介入が効くと対象 profile が復帰する。すると次の実験では、介入群から復帰者が抜け、トリガー対象の構成が群間でずれて SRM を招く。トリガー属性には 介入で動かない安定した属性を選ぶ べきである。

6. 時間対効果

メールキャンペーンの A/B テストで、群ごとに異なる本文を送り、開封率を見たとする。ユーザーは適切にランダム化されており、本文の違いは開封率に影響しないはずなのに、開封率で SRM が検出された。調査の結果、 開封時刻が群ごとに別の時間帯に固まっていた 。原因は、実装の都合で まず対照群に送信し、次に介入群に送信 したことだった。最初の群は勤務時間中に、次の群は勤務後に受け取ったため、開封行動の母集団が変わってしまった。

Hulu での具体例 :プッシュ通知の配信を「対照群を先に、介入群を後に」バッチ送信すると、配信時刻帯の違い(昼休み対深夜など)だけで開封率・起動率に差が出て、本文の効果と区別できなくなる。 送信順序も群間でランダム化・同時化する 必要がある。

7. データパイプラインが介入の影響を受ける(MSN ポータルの例)

MSN ポータル(www.msn.com)のページには、切り替わりながら表示される複数のスライドと、各スライドの現在位置を示すドットからなる情報ペインがあった(Kohavi 2016)。

MSNポータルの例。中央に複数スライドと現在位置を示すドットからなる情報ペインがある
図 3.1 の MSN ポータル。中央の情報ペインは複数スライドが自動で切り替わり、下部のドットで現在位置を示す。この「スライド数」を 12 から 16 に増やす実験が行われた。

MSN の OEC の重要な要素は、エンゲージメントを表す 1 ユーザーあたりのクリック数 だった。ここで、情報ペインのスライド数を 12 から 16 に増やす実験を行った。

初期結果は、 介入群でエンゲージメントが有意に減少 したと示した。しかし、この実験には SRM があった。群のサンプルサイズ比率は 1.0 ではなく 0.992 だったのである。各群 80 万人以上いたため、この比率での p 値は 0.00000077×1077 \times 10^{-7})に達した。つまり、50:50 設計のもとでこれほどの偏りが偶然生じる確率は極めて低い。

その後の調査で、原因が データパイプライン側にあった ことが判明した。介入群でユーザーのエンゲージメントが増えすぎた結果、 最もエンゲージメントの高い一部のユーザーがボットと誤分類され、分析から除外されていた のである。このボットフィルタリングを修正すると、結果は反転し、 介入群でエンゲージメントが 33% 増 という正反対の結論になった。

ボットフィルタリングは、特に検索エンジンにとって深刻である。Bing では米国トラフィックの 50% 以上がボット由来であり、中国やロシアでは 90% を超える。

Hulu での示唆 :Hulu でも、不正視聴・自動化アクセスを除外するフィルタや、外れ値(極端なヘビーユーザー)除外のロジックがパイプラインに入っていることが多い。新ランキングが本当にヘビーユーザーの視聴を伸ばした場合、 その伸びすぎた profile がボット/外れ値として除外され、見かけ上「介入群のエンゲージメント減」や SRM として現れる 危険がある。フィルタは介入の結果に応じて非対称に効きうる、という視点を持つべきである。

まとめ ―― SRM は最優先の健康診断

SRM のチェックはきわめて重要である。最後の MSN の例が示すように、 ほんの少しのアンバランスでも、介入効果の解釈が正反対に逆転することがある 。SRM は一般に、 ヘビーユーザーのような「非常に良いユーザー」や、逆に「非常に悪いユーザー」、あるいはクリックのないユーザーといった、ある種の単位が片群から系統的に欠落する ことで生じる。母集団の差がわずかに見えても、結果が大きく歪む可能性がある。SRM の診断方法については Fabijan et al.(2019)が詳しい。

実務上の鉄則は明快である。 介入効果を読む前に、まず SRM 検定に合格しているかを確認する 。p 値が小さく SRM が疑われるなら、スコアカードは信用せず、まず割当・ロギング・パイプラインのデバッグに戻る。土台が傾いていないことを確かめてから、はじめて効果の議論に進むのである。