MMMM Studio

The headline, in one sentence

Media produced about $162.8M of your $641.0M — roughly 25 cents in every dollar. That includes four channels whose own share we can’t measure. Of your two measurable channels, none has yet shown it paid for itself and two genuinely cannot be called yet.

That second half is not a hedge and it is not a fault in the model. Four years of weekly history is simply not enough evidence to separate six channels that mostly ran at the same time. Below, the channels are sorted by how much we actually know about them — not by how good their number looks.

We can't put a number on four of your channels on their own

When we hid known returns in your own spend, the setup we chose could not find the returns of Video — CTV, Paid Social, Paid Search and Programmatic Display on their own. All of them still count toward the total effect of your media above.

A test that changes one channel’s spend on its own is what would make it measurable. Each channel’s own line in the list of returns below says what it would take.

Show me the statistics

Held back on this run: Video — CTV, Paid Social, Paid Search, Programmatic Display. The media total at the top of this page, its share of your sales and the business you would have had anyway still count them — their spend still did something; we just cannot say how much each one did. The budget planner leaves them at today’s spend.

The validation tab lists every change we made to this fit, each of these channels included, in the engine’s own words.

How do I read this?

Four years of revenue, and where it came from

Each band is one channel's contribution, stacked on the business you'd have had without any media at all. The white line is what you actually sold.

$641.0M

actually sold

$5.0M/WK2022202320242025

The pale mass underneath is the business you’d have had anyway: $478.2M, three quarters of everything.

The hatched band is other media: Video — CTV, Paid Social, Paid Search and Programmatic Display. Its weeks are drawn so the stack still adds up to what you sold, but it is not measured on its own, so it gets no share of its own here.

TV — Broadcast3.7%
Out of Home0.6%
Other medianot measured
Everything else74.6%
±media total 14.5%–36.1%
How do I read this?
Nothing is settled yet

Not one of your two measurable channels has a range that sits entirely above break-even.

That is a real result, not a missing one: it says your data cannot yet separate what each channel did from what the others did at the same time. Nothing below should be cut on this evidence, and nothing below should be scaled on it either.

What would settle it: one channel deliberately switched off, or moved out of step with the others, for six weeks or more. The evidence tab shows how little each range moved away from what you assumed going in.

What each dollar came back as

Sorted by how much your data actually pinned down. The dotted line is break-even — a band crossing it means we can't tell you whether it won or lost.

TV — BroadcastCan't call it$1.60

$0.56 to $3.25 · best-measured channel you have, and it still straddles break-even

Out of HomeCan't call it$0.84

$0.24 to $2.13 · best guess is under break-even, but the range still reaches past it

Video — CTVNot found on its own—

You get no return and no budget advice for Video — CTV. A test that changes its spend on its own would make it measurable.

Paid SocialNot found on its own—

You get no return and no budget advice for Paid Social. A test that changes its spend on its own would make it measurable.

Paid SearchNot found on its own—

You get no return and no budget advice for Paid Search. A test that changes its spend on its own would make it measurable.

Programmatic DisplayNot found on its own—

You get no return and no budget advice for Programmatic Display. A test that changes its spend on its own would make it measurable.

Not this

“Out of Home loses money.” Its best guess is $0.84, but the range runs to $2.13. The screen is not allowed to convert a median below break-even into a verdict — the same rule that stops it calling the two maybes wins.

How do I read this?

Do this first

Don't cut anything on this evidence.

Nothing here has shown it lost money — the ranges simply cross break-even in both directions. A cut made on this page would be a cut made on noise, and next year would look like proof that the cut worked.

Do this next

To tell Paid Social and Paid Search apart, pause Paid Search, the one you spend less on, everywhere for 13 weeks, and keep Paid Social running as usual.

A test this long would add little: the range we could give for Paid Search would narrow by only about 10%.

Don't do this

Don't rank the two uncertain channels against each other.

Their ranges overlap almost completely. Any ordering you read off the medians is noise, and it will reverse itself next quarter. If someone asks for a ranking, show them this panel.

Six things would make next quarter’s answer sharper. Three of them are ours.

Everything the run flagged, in one place and sorted by who actually does the work. Nothing in the first two columns is generic — each item is the engine’s own words about a specific finding in your data. The third column is opinion, and is drawn so you can tell at a glance.

Email this list

Your media team

changes to how you buy, not to the data

Elevated variance inflation

Worth watching rather than fixing. If this channel also shows low contraction on the Evidence tab, treat its individual number as unreliable.

More than met. Paid Search has no individual number on this run at all — when we hid known returns in your own spend, the setup we chose could not find its own — so there is nothing left to treat as unreliable. It counts only toward the total effect of your media.

FROM · vif · Paid Search · 6.8 vs 5

Two channels move closely together

Two channels move closely together

Vary their budgets independently for a quarter if you can. Until then, trust the pair's combined return more than either individual number.

FROM · collinearity · Paid Social, Paid Search

TV — Broadcast is off air most weeks

Out of Home is off air most weeks

Nothing to fix in the data — this is a media plan, not a defect. Expect a wide range on this channel and weight it accordingly; a lift test on a single burst would pin it faster than more history would.

FROM · burst_flighting · TV — Broadcast, Out of Home

Us

nothing for you to do — one click and we rerun

WarningChain convergence (R-hat)

Worst R-hat 1.0105 at baseline_knots. Above 1.01 the chains have not mixed and the posterior is not yet the posterior.

FROM · scorecard · rhat · 1.01 vs 1.01

WarningBulk effective sample size

Lowest bulk ESS 374 at baseline_knots. Under 400 the point estimates carry visible Monte Carlo error.

FROM · scorecard · ess_bulk · 373.94 vs 400

Runs the same fit with twice the draws (1000 → 2000), and a more careful search (target_accept_prob 0.9 → 0.95). Nothing else moves — same data, same priors, same holdout — so the two are comparable. If the answer shifts, that shift is itself the finding.

WarningVariance inflation (post-transform)

Highest VIF 6.8 on Paid Search (warn 5, hard 10), measured after adstock and saturation because that is what the model sees.

FROM · scorecard · vif · 6.8 vs 5

WarningNo prior/data conflict

Outside the prior's 1st-99th percentile: Paid Search (its return is withheld). Either the prior is wrong or the data are being over-read; the fit is a compromise between two claims that disagree.

FROM · scorecard · prior_conflict · 1 vs 0

Those are a property of the data and the priors rather than of the search, so running it again will not move them. Listed here so nobody goes looking for a fix that does not exist.

Nothing to fix in your file

No extreme weeks, no gaps in what you sold, no column that is really an outcome rather than a cause, and a measure of underlying demand is present. Those are the four things that would have landed here, and all four came back clean.

General advice — not from your data

true of most MMMs, not measured on this one

Keep a channel dark somewhere, on purpose

The single cheapest thing you can do for next year's model is leave one region or one fortnight without a channel that normally runs everywhere. Continuous channels are the hardest to measure precisely because they never stop.

Record promotions and price changes weekly

A column of promotion weeks and a column of average price cost nothing to keep, and their absence is the usual reason media ends up with the credit for a price cut. Most uploads arrive without them.

This column is separated on purpose. Everything in the other two is traceable to a finding in your run; nothing in this one is.

Stamped so this can be reproduced

Every fit is written to disk with the data it read and the version that read it, so a number in last quarter’s deck can be traced to the run that produced it — and that run can be produced again. Nothing on these pages is computed when you open them.

run
20261028-154355-5babf7
data
bd433ddb2822
engine
0.3.0
holdout
0 periods
dataset
national_demo
fitted
28 Oct 2026
took
5 min
name
unnamed

Past runs

Every fit is kept, with its verdict and its date, so a number in last quarter’s deck can always be traced back to the run that produced it.

national_demo

28 Oct 2026 · a1c7f2

runningRunning

national_demo

28 Oct 2026 · ca137b · flagged: divergences

1 failedOpen

national_demo

28 Oct 2026 · ec014d

completedOpen

national_demo

9 Aug 2026 · 5a48eb

failedNo answer
How do I read this?