Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ ランダム化とサンプルサイズ | 効果的なA/Bテストの設計
PythonによるA/Bテスト

ランダム化とサンプルサイズ

メニューを表示するにはスワイプしてください

ランダム割り当ては、信頼性の高いA/Bテストの基盤。ユーザーを無作為にグループに割り当てることで、両グループが統計的に類似し、選択バイアスのリスクが低減。選択バイアスは、特定のユーザーが他のグループよりも一方のグループに割り当てられやすい場合に発生し、結果が歪められ誤った結論につながる可能性がある。適切なランダム化がなければ、グループ間の違いはテストしている変数ではなく、根本的な特性によって生じる可能性がある。

A/Bテストで一般的に使用されるランダム化手法には以下がある:

  • 単純ランダム化:各ユーザーがどのグループにも等しい確率で割り当てられる。多くの場合、乱数生成器を使用;
  • ブロックランダム化:ユーザーをブロックに分け、各ブロック内でユーザーをランダムに異なるグループに割り当て、テスト全体でバランスを維持;
  • 層別ランダム化:ユーザーを年齢や地域などの特性に基づいて層に分け、各層内でランダム化を行い、すべてのサブグループが代表されるようにする。

単純ランダム化は最も基本的で、多くのデジタル実験で十分。ただし、サンプルサイズが小さい場合や重要なサブグループがある場合は、より高度な手法がバランス維持に役立つ。

1234567891011121314151617
import random # Simulating random assignment of 20 users to groups 'A' and 'B' users = [f"user_{i+1}" for i in range(20)] groups = ['A', 'B'] # Dictionary to hold group assignments assignment = {} for user in users: # Randomly choosing a group for each user assigned_group = random.choice(groups) assignment[user] = assigned_group # Printing out the assignment for user, group in assignment.items(): print(f"{user} assigned to group {group}")

適切なサンプルサイズの決定は、A/Bテスト結果の信頼性にとって重要。サンプルが小さすぎると信頼性の低い、または結論の出ない結果となり、逆に大きすぎるとリソースの無駄遣いとなる。サンプルサイズはテストの統計的検出力(真の差が存在する場合にそれを検出できる確率)に直接影響。

サンプルサイズ計算の主要な概念:

  • 最小検出効果(MDE):検出したいグループ間の最小差;
  • 有意水準(アルファ):偽陽性の確率(一般的に0.05に設定);
  • 検出力(1 - ベータ):真の効果を検出できる確率(一般的に0.8または80%)。

検出力分析は、これらの要素を組み合わせて各グループに必要な最小ユーザー数を推定。効果量が大きい、または有意水準が高い場合は必要なユーザー数が少なく、効果が小さい、または検出力が高い場合はより多くのユーザーが必要。

12345678910111213141516171819202122
from scipy.stats import norm import math # Parameters for sample size calculation alpha = 0.05 # Significance level power = 0.8 # Desired power p1 = 0.10 # Baseline conversion rate (control group) p2 = 0.13 # Expected conversion rate (treatment group) effect_size = abs(p2 - p1) # Minimum detectable effect # Calculate pooled standard deviation pooled_prob = (p1 + p2) / 2 std_dev = math.sqrt(2 * pooled_prob * (1 - pooled_prob)) # Z-scores for alpha and power z_alpha = norm.ppf(1 - alpha / 2) z_beta = norm.ppf(power) # Sample size formula for two-proportion z-test n = ((z_alpha + z_beta) * std_dev / effect_size) ** 2 print(f"Required sample size per group: {math.ceil(n)}")
question mark

A/Bテストにおいて、不適切なランダム化やサンプルサイズが小さすぎる場合の主なリスクは何ですか?

正しい答えを選んでください

すべて明確でしたか?

どのように改善できますか?

フィードバックありがとうございます!

セクション 2.  2

AIに質問する

expand

AIに質問する

ChatGPT

何でも質問するか、提案された質問の1つを試してチャットを始めてください

セクション 2.  2
some-alt