Statistics

Geo Experiments: Testing Without User Level Data

When you cannot split by cookie, you randomize regions. How geo experiments measure incrementality, and why the naive p-value lies.

Flat editorial illustration of an abstract patchwork of adjacent irregular territories in alternating deep green and pale mint tones with two small rounded markers

When an intervention cannot be delivered per user, the way out is to randomize whole regions: half get the campaign, half do not, and the gap between the two sets is the incremental effect. The price is that the sampling unit becomes the region rather than the person, and ignoring that trade produces p-values that are off by a large factor. This guide covers when a geo experiment is the only honest option, a worked example where a result with seven leading zeros in its p-value turns non significant once read on the right unit, the linear model Google published for estimating return on ad spend, and the design rule that cuts the confidence interval by 10 percent for free. It is part of our complete guide to A/B testing and it uses the same randomization unit reasoning as switchback experiments.

When you cannot randomize people

User level A/B testing depends on two things: being able to deliver different experiences to different people, and being able to tie each outcome back to the person who produced it. There is a whole family of marketing decisions where neither is possible.

In all of these, the unit you can actually control is the region. Vaver and Koehler describe exactly this design in Google’s paper on measuring advertising effectiveness: non-overlapping geographic regions are randomly assigned to a control or treatment condition, and each region realizes its assigned condition through geo-targeted advertising. They note that it is not generally feasible to work with geos as small as postal codes, and that in the United States one possible set is the 210 Designated Market Areas defined by Nielsen, broadly used as a geo-targeting unit by advertising platforms.

Structure of a geo experiment over timeTwo stacked timelines, one for treatment regions and one for control regions. On the left, the pretest period, where both lines run at the same baseline and no campaign structure difference exists. On the right, the test period, where only the treatment line rises. A final band marks the delay between the end of the spend change and the full realization of the response.Pretest and test: the comparison is born in the first, not the secondpretest periodtest periodresponse delaytreatment regionscontrol regionsad spend differentialDuring pretest there is no difference in campaign structure across geos: all of them operate at the same baseline level.For in store sales the test period has to extend past the end of the change to capture the delayed response.
The pretest period is not a warm up. It is the variable that makes regions of very different sizes comparable to each other.

Worked example: the p-value that evaporates

A retail chain runs a geo experiment across 210 regions, drawing 105 into treatment and 105 into control. Each region averages 40,000 reached customers, giving 4.2 million per arm. At the end of the period, the aggregate numbers look like this:

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.

Naive reading, per customer Customers Conversions Rate
Control, 105 regions 4,200,000 84,000 2.000 percent
Treatment, 105 regions 4,200,000 86,520 2.060 percent

The calculator returns plus 0.060 percentage points, plus 3.000 percent relative, z = 6.165, a p-value below 0.00001, and a 95 percent interval of plus 0.041 to plus 0.079 percentage points. It looks like a closed case.

It is not, and the reason is that the draw was not made among customers. It was made among 210 regions. Customers in the same region share weather, local holidays, a local competitor, the neighboring retailer campaign and regional seasonality, so observations within a region are not independent. The factor that corrects this is the design effect, whose form has been known since Kish: it equals 1 plus the intraclass correlation coefficient times the cluster size minus 1.

Assume a modest intraclass correlation of 0.0005, an illustrative and deliberately small value, and clusters of 40,000 customers:

Calculation Result
Design effect: 1 plus 0.0005 times (40,000 minus 1) 21.00
Effective sample per arm: 4,200,000 divided by 21.00 200,005 customers
Standard error multiplied by the square root of 21.00 factor 4.583
Corrected z: 6.165 divided by 4.583 1.345
Corrected p-value 0.178

The result that looked certain with seven leading zeros is, read correctly, not significant. Nothing in the data changed. What changed was honoring the unit that was actually randomized.

Notice the size of the lever: an intraclass correlation of 0.0005 looks negligible, and yet, multiplied by clusters of 40,000 people, it erases 95 percent of the effective sample. That is why the number of regions, not the number of people, is what sets the power of a geo experiment.

Nominal sample against effective sample under the design effectTwo horizontal bars drawn to scale. The first shows the nominal sample of 4,200,000 customers per arm, filling the full width. The second shows the effective sample of 200,005 customers after dividing by a design effect of 21, filling just under five percent of the width. Below, a third bar shows that the number of units actually randomized is 105 regions per arm.What you think you have, and what the test actually usesnominal sample4,200,000 customerseffective sample200,005 customersrandomized units105 regionsDesign effect of 21.00, with intraclass correlation 0.0005 and clusters of 40,000 customers.The middle bar is what is left of your statistical power. The bottom one is what you can actually increase.
Growing the audience inside the same regions barely moves the middle bar. Adding regions moves it.

The right calculation: the ROAS linear model

The two proportion test we just corrected by hand is not the instrument Google uses in this design. Vaver and Koehler analyze the result with a linear model at the region level, and its shape explains why it works.

The response of a region during the test period is modeled from three things: an intercept, the response of that same region during the pretest period, and the ad spend differential for that region. The parameter of interest is the coefficient on the spend differential, which is precisely the return on ad spend, that is, the incremental impact the spend had on the response metric.

Model term Role
Intercept and pretest response coefficient absorb seasonal differences between pretest and test, and the size of each region
Spend differential coefficient the parameter of interest, return on ad spend
Weights equal to 1 over the pretest response control the heteroscedasticity caused by differences in geo size

Three practical consequences follow:

  1. The pretest does the heavy lifting. It enters as an explanatory variable, and that is what lets you compare a large region against a small one without the size difference dominating the result.
  2. The spend differential is not the test period spend. When spend already existed during the pretest, the differential is estimated by a second model fitted using only the control geos, which serves as the counterfactual for what spend would have been without the experiment. For control geos the differential is zero by definition, since they continue operating at baseline.
  3. The response metric is your choice. The authors list paid and organic clicks, online or offline sales, website visits, newsletter sign-ups and software downloads.

It is worth recording why this design exists in the paid media world: cost per click does not tell the whole story, because part of a paid click may be cannibalizing an organic click you would have gotten for free. The metric a geo experiment delivers, and direct observation does not, is cost per incremental click.

Design: stratify by size before randomizing

A simple draw across 210 regions can, by bad luck, put the largest ones all on one side. Since regions are wildly unequal in size, that costs precision. The correction Vaver and Koehler recommend is cheap and specific:

  1. Rank the geos by the response metric observed in the pretest period.
  2. Partition that ranked list into groups of size M, where the test fraction is 1 over M. For half in treatment, M equals 2, that is, pairs.
  3. Randomly select one geo from each group for treatment.

They report that grouping geos by size prior to assignment reduces the confidence interval of the return on ad spend measurement by 10 percent or more, and that confidence interval estimates come out roughly 10 percent lower when the random assignment is constrained this way. That is statistical power for free, obtained before the experiment starts.

Simple draw against stratified draw by region sizeOn the top row, the simple draw: twelve regions of decreasing size spread at random between treatment and control, with the largest ones concentrated on one side. On the bottom row, the stratified draw: the same twelve regions are ranked by size, grouped into pairs, and one from each pair goes to treatment, so the two arms end up balanced in size.Simple draw: the big ones can all land on the same sidetreatment ends up larger by chanceStratified: rank by size, group into pairs, draw one from each pairsize balanced across both armstreatmentcontrolEach rectangle is a region; area represents its pretest response volume.
The constraint is not cosmetic. According to the Google paper it shrinks the confidence interval by roughly 10 percent at no cost.

Duration, delay and the limit of prediction

Two calendar traps show up in this design.

The effect keeps happening after the spend stops. Vaver and Koehler are explicit: offline sales is an example of a response metric likely to carry a positive delay, because consumers need time to research, decide and visit a store. That is why the test period has to extend past the end of the spend change by the size of that delay, to fully capture the incremental sales. If you cut the period on the day you switch the campaign off, you underestimate the effect systematically.

Predicting the confidence interval works, up to a point. They describe a design procedure where you carve pseudo pretest and test periods out of historical data, matching the lengths of the planned periods, and estimate the half width of the confidence interval across many random assignments. The prediction is quite accurate. But they flag the limit: once the hypothesized period grows longer than the available history, pretest data has to be used multiple times to generate each estimate, and that reuse makes the estimates overly optimistic. Take it as a general warning: power simulations built on recycled data promise more than they deliver.

Geo experiment checklist

  1. Is the intervention genuinely impossible per user? If you can randomize a person, randomize a person. A geo experiment trades a lot of power for validity.
  2. Do the regions actually not overlap? Two regions sharing an audience through media spillover stop being independent units, and the problem becomes interference between variants.
  3. Is there a clean pretest period? With no campaign structure difference across regions during it.
  4. Was the draw stratified by size? Rank by pretest response and randomize within groups.
  5. Does the analysis run at the region level? Or, if it runs per user, was the design effect applied. What you cannot do is both at once.
  6. Does the test period cover the response delay? Especially for offline sales.
  7. Was the power calculation done on the number of regions? Not on the number of people.

Common mistakes

Make this automatic with Donnu

The expensive mistake in a geo experiment is not the model arithmetic, it is the temptation to switch units at analysis time, because the per user version always looks more conclusive.

In Donnu, an experiment declares its randomization unit in the design, and the report refuses to present a confidence interval computed on a unit different from the one that was randomized. When units are clustered, the dependence warning appears next to the result, with the design effect estimated from your own data rather than from a generic reference value. And if you want to redo any part of the arithmetic yourself, the p-value calculator and the confidence interval calculator accept raw counts.

References

Read next: Switchback experiments · Interference between variants · Ratio metrics and the delta method · Attributing revenue to your A/B test winner · P-value calculator · Leia em português

Frequently asked questions

What is a geo experiment?
It is an experiment where non-overlapping geographic regions are randomly assigned to a control or treatment condition, and each region realizes its assigned condition through geo-targeted advertising. Vaver and Koehler describe this application at Google for measuring advertising effectiveness, and note that in the United States one possible set of geos is the 210 Designated Market Areas defined by Nielsen, widely used as a geo-targeting unit by many advertising platforms. They observe that it is not generally feasible to use geos as small as postal codes.
When should you use a geo experiment instead of a normal A/B test?
When the intervention cannot be delivered per user. Offline media, television, radio, campaign budget changes, sponsorships, regional pricing and any channel where exposure reaches whoever is nearby rather than whoever you picked all fall into this case. It also applies when the outcome of interest is an in store sale, which carries no identifier linking exposure to result. If you can randomize users and measure per user, a regular A/B test is better, because it has far more power.
Why is the p-value from a geo experiment usually wrong?
Because the analysis is run at the user level when randomization happened at the region level. People in the same region share weather, holidays, local competition and regional seasonality, so observations within a region are correlated. The correction factor known as the design effect equals 1 plus the intraclass correlation coefficient times the cluster size minus 1, and it inflates variance. With regions of 40,000 people and an intraclass correlation of only 0.0005, the design effect exceeds 20, meaning millions of users are worth, statistically speaking, a few hundred thousand.
How many regions does a geo experiment need?
More than intuition suggests, because the region is the sampling unit. Vaver and Koehler recommend constraining the draw to balance region size across groups: rank the list by the pretest response metric, partition that ranked list into groups of size M where the test fraction is 1 over M, and randomly select one geo from each group for treatment. They report that grouping geos by size prior to assignment reduces the confidence interval of the return on ad spend measurement by 10 percent or more.
What is the pretest period in a geo experiment?
It is the window before the intervention in which no difference in campaign structure exists across geos, with all of them operating at the same baseline level. That period does two jobs in the Vaver and Koehler model: it enters as an explanatory variable that absorbs size and seasonality differences between regions, and it supports estimating the counterfactual ad spend that would have occurred without the experiment. Without a pretest period the model loses the very mechanism that makes unequal regions comparable.