MMMM Studio
  1. 01 Map
  2. 02 Check
  3. 03 Expect
  4. 04 Fit
  5. 05 Test
  6. 06 Plan

Step two · before any modelling

Can this data answer the question at all?

A fit takes minutes and hands back confident-looking numbers whether or not the design could ever have identified them. So we ask whether it could first, and it costs a second. Nothing here has been modelled — this is arithmetic on your file.

The verdict

Caution

The model will run and most of your channels will come back with numbers you can use. The ones named below will not, and they carry that mark through every screen after this one.

2 things to carry forward, all about how wide the answers will be, not whether you get them: TV — Broadcast and Out of Home.

How this verdict is decided

NO-GOsomething is broken that isn't about one named channel — or every channel is blocked
CAUTIONone or two named channels are blocked, and the rest are fine
GOnothing blocked — cautions on named channels travel with those channels instead

There is no score to improve and no percentage to argue with. A caution about one channel never demotes the whole dataset, because it has somewhere better to live: that channel’s own row, and its trust grade after the fit.

Set my expectations →

Takes about two minutes, and it is the step that catches impossible assumptions before they become results.

Five questions we ask of every dataset

History
Is there enough data to work out this many things at once?

3900 rows · 11.4× headroom

342 things to estimate

Separability
Can the channels be told apart from each other, and from ordinary demand?

2 condition number

no channel moves as another one does

Variation
Does each channel's spend move enough for its effect to be visible?

2 channels flagged

TV — Broadcast and Out of Home

Demand control
Is there a column for the demand that prompted the spend? Whether it is a good one can't be established from this data — only that it is there.

Present

a demand control is mapped

Sales series
Is the sales line itself clean enough to model?

7.31 · line at 5.00

across the whole dataset

Three things to know, each with what to do about it

Worth watching3 unusually extreme periods7.309 measured · 5.00 threshold

The largest sits 7 robust standard deviations off the local level, around 2022-03-28. Under a normal likelihood a handful of periods like this can pull the whole fit toward explaining them.

What to do: If these were real events — a promotion, a stockout, a price change — add them as a control column so the model can attribute them instead of absorbing them into media. If they are reporting errors, correct them at source. If they are genuine volatility, no action is needed; the fit will switch to a heavy-tailed likelihood automatically.

Worth watchingTV — Broadcast is off air most weeks0.551 measured · 0.50 threshold

It runs in 41% of weeks, in bursts rather than at the start or end of the window. The effect is identified from the handful of on/off transitions rather than from the whole period, so its interval comes back wide even when the fit itself is sound.

What to do: 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.

Out of Home is off air most weeks0.583 measured · 0.50 thresholdOpen

It runs in 38% of weeks, in bursts rather than at the start or end of the window. The effect is identified from the handful of on/off transitions rather than from the whole period, so its interval comes back wide even when the fit itself is sound.

What to do: 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.

What we will do about it

Findings change the model, not your numbers. We never impute, winsorise or drop a row — every entry here alters how the fit is estimated, and states what that costs you.

  • A heavy-tailed likelihood, not a normal one

    Will applytriggered by outliers

    Your outcome has periods far enough from the local level that a normal error model would have to explain them, and the only levers it has are the media coefficients. We fit a Student-t error instead, which treats rare extreme weeks as noise rather than evidence. The tail-heaviness is itself estimated from your data, not fixed by us.

    What it costs you

    Genuine one-off events are now down-weighted along with the errors. If a spike was a real promotion you want credited, add it as a control column instead — this setting protects the fit, it does not explain the spike.

How much each channel's spend moves about

Ups and downs are what let the model see what a channel does. Spend the same amount every week and there is nothing to learn from — the return comes back as whatever we assumed going in, however large the budget.

ChannelSpend shareVariationOverlap costWeeks with nothing spent
TV — Broadcast27.8%1.661.259% of weeks had no spend
Video — CTV15.5%0.933.0spent every week
Paid Social19.6%0.742.5spent every week
Paid Search17.3%0.774.8spent every week
Programmatic Display11.5%0.711.9spent every week
Out of Home8.3%1.641.262% of weeks had no spend

How closely your channels move together

Read a cell as: when this channel went up, did that one go up too? 1.00 means always, 0.00 means never. Anything above 0.80 and your data cannot tell the two apart. Measured after allowing for advertising that keeps working once it stops running and for the tenth million doing less than the first — checking raw spend instead is the usual reason a tool declares your data fine and then fails to separate anything.

TV — Broadcast1.000.020.220.250.14-0.17
Video — CTV0.021.000.140.130.01-0.01
Paid Social0.220.141.000.740.500.05
Paid Search0.250.130.741.000.560.10
Programmatic Display0.140.010.500.561.00-0.05
Out of Home-0.17-0.010.050.10-0.051.00
TV — BroadcastVideo — CTVPaid SocialPaid SearchProgrammatic DisplayOut of Home
How do I read this?