When to Refresh an MMM and What Triggers an Off-Cycle Rebuild
A refresh appends new weeks to the same marketing mix model. A rebuild reopens the specification. The events that justify rebuilding early, plus a drift check.
On this page
- How often should you refresh a marketing mix model?
- What a refresh changes and what it holds fixed
- What Google Meridian and Robyn say about rebuilding after structural changes
- Which events justify rebuilding early?
- Which changes can a scheduled refresh absorb?
- The drift check to run after every refresh
- Sources
An off-cycle rebuild of a marketing mix model (MMM) is triggered by an event that changes what the model has to explain: a channel it has no variable for, a pricing or distribution change, a tracking break in an input series, or a spend pattern outside the range it was fitted on. Everything else belongs to the routine refresh, which appends the newest weeks to the same specification on a calendar. We read the refresh documentation for Google's Meridian and Meta's Robyn on October 7, 2026 to see where each tool draws that line, then added a drift check to run after every refresh.
How often should you refresh a marketing mix model?
How often you should refresh a marketing mix model depends on how often the budget gets decided, and both vendors leave the interval to you. The refresh guide from Google says "Model refreshes can be done as frequently as you would like" and suggests "updating the model quarterly, annually, or at a frequency that matches your marketing budget decision making process." The features page from Meta observes that "Conventionally, the model refresh cycle of MMM is bi-annual or even longer" and presents Robyn's refresh feature as one that "enables model refresh and reporting as frequently as the data allows." It also cautions: "Note that this feature is not yet tested thoroughly and might provide instable refresh results."
The usage examples in the refresh source file from Meta show a 13-week cadence and a 4-week cadence, roughly quarterly and monthly. Tie whichever you choose to a real budget decision, because a refresh that moves no money only adds reporting work.
What a refresh changes and what it holds fixed
In Meridian a refresh is a refit. Google recommends "adding the new data to the older data and running Meridian", with a choice about whether to drop the oldest weeks "to stay in the 2-3 year data window that's common in an MMM." Fitting the new quarter by itself is "generally not recommended", since modeling new data apart from old data "won't properly consider lagged effects."
Robyn narrows the search instead. Per Meta's features page, robyn_refresh() starts from the selected model, "updates its hyperparameter with a narrower range that's proportional to the new data / total data ratio", and scores fit on the new weeks alone: "the NRMSE only accounts for the new period while refreshing".
A rebuild reopens what a refresh largely carries forward: the variable list, the window length, and the priors or hyperparameter ranges. Last quarter's ROI figures stop being directly comparable with the new ones, which is why a rebuild should have a named reason.
What Google Meridian and Robyn say about rebuilding after structural changes
On refresh frequency versus a rebuild after structural changes, Google Meridian and Robyn differ in how far their MMM documentation goes. Robyn is explicit. The documentation block in that same Robyn source file calls the function suitable for updating within "reasonable periods" and names two situations where a rebuild is considered the better choice:
- "Most data is new: If initial model was trained with 100 weeks worth of data but we add +50 weeks of new data."
- "New variables are added: If initial model had less variables than the ones we want to start using on new refresh model."
The code enforces the extreme case. When the number of refresh steps reaches the length of the modeling window, it stops with the message "Refresh input data is completely new. Please rebuild model using robyn_run()."
Meridian's refresh page never uses the word rebuild, and we found no use of "off-cycle" in either tool's refresh documentation. Google supplies the reason structural change matters: "Meridian doesn't model media effectiveness as time-varying." A longer window therefore "reduces variance because you have more data, but it can increase bias if media effectiveness and strategies have changed drastically over time." When the business behaves differently on either side of an event, one estimate ends up averaging two regimes.
Which events justify rebuilding early?
Marketing mix model rebuild triggers that justify going off-cycle come down to five events, each tied to the documentation above. The actions in the last column are our practice; neither vendor publishes this table.
| Trigger | Why a refresh cannot absorb it | Off-cycle action |
|---|---|---|
| A new channel, or one channel split in two | It is a new variable, the second of Robyn's two rebuild situations | Rebuild, and plan a lift test for the new channel |
| A pricing or distribution change | Sales shift for a reason the model has no variable for | Add the variable and revisit the window |
| A tracking break | An input series stops measuring the same thing | Repair or restate the series first, and rebuild only if the definition changed for good |
| A spend pattern the model never saw | The response curve is being read outside the range it was fitted on | Rebuild or re-tune, and test the channel that moved |
| Most of the window is new | Robyn's first rebuild situation: 50 new weeks on a 100-week model | Rebuild |
Price is the clearest case. The variable guide from Google defines non-media treatment variables as marketing activities "such as running a promotion, the price of a product, and a change in a product's packaging or design." A model specified before a price change often has no such variable, and appending weeks will not create one. We handle a distribution change, such as a new retailer or marketplace, the same way.
For spend, the practical question is how far counts as too far. In a fixed-budget scenario, the optimization guide from Google sets default bounds of 70% and 130% of each channel's spend. We borrow that band as a tripwire: a channel whose new-quarter spend lands outside it gets reviewed before anyone trusts the refreshed curve.
A tracking break can pass for a marketing effect. Our primer on marketing attribution covers attribution models and their limits, and the Attribution Doctor is a further resource on that side.
Which changes can a scheduled refresh absorb?
A marketing mix modeling refresh cadence is built to absorb seasonality and ordinary spend changes, and a structural break is the case it cannot handle. Seasonality is in the specification from the first build: Robyn "provides trend, season, holiday & weekday decomposition out of the box using Prophet". Spend changes inside the fitted range are what a refresh exists to capture, and Meta lists among its expectations "that the refreshed model reflects the media spend changes in the new period".
A structural break changes the relationship between spend and sales, so our test is whether the event needs a variable the model lacks or leaves the old weeks describing a business that no longer exists. A yes to either moves the work from the calendar to a rebuild.
The drift check to run after every refresh
Google's refresh guide warns that "MMM estimates often exhibit high variance", so that "incorporating even a relatively small amount of new data may have a noticeable effect on the model's results." Pulling the new posterior toward the old one with priors carries its own warning: "setting priors that match an old MMM's results effectively counts the old data twice." A drift check each cycle separates refresh noise from a real trigger. We run four steps:
- Rerun the health checks. In the health-check guide from Google, convergence passes when
max_r_hatis below 1.2, the negative baseline probability passes below 0.2 and fails above 0.8, and a Bayesian posterior predictive p-value below 0.05 fails. - Compare each channel's ROI with the previous build. Our rule: a new posterior mean inside the old credible interval is refresh noise, and one outside it needs an explanation before it reaches a budget deck.
- Compare the baseline. Robyn expects "that the refreshed model has stable baseline compared to initial model". A step at the refresh boundary is a reason to look for a missing variable.
- Score input drift with the Population Stability Index.
Screening MMM model drift with the Population Stability Index
MMM model drift can be screened with the Population Stability Index (PSI), a credit-scoring statistic that compares a distribution at model development with the same distribution at review. A March 2023 review paper on arXiv defines it as a sum over categories: the review proportion P minus the development proportion q, multiplied by the log of P over q. The abstract of a December 2020 paper in the Journal of Risk Model Validation records the usual reading: below 0.10 is a "little change", 0.10 to 0.25 a "moderate change", and above 0.25 a "significant change, action required". It also cautions that "These benchmarks are used without reference to statistical type I or type II error rates", so treat the bands as a prompt to look. We found no mention of PSI in the Meridian or Robyn pages cited here; applying it to channel spend share is our adaptation.
A hypothetical example, computed with the natural log: a model built on a window where spend split 40% search, 30% paid social, 15% online video, 10% display and 5% affiliates meets a quarter with video pushed hard and total spend roughly flat.
| Channel | Share in modeling window (q) | Share in new quarter (P) | Contribution to PSI |
|---|---|---|---|
| Paid search | 40% | 24% | 0.082 |
| Paid social | 30% | 24% | 0.013 |
| Online video | 15% | 37% | 0.199 |
| Display | 10% | 10% | 0.000 |
| Affiliates | 5% | 5% | 0.000 |
| Total PSI | 0.29 |
At 0.29 the quarter sits above the 0.25 line, which makes it a rebuild candidate and a case for a geo-holdout test on video. A routine quarter at 38%, 31%, 16%, 10% and 5% scores 0.002. One edge case is instructive: the arXiv paper notes that the index is calculated to be infinite when a category is observed in one period and absent from the other, so a brand-new channel breaks the statistic and sends you back to the first row of the trigger table.
When drift appears, a fresh experiment settles the question faster than another round of tuning. Our primer on what incrementality means is the place to start, the multiplier method covers calibrating platform-reported numbers with test results, and MMM refresh and rebuild work sits with our data and analytics team. Keep a rebuild log with the date, the trigger and the PSI behind it, so next year's analyst can tell a regime change from refresh noise.
Sources
- Google, Meridian guide "Refresh the model", last updated June 30, 2026
- Google, Meridian guide "Model health checks", last updated October 2, 2026
- Google, Meridian guide "Organic media and non-media treatment variables", last updated May 15, 2026
- Google, Meridian guide "Budget optimization scenarios", last updated August 3, 2026
- Meta, Robyn documentation, "Model refresh" section
- Meta, Robyn source file refresh.R, notes for robyn_refresh()
- Journal of Risk Model Validation, Yurdakul and Naranjo, "Statistical properties of the population stability index", December 2020
- arXiv, du Pisanie and co-authors, "A critical review of existing and new population stability testing procedures in credit risk scoring", March 2023
