The model hands a channel a negative coefficient nobody believes
In short
A channel with a negative coefficient almost never means the advertising destroyed sales. It usually means the spend history cannot separate that channel from the others: 2 channels correlated at 0.9 inflate each other's standard errors by roughly 2.3 times, and a budget held flat all year gives the model nothing to estimate from.
Key takeaways
- Run the identification checks before the modelling argument: pairwise correlations, variance inflation, and a spend plot per channel.
- Correlation of 0.9 between 2 channels inflates each standard error by about 2.3 times; 0.95 inflates it by about 3.2.
- A channel whose weekly spend varies by under 10% is being asked to extrapolate to zero from a wiggle.
- If the posterior looks like the prior, the model reported your assumption back to you and no data was involved.
- Only accept a negative result when identification is sound, the sign survives refits, and an experiment agrees.
The model runs, the contribution chart appears, and one channel has a negative coefficient. Everybody in the room knows the channel is not destroying sales. What has almost certainly happened is that the spend history cannot tell that channel apart from the rest of the plan, and the estimator has resolved the ambiguity in a direction nobody would have chosen.
This is a data-design problem wearing a modelling costume, and it is diagnosable in an afternoon. The question to answer first is not whether the channel works. It is whether this dataset could ever have said so.
The confirming check: what the spend history can and cannot separate
Two artefacts, both produced from the media columns alone, settle most of these arguments before any model is refitted.
- Build the pairwise correlation matrix of weekly spend across every channel in the model. Anything above 0.9 is a pair the model is being asked to separate on almost no independent information.
- Compute variance inflation per channel by regressing each channel's spend on all the others. The inflation factor is 1 divided by 1 minus that regression's r-squared, and the standard error grows with its square root: an r-squared of 0.81 means an inflation factor of about 5.3 and standard errors about 2.3 times larger than they would be under independent spend.
- Compute each channel's coefficient of variation: weekly spend standard deviation over mean spend. Below roughly 10%, the model is extrapolating the effect of switching a channel off from a series that never came close to off.
- Plot each channel's weekly spend across the whole modelling period on one page. Co-flighted bursts, budgets that move in lockstep and channels with no dark weeks are visible in seconds and invisible in a summary table.
- Plot the residuals against the promotional calendar, price changes and distribution. Structure there means the model is missing a driver, and a media channel is currently absorbing it.
Five reasons the number is wrong before the model is
| Cause | What the check shows | What to do about it |
|---|---|---|
| Channels that always move together | Pairwise correlation above 0.9, inflation factors above 5 | Model them as 1 group, or deliberately stagger next year's budgets so they can be separated later |
| Almost no spend variation | Coefficient of variation under 10%, no dark weeks, no bursts | Create variation with a planned pulse, or hold the channel out of the model and treat it as a fixed cost |
| An omitted driver | Residuals track promotions, price, distribution or stock-outs | Add the control column. A media channel correlated with promotions will otherwise carry their sign |
| Priors doing the work | The posterior sits on top of the prior; widening the prior moves the answer | Report it as an assumption, not a finding, and go and get evidence to justify the prior |
| The channel really is not incremental | Identification is sound, the sign survives refits, an experiment agrees | Believe it and reallocate. This is the one branch that licenses a budget cut |
Two of these deserve expanding because they are so often mislabelled as modelling faults. The first is branded search, which correlates with everything that creates demand and will happily absorb credit until other channels look weak or negative — the check that separates demand it captured from demand it created is set out in when branded search absorbs credit for everything. The second is the outcome column itself: if the most recent weeks are still filling in, the model sees spend with the sales attached to it missing, which mechanically pushes recent-heavy channels negative. That maturation effect is explained in how conversion lag bends a weekly read, and the fix is to hold back the immature weeks rather than to argue with the coefficient.
Telling a prior from a finding, and proving the model can recover anything
A Bayesian model with tight priors always produces a plausible-looking answer, which is exactly the problem: when the data is uninformative, the posterior is the prior with extra steps. Two tests separate the cases, and both are worth automating so they run on every fit.
- Overlay prior and posterior for every media parameter. Substantial overlap means the data moved nothing, and the contribution being reported is an assumption you wrote earlier.
- Refit with deliberately wide priors. If the estimate collapses or flips, the earlier result was the prior holding it in place.
- Run a recovery test on synthetic data. Take the real spend history, generate sales from a known set of coefficients, add realistic noise, and refit. If the model cannot recover coefficients you planted, it cannot recover the real ones either.
- Refit on subsamples: first half, second half, and a leave-one-quarter-out sweep. A stable channel keeps its sign; an unidentified one changes sign between windows.
- Backtest on a held-out period. Compare predicted against actual sales for weeks the model never saw, and check that the error is not concentrated in the weeks the suspect channel was heaviest.
The recovery test is the one most teams skip and the one that ends the debate fastest, because it separates a model that cannot see from a channel that does not work using no assumptions about the real world at all. Running that suite on a schedule, with a human reading the output rather than a threshold auto-approving it, is the sort of guarded automation described under AI agents and automation.
A model that never returns an unbelievable number is not well specified. It is constrained until it cannot disagree with you.
What the negative number is already doing to the contribution chart
The coefficient rarely reaches the client deck untouched. Negative contributions are clipped to zero, or the channel is dropped and refitted, or contributions are rescaled so they sum to actual sales. Every one of those steps moves the missing credit somewhere else — usually into the baseline, which then reads as demand that would have arrived anyway.
That matters because the baseline is what budget arguments are made against. A model reporting a 4-point-larger base because one channel was clipped is quietly recommending less media in total, and nobody in the meeting knows the recommendation came from a clipping rule. If clipping is applied, say so on the chart, and keep the unclipped version beside it. Where those refits and grids are expensive to run, precompute and store them rather than recomputing on every view, for the same reason a client dashboard stops opening quickly once every panel runs its own query.
Four endings, and the evidence each one requires
| Established | Ending | What it requires |
|---|---|---|
| Collinear pair, both channels matter to the plan | Constrain with external evidence | A prior taken from an experiment, documented, with the contribution reported as a range |
| Not identified, and the budget at stake justifies a test | Go and measure it | A geo or audience holdout, powered for the effect size that would change the decision |
| Not identified, and no test is affordable | Re-scope the model | Aggregate the collinear channels, or model at a coarser level and say what the model no longer answers |
| Identification sound, sign stable, experiment agrees | Accept the result | A refit history and a recovery test in the appendix, so the finding survives the next analyst |
The experiment branch is the strongest and the one most often ruled out too early. A holdout does not need a national footprint to constrain a model; it needs matched units, and when there are too few markets to pair there is still a synthetic-control route, worked through in pairing markets for a holdout in a small footprint.
One thing not to do: apply a non-negativity constraint because the sign is embarrassing. Forcing every media coefficient positive guarantees the chart looks sensible and destroys the only signal that the data was inadequate. If a modelling vendor's output never contains an implausible number, ask to see the identification diagnostics rather than admiring the fit — the kind of question worth asking of any technical partner, as set out in choosing an AI development partner. This work sits inside the attribution, incrementality and mix practice we run for marketing and advertising teams.
Frequently asked questions
Short answers to the follow-ups this page tends to raise.
Does a negative coefficient mean the channel is hurting sales?
Almost never. In practice it means the model could not separate that channel's effect from everything else moving at the same time, and the estimate landed on the wrong side of zero with a wide interval around it. Check the spend correlations and each channel's variation first; only when identification is sound, the sign survives refits on subsamples, and an experiment points the same way is the result about the channel.
How do I check for collinearity between marketing channels?
Build the pairwise correlation matrix of weekly spend and compute a variance inflation factor for each channel by regressing it on all the others. An inflation factor of 5 corresponds to an r-squared of 0.8 between that channel and the rest, and inflates its standard error by about 2.3 times; 10 corresponds to 0.9 and roughly triples it. Plotting the spend series together usually shows the cause faster than either number.
Can priors fix an unidentified channel in a Bayesian mix model?
They can stabilise the estimate, but only honestly if the prior comes from evidence outside the dataset, such as a completed incrementality test. A tight prior chosen because it produces a believable chart converts an assumption into an output, and the readout will be quoted as a measurement. Compare prior and posterior on every media parameter, and label any result where they overlap heavily as an assumption.
Should a channel with an implausible coefficient be dropped from the model?
Only after the diagnosis, and rarely as the first move. Dropping a channel does not delete its spend from history; it pushes that channel's effect into whatever it correlates with, usually the baseline or the nearest co-flighted channel. Aggregating collinear channels into a single group is more defensible, because it states plainly which question the model has stopped answering.
- mix modelling
- diagnostics
- measurement
- statistics
The work behind this page
Builds from our portfolio that this page draws on.
Read next
- The test finished and the confidence interval still straddles zeroAn interval containing zero can mean the channel does nothing, or that the test was never able to see an effect this size. One calculation separates them before anyone moves budget.diagnostic
- Adstock: the assumption that last week's spend is still selling this weekAdstock carries a share of this week's media into next week's model input. The half-life is chosen, rarely identified from the data, and it moves the answer.definition
- The lookback window: the assumption inside every conversion figureA lookback window has two dimensions set independently, so two platforms reporting different totals for the same sales are not disagreeing. They are counting different event classes.definition
- A slice of events lands before the visitor has answered the bannerEvents arriving with an absent consent field are not a compliance abstraction. They are a race between two scripts, and the race has a rate you can measure this afternoon.diagnostic
- Click identifiers: the URL parameters that let a server-sent conversion find the ad that caused itA campaign tag describes where traffic came from. A click identifier is the key that joins a sale back to a specific click — and only one of the two is load-bearing.definition
- Consent state: a typed field on each event, not a switch on the pageThe pageview before the banner answer and the purchase after it are both correct, and they carry different consent values. That only works if consent travels per event.definition
Working on something in this space?
Tell us where you are in a sentence or two. We'll tell you honestly whether we're the right team, and what a sensible first slice of the work looks like.
Start the conversation