Executive Overview

Retailers face a recurring strategic dilemma: should growth be pursued through temporary price cuts, or through increased media spend?

Our shock-based marketing mix model (MMM) provides a clear answer. Media spend generates a sustained positive lift that compounds across the typical 0–3 month trading horizon. Price changes, by contrast, act immediately—discounts boost units while hikes suppress them—but the effect fades quickly, rarely lasting beyond the same month. Because discounts also reduce the price per unit, their impact on revenue is usually weaker than holding price and stimulating demand through media campaigns.

Decision Matrix at a Glance

Goal / Lever Price Cuts (Discounts) Media Spend
Units / Penetration ✅ Strong immediate lift, but short-lived – Limited direct effect
Revenue ⚠️ Gains often fragile, risk of erosion ✅ Steady, persistent positive lift

In practice, discounts are the stronger lever for driving unit growth and penetration, while media spend is the more reliable lever for revenue growth. The risk profiles also differ: discounts almost always raise units but can undermine revenue, whereas media spend consistently produces positive returns with little downside.

Methodological Approach

To capture genuine demand responses rather than slow-moving trends, we residualise price and media spend. This means working with their innovations—the unexpected components remaining after removing each series’ recent history, seasonality, and fixed effects. An innovation represents a surprise move, which we can interpret directly as:

\[ \text{surprise} \;\;\rightarrow\;\; \text{demand response} \]

This residualised baseline was then extended with a Bayesian partial-pooling model, which stabilises estimates across organisations without erasing meaningful differences. Summing effects over a short horizon (\(H = 0–3\) months) yields cumulative elasticities that can be used directly in planning.

Scenario Formulas

With these elasticities in place, we derive scenario formulas that allow managers to calculate the price discount or media increase required to hit a given revenue target.

Let:
- \(s\) = fractional change in media spend (e.g., 0.10 for +10%)
- \(d\) = discount fraction (e.g., 0.10 for −10%)
- \(\theta_s = \sum_{h=0}^{H}\gamma_h\) = cumulative media elasticity
- \(\theta_p = \sum_{h=0}^{H}\phi_h\) = cumulative price elasticity

The resulting predictions are:

Units (penetration):

\[ \Delta U_{\text{spend}} = (1+s)^{\theta_s} - 1, \qquad \Delta U_{\text{discount}} = (1-d)^{\theta_p} - 1 \]

Revenue:

\[ \Delta R_{\text{spend}} = (1+s)^{\theta_s} - 1, \qquad \Delta R_{\text{discount}} = (1-d)^{\,1+\theta_p} - 1 \]

Combined effect:

\[ \Delta R_{\text{both}} = (1-d)^{\,1+\theta_p}(1+s)^{\theta_s} - 1 \]

Empirical Results

Applying this framework reveals a clear trade-off.
A 10% price cut typically outperforms a 10% media increase for unit growth, but a 10% media increase usually outperforms a 10% price cut for revenue growth.

This reversal is intuitive: discounts sell more units but at a lower price. Unless the unit lift is exceptionally large, revenue gains remain smaller than when price is held and demand is stimulated through media.

Managerial implication:
- For revenue growth, bias toward media increases.
- For unit or penetration growth, bias toward temporary discounts.

Quick Optimiser

Finally, the method yields a decision tool. For a target revenue change \(\tau\) (e.g., 0.05 for +5%):

\[ 1+\tau = (1-d)^{\,1+\theta_p}(1+s)^{\theta_s} \]

From this, either lever can be solved directly:

Discount required given a media plan \(s\):

\[ d^\star = 1 - \left(\frac{1+\tau}{(1+s)^{\theta_s}}\right)^{\!\tfrac{1}{\,1+\theta_p}} \]

Media increase required given a discount \(d\):

\[ s^\star = \left(\frac{1+\tau}{(1-d)^{\,1+\theta_p}}\right)^{\!\tfrac{1}{\theta_s}} - 1 \]

Using horizon-summed elasticities (\(\theta_p < 0\), \(\theta_s > 0\)), these formulas provide a decision dial for scenario planning at the start of any strategy exercise.

Data & Setup

Dataset

This analysis was based on the Multi-Region Marketing Mix Modeling (MMM) dataset (publicly available via Figshare).
For this white paper, our attention is restricted to the Apparel vertical, constructing a monthly organisation × country panel covering the period 2019-07-21 to 2024-06-02.

Source: Figshare: Multi-Region MMM Dataset

Note: The raw dataset contains observations for 18 countries and 15 verticals. Full details are provided in the Appendix.

Constructed Variables (monthly)

From the raw data we construct the following panel variables:

  • Units sold = sum of ALL_PURCHASES_UNITS
  • Net revenue = ORIGINAL_PRICE - GROSS_DISCOUNT
  • Average selling price (ASP) = net revenue / units
  • Total marketing spend = row-sum across all *_SPEND channels
  • Seasonality controls = cos(2πm/12), sin(2πm/12) where m is calendar month
  • Log transforms (safe) = log(max(price, 1e-9)), log(max(total_spend, 1e-9))

Lag Structure

To capture dynamics, lag windows for both price and media spend were created:

  • Price lags (p0–p3): current + four prior months of log-price
  • Spend lags (s0–s3): current + four prior months of log-spend

Only rows with a complete lag window are retained, ensuring comparability of cumulative responses over the chosen horizon.

Rationale for Design Choices

  • Monthly aggregation reduces high-frequency noise and aligns with standard retail reporting cycles.
  • Net revenue and ASP reflect realised prices after accounting for discounts, rather than posted list prices.
  • Harmonic seasonality (\(\cos\), \(\sin\)) is parsimonious and avoids the risk of overfitting.
  • Lag window of 0–4 months balances realism (typical carry-over and decay in retail media effects) with tractability, and supports cumulative effect estimation over short horizons.

Appendix: Country and vertical lists, column dictionary, and full reproducible code for panel construction.

Naïve Lag-Stack OLS Baseline

Model Specification

As a starting point, we estimated a naïve lag-stack OLS model of monthly log-units on lagged price and spend:

\[ \log U_{it} = \beta_0 + \sum_{h=0}^{3}\phi_h \,\log p_{i,t-h} + \sum_{h=0}^{3}\gamma_h \,\log s_{i,t-h} + \delta_1 \cos\!\Big(\tfrac{2\pi m_t}{12}\Big) + \delta_2 \sin\!\Big(\tfrac{2\pi m_t}{12}\Big) + \alpha_i + \varepsilon_{it}, \]

where \(U_{it}\) is units sold by organisation \(i\) in month \(t\), \(p_{i,t-h}\) is log-price at lag \(h\), \(s_{i,t-h}\) is log-spend at lag \(h\), \(\alpha_i\) are organisation fixed effects, and the sine/cosine terms capture seasonal cycles.

Results

The baseline model achieved a high overall fit (Residual SE = 0.392; \(R^2 = 0.961\), adj. \(R^2 = 0.960\); \(F(28,571) = 508.1,\ p<2.2\times10^{-16}\)).
However, the lag patterns were unstable and difficult to interpret.

  • Price effects. The same-month effect (\(p0\)) was strongly negative, but later lags (\(p1\)\(p3\)) were weak or insignificant.
  • Spend effects. The same-month effect (\(s0\)) was strongly positive, but the following month (\(s1\)) turned negative; subsequent lags were inconsistent.
  • Seasonality. The cosine term was significant, while the sine term was not.

Residuals were centred and symmetric (median ≈ 0), with moderate spread (−1.3 to +1.4).

Elasticities (estimates, 95% CI, p-values)

Term Estimate 95% CI p-value Sig.
p0 (price t) -0.518 [-0.668, -0.367] 3.8e-11 ***
p1 -0.288 [-0.446, -0.129] 0.00039 ***
p2 -0.129 [-0.287, 0.029] 0.112
p3 -0.150 [-0.300, 0.001] 0.0524 .
s0 (spend t) 0.497 [ 0.430, 0.564] <2e-16 ***
s1 -0.047 [-0.136, 0.042] 0.295
s2 -0.083 [-0.172, 0.007] 0.0711 .
s3 -0.022 [-0.089, 0.044] 0.514

(Organisation fixed effects omitted for brevity. CIs computed as \(\hat\theta \pm 1.96 \,\text{SE}\).)

Why the Baseline Fails

Despite strong global fit, the model was not decision-ready. The stacked lag structure introduced severe multicollinearity:

  • Price lags showed corrected GVIF values of 13.7 (p0), 9.5 (p1), 8.9 (p2), 8.4 (p3).
  • Spend lags were also inflated: 4.6 (s0), 5.8 (s1), 5.9 (s2), 4.8 (s3).
  • By contrast, seasonality (~1.0) and fixed effects (~1.2) remained well within safe ranges.

The instability, therefore, came not from controls but from the redundancy of stacked lags. This made the coefficients noisy, difficult to interpret, and risky to use in scenario planning.

Next Step: Innovation Residualisation

To overcome these issues, we moved from raw lagged levels to innovation residualisation—working only with the unexpected components of price and spend. This transformation reduces collinearity and produces stable, interpretable “shock → response” elasticities that can be safely aggregated over short horizons.

Other potential remedies exist (structured lag shapes, ridge regularisation, differencing, PCA within lag blocks), but residualisation provided the cleanest and most decision-relevant solution.

Residualisation (Innovation Approach)

Concept

Instead of regressing directly on raw levels and lags of price and spend, we remove the predictable components of each series — its own recent lags, seasonality, and organisation fixed effects. What remains are the innovations (or shocks): the unexpected movements in log-price and log-spend that cannot be forecast from past behaviour or seasonal patterns.

These shocks capture the true surprises in the system, and therefore provide a cleaner lens on how demand responds.

Construction of Shock Variables

The residualisation process has two stages. First, log-price is projected onto its own recent lags, together with seasonal terms and organisation fixed effects; the same is done for log-spend. Second, the residuals from these projections are retained as the price_shock and spend_shock series.

In other words, each shock variable represents a month-to-month surprise in price or spend after controlling for trend and seasonality.

Second-Stage Estimation

With these shock variables in hand, we then model log-units as a function of their current and lagged values, alongside seasonal controls and fixed effects. This second stage can be read directly as:

\[ \text{unexpected change} \;\;\rightarrow\;\; \text{demand response}. \]

By focusing only on innovations, we reduce collinearity and obtain coefficients that are more stable, interpretable, and decision-ready.

\[ \log U_{it} = f(\mathrm{price\_shock}_{i,t-h}, \; \mathrm{spend\_shock}_{i,t-h}, \; \mathrm{seasonality}, \; \alpha_i) \]

This can be read directly as:

\[ \text{unexpected change} \;\;\rightarrow\;\; \text{demand response}. \]

Why Residualisation Helps

Residualisation strengthens the model in three important ways.
First, it reduces multicollinearity: the shock variables are nearly orthogonal to the lag stack that generated them, producing stable and interpretable coefficients.
Second, it keeps the focus on surprises rather than trends. By stripping out predictable movements, the model isolates the effect of truly unanticipated changes in price or spend, not slow-moving cycles.
Finally, it improves inference. With less redundancy in the regressors, standard errors tighten and cumulative effects become more credible for decision-making.

Theoretical Lens

This approach echoes the Frisch–Waugh–Lovell theorem, which shows that controlling for other variables is mathematically equivalent to comparing residuals on residuals. By residualising first, the partial-out step is made explicit, with the added advantage of much lower collinearity.

Caveat

It is important to note that residualisation removes what is predictable, but it does not guarantee causal identification. If a simultaneous shock affects both demand and price or spend within the same period, endogeneity can still remain.

To mitigate this risk in practice, we rely on cluster-robust errors at the organisation level, and where possible, supplement with instrumental variables or experimental variation.

Innovation (Shock) Model: Results & Comparison

Specification

In the innovation model, the raw lagged regressors were replaced with their residual components — the unexpected movements in log-price and log-spend after removing predictable trends. Monthly log-units were then regressed on current and lagged values of price_shock and spend_shock, with seasonal controls and organisation fixed effects included as before.

Model Fit

The overall fit of the shock model was nearly identical to the naïve lag-stack OLS (Residual SE = 0.392; \(R^2 = 0.962\), adj. \(R^2 = 0.959\); \(F(28,514) = 458.9,\ p<2.2\times10^{-16}\)). Residuals were well-behaved (median ≈ 0, range −1.20 to +1.50).

The key difference is not in global fit, but in how the coefficients behave: the shock model produces much clearer, more interpretable elasticities.

Elasticities

Term Estimate 95% CI p-value Sig.
price_shock0 -1.198 [-1.503, -0.893] 8.5e-14 ***
price_shock1 -0.621 [-0.913, -0.330] 3.6e-05 ***
price_shock2 -0.378 [-0.671, -0.085] 0.0118 *
price_shock3 -0.293 [-0.588, 0.002] 0.0529 .
spend_shock0 0.636 [ 0.567, 0.705] <2e-16 ***
spend_shock1 0.330 [ 0.241, 0.419] 1.5e-12 ***
spend_shock2 0.200 [ 0.111, 0.290] 1.5e-05 ***
spend_shock3 0.025 [-0.065, 0.115] 0.587

(Notes: CIs are \(\hat\theta \pm 1.96\,\text{SE}\). Seasonality estimates: month_cos = 0.238 [0.191, 0.286], \(p<2\times10^{-16}\); month_sin = −0.064 [−0.111, −0.017], \(p=0.008\).)

Comparison with the Naïve Lag-Stack OLS

Benchmarking the shock model against the naïve OLS reveals three major improvements.

Media effects become stable. Under naïve OLS, spend effects flipped sign: strongly positive in the same month but negative the following month. By contrast, the shock model shows a consistent pattern: spend_shock0–2 are all positive and statistically credible, with spend_shock3 ≈ 0. This means media has an immediate lift that persists for one to two months, without sign reversals.

Price effects become clearer. In the naïve model, price effects were spread across several lags with weaker magnitudes. In the shock model, the same-month effect is sharply negative (−1.198), with smaller but still significant follow-through in the next two months. The cumulative price response is dominated by the immediate reaction, which is both intuitive and easier to plan around.

Multicollinearity collapses. Global fit statistics are unchanged, but corrected GVIF values fall dramatically: from dangerously high levels in the stacked-lag OLS to ~1 under the shock specification. The redundancy introduced by stacked lags is removed, yielding tighter intervals and more reliable inference.

Decision-readiness improves. With stable signs and coherent horizons, the shock coefficients can now be summed over \(H=0–3\) to form cumulative elasticities:

\[ \theta_p = \sum_h \phi_h, \qquad \theta_s = \sum_h \gamma_h \]

These cumulative measures are directly usable in the scenario formulas and quick optimiser described earlier, making the shock model the preferred foundation for decision-making.

See the GVIF plot immediately below for the side-by-side collinearity comparison; it visually documents the substantial reduction in corrected GVIF under the shock specification.

Elasticity summaries for reference

  • Shock model (innovations): strong, positive media effects through months 0–2; large, front-loaded negative price response with short tails.
  • Naïve lag-stack OLS: higher apparent noise and a sign flip on spend at \(h=1\), consistent with stacked-lag collinearity rather than true dynamics.

These results support using the shock model as the baseline for cumulative elasticities and subsequent Bayesian partial pooling.

Bayesian Shock Model — Summary of Results

Model Specification

Building on the residualised (shock) framework, we fitted a Bayesian partial-pooling model of monthly log-units on innovations in price and media spend.

Priors were centred on the OLS estimates, with standard deviations inflated threefold to remain weakly informative. Partial pooling across organisations stabilised the estimates without erasing real heterogeneity. Convergence diagnostics were excellent: all \(\hat R \approx 1.00\), effective sample sizes were large, and the residual scale was estimated at \(\sigma \approx 0.40\) \([0.37,\,0.42]\).

Price Shocks

The Bayesian results confirm that an unexpected price increase reduces units primarily in the same month. The immediate effect is large and precisely estimated:
- \(\phi_0 \approx -1.19\;[-1.46,\,-0.90]\).

Later lags are smaller and much less certain:
- \(\phi_1 \approx -0.24\;[-0.53,\,0.06]\),
- \(\phi_2 \approx -0.17\;[-0.46,\,0.13]\),
- \(\phi_3 \approx -0.28\;[-0.52,\,-0.03]\).

In short, the same-month effect dominates. Although a naïve horizon-sum would suggest \(\theta_p \approx -1.87\), the credible impact is overwhelmingly concentrated in \(\phi_0\).

Media Shocks

Media spend shows the opposite pattern: unexpected increases produce a strong and persistent lift. The immediate effect is large and precise:
- \(\gamma_0 \approx +0.60\;[+0.54,\,+0.67]\).

This lift continues into the following months, though with diminishing strength:
- \(\gamma_1 \approx +0.21\;[+0.13,\,+0.30]\),
- \(\gamma_2 \approx +0.16\;[+0.08,\,+0.25]\),
while \(\gamma_3\) is indistinguishable from zero.

Taken together, media shocks are reliably positive through months 0–2, yielding a cumulative media elasticity of \(\theta_s \approx +0.97\).

Scenario Comparison

To illustrate the implications, we compare a −10% price cut with a +10% media increase.

  • A 10% price cut typically lifts units by around +13%, but revenue rises only ~+2% — with a non-trivial probability of turning negative.
  • A 10% media increase delivers ~+10% growth in both units and revenue, with tight uncertainty bands that keep the outcome consistently positive.

This contrast highlights the different risk profiles of the two levers.

Managerial Takeaways

  • If the priority is units or penetration, temporary discounts remain the stronger lever.
  • If the priority is revenue growth, media spend is the dominant strategy.
  • Importantly, the risk profile differs: price cuts almost always boost units but can backfire on revenue, while media spend delivers a steady and reliable revenue gain that never dips below zero.