Statistics

What Is CUPED? Reducing A/B Test Variance

CUPED is a variance reduction technique that uses pre-experiment data to shorten A/B test duration without losing statistical rigor.

Abstract illustration of two overlapping bell curves, one wide and noisy, one narrow and clean, representing the variance reduction CUPED brings to an A/B test

CUPED (Controlled-experiment Using Pre-Experiment Data) is a variance reduction technique that uses a metric from the period BEFORE a test, measured on the same user, to explain away part of the noise in the metric you are testing, which lowers residual variance and makes the test more sensitive without adding traffic. It came out of a 2013 Microsoft paper and is now the standard variance-reduction method across experimentation platforms at Netflix, Booking.com, and much of the A/B testing industry. If you have already read our guide to A/B testing statistical significance, CUPED answers the most common problem that guide leaves out: what to do when your real conversion lift is genuine, but the test stays inconclusive because your traffic is not large enough to prove it in time.

The problem: average-traffic sites pay a premium for statistical power

Every honest A/B test needs enough sample to separate a real effect from chance. That sample size depends, among other things, on the variance of the metric you are measuring: the more that metric swings from visitor to visitor for reasons that have nothing to do with your change, the more people you need to see the signal through the noise. Revenue-per-user, session counts, or time spent in a product tend to have much higher variance than a simple binary conversion rate (bought or did not buy), because a handful of users who spend far above average drag the whole variance upward.

In practice, that means months of testing to detect an effect that genuinely exists. A team with average traffic testing a change that lifts revenue per user by 5% might need a sample so large the test never finishes before the roadmap moves on. The obvious fix, wait longer, costs market timing; the risky fix, lower your rigor, costs trustworthiness. CUPED attacks the problem from a third angle: instead of touching rigor or waiting for more traffic, it reduces the noise the sample has to overcome.

The core idea: a covariate that already existed before the test

The intuition behind CUPED is easy to state: if you already know, before the test even starts, that a user historically spends a lot or a little, that prior information explains a slice of the value they will generate during the test, regardless of which variation they saw. A customer who spent $500 a month before the experiment tends to land in a similar range afterward, and that tendency has nothing to do with A or B. If you can “subtract out” that predictable slice of the metric, what is left over (the residual) has less variance, and it is inside that cleaner residual that the difference between A and B becomes easier to see.

Formally, that pre-experiment covariate is called X, and the metric the test measures is called Y. The adjusted metric, called Y-CUPED, is:

Ycuped = Y − θ · (X − E[X])

Where θ (theta) is the coefficient that captures how much of X explains Y, computed as:

θ = Cov(Y, X) ÷ Var(X)

Term by term: Y is the metric’s value during the test (revenue, sessions, whatever you are measuring); X is the value of that same metric (or a correlated one) for the same user, before the test started; E[X] is the average of X across the whole population; and θ is exactly the coefficient of a simple linear regression of Y on X, the value that minimizes the residual’s variance. Notice what that subtraction does: when X sits above average (the user historically spends more), the term θ·(X − E[X]) is positive and gets subtracted from Y, removing the slice of Y’s value that was already expected from the user’s history, not from the variation they saw.

How the pre-experiment covariate explains part of the observed valueEach point is a user. The horizontal axis is the metric value before the test (X); the vertical axis is the value during the test (Y). The line shows the expected relationship between the two; the vertical distance of each point from the line is the residual left after the CUPED adjustment, with less variance than the raw Y.Y · value during the testX · pre-experiment value (same user)line = θ · (X − E[X])residual (what is left in Y-cuped)
The closer the points sit to the line, meaning the stronger the correlation between X and Y, the smaller the residual left after the adjustment, and the less variance the test has to overcome.

Where the variance reduction comes from: the role of correlation

The most useful part of CUPED, in practice, is that its variance reduction has a closed-form formula that is easy to apply. Choosing θ optimally (the regression coefficient above), the variance of the adjusted metric is:

Var(Ycuped) = Var(Y) · (1 − ρ²)

Where ρ (rho) is the Pearson correlation between X and Y, a number between −1 and 1 that measures how closely the two move together. This formula says the variance left after the adjustment is a fraction (1 − ρ²) of the original variance. Flip it around: the percentage reduction in variance equals ρ², the correlation squared. A correlation of 0.5 between the pre-experiment covariate and the in-test metric cuts variance by 0.5² = 25%; a correlation of 0.7 cuts it by 0.7² = 49%, nearly in half.

That relationship explains why CUPED is so sensitive to the choice of covariate: low correlations (below 0.3, say) yield a small reduction, under 10%, barely noticeable in practice; moderate to high correlations (0.5 to 0.7), common in revenue or engagement metrics for returning users, yield reductions of 25% to nearly 50%, enough to shorten a months-long test into weeks.

Test duration drops as the covariate’s correlation risesStarting from a 44-day test with no CUPED, a covariate with correlation 0.3 shortens it to about 40 days, 0.5 to about 33 days, and 0.7 to about 23 days.days needed for the same testpre-experiment covariate correlation (ρ)44 days · no CUPED (ρ = 0)~40 days~33 days~23 days00.30.50.7
Scenario for the worked example below: a 44-day baseline with no CUPED, holding weekly traffic allocation constant and varying only the covariate’s correlation.

How much traffic does CUPED save? Start from your own sample size

Before running the worked example, it helps to see the baseline you are shrinking. Plug in your own baseline conversion rate, minimum detectable effect, weekly traffic, and confidence and power targets below to get the sample size and duration a standard test would need with no CUPED applied at all. That number is exactly what a correlated pre-experiment covariate then multiplies by (1 − ρ²):

Sample size calculator
-Visitors per variation
-Total (2 variations)
-Estimated duration

Two-proportion normal approximation, 2 variations (50/50). Tweak the inputs and watch it update live.

A worked example, start to finish

To keep this concrete, we reuse the same scenario from our multi-armed bandits vs A/B testing guide: a page with 10,000 visitors per week, a 5% baseline conversion rate, and a 10% relative minimum detectable effect, at 95% confidence and 80% power. This blog’s sample size engine returns, with no CUPED, 31,234 visitors per variant (62,468 total), running for 44 days at that weekly traffic. That is the starting point.

Now suppose the test’s primary metric is revenue per user, and you have, for every visitor, the revenue they generated in the two weeks before the test started. A correlation of 0.5 between that pre-experiment revenue and in-test revenue is a plausible number for a product with a solid share of returning users (Kameleoon, after testing CUPED internally across more than 200 of its own experiments, found that having a meaningful share of returning visitors is one of the conditions that makes the technique work best). Running the numbers:

This is a back-of-envelope approximation: it assumes the rest of the design (significance, power, minimum effect) stays fixed and that the required sample size scales approximately linearly with the metric’s variance, a standard simplification used by tools like GrowthBook and Kameleoon to communicate CUPED’s payoff. The exact gain your own tool reports may vary a bit from this napkin math, but the direction and order of magnitude hold.

The table below extends the same math to other correlations, always starting from the same 31,234-per-variant, 44-day baseline:

Correlation (ρ) Variance reduction (ρ²) Adjusted sample per variant Adjusted duration Days saved
0.3 9% ~28,423 ~40 days ~4 days
0.4 16% ~26,237 ~37 days ~7 days
0.5 25% ~23,426 ~33 days ~11 days
0.6 36% ~19,990 ~28 days ~16 days
0.7 49% ~15,930 ~23 days ~21 days

Declare significance on the already-adjusted metric

CUPED does not replace the significance test, it only swaps out the metric that feeds it: instead of comparing A’s raw Y against B’s raw Y, you compare each side’s Y-CUPED, which has the same mean but less noise. After applying the subtraction per visitor (or using a tool that already does this natively), paste the adjusted conversions and visitors into the calculator below to see the significance gain in practice:

Statistical significance calculator
Control (A)
Variation (B)
Control (A) · Rate-
Variation (B) · Rate-
Relative lift-
p-value-
95% CI of the difference-

Two-sided two-proportion z-test. "Not significant" almost always means not enough sample, not that the versions are equal.

If your metric is a rate (binary conversion), treat the numbers you paste here as the result after any covariate adjustment has already been applied behind the scenes by your experimentation tool; for continuous metrics (revenue per user, sessions), the same significance logic applies by swapping the proportion test for a t-test or equivalent over the adjusted mean, but the “less variance, same effect, easier to detect” logic is identical.

When CUPED helps a lot, and when it barely helps at all

CUPED is not universal. Its payoff depends entirely on the existence of a correlated pre-experiment covariate, and that cleanly separates the scenarios where it is worth applying from the ones where it is not:

Scenario Does CUPED help? Why
Metric with the same user’s history (revenue per user, sessions, time in product) Yes, substantially Pre-experiment behavior tends to be a good predictor of in-test behavior, giving a high correlation
Product with a solid base of returning users Yes More people have a usable history as a covariate, more people benefit from the adjustment
Simple binary metric (clicks, conversion) on a product with recurring visits Moderate help Correlation tends to be lower than for continuous metrics, but some gain still exists
Acquisition landing page, mostly new visitors Little to none A new visitor has no pre-experiment value; with no covariate, there is nothing to subtract
Brand-new product launch, no historical data for the metric None There is no pre-experiment window to collect X from
Very short test, not enough time to compute a stable covariate Reduced gain The covariate needs to be calculated over a reasonably stable pre-experiment window to be useful

The practical rule of thumb: ask whether you can answer “what did this user do before the test started, on the same metric or a related one” for most of the people who will enter the experiment. If the answer is yes for most of the audience, CUPED is usually worth the implementation effort. If the answer is no, because the audience is mostly new, the gain approaches zero and the technique does not pay for itself.

Flowchart: when it is worth applying CUPEDIf most of the test’s visitors have a pre-experiment value for the metric or a correlated one, apply CUPED. If the available covariate has a low correlation, the gain is small but still worth trying since it is cheap. If most visitors are new, with no history, CUPED has nothing to subtract and does not help.Does most of the audience have apre-experiment value for the metric?noyesDo not apply CUPEDno covariate, no gainIs that covariate’s correlationwith the metric reasonable (ρ > 0.3)?yesnoApply CUPEDreduce the sample by roughly ρ²Small gainbut the cost is low
The question that decides everything is whether a correlated pre-experiment covariate exists at all. Without one, no CUPED implementation delivers a gain.

CUPED is not peeking, and it is not a bandit

It is worth separating CUPED from two other ideas on this blog it is easy to confuse it with. The peeking problem is about when you decide to stop a test: checking the result repeatedly and stopping too early inflates the false positive rate. CUPED has nothing to do with that, it changes which metric feeds the significance calculation, not when you look at it. You can, and should, keep respecting the planned sample size and duration even while using CUPED, the planned sample just ends up smaller.

Multi-armed bandits, on the other hand, solve a completely different problem: instead of reducing the variance of a fixed-horizon test, a bandit continuously reallocates traffic toward the variation that looks best, trading formal statistical significance for lower opportunity cost during the test. CUPED still produces a normal p-value and confidence interval, just on a lower-noise metric; a bandit gives up the p-value in exchange for something else entirely. The two techniques do not compete, and in fact combine well: nothing stops you from applying CUPED to the metric feeding a Bayesian bandit, reducing the variance the allocation algorithm itself sees.

Automate This in Donnu

Reducing a test’s variance with CUPED demands three things that take manual work: identifying a correlated pre-experiment covariate, computing the optimal θ by regression, and applying the adjustment before running any significance test, without disturbing the frozen math that underpins the rest of the experiment. Donnu already runs on a native Bayesian engine, the same statistical foundation that supports variance adjustments like CUPED; the honest significance read you saw in our main guide is the base that a technique like this builds on top of, with no separate regression spreadsheet required for every test.

Start a free 14-day trial and read next what statistical significance is and the formula behind it, the peeking problem and why stopping early ruins a test, and multi-armed bandits vs A/B testing, for when the goal is continuous optimization instead of a single verdict. Prefer Portuguese? Read this guide in Portuguese.

References

Frequently asked questions

What is CUPED, in plain terms?
CUPED (Controlled-experiment Using Pre-Experiment Data) is a technique that uses a metric collected BEFORE a test starts, from the same user, to explain away part of the natural noise in the metric you are measuring during the test. Removing that predictable slice of noise shrinks the variance of the adjusted metric, which makes the test more sensitive to a real effect on the same traffic, or lets you reach the same confidence with less traffic and less time.
Does CUPED change who wins the test?
No, it does not change the direction of a real effect, only the noise around it. The adjusted metric has the same expected value as the original one; what changes is the standard error, which gets smaller. A genuine effect becomes easier to separate from chance, but CUPED cannot manufacture a winner that was not there, nor hide a real loser.
Which covariate should I use for CUPED?
The best covariate is almost always the same metric you are testing, measured on the same user over a period before the experiment began, for example, revenue per user over the two weeks prior to the test, if the primary metric is revenue per user during the test. The stronger the correlation between that pre-experiment value and the in-experiment value, the bigger the variance reduction. A weakly correlated covariate, or none at all, does not help much.
Does CUPED work for new visitors with no history?
Barely, if at all. The technique depends on a pre-experiment value from the same user to serve as a covariate; a visitor who has never been seen before has no such value, so there is nothing to subtract to reduce their variance. Tests dominated by new traffic, an acquisition landing page, for instance, capture a much smaller CUPED gain than tests inside a product with a returning user base.
Do I need special software to use CUPED, or can I compute it by hand?
The math fits in a spreadsheet: it is a simple linear regression between the pre-experiment metric and the in-test metric, followed by a subtraction. Platforms like GrowthBook and Statsig already build CUPED natively into their significance calculations. The manual work is organizing pre-experiment data per user and recalculating significance on the adjusted metric, not the raw one.