The math is done. Now, you need to answer the CFO's question: "We made $10 Million last year. How much of that did Facebook generate?"
This is where we calculate Contribution. It is different from "Attribution" (which implies user tracking). Contribution is a mathematical estimate derived from the model's coefficients.
To get the dollar contribution of a channel for a specific week, we simply take the Coefficient (beta) found by the model and multiply it by the Transformed Data (after Adstock/Saturation) for that week.
# Pseudo-code for calculating contribution contribution_fb = beta_fb * fb_spend_saturated contribution_tv = beta_tv * tv_spend_saturated # The Baseline is everything else (Intercept + Seasonality + Trend) contribution_baseline = total_sales - (contribution_fb + contribution_tv)
When you visualize this, stakeholders are often shocked. They expect marketing to drive 80% of sales. In reality, for a mature brand, Baseline (Organic) Sales often account for 60% - 80% of revenue.
Marketing is the "Incremental" layer on top. It lifts the baseline. If you turn off all marketing, you don't go to zero; you drop to the baseline.
This is the most actionable diagnostic metric in MMM. We compare two pie charts side-by-side.
Interpretation:
- If SOE > SOS (50% > 40%): The channel is Efficient. It is punching above its weight. You should likely spend more here.
- If SOE < SOS (20% < 40%): The channel is Inefficient. You are spending too much for too little return.
Once we have the Contribution (in Dollars), calculating the Return on Ad Spend (ROAS) is simple division. But remember, this is Marginal ROAS (mROAS) vs Average ROAS.
# Historical Average ROAS avg_roas_fb = sum(contribution_fb) / sum(spend_fb) print(f"For every $1 spent on FB last year, we got ${avg_roas_fb} back.")
However, knowing what happened (Average ROAS) is not as useful as knowing what will happen if we spend the next dollar. That requires the Response Curve, which we cover in Module 11.