Why a Frozen CAC Number Misleads Your Next Budget Reallocation
The decision this affects
If you own a media mix model and set next quarter's channel budget from it, the question is not whether your MMM fits the historical data. It is whether the model still assumes each channel's cost-per-acquisition (CAC) is constant across the whole window it was trained on. Most production MMMs make exactly that assumption, and it quietly reshapes every reallocation decision built on top of it.
Why does a constant-CAC assumption cost money?
A media mix model that treats a channel's effectiveness as fixed has to average across every period in its training window, whether the channel was improving, holding steady, or decaying. That average blends two different stories into one number: it overstates acquisition cost on a channel that is actually getting more efficient, and understates it on a channel whose performance is quietly sliding. Neither error is visible from the model's headline fit; both only show up in the reallocation decision itself, when budget gets pulled from a channel that was working and pushed toward one that was already weakening.
Audience behavior, auction dynamics, creative fatigue, platform policy changes, and macro shocks all move channel performance week to week. A model trained on a full year of that movement, but built to output one CAC per channel, cannot tell you which regime you are currently in, and even the time-varying version tracks the low-spend CAC rather than the marginal CAC at current spend that reallocation actually depends on.
How does a time-varying model represent the same channel?
The fix does not require abandoning the interpretable model most teams already use. A standard saturation curve maps spend to acquired customers with two parameters: one sets the ceiling on how many customers a channel can produce at full saturation, and the other, the inverse of the curve's initial slope, represents the cost of acquiring a customer when spend is still low. Classically, that second parameter is treated as a fixed constant for the whole model.
The documented alternative keeps the same saturation curve but lets that initial-slope parameter move with time instead of holding it fixed. Spend and acquired customers are still the only inputs; the parameter representing current channel efficiency is now an unobserved, time-indexed quantity that the model has to infer rather than assume, with the split from baseline trend, seasonality, and correlated cross-channel spend shaped by the model's kernel, lengthscale, and hierarchy priors.
How does the model infer effectiveness it never observes directly?
Because you only ever observe spend and customers acquired, the time-varying efficiency parameter has to be estimated, not read off. A Gaussian process is a standard way to do that: it puts a prior over smooth functions of time, encoding the assumption that channel effectiveness drifts gradually rather than jumping erratically day to day. Combined with the saturation curve, that lets the model produce a posterior estimate of gradual drift in efficiency; capturing seasonal patterns typically needs a periodic kernel, and abrupt shocks like a sudden shift in platform rules typically need a changepoint or shorter lengthscale, since a single smoothness prior trades off against representing both at once.
A further refinement is documented directly in the open-source PyMC-Marketing time-varying media baseline example: a Hilbert space Gaussian process (HSGP) over time with a channel dimension, using shared basis functions across channels with channel-specific coefficients, rather than every channel moving independently.[^1]
Where this connects to testing an action before you commit budget
A technique explainer that never names its own boundary reads as a sales pitch, so this piece states it directly. This is a modeling-technique explainer, not a claim about what Subconscious builds. Subconscious does not construct Bayesian MMMs. But the underlying discipline is the same one Subconscious's causal experimentation approach is built on: don't treat "what happened last quarter" as a stable readout of "what will happen if you change your action." A time-varying MMM refuses to assume yesterday's channel effectiveness holds today. A causal experiment refuses to assume a correlational pattern in historical data tells you what will happen if you actually change price, packaging, or channel mix. Both reject a frozen average in favor of estimating how conditions are changing, with uncertainty attached to the estimate rather than hidden inside it; only the causal experiment estimates which action moves the outcome.
Teams that want to see how that discipline runs end to end, including moving a tested action into real-world validation, can look at how that process is structured in practice.
What this technique does not tell you
Listing what a method cannot do is what lets a team check it before betting budget on it. A time-varying MMM changes what you can say about a channel's past performance. It does not, by itself, tell you what will happen if you shift budget in a way your historical data never covered; that is a forecasting extrapolation, not a causal test of a new action. It also does not replace validating a decision with real customers; it only makes sure the historical baseline you are extrapolating from reflects current conditions instead of an average of old and new ones.
The practical takeaway
A CAC number earns its use as a planning input only when its limits are published alongside it. Before your next quarterly reallocation, ask whether your MMM's CAC estimates are allowed to move over time or are frozen for the whole training window. If they're frozen, the "underperforming" and "overperforming" channels in your dashboard may just be measuring which direction each channel's effectiveness has drifted, not which channel deserves more budget next quarter, and even a time-varying estimate describes the current regime, not next quarter's, since its posterior reverts toward the prior mean outside the training window.
---
[^1]: MMM with time-varying media baseline: PyMC-Marketing documentation, PyMC-Marketing (open source documentation).