ML Systems Lab Open interactive version →
Advanced 28 min read Pricingexperimentationgeo experimentsswitchback

Causal Price Experiments: A/B, Geo & Switchback

Why you almost never A/B test price at the user level, and how geo holdouts and switchback designs recover an unbiased elasticity

You cannot read elasticity off observational data — so you experiment. But price is the one variable where the obvious experiment, randomizing the price *per user*, is usually the wrong design: it is often unfair or illegal, and even when allowed it leaks and interferes, quietly breaking the assumptions that make an A/B test valid.


Per-user price randomization violates SUTVA and invites legal risk. A clean A/B test assumes the Stable Unit Treatment Value Assumption: one user's treatment doesn't affect another's outcome. Prices break this because users talk and compare — showing person A $9 and person B $12 for the identical item means B can see A's price, feel cheated, and change behavior (churn, screenshot, complain). The treatment leaks across units. On top of the interference, charging different people different prices for the same good is a fairness and often a legal problem. So the per-user RCT is frequently off the table before the stats even matter.


Geo experiments randomize the market, not the person. Assign whole cities/regions to treatment (new price) or control (old price), then read the effect with difference-in-differences (compare the treated-vs-control change over the pre/post window) or synthetic control (build a weighted combination of control cities that tracks the treated city pre-period, then measure the divergence after). Everyone *in* a market sees the same price, so it's fair and consistent; randomization is at the market level, so there are usually few units — the key limitation is statistical power and needing good matched controls.


Switchback designs randomize price over *time* — the fix for strong interference. In a marketplace where supply and demand slosh across the whole system (rideshare, food delivery), even a geo split interferes: a price change in one zone spills into neighbors. Switchbacks turn the *entire market's* price on and off in short randomized time windows (e.g., 30-minute blocks alternating high/low) and compare outcomes across windows. Because the whole market is treated at once, cross-unit spillover within a window is absorbed rather than contaminating a control group. The catch is temporal autocorrelation (adjacent windows aren't independent) and carryover, which the analysis must account for. Whichever design you pick, the payoff is the same: an unbiased %ΔQ / %ΔP — the causal elasticity that observational data could never give you.

Key points

Takeaway

You experiment on price because observational data is endogenous, but the naive per-user A/B test usually fails twice: it violates SUTVA (users compare prices, so treatments leak) and it is unfair/illegal to charge different people different prices for the same good. Geo experiments randomize whole markets (read via diff-in-diff or synthetic control) and switchback designs randomize the whole market's price over short time windows (the fix for system-wide marketplace spillover) — both trading power/complexity for an unbiased causal elasticity.

Recap

Check your understanding

Q1. Select the two correct reasons per-user price randomization is usually a poor design for measuring elasticity.

Q2. A rideshare company wants to test a fare change but worries that a change in one zone spills into neighboring zones. Which design best isolates the effect?

Q3. In a geo price experiment, why is synthetic control often used to read out the effect rather than a raw treated-minus-control difference?

Try it interactively

ML Systems Lab is a free interview-prep platform for ML engineers — work through the full interactive module, quizzes, and drills.

Open ML Systems Lab →