Markdown Editor

MBA Marketing Mix Modeling Concept Card Template

Adstock, saturation, base versus incremental, decomposition, ROI and marginal ROI, holdout validation, experiment calibration, Robyn and Meridian

MBA 与商学院完整Koyck (1954); Broadbent (1979); Jin et al. (2017); Robyn, Meridian (checked 2026-10-28)marketingmixmodelingcardmath

使用方法: Use it when you must build, read or challenge a marketing-mix model for cross-channel budgets. Check the data window, spend variation and the experiments used for calibration before reading any ROI. The main pitfall is trusting a model because it fits well when a channel moves with demand.

预览

Marketing Mix Modeling Concept Card: [Brand, market or course]

A concept card for building, reading and challenging a marketing-mix model (MMM): adstock (carry-over), saturation curves, base versus incremental sales, decomposition, return on investment and marginal return, validation, calibration with experiments, and the open-source tools practitioners use. It is for MBA students in a marketing analytics elective and for managers who receive an MMM from an agency or an in-house team and must decide how far to trust it. It builds on the core card mba/mba-marketing-mix-card, which introduced the response curve, adstock and the equal-marginal-return allocation rule, and on mba/mba-regression-for-managers-card for regression basics; neither is re-taught here. Source basis: Koyck (1954), Broadbent (1979), Little (1970), Dorfman and Steiner (1954), Hanssens, Parsons and Schultz (2001), Jin et al. (2017) and Sethuraman, Tellis and Briesch (2011), written up in original words with simulated, fictional Northfield Outdoor Co. data. Every number was computed in Python (numpy) and is shown with its Excel route where Excel can compute it. Replace every [bracketed] value and every row marked Example.

Document control

FieldValue
Document ID[MKT-MMM-001]
Course or project[Marketing analytics elective / FY budget review]
Learner or analyst[Your name]
Decision owner[@owner]
Reviewed by[Study group / analytics lead / agency]
Data set[Northfield Outdoor Co., 104 weeks, simulated (fictional) / your data and source]
Granularity[Weekly, national / weekly by region]
Model form[OLS with grid-searched adstock and saturation / Bayesian / ridge]
Calibration evidence[Search geo holdout, iROAS 3.7, SE 0.5 / your experiments]
SoftwarePython 3 with numpy; Excel (LINEST, EXP, Solver or Data Table) for the single-model route
Last updatedYYYY-MM-DD
Version[0.1]
Classification[Course work / internal]

When to use it

One-sentence rule: use an MMM when you need the incremental contribution and return of all major marketing levers, including offline ones, on total sales, with privacy-safe aggregate data, and you have at least two years of weekly history with real variation in spend.

Good usesPoor uses
Annual and quarterly budget setting across TV, digital, print, promotionsDay-to-day bidding or creative choice (too slow, too aggregate)
Separating base sales from marketing-driven salesA brand with one year of data and constant spend in every week
Measuring channels with no user-level tracking (TV, radio, out-of-home)Proving causality on its own (needs experiments to calibrate)
Price and promotion effects alongside mediaVery small channels whose spend is below the noise level
Checking platform and attribution claims against total salesQuestions about individual customer journeys (mba/mba-digital-attribution-card)

The idea in plain language

An MMM explains weekly sales as a base (what the brand would sell with no current marketing: distribution, brand strength, trend, season) plus the incremental effect of each marketing lever, plus price, promotions and outside factors. Two shapes make it a marketing model rather than a plain regression:

  1. Carry-over (adstock). Advertising this week still sells next week. Koyck (1954) introduced geometrically declining distributed lags in economics; Broadbent (1979) coined "adstock" for the decaying stock of TV advertising. With retention rate θ\theta, the effect halves every ln⁡0.5/ln⁡θ\ln 0.5/\ln\theta weeks.
  2. Saturation (diminishing returns). The first dollars in a channel reach the most responsive people; later dollars reach people who already saw the message. The response curve flattens.

The model learns these shapes from history: weeks with heavy TV and weeks without, weeks with promotions and weeks without. The coefficients then give each lever's contribution, its return on investment (ROI) and, most useful for budgeting, its marginal return at current spend, which feeds the allocation rule of the core card.

The idea is old. Little (1970) argued that managers will only use models that are simple, robust and easy to control; Dorfman and Steiner (1954) showed that a profit-maximising firm sets its advertising-to-sales ratio equal to the ratio of its advertising elasticity to its price elasticity. Hanssens, Parsons and Schultz (2001) is the standard reference on market response models. For scale, a meta-analysis of 751 short-term and 402 long-term brand advertising elasticities from 56 studies (Sethuraman, Tellis and Briesch 2011) found an average short-term elasticity of 0.12 and an average long-term elasticity of 0.24: a 10% rise in advertising goes with roughly 1.2% more sales in the short run. An MMM that implies much larger effects deserves a second look. What is new since the late 2010s is the return of MMM as user-level tracking declined, and Bayesian versions that combine data with prior knowledge and experiments (Jin et al. 2017).

Formulas and notation

Model for week tt:

Salest=β0+β1t+γ Seasont+δ (Pricet−1)+∑cβc f ⁣(Ac,t; kc)+εt\text{Sales}_t = \beta_0 + \beta_1 t + \gamma\, \text{Season}_t + \delta\,(\text{Price}_t - 1) + \sum_{c} \beta_c\, f\!\left(A_{c,t};\, k_c\right) + \varepsilon_t

Geometric adstock with retention θc∈[0,1)\theta_c \in [0, 1):

Ac,t=xc,t+θcAc,t−1,total weight of one unit of spend=11−θc,half-life=ln⁡0.5ln⁡θcA_{c,t} = x_{c,t} + \theta_c A_{c,t-1}, \qquad \text{total weight of one unit of spend} = \frac{1}{1-\theta_c}, \qquad \text{half-life} = \frac{\ln 0.5}{\ln \theta_c}

Saturation. The negative exponential of the core card, f(A;k)=1−e−A/kf(A; k) = 1 - e^{-A/k}, or the Hill curve (named after Hill's 1910 dose-response work), which allows an S-shape:

fHill(A;K,s)=AsAs+Ksf_{\text{Hill}}(A; K, s) = \frac{A^{s}}{A^{s} + K^{s}}

where KK is the half-saturation point and ss the shape. Tools differ in which they use; the business reading is the same.

Contribution, ROI and marginal ROI of channel cc over the period:

Contrc=∑tβcf(Ac,t),ROIc=Contrc∑txc,t\text{Contr}_c = \sum_t \beta_c f(A_{c,t}), \qquad \text{ROI}_c = \frac{\text{Contr}_c}{\sum_t x_{c,t}}

At a steady weekly spend xx, the adstock settles at x/(1−θ)x/(1-\theta), so the weekly response and marginal return are

Rc(x)=βc(1−e−x/((1−θc)kc)),Rc′(x)=βc(1−θc)kc e−x/((1−θc)kc)R_c(x) = \beta_c\left(1 - e^{-x/((1-\theta_c)k_c)}\right), \qquad R_c'(x) = \frac{\beta_c}{(1-\theta_c)k_c}\, e^{-x/((1-\theta_c)k_c)}

Profit test. With gross margin gg, the next dollar pays back if g Rc′(x)>1g\, R_c'(x) > 1; channels should be funded until their marginal returns are equal (core card).

SymbolMeaningNorthfield example A (fitted)
xc,tx_{c,t}Spend in channel cc, week tt (USD k)TV average 46.58, search average 34.49
Ac,tA_{c,t}Adstocked spendTV only
θc\theta_cAdstock retention per week0.60 for TV (search: none)
kck_cSaturation scale (higher means slower saturation)175 for TV, 20 for search
βc\beta_cMaximum weekly incremental sales from the channel (USD k)500.51 TV, 289.55 search
δ\deltaPrice effect per unit of price index-1,473.49
Contrc\text{Contr}_cIncremental sales credited to cc over the periodTV 23,394.6, search 24,089.2
ggGross margin0.45

Assumptions and limits

AssumptionWhat it meansHow to check or protectIf it fails
Spend varies for reasons unrelated to demandOtherwise the model cannot separate marketing from demandAsk how budgets are set; plot spend against seasonChannel effects absorb seasonality: calibrate with experiments
Channels do not move in lockstepSeparate variation per channelCorrelation matrix of spend; variance inflation factorsCredit is split arbitrarily between correlated channels
Right functional formAdstock and saturation shapes fit realityCompare forms; residual plots; holdout errorBiased ROIs, wrong marginal returns
All important drivers includedPrice, distribution, competitors, macro, weatherBusiness review of the variable listOmitted variable bias (core regression card)
Stable effects over the windowThe channel works the same in year 1 and year 2Rolling-window refitsUse time-varying coefficients or shorter windows
Enough dataTypically 2 to 3 years of weekly data, or regional panelsCount parameters against observationsPriors, pooling across regions, fewer channels

The central limit of MMM. Many different parameter sets fit history almost equally well (sometimes called equifinality). Fit statistics cannot choose among them; outside evidence (experiments, priors, business sense) must. Worked example A shows this directly.

How managers use it in practice

  • Budget setting. Response curves feed the allocation rule; the profit-maximising budget sets every channel's marginal gross profit to one dollar (mba/mba-marketing-mix-card).
  • Triangulation. MMM (top-down, all channels, total sales), attribution (bottom-up, digital paths) and experiments (causal, one channel at a time) are combined; experiments are the arbiter (mba/mba-marketing-experiments-card).
  • Base-sales tracking. A shrinking base with steady marketing contributions is an early warning about brand health or distribution (mba/mba-brand-equity-card).
  • Tools (dated facts, checked 28 October 2026). Meta's Robyn is an open-source, MIT-licensed MMM package in R (with a beta Python API first released on 22 November 2023) that uses ridge regression, Nevergrad hyperparameter optimisation and Prophet decomposition, and can be calibrated with lift tests (Robyn). Google's Meridian is an open-source (Apache-2.0) Bayesian MMM in Python that supports national or geo-level data and experiment-based priors (Meridian); Google's earlier LightweightMMM states it is no longer supported and recommends Meridian, and its repository was archived in January 2026. PyMC-Marketing (PyMC Labs, Apache-2.0) offers Bayesian MMM with adstock, saturation and lift-test calibration. Check each project's page for current versions and methods before you rely on them.

Worked example A (fully solved): a two-year MMM for Northfield

Situation (fictional). Northfield Outdoor Co. spends on regional TV in flights (54 of 104 weeks, USD 4,844.8k in total) and on paid search every week (USD 3,587.2k), and runs 10% price promotions in a few weeks. Weekly revenue averages USD 1,036.6k. The CMO asks: what did TV and search each add, and where should next year's money go? Search spend follows demand (correlation with the seasonal curve 0.929), as it does in most firms, because search budgets are set against query volume.

The data are simulated so that the true effects are known: TV adstock 0.6 and scale 150 with a maximum of 500; search scale 60 with a maximum of 300; noise SD 30. The analyst does not know these values.

Step 1: fit the model

import itertools
import numpy as np

rng = np.random.default_rng(61)                      # simulated Northfield data, 104 weeks
T = 104; t = np.arange(T); season = np.sin(2*np.pi*(t-10)/52)
price = 1 - 0.10*(rng.random(T) < 0.12)              # 10% promotions in some weeks
tv = np.where(rng.random(T) < 0.45, rng.uniform(60, 120, T), 0.0).round(1)
search = (35 + 12*season + rng.normal(0, 4, T)).round(1)

def adstock(x, theta):
    out, carry = np.zeros_like(x), 0.0
    for i, v in enumerate(x):
        carry = v + theta*carry; out[i] = carry
    return out

def sat(x, k):
    return 1 - np.exp(-x/k)

sales = (600 + 0.8*t + 120*season - 1500*(price-1) + 500*sat(adstock(tv, 0.6), 150)
         + 300*sat(search, 60) + rng.normal(0, 30, T)).round(1)

def X(theta, k_tv, k_s):
    return np.column_stack([np.ones(T), t, season, price-1,
                            sat(adstock(tv, theta), k_tv), sat(search, k_s)])

fits = []
for theta, k_tv, k_s in itertools.product(np.arange(0, 0.91, 0.05), range(50, 401, 25), range(20, 151, 10)):
    b, *_ = np.linalg.lstsq(X(theta, k_tv, k_s), sales, rcond=None)
    fits.append((((sales - X(theta, k_tv, k_s) @ b)**2).sum(), round(theta, 2), k_tv, k_s, b))
sse, theta, k_tv, k_s, b = min(fits, key=lambda f: f[0])
Xb = X(theta, k_tv, k_s)
print("theta, k_tv, k_s:", theta, k_tv, k_s, " R2:", round(1 - sse/((sales - sales.mean())**2).sum(), 4))
print("coefficients:", [round(float(v), 2) for v in b])
print("ROI TV:", round((Xb[:, 4]*b[4]).sum()/tv.sum(), 3), " ROI search:", round((Xb[:, 5]*b[5]).sum()/search.sum(), 3))

Output from the run:

theta, k_tv, k_s: 0.6 175 20  R2: 0.978
coefficients: [507.33, 1.0, 129.13, -1473.49, 500.51, 289.55]
ROI TV: 4.829  ROI search: 6.715

The grid search tries 19 adstock rates, 15 TV scales and 14 search scales (3,990 models) and keeps the one with the smallest sum of squared errors; for each, the remaining coefficients are ordinary least squares. Excel route for one candidate: put spend in column B, the adstock in C with =B3+$H$1*C2 (retention in H1), the saturation in D with =1-EXP(-C2/$H$2), put trend, season, price minus 1, the TV saturation and the search saturation in adjacent columns, then =LINEST(sales range, that block, TRUE, TRUE) (LINEST returns the coefficients in reverse column order, intercept last); use a Data Table or Solver over H1 and H2 to minimise =SUMXMY2(actual, fitted).

Step 2: validate out of sample

Refit on weeks 1 to 91 only and forecast weeks 92 to 104: the selected parameters are 0.55, 150 and 50, and the holdout mean absolute percentage error is 3.03% (=AVERAGE(ABS((actual-forecast)/actual))). The model fits and forecasts well: R2R^2 = 0.978, residual SD 30.35, close to the true noise of 30.

Step 3: decompose and compute returns

ComponentContribution over 104 weeks (USD k)Share of fitted salesSpend (USD k)ROI (revenue per USD)
Base (intercept, trend, season)58,114.653.9%
Promotions2,210.22.1%
TV23,394.621.7%4,844.84.829
Paid search24,089.222.3%3,587.26.715

At a 45% gross margin, profit ROI is 0.45×4.829−1=1.1730.45 \times 4.829 - 1 = 1.173 for TV and 2.022 for search. Marginal ROAS at average spend (steady-state formula): TV 3.675, search 2.581. TV's adstock of 0.60 means one dollar of TV counts 2.50 times in total, with a half-life of 1.36 weeks.

Step 4: compare with the truth

Because the data are simulated, we can do what no real analyst can:

ChannelFitted contributionTrue contributionFitted ROITrue ROIFitted marginal ROASTrue marginal ROAS
TV23,394.625,794.04.8295.3243.6753.834
Paid search24,089.213,414.46.7153.7402.5812.814

TV is roughly right. Search is credited with almost twice its true contribution, and its saturation scale (20 against a true 60) is far off. The reason is the 0.929 correlation between search spend and the seasonal curve: when two inputs move together, the data cannot tell which one produced the sales, and the model handed part of the base to search (the fitted intercept is 507 against a true 600). The model had an excellent R2R^2 and holdout error, and was still wrong about the channel that matters most for the budget. Fit is necessary, not sufficient.

A naive linear regression with no adstock and no season is far worse: it gives search a coefficient of 13.98 revenue per dollar, because search is standing in for the whole seasonal swing. Adding the season term alone cuts it to 2.55.

Step 5: calibrate with an experiment

Northfield runs a search geo holdout (mba/mba-marketing-experiments-card) and measures an incremental ROAS of 3.7 with a standard error of 0.5. A simple calibration adds a penalty to the fit criterion for disagreeing with the experiment: minimise SSE/σ^2+((ROIsearch−3.7)/0.5)2SSE/\hat{\sigma}^2 + \left((\text{ROI}_{\text{search}} - 3.7)/0.5\right)^2, a rough stand-in for a Bayesian prior.

Modelθ\theta, kTVk_{TV}, ksk_sSSE versus best fitTV ROISearch ROITV marginal ROASSearch marginal ROAS
Best fit0.60, 175, 201.00004.8296.7153.6752.581
Calibrated0.55, 150, 701.01004.3533.7903.2942.977
Truth (simulator)0.60, 150, 605.3243.7403.8342.814

The calibrated model fits only 1% worse and now credits search correctly (3.790 against 3.740). The base rises to USD 70,902.2k. TV moved further from the truth (4.353 against 5.324): the experiment fixed the channel it measured and nothing else. The lesson for the measurement plan: the next experiment should be on TV.

Step 6: the answer to the CMO

"Both channels pay back on average and at the margin: at a 45% gross margin the break-even marginal ROAS is 2.22, and the calibrated model puts TV at 3.29 and search at 2.98. The uncalibrated model overstated search by about 80% because search spend follows the season; we now use the calibrated version. Recommendation: raise total spend modestly, tilt the increase towards TV, move in steps, and run a regional TV test this spring to pin down the TV curve."

Worked example B (half solved): adstock and contribution by hand

A channel spends USD k 100, 0, 0, 50, 0, 0 in weeks 1 to 6. Retention θ\theta = 0.5, saturation kk = 100, β\beta = 400 (maximum weekly incremental sales, USD k).

WeekSpendAdstock At=xt+0.5At−1A_t = x_t + 0.5 A_{t-1}1−e−At/1001 - e^{-A_t/100}Contribution 400×400 \times previous column
1100100.000.6321252.8
2050.000.3935157.4
30[ ]0.2212[ ]
450[ ][ ]185.9
5031.250.2684[ ]
6015.625[ ]57.9
  1. Fill the gaps. Excel: adstock =B3+0.5*C2, saturation =1-EXP(-C3/100), contribution =400*D3.
  2. Total contribution over six weeks: [ ]. ROI on USD 150k of spend: [ ].
  3. What share of the week-1 spend's effect appears after week 1? Explain why a model without adstock would understate TV. [ ]
  4. Half-life of this adstock in weeks: ln⁡0.5/ln⁡0.5\ln 0.5/\ln 0.5 = [ ].
  5. If the same USD 150k were spent as USD 25k a week for six weeks, would total contribution be higher or lower, counting only weeks 1 to 6 and counting the carry-over after week 6 as well? Explain using saturation and adstock. [ ]

Exercise C (unsolved): stress-test the Northfield model

  1. Refit on weeks 1 to 91, forecast weeks 92 to 104 and report the selected parameters and the holdout MAPE.
  2. Fit a linear model with trend, season and price but no adstock or saturation (spend enters as is). Report the TV and search coefficients and explain the difference from the full model.
  3. Using the fitted parameters (β\beta = 500.51, θ\theta = 0.60, kk = 175), compute TV's steady-state marginal ROAS at USD 100k a week. Is a 100k weekly TV level profitable at the margin with a 45% gross margin?
  4. Re-run the simulation with search spend that does not follow the season (replace 12*season by 0). Does the search ROI estimate get closer to the truth? Why?
  5. Write the three questions you would ask an agency that presents this MMM.

MMM review checklist

CheckQuestionAnswer
Data windowAt least two years of weekly data, or a regional panel?[Yes / no]
Spend variationDid each channel have on and off periods or regional differences?[ ]
ConfoundingHow is seasonality separated from demand-following spend (search, promotions)?[ ]
CalibrationWhich experiments were used, and does the model agree with them?[ ]
HoldoutOut-of-sample error on a period the model never saw?[ ]
UncertaintyAre ROIs and curves shown with intervals or posterior ranges?[ ]
StabilityDo ROIs change sharply when one quarter is added or removed?[ ]
Marginal versus averageIs the budget recommendation based on marginal returns?[ ]
Base trendIs the base growing, flat or shrinking, and why?[ ]
DecisionWhich reallocation step, and which experiment will check it?[ ]

Connections to other cards

  • Core marketing mix: mba/mba-marketing-mix-card for response curves and the allocation rule that turns this card's marginal returns into a budget.
  • Regression core: mba/mba-regression-for-managers-card for omitted variable bias and collinearity, the two forces behind the search error in example A.
  • Experiments: mba/mba-marketing-experiments-card for the lift tests that calibrate the model.
  • Attribution: mba/mba-digital-attribution-card for the bottom-up view of digital channels.
  • Pricing and promotions: mba/mba-pricing-card for the price coefficient and promotion economics.
  • Course map: mba/mba-marketing-analytics-guide.
  • Statistics library: academic/stats-time-series-arima (autocorrelation in weekly residuals) and academic/stats-bayesian-inference (priors and posteriors behind Bayesian MMM).

Common mistakes and misconceptions

  1. Trusting a model because R2R^2 and holdout error are good. Example A fits well and still nearly doubles search's credit.
  2. Ignoring demand-following spend. Search, promotions and seasonal TV move with demand; without controls or calibration their effects are inflated.
  3. Budgeting on average ROI. Average ROI justifies past spend; the next dollar earns the marginal return.
  4. Leaving out adstock. TV and brand activity then look weaker than they are, and their effect leaks into the following weeks' base.
  5. Treating base sales as untouchable. Past marketing builds the base; MMM measures only the short and medium term.
  6. Over-reading a precise-looking number from a model with a dozen channels and two years of data. Ask for ranges.
  7. Refitting every month and chasing the new ROIs. Instability is a symptom of weak identification, not news.
  8. Calibrating with one experiment and declaring the whole model validated. Example A: calibrating search moved TV.
  9. Assuming tools decide the answer. Robyn, Meridian and PyMC-Marketing differ in method; the data and the experiments decide what is identifiable.

Self-test questions

  1. What is base sales, and why does MMM estimate only the increment?
  2. Write the geometric adstock recursion. What is the total weight of one dollar of spend at θ\theta = 0.6?
  3. What is the half-life of an adstock with θ\theta = 0.6?
  4. Why does Northfield's first model overstate search?
  5. Define ROI and marginal ROI for a channel. Which one should drive next year's allocation?
  6. At a 45% gross margin, what marginal ROAS makes the next dollar break even?
  7. What does calibration with an experiment do, in one sentence?
  8. Why might a model with a holdout MAPE of 3% still be wrong about a channel?
  9. Name two differences between MMM and multi-touch attribution.
  10. What does the Dorfman-Steiner condition say about the advertising-to-sales ratio?
  11. When is the Hill curve preferred to the negative exponential?

My notes and next steps

DateNoteNext step
YYYY-MM-DD[What I understood today][Card or exercise to do next]
YYYY-MM-DDExample: I can explain why fit does not validate a channel ROIDo Exercise C part 4, then read the attribution card
YYYY-MM-DD[What still confuses me][Question for office hours]

Sources and further reading

  • Hill, A. V. (1910). The possible effects of the aggregation of the molecules of haemoglobin on its dissociation curves. Journal of Physiology, 40 (Proceedings of the Physiological Society, 22 January 1910).
  • Dorfman, R., and Steiner, P. O. (1954). Optimal advertising and optimal quality. American Economic Review, 44(5), 826-836.
  • Koyck, L. M. (1954). Distributed Lags and Investment Analysis. Amsterdam: North-Holland.
  • Little, J. D. C. (1970). Models and managers: the concept of a decision calculus. Management Science, 16(8), B466-B485.
  • Broadbent, S. (1979). One way TV advertisements work. Journal of the Market Research Society, 21.
  • Hanssens, D. M., Parsons, L. J., and Schultz, R. L. (2001). Market Response Models: Econometric and Time Series Analysis (2nd ed.). Boston: Kluwer Academic.
  • Sethuraman, R., Tellis, G. J., and Briesch, R. A. (2011). How well does advertising work? Generalizations from meta-analysis of brand advertising elasticities. Journal of Marketing Research, 48(3), 457-471.
  • Jin, Y., Wang, Y., Sun, Y., Chan, D., and Koehler, J. (2017). Bayesian Methods for Media Mix Modeling with Carryover and Shape Effects. Google Inc. technical report.
  • Textbooks (further reading, by name only): Hanssens (ed.), Empirical Generalizations about Marketing Impact; Leeflang, Wieringa, Bijmolt and Pauwels, Modeling Markets; Hyndman and Athanasopoulos, Forecasting: Principles and Practice.
  • Open resources: the documentation of Robyn (github.com/facebookexperimental/Robyn, MIT), Meridian (github.com/google/meridian, Apache-2.0) and PyMC-Marketing (github.com/pymc-labs/pymc-marketing, Apache-2.0); Hyndman and Athanasopoulos, Forecasting: Principles and Practice, free online edition at otexts.com.

Answer key

Worked example B. (1) Week 3 adstock 25.00, contribution 88.5; week 4 adstock 62.50, saturation 0.4647; week 5 contribution 107.4; week 6 saturation 0.1447. (2) Total 849.8; ROI 849.8/150=5.67849.8/150 = 5.67. (3) Of the week-1 burst's effect, everything in weeks 2 and 3 (157.4 and 88.5) and part of the later weeks is carry-over; a model without adstock would attribute those sales to the base or to whatever else ran in those weeks, and would see TV's effect only in the week of spend. (4) One week. (5) It depends on the window. Within weeks 1 to 6 the even plan is lower (814.0 against 849.8), because its adstock is still building up when the window closes. Including the carry-over after week 6 (30 further weeks of zero spend) the even plan is higher (995.8 against 910.7): spreading spend keeps each week on the steep part of the saturation curve. Always compare schedules over a window long enough to capture the carry-over.

Exercise C (parts 1 to 3). (1) Parameters 0.55, 150 and 50; holdout MAPE 3.03%. (2) TV 1.295 and search 2.545 revenue per dollar of same-week spend: without adstock, TV's later-week effect is lost, and the linear form averages over the steep and flat parts of each curve. (3) 500.51/(0.4×175)×e−100/70=1.714500.51/(0.4 \times 175) \times e^{-100/70} = 1.714; 0.45×1.714=0.77<10.45 \times 1.714 = 0.77 < 1, so not profitable at the margin. Parts 4 and 5 are for your own work.

Self-test.

  1. The sales the brand would make without current marketing (distribution, brand, season, trend). Only the increment responds to the budget decision.
  2. At=xt+θAt−1A_t = x_t + \theta A_{t-1}; total weight 1/(1−0.6)=2.51/(1-0.6) = 2.5.
  3. ln⁡0.5/ln⁡0.6=1.36\ln 0.5/\ln 0.6 = 1.36 weeks.
  4. Search spend moves with the season (correlation 0.929), so the model cannot separate search from seasonal demand and gives search part of the base.
  5. ROI is contribution divided by spend over the period; marginal ROI is the extra revenue from the next dollar at current spend. The marginal one drives allocation.
  6. 1/0.45=2.221/0.45 = 2.22.
  7. It pulls the model's estimate for a channel towards the causal effect measured by the experiment, through a prior or a penalty.
  8. Many parameter combinations fit equally well when channels are correlated with each other or with demand; fit cannot tell them apart.
  9. MMM uses aggregate data on total sales and covers offline channels; attribution uses user-level digital paths and divides credit among touchpoints without measuring the base.
  10. At the profit maximum, advertising spend divided by sales equals the advertising elasticity divided by the (absolute) price elasticity.
  11. When response is S-shaped: little effect below a threshold of exposure, then rising, then saturating.

Revision history

VersionDateAuthorChange summary
0.1YYYY-MM-DD[Your name]First draft from the template
0.2YYYY-MM-DD[Your name]Example: Calibrated TV with the spring regional test

Standard and licence note

Based on the market response modelling literature (Koyck 1954; Dorfman and Steiner 1954; Little 1970; Broadbent 1979; Hanssens, Parsons and Schultz 2001; Jin et al. 2017; Sethuraman, Tellis and Briesch 2011) and the public documentation of the open-source tools named, checked on 28 October 2026. The text, simulated data and exercises are original and fictional; no textbook, published case or course material was copied or paraphrased. This template is not affiliated with or endorsed by any business school, publisher, author, ad platform or software vendor. Check the current documentation of each tool before you rely on it. Template licence: MIT.

相关模板