ab-test-calculator について
ab-test-calculator は、A/B テストの計画と分析に使う統計ツールです。コンバージョン率の変化を調べるチーム向けで、有意差検定やベイズ分析、複数バリアントの比較に対応します。
主な機能
- 01カイ二乗・Z・T 検定
- 02サンプルサイズと検出力の分析
- 03コンバージョン率の信頼区間
- 04複数バリアントの検定と補正
- 05ベイズ分析による勝率
活用シーン
- 01バリアントごとの必要訪問者数の推定
- 02グループ間のコンバージョン差の検定
- 03多重比較補正を用いたバリアント比較
- 04サンプルサイズに応じた検出力の評価
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ dkyazzentwatwa/ chatgpt-skills --skill ab-test-calculatorインストール後、Claude Code で/ab-test-calculatorを入力して読み込まれたか確認します。
同梱ファイルscripts/ab_test_calc.pyscripts/requirements.txt
詳細
A/B テスト計算ツール
検出力分析とサンプルサイズ推定を備えた、A/B 実験の統計的有意性検定です。
機能
- 有意性検定:コンバージョンのカイ二乗検定、Z 検定、T 検定
- サンプルサイズ推定:希望する検出力に必要なサンプル数を計算します
- 検出力分析:サンプルサイズをもとに検定の検出力を算出します
- 信頼区間:コンバージョン率の信頼区間を計算します
- 複数バリアント:A/B/n テストに対応します
- ベイズ分析:ベースラインを上回る確率を算出します
クイックスタート
from ab_test_calc import ABTestCalculator
calc = ABTestCalculator()
# Test significance
result = calc.test_significance(
control_visitors=10000,
control_conversions=500,
variant_visitors=10000,
variant_conversions=550
)
print(f"Significant: {result['significant']}")
print(f"P-value: {result['p_value']:.4f}")
print(f"Lift: {result['lift']:.2%}")
CLI の使用方法
# Test significance
python ab_test_calc.py --test 10000 500 10000 550
# Calculate sample size
python ab_test_calc.py --sample-size --baseline 0.05 --mde 0.10 --power 0.8
# Power analysis
python ab_test_calc.py --power-analysis --baseline 0.05 --mde 0.10 --samples 5000
# Bayesian analysis
python ab_test_calc.py --bayesian 10000 500 10000 550
# Multiple variants
python ab_test_calc.py --test-multi 10000 500 10000 550 10000 520
API リファレンス
ABTestCalculator クラス
class ABTestCalculator:
def __init__(self, alpha: float = 0.05)
# Significance testing
def test_significance(self, control_visitors: int, control_conversions: int,
variant_visitors: int, variant_conversions: int,
test: str = "chi_square") -> dict
# Sample size calculation
def calculate_sample_size(self, baseline_rate: float,
minimum_detectable_effect: float,
power: float = 0.8,
alpha: float = 0.05) -> dict
# Power analysis
def calculate_power(self, baseline_rate: float,
minimum_detectable_effect: float,
sample_size: int,
alpha: float = 0.05) -> dict
# Confidence interval
def confidence_interval(self, visitors: int, conversions: int,
confidence: float = 0.95) -> dict
# Bayesian analysis
def bayesian_analysis(self, control_visitors: int, control_conversions: int,
variant_visitors: int, variant_conversions: int,
simulations: int = 100000) -> dict
# Multiple variants
def test_multiple_variants(self, control: tuple, variants: list,
correction: str = "bonferroni") -> dict
# Duration estimation
def estimate_duration(self, daily_visitors: int, baseline_rate: float,
minimum_detectable_effect: float,
power: float = 0.8) -> dict
検定方法
カイ二乗検定(デフォルト)
グループ間のコンバージョン率の比較に最適です。
result = calc.test_significance(
control_visitors=10000,
control_conversions=500,
variant_visitors=10000,
variant_conversions=550,
test="chi_square"
)
比率の Z 検定
サンプルサイズが大きい場合に適しています。
result = calc.test_significance(
control_visitors=10000,
control_conversions=500,
variant_visitors=10000,
variant_conversions=550,
test="z_test"
)
サンプルサイズの推定
バリアントごとに必要な訪問者数を計算します:
result = calc.calculate_sample_size(
baseline_rate=0.05, # Current conversion rate (5%)
minimum_detectable_effect=0.10, # 10% relative improvement
power=0.8, # 80% power
alpha=0.05 # 5% significance level
)
# Returns:
{
"sample_size_per_variant": 31234,
"total_sample_size": 62468,
"baseline_rate": 0.05,
"expected_variant_rate": 0.055,
"minimum_detectable_effect": 0.10,
"power": 0.8,
"alpha": 0.05
}
検出力分析
効果を検出できる確率を計算します:
result = calc.calculate_power(
baseline_rate=0.05,
minimum_detectable_effect=0.10,
sample_size=25000,
alpha=0.05
)
# Returns:
{
"power": 0.72,
"interpretation": "72% chance of detecting the effect if it exists"
}
ベイズ分析
バリアントがコントロールを上回る確率を算出します:
result = calc.bayesian_analysis(
control_visitors=10000,
control_conversions=500,
variant_visitors=10000,
variant_conversions=550
)
# Returns:
{
"prob_variant_better": 0.9523,
"prob_control_better": 0.0477,
"expected_lift": 0.098,
"credible_interval_95": [0.02, 0.18]
}
複数バリアントのテスト
多重比較の補正を適用して複数のバリアントをテストします:
result = calc.test_multiple_variants(
control=(10000, 500), # (visitors, conversions)
variants=[
(10000, 550), # Variant A
(10000, 520), # Variant B
(10000, 480) # Variant C
],
correction="bonferroni" # or "holm", "none"
)
# Returns:
{
"control": {"visitors": 10000, "conversions": 500, "rate": 0.05},
"variants": [
{"visitors": 10000, "conversions": 550, "rate": 0.055,
"lift": 0.10, "p_value": 0.012, "significant": True},
...
],
"winner": "Variant A",
"correction_method": "bonferroni"
}
出力形式
有意性検定の結果
{
"significant": True,
"p_value": 0.0234,
"control_rate": 0.05,
"variant_rate": 0.055,
"lift": 0.10,
"lift_absolute": 0.005,
"confidence_interval": {
"lower": 0.02,
"upper": 0.18
},
"test_method": "chi_square",
"alpha": 0.05,
"recommendation": "Variant shows significant improvement"
}
ワークフローの例
テスト前の計画
calc = ABTestCalculator()
# 1. Estimate required sample size
sample = calc.calculate_sample_size(
baseline_rate=0.03, # Current 3% conversion
minimum_detectable_effect=0.15, # Want to detect 15% lift
power=0.8
)
print(f"Need {sample['sample_size_per_variant']} visitors per variant")
# 2. Estimate test duration
duration = calc.estimate_duration(
daily_visitors=5000,
baseline_rate=0.03,
minimum_detectable_effect=0.15
)
print(f"Test will take ~{duration['days']} days")
テスト後の分析
calc = ABTestCalculator()
# 1. Test significance
result = calc.test_significance(
control_visitors=15000,
control_conversions=450,
variant_visitors=15000,
variant_conversions=525
)
# 2. Get Bayesian probability
bayes = calc.bayesian_analysis(15000, 450, 15000, 525)
print(f"P-value: {result['p_value']:.4f}")
print(f"Lift: {result['lift']:.2%}")
print(f"Probability variant wins: {bayes['prob_variant_better']:.1%}")
依存関係
- scipy>=1.10.0
- numpy>=1.24.0
- statsmodels>=0.14.0
コメント
Markdown 対応