Digital Reactor
統計・確率

A/Bテストを毎日覗くと偽陽性は何倍になるか:ピーキング問題と逐次検定

A/Bテストを毎日覗くと偽陽性は何倍になるか:ピーキング問題と逐次検定

はじめに

差が無いのに、毎日p値を見て、有意になった日に実験を止めます。それだけで「効果あり」が量産されます。よくある運用ですが、これは第一種過誤、つまり偽陽性を名目の5%からはるかに押し上げます。

今回、真の差がゼロのA/Aテストをシミュレーションして、覗く回数と偽陽性率の関係を測りました。1回だけ見れば偽陽性率は4.7%と名目どおりです。ところが5回覗くと16%(3.3倍)、20回で27%(5.3倍)、毎観測ごとに覗く連続監視では42%に達しました。半分近くが、差など無いのに「有意」と判定されます。この記事では、なぜ膨らむのかを直感と数理で押さえ、群逐次デザインと常時有効なp値という正しい早期停止の方法を実装で確かめます。

対象読者:

  • A/Bテストを運用しているアナリスト・PM・エンジニア
  • p値や検定の基礎はあるが、逐次検定は知らない方
  • 実験基盤の停止ルールを設計する立場の方

記事のポイント:

  • 任意停止(optional stopping)が第一種過誤を名目5%から膨らませることを実測します
  • なぜ膨らむのか(p値のランダムウォーク)を直感と数理で理解します
  • 群逐次デザイン(O’Brien-Fleming)と常時有効推論(mSPRT)で正しく早期停止します

ピーキングとは何か

固定サンプルサイズ検定には前提があります。サンプルサイズ nn を事前に決め、データを見るのは最後の1回だけ、という約束です。この約束のもとで、帰無仮説が正しいときに有意と誤判定する確率がちょうど5%に制御されます。

現実の運用はこの前提を壊します。ダッシュボードで毎日p値を眺め、有意になった瞬間に止めます。見るたびに判定のチャンスが増えるので、5%という保証は成り立ちません。これがピーキング(覗き見)問題、統計的には任意停止の問題です。

なぜ偽陽性が膨らむのか

帰無仮説が正しくても、p値は観測を追加するたびに揺れ動きます。下の図は、真の差がゼロのA/A実験を6本走らせ、p値の推移を描いたものです。どの線もランダムに上下し、途中で0.05を割り込む瞬間があります。差が無いのに。

A/A実験におけるp値の揺らぎ

「どこかの時点でp<0.05になる」確率は、見る回数が増えるほど単調に上がります。これは多重比較の時間版にほかなりません。1回の検定では5%に抑えられていた誤りが、覗くたびに積み重なります。回数に対する偽陽性率を測ると、はっきり右肩上がりになります。

覗く回数に対する偽陽性率

覗く回数偽陽性率名目比
14.7%0.9倍
516.3%3.3倍
2026.5%5.3倍
10034.8%7.0倍

副作用もあります。有意になった瞬間に止めると、その時点の効果量は過大に推定されます。たまたま大きく振れた瞬間で止めているのだから当然で、勝者の呪いと呼ばれます。

正しい早期停止の方法

覗くこと自体が悪いのではありません。覗いてよい統計手法を使っていないことが問題です。早期停止には正しいやり方があります。

群逐次デザインは、中間解析の回数を事前に決め、各回に厳しめの有意水準を配分します。O’Brien-Fleming境界は、序盤は非常に厳しく、終盤で通常に近づく境界を使い、全体の第一種過誤を5%に保ちます。5回の解析なら、境界はおおよそ4.56、3.23、2.63、2.28、2.04(z値)と設定されます。

常時有効推論は、いつ見ても妥当なp値や信頼区間を使います。代表がmSPRT(混合逐次確率比検定)で、効果量に事前分布 N(0,τ2)N(0,\tau^2) を置いた尤度比から、任意の停止時刻で第一種過誤を抑えます。差の分散を V=2σ2/nV=2\sigma^2/n として、尤度比とp値は次で計算できます。

Λn=VV+τ2exp ⁣(Δ2τ22V(V+τ2)),pn=min ⁣(1,1Λn)\Lambda_n = \sqrt{\frac{V}{V+\tau^2}}\,\exp\!\left(\frac{\Delta^2\,\tau^2}{2V(V+\tau^2)}\right), \qquad p_n = \min\!\left(1, \frac{1}{\Lambda_n}\right)

このp値は、毎観測ごとに見て pnαp_n \le \alpha で止めても、第一種過誤が α\alpha を超えません。実装も短いです。

def msprt_pvalue(diff, n, sigma=1.0, tau2=1.0):
    V = 2 * sigma ** 2 / n                       # 差の分散
    LR = np.sqrt(V / (V + tau2)) * np.exp(diff ** 2 * tau2 / (2 * V * (V + tau2)))
    return np.minimum(1.0, 1.0 / LR)             # 常時有効なp値

A/Aテストで実測する

真の差がゼロの2群(各2000観測まで)を逐次生成し、停止ルールごとに偽陽性率を4000回のシミュレーションで測ります。真値(名目α=5%)が既知なので、破綻が一目で分かります。乱数シードは42に固定しました。

停止ルール別の偽陽性率を並べます。

停止ルール別の偽陽性率

停止ルール偽陽性率
固定n(1回だけ見る)0.051
素朴なピーキング(5回)0.140
素朴なピーキング(連続)0.419
群逐次(OBF, 5回)0.053
常時有効(mSPRT)0.019

停止ルールの選び方

連続的なピーキングの破壊力が際立ちます。毎観測ごとに覗いて有意なら止める運用では、偽陽性率が0.419、名目の8倍を超えました。差の無い施策の4割が「勝った」と判定されます。ダッシュボードを常時監視して有意な瞬間に止める、という一見合理的な運用が、実は最悪の結果を招きます。

群逐次もmSPRTも偽陽性率を5%以下に保ちました。OBFは0.053とほぼ名目どおり、mSPRTは0.019と保守的に出ました。mSPRTが名目より低いのは、これが任意停止に対する上限保証だからで、事前分布の分散 τ2\tau^2 の置き方で保守性は調整できます。どちらも「見ること」を許しながら過誤を制御しており、ピーキングそのものを禁じる必要はありません。

見落とせないのが検出力との引き換えです。逐次手法は、同じサンプルサイズで比べると固定検定より検出力がやや低くなります。任意停止の自由を得るための保険料です。実務では、早く止められる利点(多くの場合は必要サンプルが減る)と、この検出力の代償を比べて決めます。加えて、停止時点の効果量は依然として過大評価されるので、意思決定に効果量を使うなら縮小推定などの補正が必要です。

実務への落とし込みとしては、実験基盤に常時有効なp値や信頼区間を組み込み、ダッシュボードにはその値を表示するのが筋がよいです。素のp値を毎日見られる状態にしておくと、担当者はどうしても覗いて止めたくなります。表示する数字自体を任意停止に頑健なものにしておけば、運用の誘惑がそのまま誤りにつながりません。複数の指標を同時に見る場合の多重性は、これとは別問題として残る点にも注意が必要です。

まとめ

覗くこと自体は罪ではありません。覗いてよい統計手法を使っていないことが問題です。今回のA/Aシミュレーションでは、連続的なピーキングが偽陽性率を名目5%の8倍、42%まで膨らませた一方、群逐次デザインとmSPRTはいずれも5%以下に制御しました。実験を運用しているなら、まず自分たちの停止ルールが固定nの前提を守れているかを確認し、途中で見たいのなら群逐次かmSPRTを実験基盤に組み込む、という順で手当てするとよいです。

関連記事

← 技術ブログ一覧へ