ab-test-calculator
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseA/B Test Calculator
A/B测试计算器
Statistical significance testing for A/B experiments with power analysis and sample size estimation.
为A/B实验提供统计显著性检验,包含功效分析与样本量估计功能。
Features
功能特性
- Significance Testing: Chi-square, Z-test, T-test for conversions
- Sample Size Estimation: Calculate required samples for desired power
- Power Analysis: Determine test power given sample size
- Confidence Intervals: Calculate CIs for conversion rates
- Multiple Variants: Support A/B/n testing
- Bayesian Analysis: Probability to beat baseline
- 显著性检验:用于转化率分析的Chi-square、Z-test、T-test
- 样本量估计:计算达到预期功效所需的样本量
- 功效分析:根据给定样本量确定测试功效
- 置信区间:计算转化率的置信区间(CIs)
- 多变体支持:支持A/B/n测试
- 贝叶斯分析:变体击败基准版本的概率
Quick Start
快速开始
python
from ab_test_calc import ABTestCalculator
calc = ABTestCalculator()python
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%}")
undefinedresult = 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%}")
undefinedCLI Usage
CLI使用方法
bash
undefinedbash
undefinedTest significance
检验显著性
python ab_test_calc.py --test 10000 500 10000 550
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
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
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
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
undefinedpython ab_test_calc.py --test-multi 10000 500 10000 550 10000 520
undefinedAPI Reference
API参考
ABTestCalculator Class
ABTestCalculator类
python
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) -> dictpython
class ABTestCalculator:
def __init__(self, alpha: float = 0.05)
# 显著性检验
def test_significance(self, control_visitors: int, control_conversions: int,
variant_visitors: int, variant_conversions: int,
test: str = "chi_square") -> dict
# 样本量计算
def calculate_sample_size(self, baseline_rate: float,
minimum_detectable_effect: float,
power: float = 0.8,
alpha: float = 0.05) -> dict
# 功效分析
def calculate_power(self, baseline_rate: float,
minimum_detectable_effect: float,
sample_size: int,
alpha: float = 0.05) -> dict
# 置信区间计算
def confidence_interval(self, visitors: int, conversions: int,
confidence: float = 0.95) -> dict
# 贝叶斯分析
def bayesian_analysis(self, control_visitors: int, control_conversions: int,
variant_visitors: int, variant_conversions: int,
simulations: int = 100000) -> dict
# 多变体测试
def test_multiple_variants(self, control: tuple, variants: list,
correction: str = "bonferroni") -> dict
# 测试时长估计
def estimate_duration(self, daily_visitors: int, baseline_rate: float,
minimum_detectable_effect: float,
power: float = 0.8) -> dictTest Methods
测试方法
Chi-Square Test (Default)
Chi-Square检验(默认)
Best for comparing conversion rates between groups.
python
result = calc.test_significance(
control_visitors=10000,
control_conversions=500,
variant_visitors=10000,
variant_conversions=550,
test="chi_square"
)最适合用于对比不同组之间的转化率。
python
result = calc.test_significance(
control_visitors=10000,
control_conversions=500,
variant_visitors=10000,
variant_conversions=550,
test="chi_square"
)Z-Test for Proportions
比例Z检验
Good for large sample sizes.
python
result = calc.test_significance(
control_visitors=10000,
control_conversions=500,
variant_visitors=10000,
variant_conversions=550,
test="z_test"
)适用于大样本量场景。
python
result = calc.test_significance(
control_visitors=10000,
control_conversions=500,
variant_visitors=10000,
variant_conversions=550,
test="z_test"
)Sample Size Estimation
样本量估计
Calculate the number of visitors needed per variant:
python
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
)计算每个变体所需的访客数量:
python
result = calc.calculate_sample_size(
baseline_rate=0.05, # 当前转化率(5%)
minimum_detectable_effect=0.10, # 10%的相对提升
power=0.8, # 80%的功效
alpha=0.05 # 5%的显著性水平
)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
}
undefined{
"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
}
undefinedPower Analysis
功效分析
Calculate the probability of detecting an effect:
python
result = calc.calculate_power(
baseline_rate=0.05,
minimum_detectable_effect=0.10,
sample_size=25000,
alpha=0.05
)计算检测到效应的概率:
python
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"
}
undefined{
"power": 0.72,
"interpretation": "72% chance of detecting the effect if it exists"
}
undefinedBayesian Analysis
贝叶斯分析
Get probability that variant beats control:
python
result = calc.bayesian_analysis(
control_visitors=10000,
control_conversions=500,
variant_visitors=10000,
variant_conversions=550
)获取变体击败对照组的概率:
python
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]
}
undefined{
"prob_variant_better": 0.9523,
"prob_control_better": 0.0477,
"expected_lift": 0.098,
"credible_interval_95": [0.02, 0.18]
}
undefinedMultiple Variant Testing
多变体测试
Test multiple variants with correction for multiple comparisons:
python
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"
)通过多重比较校正来测试多个变体:
python
result = calc.test_multiple_variants(
control=(10000, 500), # (访客数,转化数)
variants=[
(10000, 550), # 变体A
(10000, 520), # 变体B
(10000, 480) # 变体C
],
correction="bonferroni" # 可选值:"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"
}
undefined{
"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"
}
undefinedOutput Format
输出格式
Significance Test Result
显著性检验结果
python
{
"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"
}python
{
"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"
}Example Workflows
示例工作流
Pre-Test Planning
测试前规划
python
calc = ABTestCalculator()python
calc = ABTestCalculator()1. Estimate required sample size
1. 估计所需样本量
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")
sample = calc.calculate_sample_size(
baseline_rate=0.03, # 当前转化率3%
minimum_detectable_effect=0.15, # 希望检测到15%的提升
power=0.8
)
print(f"每个变体需要{sample['sample_size_per_variant']}位访客")
2. Estimate test duration
2. 估计测试时长
duration = calc.estimate_duration(
daily_visitors=5000,
baseline_rate=0.03,
minimum_detectable_effect=0.15
)
print(f"Test will take ~{duration['days']} days")
undefinedduration = calc.estimate_duration(
daily_visitors=5000,
baseline_rate=0.03,
minimum_detectable_effect=0.15
)
print(f"测试大约需要{duration['days']}天")
undefinedPost-Test Analysis
测试后分析
python
calc = ABTestCalculator()python
calc = ABTestCalculator()1. Test significance
1. 检验显著性
result = calc.test_significance(
control_visitors=15000,
control_conversions=450,
variant_visitors=15000,
variant_conversions=525
)
result = calc.test_significance(
control_visitors=15000,
control_conversions=450,
variant_visitors=15000,
variant_conversions=525
)
2. Get Bayesian probability
2. 获取贝叶斯概率
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%}")
undefinedbayes = calc.bayesian_analysis(15000, 450, 15000, 525)
print(f"P值: {result['p_value']:.4f}")
print(f"提升率: {result['lift']:.2%}")
print(f"变体获胜概率: {bayes['prob_variant_better']:.1%}")
undefinedDependencies
依赖项
- scipy>=1.10.0
- numpy>=1.24.0
- statsmodels>=0.14.0
- scipy>=1.10.0
- numpy>=1.24.0
- statsmodels>=0.14.0