Statistics

Budget Reallocation: The Portfolio Experiment

Budget reallocation cannot be tested channel by channel. Why the unit of analysis is the portfolio, what average CPA hides and what it costs to measure.

Flat illustration of two glass tanks joined at the base by a valve, liquid flowing from the fuller tank into the emptier one, on a mint green background

When budget is shared, a channel is not a treatment. The treatment is the entire allocation, and the unit of analysis is the portfolio. That is not a methodological preference, it follows from how the platforms actually spend money: Meta states that ad set budget sharing moves up to 20 percent of one ad set daily budget to other ad sets, and that campaign level spend stays the same whether the feature is on or off. Read channel by channel after a reallocation and you get two false verdicts at once: the channel that lost money looks like it improved, and the one that gained money looks like it got worse, because each channel average CPA is contaminated by demand that was already there. In the worked example below, the move wins 360 conversions at identical total spend, and both per-channel readings tell you to reverse it. This guide covers why the portfolio is the only valid unit, what average CPA hides, what the correct stopping rule is, and why this is the least powerful test you will ever run. This guide is part of our complete guide to A/B testing.

A channel is not a treatment when budget is shared

The strongest argument against per-channel reading does not come from statistics. It comes from the platform itself.

Meta describes ad set budget sharing as a feature that lets you share up to 20 percent of your daily budget with other ad sets, to improve performance for campaigns not using a campaign budget. Then it adds the sentence that settles the argument: at a campaign level, spend remains the same whether ad set budget sharing is on or off.

Read that as a statement about treatments. If up to a fifth of one ad set budget can bankroll another, then the spend you observe in any single ad set is not a quantity you fixed. It is a quantity the system chose. You never assigned budget to a channel; you assigned a total to a set of channels and delegated the split.

Advantage+ campaign budget is the explicit version of the same thing. The documentation says the feature automatically manages your campaign budget across ad sets to get the overall best results, continuously distributing in real time to the ad sets with the best opportunities. And it draws the operational conclusion itself: budget may not be spent equally across ad sets, most of it may land on a single ad set if that is where the overall best results come from, and for that reason it is important to analyze results at the campaign level rather than at the ad set level.

Two ad sets joined by a shared budget pipeTwo vertical rectangles side by side represent two ad sets, each with a stated daily budget. A horizontal pipe connects their bases and is labeled up to twenty percent of the daily budget. An arrow inside the pipe points from the left ad set to the right one, showing that part of the first budget funds the second. A larger frame encloses both rectangles and is labeled campaign, with a note that campaign level spend stays the same. A band below records that the figure shown for each ad set is the result of a system decision, not of the allocation the advertiser typed in.the spend you read per ad set is not the spend you typed incampaigntotal spend unchangedad set Adaily budgetas you declared itgives some upad set Bdaily budgetas you declared ittakes some inup to 20% of the daily budgetif the system decides the split, the split is not a treatment you controlledwhich is why the documentation itself says to analyze at campaign level, not ad set level
That 20 percent pipe between ad sets is not a configuration detail. It is the reason one ad set spend stopped being independent of the other.

Three practical consequences follow.

what the platform does what it means for your test
shares up to 20% of the daily budget across ad sets per-channel spend is an outcome, not a treatment
redistributes in real time toward the best opportunity the observed split changes day to day without you touching anything
keeps total campaign spend constant the only number you genuinely fixed is the total

Notice that the third line is good news. The total is stable, and the total is exactly what a reallocation hypothesis is written about.

In budget reallocation, the treatment is the entire allocation

Reallocating budget swaps one vector for another vector. Nothing is turned on and nothing is turned off.

The design in this guide is a geo experiment with two arms of matched regions, 1,200,000 people per arm, four weeks, an average order value of 40 dollars. Total spend is identical in both arms: 200,000 dollars. Only the split changes.

arm channel A channel B total
control (current allocation) $140,000 $60,000 $200,000
treatment (moves $40,000 from A to B) $100,000 $100,000 $200,000

Two definitions have to be written into the plan before the test ships, and they are not the same definition.

The unit of randomization is the region. Randomization assigns regions to arms, and the region is the level at which the allocation is applied. The unit of analysis is the portfolio: conversions summed across all channels, divided by the arm population. Collapsing those two into one is the mistake that produces every other mistake in this guide.

Why the portfolio and not the channel? Because the outcome of interest is a sum, and the sum is the only quantity randomization protects. The moment you look at channel B inside the treated arm, you are opening a subgroup defined after randomization, with a denominator the treatment itself moved. Metrics whose denominator shifts with the treatment need their own handling, and the mechanism is spelled out in ratio metrics.

A close relative of this design answers a different question. Hermle and Martini, at LinkedIn, propose an asymmetric budget split: keep one ad total budget, divide it unequally between two comparable submarkets, and randomize which copy gets the larger share. What the two designs share is treating budget as a randomized treatment instead of an observed variable. What separates them is the object. There, the question is the return to more budget on the same ad. Here, it is the return to splitting a fixed total differently across different channels.

Worked example: the same money, split a different way

The numbers below came out of the same statistics engine that powers the calculators on this page.

The portfolio reading, the valid one, compares total conversions per arm over the arm population.

A (control) B (treatment) abs. diff. rel. lift z p 95% CI (pp)
9,000/1,200,000 = 0.7500% 9,360/1,200,000 = 0.7800% +0.0300 pp +4.0000% 2.6671 0.007652 +0.0080 to +0.0520

That is 360 extra conversions at identical total spend. At 40 dollars per order, incremental revenue is 14,400.00 dollars. Divided by the 40,000 dollars that were moved, the move returned 0.009000 conversions per dollar moved, or 0.3600 dollars of revenue per dollar moved.

Paste 9,000 out of 1,200,000 against 9,360 out of 1,200,000 into the calculator below and the screen shows p = 0.0077 and a lift of +4.0%, which are the table 0.007652 and 4.0000 percent, rounded. The same math also runs in the significance calculator.

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.

Now the per-channel decomposition. It decides nothing, but it belongs in the report, because it is what explains the portfolio result. Add it up and check: 6,300 plus 2,700 gives 9,000 in control, and 5,040 plus 4,320 gives 9,360 in treatment.

channel conversions in control conversions in treatment change spend
A 6,300 5,040 -20.00% $140,000 to $100,000
B 2,700 4,320 +60.00% $60,000 to $100,000

Channel A fell by a fifth. Channel B rose by three fifths. The portfolio rose 4 percent. All three statements are true at the same time, and only the third one answers the question that was asked.

What per-channel average CPA hides

Here is the trap, and it is the reason this guide exists.

channel average CPA in control average CPA in treatment what the dashboard suggests
A $22.22 $19.84 A improved, give the money back to it
B $22.22 $23.15 B got worse, pull the money out

Both readings are wrong, and both point at undoing the exact move that earned 14,400.00 dollars.

The mechanism is simple once you stop looking at the average and look at where it comes from. A channel average CPA blends two populations: demand that would have shown up anyway, which is cheap, and demand the last slice of budget bought, which is expensive. Pull money out of A and what leaves is the marginal conversions, the expensive ones. The average of what remains improves. Put money into B and what arrives is marginal conversions, pricier than B old average. The average gets worse. In any reallocation, the source average CPA improves and the destination average CPA worsens, whether the move was smart or stupid. The metric carries no information about the decision: it answers the same way every time.

The truth lives at the margin.

side of the move conversions marginal CPA marginal return
pulling $40,000 out of A -1,260 $31.75 1.2600
putting $40,000 into B +1,620 $24.69 1.6200
net +360 1.6200 minus 1.2600 = $0.3600 per dollar moved

Pulling 40,000 dollars out of A cost 1,260 conversions, a marginal CPA of 31.75 dollars and a marginal return of 1.2600. Putting those same 40,000 dollars into B earned 1,620 conversions, a marginal CPA of 24.69 dollars and a marginal return of 1.6200. The net is 360 extra conversions, and the net gain per dollar moved is 1.6200 minus 1.2600, which equals 0.3600 dollars.

That 0.3600 is precisely the number the portfolio reading already handed you, arrived at from the other direction: 14,400.00 dollars of incremental revenue divided by the 40,000 dollars moved. Both calculations land on the same figure, and that agreement is how you know the reading is right. When the marginal math and the portfolio math disagree, one of them has an accounting error, and it is worth finding the error before making any decision.

Worth recording what portfolio average ROAS does, too: it climbs from 1.8000 to 1.8720. True, and far too small to serve as a signal. What decides is the gap between marginal returns, not the portfolio average, and that distinction is the same one that separates measuring incrementality from reading reported performance.

Average CPA points the wrong way while marginal CPA points the right wayTwo panels side by side. In the left panel, labeled average CPA, two pairs of bars show channel A falling from twenty two dollars and twenty two cents to nineteen dollars and eighty four cents, and channel B rising from twenty two dollars and twenty two cents to twenty three dollars and fifteen cents; captions reading give the money back and pull the money out mark the decision this panel suggests. In the right panel, labeled marginal CPA, a tall bar of thirty one dollars and seventy five cents represents the cost of pulling money out of channel A and a shorter bar of twenty four dollars and sixty nine cents represents the cost of putting money into channel B, with an arrow showing that the correct move runs from A to B. A band at the bottom records that the net result of the move was three hundred and sixty additional conversions.one move, two metrics, opposite conclusionsaverage CPA per channelchannel A22.2219.84looks bettergive the money backchannel B22.2223.15looks worsepull the money outmarginal CPA of the move$31.75$24.69cost of the dollarleaving Acost of the dollarentering Bmovenet result of the move: 360 more conversions at the same total spend
The left panel is what every media tool shows you by default. The right panel is what answers the question, and no platform computes it for you.

The stopping rule: equalize marginal returns

The decision rule is short. Keep moving money while the destination marginal return exceeds the source marginal return, and stop when the two are equal.

In this example, 1.6200 against 1.2600 says the move is worth making. It does not say 40,000 dollars is the right amount. As money flows into B, B marginal return falls; as it leaves A, A marginal return rises. At some point they cross, and past that point moving more destroys value. Each channel response curve, which is incremental outcome as a function of spend, holds that information, and the question of how much to spend on a single channel belongs to budget and saturation experiments.

Google Meridian documentation formalizes this in three optimization scenarios, and all three are worth knowing because they answer different questions.

scenario question where the constraint binds default per-channel spend constraint
fixed budget what is the best split of a given total per channel 70% to 130% of allocated spend
flexible budget with target minimum ROI how much can be spent until overall ROI hits the target at the total marketing ROI level, not per channel 0% to 200% of allocated spend
flexible budget with target mROI how much can be spent until each channel mROI hits the target at channel level, not at the total level 0% to 200% of allocated spend

The first scenario is the direct relative of a reallocation test: total fixed, split variable. The third is the stopping rule written down, because fixing a target mROI per channel is exactly forcing marginal returns to converge on a common number.

Two warnings, and they matter.

First: the model proposes, the experiment verifies. A calibrated mix model returns a candidate allocation; the experiment tests that allocation against the current one and returns the sign of the difference with an interval around it. The experiment does not sweep the space of allocations and does not find the optimum. It answers a binary question about a pair of points. How the two tools fit together is covered in marketing mix modeling with experiments.

Second: extrapolating past historical spend is risky by construction. Meridian documentation warns that extrapolation risk affects incremental outcome estimation for points on the response curve above historical spend, and that the risk grows the further out you go. A proposal that doubles the budget of a channel which has never operated at that level is an extrapolation, not a forecast.

Two response curves and the tangents that equalize at the stopping pointTwo panels with rising concave response curves, incremental outcome on the vertical axis and spend on the horizontal axis. In the channel A panel, one point marks spend of one hundred and forty thousand dollars with a shallow tangent labeled marginal return one point two six, and a second point marks one hundred thousand dollars with a steeper tangent. In the channel B panel, one point marks sixty thousand dollars with a steep tangent labeled marginal return one point six two, and a second point marks one hundred thousand dollars with a shallower tangent. A band below states the decision rule: move money while the destination slope is steeper than the source slope, and stop when the two slopes match.the slope is the marginal return, and the slope is what decidesvertical axis: incremental outcome. horizontal axis: spend on the channelchannel A (source)$100,000$140,0001.2600channel B (destination)$60,0001.6200$100,000move while the destination slope is steeper than the source slopestop when they match: at that point the next dollar earns the same on either side
The move steepens the source slope and flattens the destination slope at the same time. The stopping point is where they meet, and it shifts whenever the market shifts.

Why this is the least powerful test you will ever run

A reallocation effect is a difference between two marginal returns that, by definition, were already close. Had they been far apart, somebody would have moved the money long ago. Small effect means large sample, and the scaling is quadratic.

relative MDE N per arm duration at 600,000 people per week
10.0000% 218,037 6 days
5.0000% 851,547 20 days
4.0000% (the real effect in this example) 1,324,101 31 days
2.0000% 5,244,878 123 days

The duration column uses the flow from the example itself: 1,200,000 people per arm over 4 weeks is 2,400,000 people in total, or 600,000 per week across both arms. Notice that the real effect in this example would ask for 31 days and the experiment ran for 28, which is another way of seeing the 76.02 percent power: it came up three days of collection short of the 80 percent that was planned. Going from a 4 percent effect to a 2 percent effect quadruples the sample, because sample size scales with the inverse square of the effect. The concept behind that column lives in minimum detectable effect, and the calendar math also runs in the test duration calculator.

A/B test duration calculator
-Estimated duration
Total visitors-
Projected finish-

Two-proportion normal approximation, traffic split evenly across variations. The date uses your timezone and updates live.

Now the other side of the same coin. With the 1,200,000 people per arm this experiment actually had, power came to 76.02 percent for the 4 percent relative effect, short of the conventional 80 percent. And for a 2 percent relative effect, which is a more modest and perfectly plausible reallocation, power falls to 26.77 percent. Three out of four experiments this size would miss a real 2 percent gain.

None of that is blog pessimism. It is the central result of the literature on measuring advertising returns. Lewis and Rao analyzed 25 field experiments with large US retailers and brokerages, 19 retailers and 6 financial services firms, totaling 2.8 million dollars in digital advertising spend, and they report that the median confidence interval on return on investment is over 100 percentage points wide. Every experiment in the study had more than 500,000 unique users, most passed 1,000,000, and even so the median campaign would have to be 9 times larger to reliably tell a very profitable campaign, at 50 percent ROI, from one that merely breaks even. For a tolerance of 10 percentage points of ROI difference, the campaign would have to be 62 times larger, which the authors describe as nearly impossible for a campaign of any realistic size.

Their explanation is the variability of individual behavior: the standard deviation of individual-level sales is typically 10 times the mean over a typical campaign evaluation window. In the paper stylized example of a highly profitable campaign, the R squared of the treatment variable would be on the order of 0.0000054.

A reallocation test is more demanding still, because the question is finer. Measuring whether a channel works compares spending against not spending. Measuring a reallocation compares two ways of spending the same total, and the gap between them is the gap between two neighboring marginal returns. You traded a hard question for a harder one, and the sample calculation has to reflect that before the test starts, not after. The starting point is how many visitors an A/B test needs.

The boundary with interference between variants

Two things get conflated here, and telling them apart is what keeps you from designing the wrong experiment.

In interference between variants, the problem is arm A spoiling the measurement of arm B by competing for a shared resource. Interference is a defect: it exists against your will, it contaminates the estimate, and you spend effort eliminating it by isolating submarkets or changing the unit of randomization.

In a reallocation test, competing for the resource is the treatment. You are not trying to stop one channel from taking money from the other; you are declaring exactly how much one takes from the other and randomizing that rule across regions. What used to be contamination became the object of study. That is why portfolio level reading is not a concession: it is what keeps the estimate clean, because the sum of channels inside one arm suffers interference from nothing.

The boundaries with the other two pieces in this arc are worth drawing too.

question where it lives
how much to spend on a channel, and where it saturates budget and saturation experiments
how to split a fixed total across channels this piece
how budget is delivered within the day budget pacing experiments
which channel gets credit for the conversion attribution model testing

The last row deserves an extra warning. Changing the attribution model changes the apparent CPA of every channel without a single cent moving anywhere. If attribution changes mid window, reallocation and attribution are confounded and the experiment no longer separates them.

Guardrail metrics

Beyond the usual guardrails, such as sample ratio mismatch, four signals are specific to this design.

signal what to watch what to do if it fires
total spend per arm any gap between arm totals above 1 percent stop reading: if the total diverged, the treatment is no longer just the split
realized versus planned split what each channel actually spent, day by day, against the plan if the platform reshuffled on its own, document the real split and reanalyze against it
the two calculations agreeing gain per dollar moved from the margin against gain from the portfolio if the two numbers disagree, you have an accounting error before you have a result
attribution or tagging changes any change of model, window or tag inside the test window discard the affected period in both arms by the same rule, decided in advance

The rule that covers all four: before reading the result, confirm that the only difference between the arms was how the same total was split.

Common mistakes

Make this automatic with Donnu

The fix here is not a prettier report. It is a decision about the unit of analysis, made before the test ships.

A media reallocation test is expensive by nature, and most of the cost comes from the effect being small. So it pays to separate what genuinely needs a geo experiment across millions of people from what can be answered on your own site with a fraction of that. Donnu sits in the second layer: the experiment lives on your page, the unit of analysis is declared before the start, and the report shows the absolute difference with its interval beside it, which is the form that does not get fooled by an average that improved for the wrong reason. Donnu is one option among several, and no on-site testing tool replaces a geo experiment when the question is about splitting media. What does not change from tool to tool is the principle: if the treatment is the entire allocation, the deciding number is the portfolio number, and any channel average that disagrees with it is measuring something else.

Frequently asked questions

The questions at the top of this page cover whether you can test one channel at a time, why per-channel CPA misleads after a reallocation, what the correct unit of analysis is, how much traffic the test demands, whether the experiment finds the optimal allocation, and what to do when the platform reshuffles budget on its own.

References

Read also: Interference between variants · Geo experiments · Marketing mix modeling · Ad incrementality testing · Ratio metrics · Leia em português

Frequently asked questions

Can you test one channel at a time in a budget reallocation?
No, because the treatment does not fit inside a single channel. Moving money from A to B changes both at once, and the sum is the thing you actually want to know. Isolate channel B, conclude that it improved, and you have measured one half of an arithmetic problem whose two halves carry opposite signs. The treatment is the entire allocation, and the only outcome that answers the question is the summed outcome of both channels within the same arm.
Why does per-channel CPA mislead you after a reallocation?
Because average CPA blends the demand you bought with the demand that was already there. In the worked example below, channel A loses 40,000 dollars of budget and its average CPA improves from 22.22 to 19.84 dollars, since A keeps its cheap conversions and sheds its expensive ones. Channel B receives those same 40,000 dollars and its average CPA gets worse, from 22.22 to 23.15 dollars, since the new conversions cost more than its old average. Both readings tell you to undo a move that won 360 conversions.
What is the unit of analysis in a reallocation test?
The unit of randomization is the region, or the user set, and the unit of analysis is the portfolio. They are not the same thing and both belong in the plan. You randomize regions across two arms, but the number you compare is total conversions in the arm divided by the arm population, summed over every channel. Reading channel by channel inside an arm opens a subgroup that randomization never promised to balance.
How much traffic does a reallocation test need?
Far more than a page test, because the effect is a difference between two similar marginal returns. In the example below, detecting a 4 percent relative lift on a 0.75 percent baseline at 80 percent power requires 1,324,101 people per arm. With the 1,200,000 people per arm this experiment actually had, power came to 76.02 percent. For a 2 percent relative effect power drops to 26.77 percent and the required sample climbs to 5,244,878 people per arm.
Does the experiment find the optimal budget allocation?
No. An experiment tests one allocation against another and returns the sign of the difference with an interval around it. Finding the point where marginal returns equalize is modeling work, not testing work. Meridian documents three optimization scenarios that propose allocations; the experiment exists to check whether a proposed allocation really beats the current one in the field. The model proposes, the experiment verifies, and that division of labor is what keeps both tools honest.
What should you do when the platform reshuffles budget on its own?
Accept that ad set level has stopped being a readable unit and move the analysis up to campaign level. Meta states that ad set budget sharing moves up to 20 percent of one ad set daily budget to other ad sets, and that campaign level spend stays the same either way. On Advantage+ campaign budget, the same documentation says it is important to analyze results at the campaign level rather than at the ad set level. The platform writes the rule, and the rule tells you where to read.