「とりあえず1週間」の落とし穴

施策を打ったあと「とりあえず1週間回して判断しよう」という意思決定はよく見られます。しかし終わってから「そもそもサンプルが足りなかった」と気づいても、すでに遅いです。

A/Bテストで「有意差なし」という結論を出すとき、それには2通りの解釈があります。

  • 真に効果がない
  • 効果はあるがサンプルが少なすぎて検出できなかった

この2つを区別するには、実験を始める前にサンプルサイズを計算しておく必要があります。

サンプルサイズを決める3つのパラメータ

必要なサンプルサイズは次の3つで決まります。

有意水準 α(アルファ)は、効果がないのに「あった」と誤判定してしまう確率です。一般的に5%(0.05)が使われます。これを小さくすれば誤検出は減りますが、それだけ多くのサンプルが必要になります。

検出力 1-β(ベータ補数)は、真の効果を正しく検出できる確率です。「テストの感度」とも言えます。通常は80%(0.80)が標準的な基準で、逆に言えば同じ実験を繰り返しても20%は「効果なし」と誤判定します。

効果量は、検出したいコンバージョン率の最小の差です。「1%の差を拾いたいのか、0.5%の差まで感度を高めたいのか」によって必要なサンプルは大きく変わります。

サンプルサイズの計算は「このテストで何を見つけたいか」を事前に定義する作業でもあります。

計算式と具体例

二項比率の2標本検定における1グループあたりのサンプルサイズは次の式で近似されます。

n \approx \frac{(z_{\alpha/2} + z_{\beta})^2 \cdot (p_1(1-p_1) + p_2(1-p_2))}{(p_1 - p_2)^2}

ここで z_{\alpha/2} は有意水準の棄却域境界(両側5%なら1.96)、z_{\beta} は検出力に対応する値(80%なら0.84)です。

具体例として、ベースラインの CVR(コンバージョン率)が5%のページに施策を加え、6%になるかどうかを検証したい場合(差 +1pt)を考えます。

  • p_1 = 0.05p_2 = 0.06
  • \alpha = 0.05(両側)、1-\beta = 0.80
  • 計算結果:1グループあたり約 3,843 件(合計約 7,686 件)

つまり対照群・介入群それぞれ約4,000件のデータを集めて初めて、1ptの差を80%の確率で検出できます。

検出力80%の意味

検出力を80%と設定したとき、同じ実験を5回繰り返せば統計的には1回は「効果なし」と誤判定します(偽陰性)。

下の図はその概念を示しています。帰無仮説(効果なし)と対立仮説(効果あり)の2つの分布が重なる領域がエラーの源です。

検出力の概念図。帰無仮説と対立仮説の正規分布、α・β・1-βの各領域を色分けで示す

α(偽陽性)と β(偽陰性)はトレードオフの関係にあります。α を小さくすれば偽陽性は減りますが、分布の重なりが増えて β が大きくなります。この両方を小さく保つには、分布を十分に引き離す——つまり多くのサンプルを集めるしかありません。

効果量が小さいほどサンプルは急増する

下のグラフは、差が0.5%から3.0%まで変化したときの必要サンプルサイズ(片側)を示しています。

効果量(CVR差)と必要サンプルサイズの関係グラフ。差が小さいほどサンプルは急増する

差が1%なら約3,843件ですが、0.5%を検出しようとすると14,740件と約4倍に跳ね上がります。効果量はサンプルサイズに対して2乗で効いてくるため、わずかな差を検出しようとするとコストが急増します。

小さな改善も取りこぼしたくないという気持ちは理解できますが、現実的に集められるデータ量から逆算して「この実験で検出可能な最小効果量はいくつか」を先に決めるのが実用的なアプローチです。

Python での計算例

statsmodels を使えば数行で計算できます。

from statsmodels.stats.power import NormalIndPower
from statsmodels.stats.proportion import proportion_effectsize

# ベースライン CVR 5%、介入後 6% を想定
effect = proportion_effectsize(0.05, 0.06)

analysis = NormalIndPower()
n = analysis.solve_power(
    effect_size=effect,
    alpha=0.05,
    power=0.80,
    alternative='two-sided'
)

print(f"1グループあたり必要サンプル数: {n:.0f}")
# → 1グループあたり必要サンプル数: 3843 件

alternative='two-sided' が両側検定、'larger' / 'smaller' で片側検定になります。効果の方向が明確な場合は片側検定でサンプルを減らすことも選択肢ですが、事前に仮説の方向を明示することが前提です。

ビジネスでの運用

実務ではツールを使うことが多いです。

  • Evan Miller の Sample Size Calculator — ブラウザで即計算できる定番ツール。
  • statsmodels(Python)— 上記のコードが使えます。
  • pwr パッケージ(R)— pwr.2p.test() で同様の計算が可能。

また、事前登録(pre-registration)も重要です。実験前に「何を主指標とするか」「どのくらいの差を検出したいか」「いつ終了するか」を文書化しておくことで、後付けの解釈(p-hacking)を防ぎます。

Google Optimize や Optimizely などの A/B テストツールはサンプルサイズ計算を内蔵していますが、デフォルト設定が実情に合わない場合もあるため、パラメータの意味を理解した上で調整することを推奨します。

まとめ

実験設計の手順チェックリストです。

  • 主指標(CVR など)とベースライン値を決める
  • 検出したい最小効果量(差)を定義する
  • 有意水準 α(通常 5%)と検出力 1-β(通常 80%)を設定する
  • 必要サンプルサイズを計算し、実現可能かを確認する
  • 実験の終了条件(サンプル数 or 期間)を事前に決める
  • 上記を文書化(事前登録)してから実験を開始する

「とりあえず回してみる」ではなく、実験の感度を事前に設計することが、A/Bテストを本当の意思決定ツールにする第一歩です。

出典