D ビジネス/PM — A/Bテストロールアウト判断 Bad→Good(検出力分析(必要サンプルサイズ)× Peeking問題(早期停止によるα膨張)× SRM カイ二乗検定 × two-proportion z検定 + 95%信頼区間 × ガードレール指標(AOV)× Ship/No-Ship基準 pre-registration)(MOps チェックアウトボタンA/Bテスト 月間売上インパクト2,850万円過大評価 Bad→Good 7点)

2026-07-23 (Day 106) 木曜 D: ビジネス/PM ★★★★☆ 検出力分析 / SRM / z検定 Peeking問題 / ガードレール / Ship基準

概要

📐

事前のサンプルサイズ設計(検出力分析)

MDE・α(0.05)・power(80%) から two-proportion z-test のサンプルサイズ公式で必要 n・最短テスト日数を逆算する。「見切り発車」を防ぎ、5日目時点でまだ必要量の46%しか集まっていないことを可視化する。

👀

Peeking問題(早期停止によるα膨張)

毎日結果を覗いて有意になった時点で打ち切ると、実質的な有意水準は名目上の5%より大きく膨張する。事前登録したサンプルサイズに達するまで判定を保留する規律が必要。

⚖️

SRM(Sample Ratio Mismatch)チェック

CVRの差を論じる前に、カイ二乗検定で意図した配分(50:50)が守られているか検証する。day5時点 χ²=33.33 は配分バグの強いシグナルで、比較自体の妥当性を疑うべき水準。

🛡️

ガードレール指標 + Ship基準の事前登録

CVR改善だけを見ず、AOV・返品率などの副作用を事前合意した閾値と照合する。今回はAOVが-4.3%と閾値(-3%)を超えて悪化しており、CVRが有意でも単体でNo-Ship相当。

問題

ECサイト MOps チームのシニアエンジニアとして、チェックアウトページの「購入ボタン」文言・色を変更する A/B テストの結果分析を任された。後輩が作成した Bad 分析レポートをレビューし、7つの問題点を洗い出して Good レポートへ再設計せよ。

シナリオ

  • Control(A): 既存の緑ボタン「今すぐ購入」/ Variant(B): 新しいオレンジボタン「3秒で購入完了」
  • 目的: ボタン文言・色の変更でチェックアウト CVR(コンバージョン率)を改善できるか検証する
  • 当初2週間を予定していたが、後輩が5日目の時点で結果を確認し「有意差が出た」として即座に打ち切り、レポートを提出した

前提数値(正)

  • ベースライン CVR(A): 3.2%。サイト全体の月間チェックアウトセッション数: 600,000セッション/月
  • 現状の平均注文額(AOV): A = 8,200円
  • 14日間で最終的に集まった実データ: A=27,300セッション/878件購入(CVR 3.216%)AOV 8,200円 返品率4.1% / B=26,900セッション/905件購入(CVR 3.364%)AOV 7,850円 返品率4.3%
  • 有意水準 α=0.05(両側)、検出力(power) 80% を組織標準とする
  • AOV ガードレール許容閾値: -3%を超える悪化は No-Ship(本問題では後付けで適用)
  • エンジニア単価: 80万円/月(20営業日 = 4万円/人日)
期待する回答形式: 問題点の列挙(番号付き)+ 検出力分析(必要サンプルサイズ計算)+ SRM検定 + two-proportion z検定(効果量・95%信頼区間)+ ガードレール指標評価 + 事前登録すべきShip/No-Ship基準 + ビジネスインパクト試算(過大評価額)と提言

悪いレポート (Before)

このレポートには 7つの問題 が隠れています。見つけてみてください。
Bad レポート(5日目)— 早期停止・p値のみ・妥当性検証なし
件名: チェックアウトボタン A/B テスト結果

5日間テストしたところ、新ボタン(B)の CVR が有意に高いという
結果が出ました(p<0.05)。
  ← 問題①: 事前サンプルサイズ設計なし
  ← 問題②: 5日目で覗き見して打ち切り(peeking)

  A: CVR 3.20%(10,000セッション中 320件購入)
  B: CVR 3.80%(9,200セッション中 350件購入)
  ← 問題③: 効果量・信頼区間の記載なし、p値のみ
  ← 問題④: A:B=10,000:9,200 の配分歪みをSRM検証していない
  ← 問題⑥: 検定手法・計算過程が非公開

CVR が 0.60pt 改善しているので、B を 100% ロールアウトすべきです。
  ← 問題⑤: AOV・返品率などガードレール指標を未確認
  ← 問題⑦: 事前合意されたShip/No-Ship基準がない
問題点サマリー(7点)
1事前のサンプルサイズ設計(検出力分析)がない — MDE・α・powerから必要n・最短期間を計算せず見切り発車
2Peeking問題(毎日覗いて有意になった時点で打ち切り) — 複数回検定でα膨張、5日目の「有意差」は偽陽性の疑い
3p値のみで効果量・信頼区間の記載がない — 効果の大きさ・不確実性が伝わらない
4SRM(Sample Ratio Mismatch)チェックをしていない — 意図した50:50から外れた配分自体を検証していない
5ガードレール指標(AOV・返品率)を確認していない — CVRのみでは客単価・返品悪化という副作用を見逃す
6検定手法・計算過程がブラックボックス — 再現性・査読可能性がない
7事前合意されたShip/No-Ship基準がない — 「有意になったら勝ち」という後付けの意思決定

ヒント(段階的開示)

ヒント1 — 方向性
Bad レポートの罠は3系統。(1) 統計的検定の作法違反 — 事前のサンプルサイズ設計がないまま開始し、毎日結果を覗いて都合よく見えた時点で打ち切っている(peeking / optional stopping problem)。p値だけを報告し、効果量や信頼区間がない。(2) 実験の妥当性検証の欠如 — A:B の配分(10,000:9,200)が意図した50:50から大きく歪んでいるのに、SRMチェックをしていない。配分自体が壊れていれば、CVRの差そのものが信用できない。(3) 意思決定基準の欠如 — CVRだけを見て、AOV・返品率といったガードレール指標を確認していない。事前に合意されたShip/No-Ship基準もない。
ヒント2 — アプローチ
  • 問題①: MDE・α・power(80%)からtwo-proportion z-testのサンプルサイズ公式で必要n・最短テスト日数を逆算し、5日目時点で何%しか集まっていなかったかを示す
  • 問題②③: 事前登録したサンプルサイズに達するまで結果を見て判断しない。効果量(絶対差・相対リフト)と95%信頼区間を必ず併記
  • 問題④: 観測されたA:B配分と期待値(50:50)でカイ二乗検定(SRMチェック)を行う
  • 問題⑤: AOV・返品率などのガードレール指標を、事前合意した許容閾値と比較する
  • 問題⑥: 検定式・計算過程を明示し再現可能にする
  • 問題⑦: 試験開始前にShip/No-Ship基準(サンプルサイズ・ガードレール閾値含む)を文書化する(pre-registration)
ヒント3 — 誘導
【必要サンプルサイズ(two-proportion z-test, MDE=0.5pt)】
n_per_group = (z_α/2 + z_β)² × [p1(1-p1) + p2(1-p2)] / (p2-p1)²
z_0.025=1.96, z_0.2(power80%)=0.8416, p1=3.2%, p2=3.7% → n_per_group = ?

【SRMチェック(カイ二乗検定)】
χ² = Σ (観測 - 期待)² / 期待
day5: A=10,000 B=9,200(期待9,600ずつ)→ χ² = ?

【two-proportion z検定(14日最終データ)】
p̄ = (合計購入数) / (合計セッション数)
z = (p_B - p_A) / sqrt( p̄(1-p̄) × (1/n_A + 1/n_B) )
95%CI = (p_B - p_A) ± 1.96 × SE

【ビジネスインパクト過大評価】
Bad予測 = 600,000 × 0.038 × 8,200円(AOV不変前提)− ベースラインGMV
Good実測 = 600,000 × 0.033643 × 7,850円(AOV実測反映)− ベースラインGMV
過大評価額 = Bad予測 − Good実測 = ?

問題点分析(7点)

#問題点分類改善方法
1事前のサンプルサイズ設計(検出力分析)がない実験設計MDE/α/powerから必要n・最短日数を逆算
2Peeking問題(毎日覗いて有意になった時点で打ち切り)実験設計事前登録サンプルサイズ到達まで判定保留
3p値のみで効果量・信頼区間の記載がない統計絶対差・相対リフト・95%CIを併記
4SRM(配分の歪み)チェックをしていない統計カイ二乗検定で配分の妥当性を検証
5ガードレール指標(AOV・返品率)未確認意思決定事前合意閾値と照合しNo-Ship判定に反映
6検定手法・計算過程がブラックボックス統計計算式・過程を明示し再現可能にする
7事前合意されたShip/No-Ship基準がない意思決定pre-registrationで判断基準を試験開始前に文書化

サンプル到達曲線と効果量CI比較(Peeking問題の可視化)

累積サンプルサイズ到達曲線 — 必要量42,000に対しday5は19,200(45.7%)で打ち切り セッション数 経過日数 必要量 42,000 day5: 19,200(打ち切り) day11: 必要量到達点 day14: 54,200 day5時点の実績は必要サンプルサイズの45.7%。本来day11まで待つべきところを6日早く打ち切っている 効果量(CVR差)95%信頼区間比較 — day5(早期停止)vs day14(最終・事前登録相当) 効果量ゼロ -0.5pt 0pt +0.6pt +1.2pt day5(n=19,200・打ち切り時点) +0.60pt [0.09, 1.12] p≈0.023(ゼロを含まず=見かけ上「有意」) day14(n=54,200・最終確定データ) +0.148pt [-0.15, +0.45] p≈0.33(ゼロを含む=有意差なし) day5→day14でCIがゼロをまたぐ方向へシフト=peeking + 当時未解消のSRMによる偽陽性の典型例 効果量は0.60pt→0.148ptへ縮小。「早すぎる勝利宣言」が意思決定を誤らせるリスクを示す

模範解答

MDE(最小検出可能効果)= 0.5pt(絶対差)、ベースラインCVR = 3.2% → 目標CVR = 3.7%
α = 0.05(両側)→ z_0.025 = 1.96
power = 80% → z_0.2 = 0.8416

p1(1-p1) = 0.032 × 0.968 = 0.030976
p2(1-p2) = 0.037 × 0.963 = 0.035631
分子 = (1.96 + 0.8416)² × (0.030976 + 0.035631)
     = 7.849 × 0.066607 ≈ 0.5228

分母 = (p2 - p1)² = 0.005² = 0.000025

n_per_group = 0.5228 / 0.000025 ≈ 20,912 → 安全側に切り上げ 約21,000セッション/群
必要合計セッション数 ≈ 42,000セッション

day5実績(19,200セッション/5日 = 3,840セッション/日)から逆算すると、
必要日数 = 42,000 / 3,840 ≈ 11日 が最短テスト期間。

→ 5日目時点の実績19,200セッションは、必要量42,000の45.7%にすぎない。
ポイント: サンプルサイズを事前計算しておけば、「5日目で結果を見る」こと自体が統計的に無意味だと即座に判断できる。
【day5時点】
A=10,000, B=9,200, 合計=19,200 → 期待値(50:50)= 9,600ずつ

χ² = (10,000-9,600)²/9,600 + (9,200-9,600)²/9,600
   = 160,000/9,600 + 160,000/9,600 = 16.667 + 16.667 = 33.33(df=1)

自由度1のカイ二乗検定でχ²=33.33はα=0.001の棄却値10.83を大幅超過(p<0.0001)。
→ 割当ロジックにバグの疑い。CVRの差自体を信用してはならない水準。

【原因(後日判明)】
実験CookieがCDNキャッシュキーに含まれておらず、一部端末でBの初期表示が
Aにフォールバックしていた。day3にキャッシュキー修正をデプロイ。

【14日最終時点】
A=27,300, B=26,900, 合計=54,200 → 期待値 = 27,100ずつ
χ² = (200)²/27,100 × 2 = 40,000/27,100 × 2 = 1.476 × 2 = 2.952(df=1)
→ 棄却値3.841を下回り有意でない(p≈0.086)。修正後は歪みが解消。
A: 27,300セッション、878件購入 → CVR_A = 878/27,300 = 3.216%
B: 26,900セッション、905件購入 → CVR_B = 905/26,900 = 3.364%

効果量(絶対差) = 3.364% - 3.216% = 0.148pt(day5の0.60ptより大幅縮小)
相対リフト = 0.148 / 3.216 ≈ +4.6%

プールした比率 p̄ = (878+905) / (27,300+26,900) = 1,783/54,200 = 3.290%
SE = sqrt( p̄(1-p̄) × (1/27,300 + 1/26,900) )
   = sqrt(0.031815 × 0.0000738) = sqrt(0.0000023480) ≈ 0.001532

z = 0.001482 / 0.001532 ≈ 0.967
両側p値 ≈ 0.33(有意水準0.05を大きく上回り、有意差なし)

95%信頼区間 = 0.148pt ± 1.96 × 0.1532pt = [-0.15pt, +0.45pt]
→ 区間がゼロを含むため、CVR改善効果は統計的に検出できていない。
day5の「p<0.05」は、必要サンプルサイズの46%しか集まっていない段階での複数回検定(peeking)と、当時未解決だったSRM(配分バグ)が重なった偽陽性の可能性が高い。
指標A(Control)B(Variant)変化事前閾値判定
CVR3.216%3.364%+0.148pt(非有意)有意差 p<0.05未達
AOV(平均注文額)8,200円7,850円-350円(-4.27%)-3%超でNo-Ship閾値抵触
返品率4.1%4.3%+0.2pt+1pt以内許容範囲内
AOVが事前想定閾値(-3%)を超えて悪化しており、たとえCVR改善が真であっても単体でNo-Ship相当。「3秒で購入完了」という訴求が比較検討フローを省略させ、低単価商品への遷移を誘発した可能性がある。
ベースライン月間GMV(A):
  600,000セッション × CVR 3.2% × AOV 8,200円
  = 19,200件 × 8,200円 = 157,440,000円(1億5,744万円)

【Bad予測(day5の数値をAOV不変のまま全体展開)】
  600,000セッション × CVR 3.8% × AOV 8,200円(AOV未計測のため不変仮定)
  = 22,800件 × 8,200円 = 186,960,000円
  Bad予測の月間アップリフト = 186,960,000 - 157,440,000 = 29,520,000円(+2,952万円/月)

【Good実測(14日最終データ反映、統計的には非有意)】
  600,000セッション × CVR 3.364% × AOV 7,850円
  = 20,186件 × 7,850円 = 158,458,530円
  実測の月間アップリフト(点推定) = 158,458,530 - 157,440,000 = 1,018,530円(+約102万円)
  ※ CVR差が非有意(95%CIがゼロを含む)かつAOVガードレール抵触のため、
    真のGMVインパクトはゼロ〜マイナスの可能性を含む

過大評価額 = 29,520,000 - 1,018,530 ≈ 28,500,000円(約2,850万円/月、約29倍の過大評価)
もしday5のBadレポートのまま100%ロールアウトを承認していたら、経営に対して月間2,850万円規模の売上インパクトを誤って約束していたことになる。
【試験開始前に文書化すべき事項(pre-registration)】
1. MDE・α(0.05)・power(80%)から算出した必要サンプルサイズ・最短テスト日数
   → 到達前は結果を見ても判断しない(peekingの物理的な防止)
2. SRM自動監視: 日次でカイ二乗検定を実行し、p<0.01でアラート・テスト一時停止
3. ガードレール指標と許容閾値の事前合意(本問題ではAOV -3%、返品率 +1pt)
   → 1つでも閾値抵触があれば主要指標が有意でもNo-Ship
4. Ship基準: 主要指標(CVR)が事前登録サンプルサイズ到達後にp<0.05 AND 全ガードレール許容内
   → それ以外はNo-Ship または再テスト
今回の結論: No-Ship。CVR改善は統計的に有意でなく(p≈0.33)、AOVガードレールに抵触している。価格帯別・新規/リピーター別のセグメント分析でAOV低下の原因仮説を検証し、訴求文言を修正した上での再テストを提案する。

ポイント解説

1Peeking(覗き見)は有意水準を膨張させる — 事前登録したサンプルサイズに達する前に何度も検定を繰り返すと、実質的なαは名目上の5%より大きくなる。「毎日結果を見て良さそうなら止める」は統計的に不正な手続き。
2SRMは実験の前提条件チェック — CVRの差を論じる前に、意図した配分(50:50)が守られているかを検証する。配分が壊れていれば、比較可能性そのものが崩れる。
3p値だけでなく効果量と信頼区間を示す — 「有意か否か」の二値判定ではなく、効果の大きさと不確実性を95%信頼区間で示すことで経営が実効性を評価できる。
4主要指標だけでなくガードレール指標を見る — CVR最適化がAOV悪化を伴う「安さの罠」は頻出パターン。単一指標の最適化は事業全体の最適化にならないことがある。
5事前登録(pre-registration)で後付け判断を防ぐ — サンプルサイズ・ガードレール閾値・Ship基準を試験開始前に文書化し、意思決定バイアスを構造的に防止する。

実務への応用

MOpsチームではLP・レコメンド表示・クーポン訴求文言など、日常的にA/Bテストを実施する機会が多い。本問題の設計(検出力分析→SRM監視→z検定+信頼区間→ガードレール→pre-registrationされたShip基準)をテンプレート化しておくことで、「早すぎる勝利宣言」による誤ったロールアウト判断(今回の試算では月間約2,850万円の過大評価)を組織的に防止できる。

証券会社経験との接続: サンプルサイズ・多重検定・オーバーフィッティング回避といった統計的検定の規律は、バックテストの作法とそのまま同じ。A/Bテスト設計にそのまま応用できる。

今日のまとめ

A/Bテストのロールアウト判断は「p<0.05が出た瞬間に勝ち」ではない。事前のサンプルサイズ設計・SRMによる実験妥当性の検証・効果量と信頼区間の併記・ガードレール指標の確認・事前登録されたShip基準という5点セットを揃えて初めて、経営が信頼できる意思決定になる。今回のケースでは早期停止(peeking)による偽陽性判定が月間約2,850万円もの売上インパクトの過大評価につながっていた。

次のステップ

  • 発展問題: 「毎日結果を確認しても正しく早期停止できる」逐次検定(mSPRT / Always Valid Inference)を用いたA/Bテスト基盤を設計し、従来のfixed-horizon検定との使い分け方針を提示せよ。あわせて複数のガードレール指標を同時監視する場合の多重比較補正(Benjamini-Hochberg法)の適用方法も検討すること。
  • 参考: 検出力分析(Power Analysis)/ Sample Ratio Mismatch(SRM)/ Peeking Problem・Optional Stopping / two-proportion z-test / Always Valid Inference(mSPRT)/ ガードレールメトリクス / 多重比較補正(Bonferroni / Benjamini-Hochberg)

自己評価(あとで記入)