Why is the model additive rather than log-log?
PanelMMM fits an additive mean in scaled target space with a Normal
likelihood. Econometricians arriving from demand estimation often expect a
log-log specification with constant elasticities. This page explains what the
additive form commits you to, where the elasticity information lives instead,
and what changes if you log the target yourself.
What the additive specification is
The model of the scaled target is
where is the scaled target in period , is the intercept, is spend on channel , carries spend forward in time, is the saturation function with curvature parameter , is the channel amplitude, is the vector of control columns with coefficients , collects seasonality, trend and event terms, and is Gaussian noise with standard deviation . The target and channels are max-abs scaled by default. Three properties follow.
Contributions are in outcome units. Each channel’s contribution is an amount of the target, and the decomposition sums to the fitted mean. This is what makes contribution charts, ROAS and budget optimisation coherent, and it is the main reason the model is additive: the business questions are asked in currency, not in percentages.
Effects do not scale with the baseline. A channel’s contribution at a given spend is the same amount whether the week is a seasonal peak or a trough. In a log-log model the same coefficient implies a larger absolute effect on a larger base. If you believe media multiplies demand rather than adding to it, the additive model misstates the seasonal pattern of the effect, and the posterior predictive residuals will often show it.
Diminishing returns come from saturation, not from logs. The log-linear shortcut buys concavity by transforming spend; AMMM3 buys it with an explicit saturation function whose curvature is estimated. See Adstock and saturation for econometricians for why the explicit transform is preferred.
Where the elasticity lives
There is no constant elasticity to read off a coefficient, because the model is not constant-elasticity. The point elasticity of the target with respect to channel spend is a derived quantity that varies with the operating point:
where
is the outcome and
is spend on channel
in period
, and the derivative comes from the fitted adstock and saturation. In
practice,
inspect sample_saturation_curve(...) for the curve and its slope, and treat
the elasticity as local: it is largest where the curve is steep and falls
toward zero at the plateau. A single elasticity number for a channel is a
summary of one point on that curve, and it should be reported with the spend
level it refers to.
For controls the model is linear in the supplied column, so a log-price control against a logged target does carry an elasticity reading; the conditions are set out in Price and promotion in an MMM.
The likelihood and heteroscedasticity
The Normal likelihood on the scaled target assumes additive noise with constant variance. Sales data whose noise grows with the level, or strictly positive data spanning orders of magnitude, violate that. The symptoms appear in the posterior predictive checks: residual spread that widens with the fitted level, and predictive intervals that are too wide at the trough and too narrow at the peak. There is no log-normal or count likelihood option; the specification decision is made in how you supply the target.
Supplying a logged target
You can fit log outcome by logging the column before it reaches the model.
target_type is reporting metadata and does not transform anything, so a
logged target is simply a different variable. The consequences are systematic:
| Quantity | Raw target | Logged target |
|---|---|---|
| Channel contribution | Outcome units, sums to the fitted mean | Log-units; approximately a percentage effect, and exponentiation does not give an additive currency decomposition |
| ROAS | Contribution over spend, in currency | Not meaningful without back-transformation and a variance correction |
| Media effect on the level | Additive | Multiplicative: the same spend is worth more in a high-demand week |
| Noise assumption | Additive, constant variance | Multiplicative on the level, often more realistic for sales |
| Budget optimiser objective | Media contribution in outcome units | Media contribution in log-units, which is not the business objective |
The practical rule follows from the last row. If the deliverable is a contribution decomposition, ROAS or a budget recommendation, keep the target in level space and let saturation carry the curvature; check the residuals for level-dependent spread and report it if present. Log the target when the question is itself on the log scale, an elasticity of a control such as price, and treat contributions and ROAS as unavailable from that fit rather than back-transforming them informally.
Do not mix the two readings in one deliverable. A percentage effect from a logged fit and a currency contribution from a level fit are answers to different questions, and reconciling them requires the delta method or a refit, not a slide transition.