Marketing mix and channel ROI
Marketing spend and team performance move ticket sales at the same time, and the team is the stronger of the two. This model reads a season of weekly spend and revenue, fits a carryover and saturation curve to each of seven channels, then estimates returns twice: once ignoring how the team played, once controlling for it. The difference is what the marketing actually bought.
Season scenario
Channel
Levers
Season marketing budget
$5.2M
Working media only, across all seven channels and 32 weeks.
Paid search share of budget
16%
Moving one channel rescales the others proportionally, holding the budget fixed.
Incremental revenue from marketing · playoff berth
$12.4M
attributable to media after controlling for team performance, on $5.2M of working spend across 32 weeks
$5.2M
Season spend
2.39×
Blended ROAS, adjusted
$23.9M
What naive attribution claims
+$1.1M
Left on the table by the mix
Return by channel, before and after the control
Both numbers come from the same weekly data and the same response curves. The naive model regresses revenue on the seven channels alone. The adjusted model adds one column, a team-form index. Nothing else changes. Top bar is naive, bottom bar is adjusted.
Paid social
r = -0.06 with team form
2.62×/2.81×
Streaming video
r = 0.14 with team form
6.68×/3.66×
Local radio
r = -0.06 with team form
1.35×/1.20×
Out-of-home
r = 0.04 with team form
1.45×/1.08×
Email / CRM
r = 0.10 with team form
16.70×/8.55×
Paid search
r = 0.51 with team form
13.19×/2.27×
Local TV
r = -0.11 with team form
2.07×/2.64×
Naive fit R² 0.49 · adjusted fit R² 0.995 · team form estimated at $312K of weekly revenue per point of index. Coefficients are constrained non-negative and lightly regularized.
Why the team-performance control matters
Ticket demand has two large drivers and only one of them is bought. When the team wins, more people search for tickets, more people open the email, and the club bids harder on queries that are already converting. A model that sees only spend and revenue reads that co-movement as marketing working. The team-form index is a rolling four-week points percentage centered on a league-average .545 — one column, and it moves paid search from 13.19× to 2.27×.
Paid search spend and team form correlate at r = 0.51 this season. Channels bought up front on a fixed calendar — out-of-home, radio — cannot chase form, which is why their two estimates sit closer together. Channels that respond to demand inside the week are the ones that pick up credit they did not earn.
Response curve · paid search
Season incremental revenue against season spend, holding the flighting pattern fixed. The curve bends because each week’s response saturates: paid search reaches half its ceiling at $20K of weekly adstock and carries 8% of each week’s pressure into the next. The red marker is the current plan; the open circle is where the allocator would put it.
Every channel sits somewhere on a curve like that one. The bars below show how far up each has climbed. A channel near its ceiling is one where the next dollar is worth least, which is what the allocator acts on.
Paid social
40% weekly carryover
41% of ceiling
Streaming video
50% weekly carryover
27% of ceiling
Local radio
30% weekly carryover
53% of ceiling
Out-of-home
65% weekly carryover
35% of ceiling
Email / CRM
15% weekly carryover
34% of ceiling
Paid search
8% weekly carryover
53% of ceiling
Local TV
55% weekly carryover
32% of ceiling
Recommended allocation
The allocator holds the budget fixed and moves money until the marginal return is equal everywhere it can be, subject to a floor and a ceiling on each channel. Email is capped at 10% because a list of that size can only absorb so much before deliverability and fatigue take over.
| Channel | Current | Recommended | Change | Marginal now | Marginal at rec. |
|---|---|---|---|---|---|
| Paid socialProspecting and retargeting; runs most weeks | $1.04M | $1.19M | +$146K | 1.27× | 1.12× |
| Streaming videoConnected TV and pre-roll, bought in flights | $468K | $1.06M | +$594K | 2.15× | 1.11× |
| Local radioDrive-time reads around home stands | $780K | $282K | −$498K | 0.41× | 1.13× |
| Out-of-homeBoards and transit; longest carryover | $936K | $282K | −$654K | 0.40× | 1.13× |
| Email / CRMOwned list; cheapest reach, lowest ceiling | $156K | $513K | +$357K | 3.47× | 1.15× |
| Paid searchBrand and ticket queries; spend follows demand | $832K | $707K | −$125K | 0.95× | 1.13× |
| Local TVRegional sports network and local news buys | $988K | $1.17M | +$181K | 1.30× | 1.12× |
Incremental revenue is $12.4M at the current mix and $13.5M at the recommended one, on the same $5.2M. Marginal returns settle near 1.13× across every channel not pinned to a floor or a ceiling.
Reading the model
- 01
Naive attribution credits marketing with $23.9M of revenue this season. Controlling for team form cuts that to $12.4M — the $11.5M difference is the team, which the adjusted model prices at $312K of weekly revenue per point of form index.
- 02
Paid search is the channel the naive read flatters most: 13.19× without the control, 2.27× with it, a gap of 10.9 points of ROAS. Its weekly spend tracks team form at r = 0.51, so the uncontrolled model reads demand capture as demand creation.
- 03
Reallocation alone is worth $1.1M, or 8.9% more incremental revenue on the same $5.2M. The allocator moves money out of local radio, out-of-home, and paid search and into paid social, streaming video, email / CRM, and local TV, until the next dollar returns about the same everywhere.
- 04
The two models are not equally good descriptions of the season, just differently biased ones: without the team-form column the fit explains 48.9% of weekly revenue variation, with it 99.5%.
Method
Thirty-two weeks of spend are generated per channel from a lumpy flight schedule, then passed through two transforms. Adstock carries a fixed share of each week’s pressure into the next, so a four-week out-of-home flight keeps selling after it ends. A Hill curve maps carried spend to response, with the exponent held at or below one so marginal return always falls — that is what makes an allocation question well posed. Weekly revenue is then regressed on the seven saturated adstock series twice: once alone, and once with a team-form index built from rolling four-week points percentage. Coefficients are constrained non-negative and carry a small ridge penalty, both standard in commercial mix modeling. The allocator water-fills the fixed budget, handing each increment to the channel with the highest marginal return until returns equalize or a floor or ceiling binds.
The honest caveat is that identification comes from variation, and this simulated season has more clean variation than a real one. Channels go genuinely dark, the flight schedules are close to uncorrelated, and only the team-form covariate is confounded. Real spend is smoother, channels are flighted together around the same tentpoles, and thirty-two weekly observations across seven channels is a thin panel. A production model would want several seasons, would fit the carryover and saturation parameters by grid search rather than assuming them, would report intervals rather than point estimates, and would carry far more of the demand story than one form index: opponent, promotion nights, day of week, weather, and playoff-race position. The number that would settle the argument is not in this model at all. It comes from holdout geographies and switched-off markets, the only way to check whether the adjusted coefficients are right rather than merely less wrong than the naive ones.
Spend, revenue, and game results are simulated (seeded, stable across visits) and scaled to a mid-market NHL club: a $5.2M working-media budget against a 32-week season and a marketing-addressable revenue base of roughly $47M in tickets, per-caps, and merchandise. The simulator draws revenue from a known response function that neither fitted model is shown, which is what makes the gap between the two estimates readable here and unreadable in practice.