Robyn

Meta's open-source MMM engine, tuned by evolutionary search.

Robyn is Meta's open-source MMM package. It fits a ridge-regression model and searches for the best adstock and saturation parameters using an evolutionary optimizer — which means a single Robyn run actually produces many candidate models (a "Pareto front"), and you pick one to work with after training finishes. It's the fastest of the three engines to get a first result from.

Connecting it

Drag a Robyn node off Period (or directly off Variables).

The Robyn configuration modal
The Robyn configuration modal
Dragging a Robyn node onto the canvas

Basic fields

Field What it controls
Name Optional label for the model.
Output type Whether your KPI column is revenue-like or a conversion count — affects how contributions and ROI are scaled.
Adstock The decay shape for how a channel's effect carries over after spend stops. Geometric (default) is a single-parameter exponential decay and the standard starting point.

Model components

These are toggles for whether Robyn should model each effect at all:

Field Default What it does
Intercept On Includes a baseline level of the outcome not explained by any channel. Turning it off forces the model to explain everything through the channels you've mapped — rarely what you want.
Trend On Lets the model account for a long-run upward or downward drift in your outcome that isn't caused by any channel.
Seasonality On Accounts for the recurring yearly seasonal pattern in your outcome. Day-of-week effects are a separate component that this toggle doesn't include (it's off by default and not exposed in the modal).
Holiday Off Adds Robyn's built-in holiday calendar as another baseline factor. Ticking it reveals a Country selector — ten countries: United States, United Kingdom, Canada, Australia, Germany, France, Spain, Italy, Netherlands, Belgium — and the calendar used is that country's.

Validation and search budget

Field Default What it controls
Out-of-sample validation Off Holds out the final stretch of your date range and scores the model on data it didn't train on, instead of only on training-set fit. Turn this on if you want a more honest read on how the model would perform on new data.
Train size 80% Only used when validation is on — a four-option selector (70% / 75% / 80% / 85%) for the fraction of the period used for training. Robyn splits the remainder between validation and test, taken from the end of the range.
Effort Medium How hard the evolutionary optimizer searches. Low — a first look runs 1,000 iterations × 2 trials; Medium (recommended) runs 2,000 × 5; High — slower, tighter estimates runs 5,000 × 5. Iterations are how many parameter combinations each trial tries; trials are independent optimization runs, so more of them reduce the chance the search gets stuck in a bad local optimum.

There's no time estimate shown anywhere in meryn for a run — it depends directly on the effort level and the size of your dataset, so any fixed number would be a guess. The progress drawer shows live trial counts instead; see The canvas for how to read it.

Hyperparameter ranges

By default, Robyn searches sensible ranges for each channel's adstock decay and saturation shape automatically. If you know a channel's real-world decay behavior (a TV campaign that lingers for weeks vs. a search ad that doesn't), turn on Custom hyperparameters to override the search range per channel instead of letting Robyn guess from scratch — the sliders are pre-filled with the defaults so you're narrowing, not starting blind.

Calibration (optional)

If you have real lift-test results for one or more channels — an incrementality test, a geo holdout, anything that gives you an actual measured effect — you can feed them in to anchor the model instead of relying purely on the spend/outcome correlation. Add a row per test: channel, date range, spend during that window, the measured lift, a Confidence (0–1) that sets how much weight the test carries against the model's own fit, and a Scope — whether the measured lift is the immediate effect the experiment isolated (the usual case) or a total effect that already includes carry-over (only when the number comes from another MMM). meryn checks each row live against your actual spend data and shows you the implied ROI and any warnings (e.g. tested spend that doesn't match what the dataset shows for that window) before you save.

Calibration is optional and most models never need it — it matters most when you have a channel whose spend barely varies over your date range, which makes it hard for the model to isolate that channel's effect from correlation alone.

After training

A Robyn run produces several candidate solutions on its Pareto front, not one. meryn picks a default automatically (the same selection logic the framework itself recommends), but you can open the model and choose a different one from the Pareto chart if a different tradeoff between fit and model simplicity suits your case better. Changing the solution discards every allocator connected to this model — an allocator optimizes against one specific solution's response curves, so it stops describing the model correctly the moment you pick a different one.

What connects here

Upstream: Period or Variables. Downstream: Budget allocator or Benchmark.

What you get back

Fit quality, contributions by channel, response curves, ROI, and the Pareto front of candidate solutions — all on the model's results page. Each candidate solution also comes with a downloadable one-pager PDF, generated by Meta's own framework rather than by meryn, so it's auditable against Robyn itself:

The Robyn results page for a trained model
The Robyn results page for a trained model