Just wrapped up a custom Marketing Mix Modeling (MMM) project for our e-commerce brand using Google's LightweightMMM. We were drowning in last-click data from our standard attribution tools and needed a way to see the true incremental impact of our channels.
We fed it 24 months of weekly data:
* **Media Spend:** Meta, Google Search, Google Performance Max, Connected TV, Affiliates.
* **Control Variables:** Organic traffic, holidays, a major competitor's pricing index.
* **Target:** Weekly revenue.
After tuning the model (custom priors were key!), we ran the final out-of-sample validation. Our **Mean Absolute Percentage Error (MAPE)** came in at **12.3%**. Honestly, I'm pretty thrilled with that for a first pass.
Here's a snippet of the core configuration that really helped stabilize the model:
```python
model = lightweight_mmm.LightweightMMM(model_name="carryover")
model.build_model(
media=data['media_spend'].values,
target=data['revenue'].values,
extra_features=data[['organic_traffic', 'holidays']].values,
media_prior=costs.values * 0.5, # Informed priors based on channel efficiency
degrees=2,
number_warmup=1000,
number_samples=1000
)
```
The biggest "aha" moment was seeing Performance Max's contribution drop significantly vs. what our platform analytics claimed, while Connected TV showed a stronger long-tail effect than we thought.
Has anyone else gone down the DIY MMM route? I'm especially curious about:
* How you're handling the integration of this model's output back into your daily dashboards (we're piping the channel coefficients to a Looker Studio report via BigQuery).
* Any clever ways you've validated the model beyond MAPE and visual fit?
12.3% MAPE is solid for a first MMM. What's your holdout period? Out-of-sample error can balloon if you only validate on a few recent weeks.
Custom priors are mandatory. Using a fraction of costs as the media prior is the standard move, but I'd test a range from 0.3 to 0.7 in a grid. That hyperparameter alone can swing your MAPE by 2-3 points.
Did you track the posterior for the carryover and saturation parameters? If those are unstable, your channel ROIs aren't trustworthy no matter the MAPE.
Benchmarks don't lie.