Confounding variables are factors that influence both the cause you’re studying and the outcome, so they create a correlation between the two that isn’t causal. In a marketing mix model the usual confounders are seasonality, promotions, price and distribution changes, because they drive sales directly and they also drive when and how much you spend; leave one out and its effect ends up credited to your media, a problem econometricians call omitted variable bias.
The fix sounds simple: put the confounders in the model as control variables. In practice the harder question is which variables to control for, and here more is not automatically better. Some candidate controls remove bias, some only add precision, and some (branded search is the classic case) quietly remove part of the advertising effect you set out to measure. Having built marketing mix models for brands from Booking.com to Breeo, I’ve found that the control list is where a model’s causal assumptions actually live, far more than in the choice of library or adstock curve. I’ll show you how to choose controls by their causal role, with a causal graph you can experiment on.
Why confounding variables are the default in marketing data
Marketing spend isn’t set by a random number generator. It’s set by people who are trying to spend when it will work best, which usually means when demand is already high. A retailer spends more in November, a travel brand spends more in January, and almost everyone spends more during a promotion. Each of those decisions is sensible, and each one creates a confounder, because the same thing that raised the budget also raised sales on its own. The causal inference guide has a simulator that shows how much a single seasonal confounder can inflate a naive ROI.
Google’s own researchers flagged this early. Chan and Perry’s 2017 paper lists ad targeting, seasonality and funnel effects under selection bias, and in my experience they cover most of what goes wrong in real models: targeting means the ads go where buyers already are, seasonality means the budget follows the calendar, and funnel effects mean one channel’s results show up in another channel’s numbers. The good news is that most confounders in MMM are things you can name and usually measure, which isn’t true of every field that wrestles with them.
Omitted variable bias: the formula behind the problem
Omitted variable bias has a precise form, and it’s worth knowing because it tells you the direction and rough size of the error before you run anything. Suppose sales truly depend on TV spend and a promotion flag :
If you leave out and regress sales on TV alone, the TV coefficient you get is, on average,
where is the promotion’s effect on sales and is the slope from regressing the promotion flag on TV spend (how much “more promotion” comes with each extra dollar of TV). The bias is the product of the two, so it disappears if either is zero: a variable that doesn’t affect sales can’t bias you, and neither can one that’s unrelated to your spend.
To put numbers on it, say TV truly returns $3 of sales per $1, a promotion week adds $40,000 of sales, and the team tends to schedule TV around promotions, so that every extra $10,000 of weekly TV comes with a 20 percent higher chance of a promo that week ( = 0.00002 per dollar). The bias is 40,000 × 0.00002 = 0.8, so a model without the promotion flag reports a TV return of about $3.80. That’s a 27 percent overstatement from one missing column, and nothing in the model’s fit statistics would warn you about it.
The signs of and tell you the direction of the error:
- Positive effect on sales and you spend more at the same time (seasonality, promotions): the media estimate is overstated.
- Positive effect on sales but you spend less at the same time (cutting media as new retail listings grow): understated.
- Negative effect on sales and you spend more at the same time (defensive spend during competitor launches): understated.
- Negative effect on sales and you spend less at the same time (pulling media back when prices rise): overstated.
With several omitted variables the formula generalizes, but the intuition holds: ask what you left out, whether it moves sales, and whether it moves with your spend.
Endogeneity: the econometrician’s name for the same problem
If you read econometrics papers you’ll see “endogeneity” more often than “confounding”. An explanatory variable is endogenous when it’s correlated with the model’s error term (the part of sales the model can’t explain), which biases its coefficient. Omitted confounders are one source, because their effect sits in the error and moves with spend. The other two that matter in marketing are simultaneity, where sales and spend cause each other (budgets set as a share of last month’s revenue, or bid algorithms that spend more when conversion rates are high), and measurement error in the media variables, which tends to shrink their coefficients towards zero.
The textbook fix for endogeneity is an instrumental variable (something that moves spend but affects sales only through spend), and in marketing those are rare: an auction price shock, a TV rate card change or a natural experiment like a platform outage can sometimes qualify, but they don’t show up on demand. More often the practical fixes are the ones on this page, which are to measure and include the confounders, avoid controls that are themselves consequences of the ads, and anchor the model with experiments. The marketing econometrics guide covers the broader toolkit.
Confounder, mediator or collider: choosing control variables by causal role
The course lesson on choosing controls starts from a situation I’ve seen many times: someone proposes adding every available variable to the regression. Availability alone isn’t a causal reason to adjust. What matters is the variable’s role in the process that generated the data, relative to the effect you want to estimate (the “estimand”). Cinelli, Forney and Pearl’s crash course in good and bad controls sets this out with diagrams, and four roles cover nearly every variable you’ll be offered in an MMM:
- Confounder: causes both the media spend and sales (seasonality, promotions, price). Include it, or its effect leaks into the media coefficient.
- Predictor: causes sales but has nothing to do with spend decisions (weather for many brands). Including it doesn’t change the bias, but it soaks up noise and tightens the estimates.
- Mediator: sits on the path from media to sales (branded search, website sessions, add-to-carts). Controlling for it blocks part of the effect you meant to include.
- Collider: a common effect of the media and something else that drives sales (press coverage caused by both your campaign and a competitor’s news). Conditioning on it creates an association that wasn’t there before.
A variable’s name doesn’t settle its role. Distribution is a confounder if new store listings come with launch campaigns, but a mediator if your advertising is what persuaded retailers to stock you. The same variable can play different roles for different channels in the same model, which is exactly what happens with branded search. The diagram comes from knowing how the business works, not from the spreadsheet.
Try it: toggle the controls on a causal graph
The graph below is the true process behind 156 weeks of simulated data, so we know the right answer. TV adds 2.0 sales per $1 directly and another 1.0 through the brand searches it creates, for a total effect of 3.0. Season and promotions drive both the TV budget and sales. Tick controls on and off and watch the TV coefficient, then switch the target to the direct effect and see which choices become right.
A few things are worth trying in order. With no controls, the TV estimate is inflated by season and promotions, exactly as the omitted variable bias formula predicts. Add season and promotions and the estimate snaps to the truth. Add weather and competitor activity and the estimate stays put, but the error bar shrinks, which is what a predictor is for. Then add brand search and the TV estimate falls by about a third, because the model now explains the searches TV created as search’s own work. Now go back to season and promotions only and add press coverage. The estimate rises again, for a subtler reason: among weeks with the same amount of coverage, a big TV week implies a quiet competitor week, and quiet competitor weeks sell more. (Controlling for competitor activity as well closes that path, and the estimate falls back to within its error bar of the truth, which is a reminder that the problem lies in the combination of controls rather than in press coverage alone.) Finally, look at the R² as you go. The “kitchen sink” model fits best of all and still understates the total effect by almost 30 percent.
The usual suspects in a marketing mix model
Here’s how I’d think about the controls that come up in nearly every MMM, with the caveat that your own business may assign them different roles.
Seasonality and holidays
Seasonality is the most important confounder in almost every model, because every media plan is built around the calendar. The usual approaches are Fourier terms (sine and cosine waves at yearly frequency), holiday dummies, or a decomposition like Prophet’s, which Robyn builds in for trend, season and holidays. The risk runs in both directions: too little seasonality and media gets credit for demand, but too flexible a seasonal curve can absorb media effects that are themselves seasonal, which shifts credit into the baseline. The seasonality brief and the dummy variables brief cover the mechanics.
Price and promotions
Price and promotions are confounders whenever media is planned around them, which is most of the time, and promotions in particular are often missing from the data because they live in a merchandising calendar rather than a marketing database. Price is also worth modeling for its own sake; the price elasticity guide shows how a log-log specification gives you an elasticity alongside the media effects. If you only have a promotion flag, at least record depth (percent off) as well, because a 10 percent and a 40 percent promotion aren’t the same event.
Competitor activity
Competitor spend, launches and price cuts mostly affect your sales directly, which makes them predictors. They become confounders if your team reacts to competitors with its own budget (defensive spend during a rival’s launch), and in that case leaving them out tends to understate your media, because your spend goes up exactly when sales are under pressure. Competitor data is usually patchy, so it’s worth asking the media team how often they actually respond to rivals before spending weeks sourcing it.
Distribution and availability
For brands sold through retailers, distribution (store count, listings, out-of-stocks) can move sales more than any media channel. It’s a confounder when launches bring both new listings and a campaign, and a mediator if your advertising is what wins the listings. Stock-outs deserve a special mention: if you keep spending while the product is unavailable, the model sees spend with no sales and drags the media coefficient down.
Brand search: the mediator that steals credit
Branded search volume is the control most likely to do damage. TV, video and social make people search for your brand name, so those searches sit on the path from upper-funnel media to sales. If you put branded search in the model as a control (or model paid brand search as a channel without thinking about where its demand came from), the regression credits search with sales that TV created, and the upper-funnel channels look weaker than they are. Google’s Meridian documentation on control variables makes the same distinction: search query volume is a confounder for search ads, because a query has to happen before a search ad can show, but a mediator for other media that drive search behavior. No single regression control is right for both roles, which is why Meridian offers a two-stage approach and why a 2018 Google paper by Aiyou Chen and colleagues treats paid search as its own causal problem.
Weather
For most brands weather is a pure predictor: it changes how many people buy ice cream or umbrellas but nobody’s TV plan reacts to tomorrow’s forecast. Including it can make the model more precise without biasing anything. The exception is brands that run weather-triggered campaigns, where weather becomes a confounder for that channel and has to be in the model.
Things that should almost never be controls
Website sessions, app installs, add-to-carts, platform-reported conversions and email sign-ups are consequences of the advertising. Controlling for any of them is like asking how much TV drives sales holding constant the number of people TV sent to your website, and the answer will be close to nothing. They’re useful as outcomes in their own right, or as intermediate stages in a funnel model, but not as controls in a model whose job is to estimate the total effect of media on sales.
How to choose your controls in practice
The process I’d recommend fits on a page, and it’s mostly conversation rather than statistics.
- Write down the estimand first: “the total effect of each channel’s spend on weekly revenue”, or something more specific.
- Ask the media team why the budget moved last year, week by week if you can. Every reason is a candidate confounder.
- For each candidate control, answer four questions: does it affect sales on its own, does it influence spend, can advertising change it, and is it caused by both advertising and another driver of sales?
- Include confounders, include strong predictors, leave out mediators and colliders, and flag anything with two roles for a design decision (often an experiment).
- Check the data for the confounders you can’t measure well, and say so in the results rather than pretending the model controls for them.
The spreadsheet below turns steps three and four into formulas. Each yellow cell takes a Yes or No, and the sheet suggests a role and a recommendation. Ten common MMM controls are filled in as examples, with reasoning you should overwrite with your own.
If you want to practise on real-looking data, the practice dataset has revenue, three channels and a promotion flag; try fitting it with and without the promotion column and compare the channel coefficients. The data requirements guide covers what else a production model needs.
What control variables can’t fix
Controls only remove bias from confounders you measured, and measured well. If the true driver is “demand” and your control is last year’s sales, some of the demand signal stays in the error term and some of the bias stays in the media coefficient. Unmeasured confounders are worse, because there’s no column to add: a brand’s word of mouth, a viral moment or a sales team’s push into a new account won’t appear in anyone’s spreadsheet. That’s the strongest argument for treating the MMM as one input to a measurement system rather than the final word, and for running experiments on the channels where the control choice moves the answer most. Calibrating MMM with experiments shows how to feed those results back in, and the multicollinearity guide covers the related problem of channels that move together, which controls also can’t solve.
The pillar guide to marketing mix modeling puts all of this in context, and the Vexpower MMM course has a causal control room lesson where you switch between confounder, mediator and collider structures and watch the estimate change. My advice is to treat every proposed control as a small causal claim, explain what causes it, what it causes and whether advertising can change it, and only then decide whether it belongs in the model.
