The intuition
For each unit, Traffical looks at a pre-assignment covariate — typically the same metric measured over a window before the unit’s first assignment. It then removes the part of the unit’s measured outcome that was predictable from that covariate, comparing allocations on what remains. Because the covariate comes from before first assignment, it can’t have been affected by the treatment. Adjusting for it is therefore unbiased: CUPED only removes noise, it never invents or hides an effect.How much you gain depends on how well the past predicts the present. The stronger the correlation between the pre-period covariate and the outcome, the more variance comes out and the tighter the interval — a strongly predictive covariate can cut interval width substantially.
Turning it on
CUPED is off by default and controlled by a setting at two levels:- Project default — set a default for every policy in the project (for example, “use CUPED everywhere we can”).
- Per policy — each policy can turn CUPED on or off explicitly, overriding the project default. Left unset, a policy inherits the project default.
What it measures
When CUPED is on, it adjusts by a pre-assignment covariate — the metric’s own value over a window before each unit’s first assignment (for example, the two weeks before it). A unit with no pre-period history simply carries a covariate of zero — the metric’s true pre-period value. CUPED only ever removes noise — enabling it never makes an interval wider or changes the lift in expectation.Configuring it on a metric
CUPED needs two things to take effect, by design:- A covariate on the metric. On the metric itself, enable variance reduction and set the lookback window (how many days before first assignment to measure the covariate). The covariate defaults to the metric’s own value over that window. Available on Conversion and Sum metric types.
- CUPED enabled on the policy (or project default), as described above.
Where it applies
CUPED works on Conversion and Sum metrics — a Sum metric is analysed as a per-unit average, which is what the adjustment operates on. Count and Ratio metrics aren’t adjusted. It composes cleanly with the rest of the engine:With sequential testing
Variance reduction narrows the confidence sequence too — you keep the anytime-valid guarantee and reach a conclusion sooner.
With winsorization
Outlier capping and CUPED stack: cap the extreme tail, then remove the predictable variation from the rest.
When it helps most
- Metrics with high natural variance between units — revenue, engagement time, order value.
- Tests where users have history in your product, so the pre-period covariate is meaningful.
- Any time you want a decision sooner without lowering your confidence level.
θ estimator, the adjusted mean and variance formulas, and precisely which metric types are adjusted — see the technical companion.