実験を設計する ── A/B テストの論理
A/B テストは、プロダクト開発で使える最も強力な因果推定の道具である。前章で見たように、観察データからは相関しか分からない。実験なら、他の全てを揃えて「この施策が原因で、この結果が出た」と言える。
だが、この強力な道具は正しく使わないと期待外れの結論を生む。本章では、A/B テストの背後にある論理 ── なぜ実験が効くのか、どう設計すべきか、どこで詰まるか ── を掘っていく。
なぜ実験が特別なのか
実験の価値を理解するには、**反実仮想(counterfactual)**という概念から入るのが早い。
反実仮想:
「この機能を入れなかったら、ユーザーは何をしていたか?」
→ これは観測できない
→ 同じユーザーが同時に「入れた」と「入れなかった」の両方を経験できない
これを解く方法が、同じくらい似た別のユーザーを用意することである。
graph LR
A[全ユーザー母集団] -->|ランダム分割| B[Group A<br/>新機能あり]
A -->|ランダム分割| C[Group B<br/>新機能なし]
B --> D[結果を比較]
C --> D
D -->|差分 = 新機能の効果| E[因果推定]
style E fill:#9f9,stroke:#333
ランダム割当がすべて
A/B テストの魔法は、ランダム割当にある。これが効くから差分が因果と読める。
ランダム割当が保証するもの:
✅ Group A と Group B の「新機能以外の全て」が平均的に揃う
- ユーザー属性(年齢、地域、プラン)
- 行動パターン(ヘビー / ライト)
- 流入元・デバイス
- 未知の交絡要因(含む未来の気まぐれ)
✅ 観察しきれない要因まで「均される」
→ Ch.5 で見た「交絡の疑い」を自動的に解く
「ランダム割当できない」実験は、A/B テストとは呼ばない(呼べない)。これが Ch.7 の因果推定との境界線である。
実験が効かないケース
強力な道具だが、万能ではない。先に「実験が使えない / 使いにくい状況」を押さえておく。
ケース ①:サンプルが小さすぎる
実験が成立するには、検出したい効果量に応じた n が必要
例:CVR を 1% → 1.1% に上げたい(相対 10% 改善)
必要サンプル数: 数十万〜百万件レベル
例:CVR を 1% → 2% に上げたい(相対 100% 改善)
必要サンプル数: 数千〜1 万件レベル
小さな SaaS で「CVR を 1% 改善する実験」をしても
サンプルが集まらない → 実験は諦めて観察で判断
ケース ②:影響範囲が大きすぎる
「トップページの全面リニューアル」を A/B テストすると:
- B に当たったユーザーが SNS で混乱を訴える
- サポート問合せが殺到
- ブランド毀損リスク
実験よりも段階ロールアウト(Canary)のほうが適切な場合がある
ケース ③:ネットワーク効果がある
例:「友達招待機能」の A/B テスト
Group A(新機能あり)のユーザーが、Group B(機能なし)のユーザーを招待する
→ Group B にも影響が及ぶ(spillover)
→ ランダム割当の仮定が崩れる
解決:クラスター単位(チーム・学校・会社)で割当する
ただしクラスター単位は n が実質減る
ケース ④:判断が一方向の不可逆
例:「値上げの A/B テスト」
Group A(新価格)で離脱が大量に出たら、ユーザーは戻ってこない
ロールバックしても失った信頼は戻らない
→ 実験のコストがロールバック不可能なら、他の手段で検証
ケース ⑤:倫理・法的制約
例:医療・金融・教育の重要判断
「不利な体験」を故意に提供することの倫理
GDPR・消費者保護法の観点
→ 個別の法的判断が必要
A/B テスト至上主義は危険である。「実験が難しいときはどうするか」が Ch.7 の主題になる。
実験設計の基本要素
実験を回すには、以下の要素を事前に定義する。
実験設計書(Test Design)に書くもの:
① 仮説(Hypothesis)
「機能 X を提供すると、継続率が 5pt 以上改善する」
② 実験対象(Unit of Analysis)
ユーザー単位?セッション単位?デバイス単位?
③ 実験対象のセグメント(Targeting)
全ユーザー? 新規だけ? 特定プラン?
④ 割当比率(Allocation)
50:50? 90:10(徐々にロール)?
⑤ 主指標(Primary Metric)
「このテストの勝ち負けを決める指標」
⑥ カウンターメトリクス・ガードレール(Ch.3 の構造)
⑦ サンプルサイズと実施期間(次節)
⑧ 分析方法(t 検定、ベイズ、Sequential 検定等)
⑨ 決定ルール(判定基準)
「主指標が +2pt 以上、かつガードレール逸脱なし → 採用」
実験を始める前に、この全てを文書化する。これが Ch.2 の Decision-first の具体的な実装である。
サンプルサイズと MDE(最小検出可能効果)
実験で最も躓くのがここ。「何人集めればいい?」の問いに答えるには、**MDE(Minimum Detectable Effect)**の概念が要る。
MDE とは
MDE = この実験で「検出できる最小の効果量」
例:「CVR の相対 5% 改善」を検出したい
→ これを検出するには、最低 n = 10,000 必要
例:「CVR の相対 20% 改善」を検出したい
→ n = 2,000 で足りる
例:「CVR の相対 1% 改善」を検出したい
→ n = 250,000 必要
検出したい効果が小さいほど、必要サンプルは急激に増える(4 倍の効果検出には 1/16 のサンプル)。この関係を掴むのが実務感覚である。
サンプルサイズ計算の直感
厳密な公式ではなく、直感として:
必要サンプル ∝ 1 / (効果量)²
効果量が 1/2 になると、必要サンプルは 4 倍
効果量が 1/10 になると、必要サンプルは 100 倍
→ 「微妙な改善」を検出するには、膨大な n が要る
→ 小さな効果を追っても、現実的な期間で検出できない
実務での設計手順
① 現状のベース値を確認
例:現状の CVR は 2%
② 検出したい効果量を決める
例:「CVR 2% → 2.1%(相対 5% 改善)」を勝ちとしたい
③ 1 日あたりの対象ユーザー数を推定
例:1 日 5,000 ユーザーが対象
④ 必要 n を計算
例:50,000 人必要
⑤ 実験期間を出す
例:50,000 ÷ 5,000 = 10 日間
⑥ 現実的か判断
10 日なら OK → そのまま実験
100 日必要なら →「効果量の仮定を見直す」or「別の検証方法」
期間が非現実的なら、実験は諦めて別の判断方法を検討する。これは重要な判断である。
早期停止の罠(Peeking Problem)
A/B テストで最もよくある間違い。
症状
典型的なシナリオ:
実験開始:サンプル 0
3 日目:「p = 0.08、もうすぐ有意!」
5 日目:「p = 0.04、有意!勝ちを宣言!」
→ 実はこれが罠
なぜ問題か
途中で何度も覗きながら「有意になったら止める」を繰り返すと、偶然有意が出る確率が跳ね上がる。本当は効果がないのに「勝った」と結論する確率が、見かけの p 値より遥かに高くなる。
たとえば:
通常の「5% 有意水準」= 間違って勝ちと判断する確率 5%
毎日 p 値を覗いて「有意になったら止める」を 30 日やる
→ 実際の誤判断率は 20〜30% に跳ね上がる
→ 「勝った」の 4 回に 1 回は偶然
対策
対策 ①:サンプルサイズを事前に決める
→ 決めた n に達するまで見ない
→ 不便だが最も安全
対策 ②:Sequential 検定(逐次検定)を使う
→ 途中で覗くことを前提にした統計手法
→ Evan Miller の mSPRT、Optimizely のベイジアンなど
→ 覗ける代わりに「勝ち判定の閾値」が厳しくなる
対策 ③:ベイズ統計での判定
→ 「勝ちである確率」で判定
→ 直感的だが事前分布の設定に注意
**「途中で覗かない」or「覗くなら手法を変える」**のどちらかを選ぶ。素朴に p 値を毎日見るのが一番危険。
統計的有意と実務的有意のズレ
ここが、A/B テストを運用する上での最大の落とし穴かもしれない。
統計的有意(Statistical Significance):
「差は偶然ではない」と言える
実務的有意(Practical Significance):
「差が大きくて価値がある」と言える
この二つは別物。
巨大 n では、どんな差も統計的有意になる
n = 100 万でテスト:
CVR 2.00% vs 2.01%、p < 0.001
「統計的に有意」 → 勝った!と宣言できる
しかし差は 0.01pt、実務的に価値ある?
実装コスト・メンテコストを上回る?
小さな n では、大きな差でも有意にならない
n = 100 でテスト:
Group A:30%、Group B:20%
「10pt 差」だが、p = 0.15(有意ではない)
「有意でない」とただ結論すると、本当の効果を見逃す
→ 「この n では検出できなかった」が正しい解釈
実務的有意を守る工夫
実験の決定ルールに、実務的有意の閾値を組み込む:
❌ 「p < 0.05 なら採用」
✅ 「p < 0.05 かつ 効果量 ≥ 相対 2% なら採用」
✅ 「95% 信頼区間の下限が +1% 以上なら採用」
これで「統計的に勝ったが実務的に無意味」な変更を防げる
複数指標を同時に追う罠(Multiple Comparisons)
「10 個の指標を測って、1 つでも有意になれば勝ち」── これも誤り。
10 個の独立な指標を、5% 有意水準で判定:
どれか一つが偶然「有意」になる確率:
1 - (0.95)^10 ≈ 40%
→ 本当は全部効果ゼロでも、約 40% の確率で
「どこかの指標で勝った」と宣言してしまう
対策
対策 ①:主指標を 1 つに絞る
→ 複数測っていいが、判定は主指標だけ
→ 副指標は「参考」として扱う
対策 ②:補正を入れる(Bonferroni 等)
→ 10 指標なら、閾値を 0.05 → 0.005 に
→ 厳しくなりすぎる傾向、実務ではあまり使わない
対策 ③:事前登録(Pre-registration)
→ 実験前に「主指標・副指標・判定基準」を宣言
→ 後から「有意になった指標」を選ばない
実験前にどの指標で判定するかを決める、これが最も実用的な解である。
新規性バイアスとリバウンド
実験を長期で見ないと、初日だけ効いたが後で消える効果に騙される。
典型パターン:
新機能をリリース
↓ 最初の数日
「新しさ」でクリック率が跳ねる ── 新規性バイアス
↓ 2〜3 週間後
新鮮味が消えて元に戻る ── リバウンド
実験を 1 週間で止めて勝ちを宣言すると:
→ リリース後に「あれ?数字落ちた」と気付く
対策
対策 ①:実験期間を長めに取る(最低 2 週間、できれば 4 週間)
→ 新規性バイアスが減衰するのを待つ
対策 ②:日次で効果の推移を見る
→ 初日 +15%、1 週間後 +5% という推移が見えれば警戒
対策 ③:既存ユーザーと新規ユーザーで分けて見る
→ 新規性バイアスは既存ユーザーで特に強い
リリース後のポストローンチ分析(Ch.7)とセットで初めて、実験結果の信頼性が上がる。
段階ロールアウトと実験の関係
A/B テストは「50:50 で比較する」だけでなく、段階ロールアウトの形でも使われる。
graph TD
A[1%<br/>Canary] -->|数日様子見| B[5%]
B -->|問題なし| C[25%]
C -->|問題なし| D[50%]
D -->|問題なし| E[100%]
A -.ガードレール逸脱.-> X[ロールバック]
B -.ガードレール逸脱.-> X
C -.ガードレール逸脱.-> X
D -.ガードレール逸脱.-> X
段階ロールアウトの価値:
✅ 爆死のリスクを抑える(1% で異常があれば止める)
✅ 段階ごとにメトリクスが動くか観察
✅ インフラの負荷も段階的に確認
A/B テストとの違い:
- A/B テストは「効果の検出」が目的
- 段階ロールアウトは「リスク管理」が目的
- 両者は組み合わせることが多い
(最初の 10% までは実験として厳密に、その後は段階ロール)
実験ができないときの段階ロールアウト
n が小さすぎて実験が成立しない場合でも、段階ロールアウトだけは実施する価値がある。
n が小さい環境での現実的な設計:
1% に出す → メトリクス観察 → 問題なし
10% に出す → 観察 → 問題なし
50% に出す → 観察 → 問題なし
100% に出す
この間、厳密な「有意性検定」はできないが:
✅ 致命的な悪化は見える
✅ ガードレール逸脱は検出できる
✅ 「とりあえず全量出す」より遥かに安全
Ch.7 で扱う「実験できないときの因果推定」は、この延長線上の話題である。
ベイズ的 vs 頻度主義(Frequentist)
最後に、統計学的流派の話を軽く触れる。実務では知らなくても回るが、ツール選定に影響する。
違いを直感で
頻度主義(Frequentist):
「この差が偶然である確率」を p 値で評価
→ 「p < 0.05 なら採用」
→ 大多数の A/B テストツールはこれ
ベイズ(Bayesian):
「機能 A が勝っている確率」を直接計算
→ 「90% の確率で A が勝っている」と言える
→ Optimizely、Statsig の一部モードはこれ
どちらを使うか
頻度主義が向くケース:
✅ 大規模サンプルが取れる
✅ 組織の統計的リテラシーが p 値慣れしている
✅ 厳密な「有意判定」が必要(医療・規制産業)
ベイズが向くケース:
✅ サンプルが小さい
✅ 「勝ち確率」で直感的に議論したい
✅ Peeking(途中での覗き見)を前提にしたい
✅ 事前情報を活用したい
「どちらが正しい」ではなく「どちらが伝わりやすいか」で選んでよい。迷ったらツールのデフォルトで。
本章のまとめ
✅ A/B テストの魔法はランダム割当
「他の全て」が平均的に揃うから、差分が因果と読める
✅ 実験が効かないケース:
サンプル小、影響大、ネットワーク効果、不可逆、倫理的制約
→ 実験至上主義は危険
✅ 実験設計書に 9 要素を事前定義
仮説・対象・割当・主指標・カウンター・ガードレール・サンプル・分析・決定ルール
✅ MDE から逆算して必要サンプル・期間を決める
効果量が 1/2 で必要 n は 4 倍
非現実的な期間なら実験を諦める判断も
✅ 早期停止の罠(Peeking Problem):
毎日覗いて有意になったら止める、をやると誤判断率が跳ね上がる
→ 事前に n を決めるか、Sequential 検定を使う
✅ 統計的有意と実務的有意は別
巨大 n では微差も有意になる → 閾値に効果量も入れる
✅ 複数指標を追うと偽陽性が増える
主指標 1 つに絞る、事前登録する
✅ 新規性バイアスとリバウンド
最低 2〜4 週間、日次推移も見る
✅ 段階ロールアウトは実験と目的が違う
実験=効果検出、段階ロール=リスク管理
両者は組み合わせる
✅ ベイズ vs 頻度主義は「伝わりやすさ」で選んでよい
実験ができる幸運は常にあるわけではない。Ch.5 の Simpson のパラドックスで見たように、観察データから因果を推定するには別の技法が要る。次章では実験できないときの因果推定を扱う。