Bell Statistics
Planning a test? Go to our A/B test sample size calculator

A/B test analysis calculator

This calculator helps you calculate confidence intervals for your lift and p-values, giving you both an estimate of the effect size and an assessment of whether the observed effect is statistically significant or could plausibly be due to chance.

Calculator

Choose your KPI type

A yes/no outcome for each user (e.g., converted or not).

Test data
Test parameters
Two-proportion test result
p-value—two-sided
Lift—
Confidence interval (lift)[—, —]95% confidence, two-sided

When to use it

Use this calculator when you want to analyze a binary outcome — for example, converted or not, signed up or not, or active on day 7 — and you are comparing two independent groups.

Check for a sample ratio mismatch before you read any further. If the split is significantly different from what you configured, something upstream is broken — and you cannot proceed to this analysis until it's resolved, because no amount of statistics downstream repairs a comparison between groups that were never actually randomised.

Assumptions

The calculation assumes:

  • Random assignment: observations are independently assigned to the two groups.
  • Independent observations: each randomized unit contributes one observation, and observations from different units are assumed to be independent.
  • A sufficiently large sample: the calculation uses a normal approximation. For very small expected counts, use an exact method such as Fisher's test instead.

How the calculation works

The calculator computes the observed conversion rate in each group, then reports two related but independently calculated quantities: the lift, with its confidence interval via the log risk-ratio method, and the absolute difference, with its own confidence interval via the standard normal approximation for two proportions. Let μ_c and μ_t denote the control and test conversion rates, and n_control and n_test the respective sample sizes.

Log risk ratio, and its standard error
log(RR) = log(μt) − log(μc)
SE[log(RR)] = √[Vartntest · μt² + Varcncontrol · μc²]

Var_c and Var_t measure how much each group's conversion rate could vary by chance. By default, we assume both groups convert at the same underlying rate and use one shared (pooled) estimate; tick the box to let each group use its own instead.

The test statistic and its p-value
z = log(RR)SE[log(RR)]
Two-sided: p = 2·(1 − Φ(|z|))
One-sided: p = 1 − Φ(z)

z measures how many standard errors the observed lift is from zero (no difference). The p-value converts that into a probability: how likely a difference this large would be if there were really no effect. For a two-sided test, a small p-value and an interval that excludes zero always agree — they are the same calculation. For a one-sided test, that is no longer guaranteed: the p-value can clear your significance level while the interval — always two-sided, see below — still includes zero.

Confidence interval for the lift
[ exp(log(RR) − zcrit·SE[log(RR)]) − 1, exp(log(RR) + zcrit·SE[log(RR)]) − 1 ]
zcrit = z1−α/2

The math is done on a log scale and converted back at the end. That keeps the interval from ever going below −100% (you cannot lose more conversions than you had) and naturally makes it wider on the upside than the downside, which is how lift actually behaves. The reported lift itself is exp(log(RR)) − 1, numerically the same as (μ_t − μ_c) / μ_c. This interval is always two-sided, even for a one-sided test — a one-sided version would have no upper or lower limit at all, which is not useful to show.

Absolute difference and its interval
diff = μt − μc
SE[diff] = √[μc(1−μc)ncontrol + μt(1−μt)ntest]
[ diff ± zcrit · SE[diff] ]

This interval uses each group's own variance, not a shared pooled estimate, and is calculated separately from the lift interval above. So the two numbers will not match up exactly — that is expected, not an error.

Interpreting the output

A p-value below your chosen significance level (α) indicates the observed difference is unlikely to have occurred by chance alone — the difference between the two groups is statistically significant. If the difference is in the desired direction, this supports moving forward with implementation. If the p-value is at or above α, there is insufficient support for a true difference between the two groups, and implementation should not proceed based on this result alone.

The confidence intervals give a range of plausible values for the true lift and the true absolute difference — the narrower the interval, the more precise your estimate. Statistical significance does not necessarily imply practical significance; consider the size of the estimated lift alongside the p-value when deciding whether to implement a change.

Worked example

Suppose your control group had 4,000 conversions out of 100,000 users (4.0% conversion rate), and your test group had 4,200 conversions out of 100,000 users (4.2% conversion rate).

Conversions, control
4,000
Observations, control
100,000
Conversions, test
4,200
Observations, test
100,000
Significance level (α)
0.05
Tails
Two-tailed
Variance
Pooled (default)

Conversion rates of 4.00% and 4.20% — an absolute difference of +0.20 percentage points and a relative lift of +5.0%. The test yields a p-value of approximately 0.024, which is below α = 0.05. The 95% confidence interval for the lift is approximately [0.64%, 9.55%], and for the absolute difference approximately [0.03, 0.37] percentage points.

Since the p-value is below α, the result is statistically significant: there is sufficient evidence of a difference between the groups that is unlikely to be due to chance alone. Since the observed effect favors the test version, you could consider moving forward with implementation. Note how much less precise the estimate is than the headline: the point estimate is a 5% improvement and the data is consistent with anything from 0.6% to 9.6%.

Frequently asked questions

My result is significant but the interval is huge. What now?
You have established a direction and not a magnitude. That is a legitimate outcome and it is often enough to ship — if the whole interval sits above the threshold that justifies the change, the decision is clear whatever the true value is. When the interval straddles that threshold, significance has not settled the business question, and running longer to narrow it is a real option rather than an admission of failure. What you should not do is quote the point estimate as the expected result: it is the single least likely value in a wide range to be exactly right.
p is 0.06. Can I call it a trend?
No, and 0.049 is not a discovery either. The threshold is a convention you adopted in advance to control a long-run error rate, not a property of the evidence — 0.049 and 0.051 are the same result and calling one a win and the other a trend is having it both ways. Report the estimate and its interval, say the test did not reach the threshold you set, and let the interval carry the nuance. If the decision genuinely cannot wait, say that it is being made on incomplete evidence and record what the interval was.
One group converted nobody. Why is the relative effect blank?
Because dividing by zero does not produce a large number, it produces no number. The relative effect is the difference as a share of the control rate, and a control rate of zero has no share to take. The absolute difference and its interval are unaffected and are the right things to read — Newcombe's interval is built from each group's Wilson limits and behaves correctly at the boundary, which is the specific reason this page uses it. No 0.5 has been added to any cell to make the ratio finite, because that would change the estimate to make the display tidier.
Do I need to check anything before reading this?
Check the split. If assignment was meant to be 50/50 and one group is meaningfully larger, something upstream is dropping or duplicating users, and whatever is doing that is very unlikely to be doing it evenly with respect to the metric. A sample ratio mismatch invalidates the comparison rather than adding noise to it, so it has to be settled before the conversion numbers mean anything. Put the two group sizes into the chi-square goodness-of-fit calculator against your intended ratio — it takes a minute and it is the cheapest bug detector an experiment has.

Related calculators

  • A/B test sample size

    Size an experiment before you launch, for a binary, continuous or ratio KPI — each with its own design and its own assumptions.

  • SRM check

    Check whether your experiment actually split traffic the way you configured it — the first thing to run, before any metric.

  • One-proportion z-test

    Test one observed rate against a fixed target — an SLA, a benchmark, a contractual floor.

  • MDE calculator

    Given a fixed sample size, find the smallest effect your A/B test is powered to detect — for a binary, continuous or ratio KPI.

Talk to the people who build these for a living

We read experiments where the metric, the decision rule and the threshold were agreed before anyone looked at the data. A/B Testing

References

  • Newcombe, R. G. (1998). Interval estimation for the difference between independent proportions: comparison of eleven methods. Statistics in Medicine, 17(8), 873-890.
  • Katz, D., Baptista, J., Azen, S. P., & Pike, M. C. (1978). Obtaining confidence intervals for the risk ratio in cohort studies. Biometrics, 34(3), 469-474.
  • Kohavi, R., Tang, D., & Xu, Y. (2020). Trustworthy Online Controlled Experiments: A Practical Guide to A/B Testing. Cambridge University Press.