mROI priors are an alternative to ROI priors for paid media channels. The mROI of a channel is defined as the expected return on one additional monetary unit of spend. The additional monetary unit is allocated across geographic regions and time periods by scaling up the reach, holding the average frequency fixed.
The choice between ROI and mROI priors has important implications, particularly if your goal is to create prior parity across channels. Both ROI and mROI have a prior distribution. If the ROI prior is specified, then an mROI prior is induced. If the mROI prior is specified, then an ROI prior is induced. An induced prior does not belong to a parametric family, and it is typically not independent of other model parameters. The exact distribution of an induced prior depends on a channel's media execution distribution across geographic regions and time periods. Importantly, even if a common ROI (mROI) prior is used for all channels, the induced mROI (ROI) prior will still differ by channel.
When the Hill function is concave, for example when its slope parameter equals one (the default assumption), channels without R&F data will always have a higher overall ROI than their marginal ROI. If you use an ROI prior, the induced marginal ROI prior distribution will be strictly less for a non-R&F channel. Conversely, if you use a marginal ROI prior , the induced ROI prior will be strictly greater for a non-R&F channel.
For reach and frequency channels, the marginal ROI by reach equals the ROI. This is because the marginal ROI prior is applied to the marginal ROI by reach (the next monetary unit spent increases the reach without changing the average frequency). Under the Meridian model specification, media effects are linear in reach. Therefore, the choice between an ROI and a marginal ROI prior parameterization has no impact on the prior for reach and frequency channels. However, the choice between ROI and marginal ROI parameterization will still effect posterior inference for reach and frequency channels because:
- The prior choice for other channels affects the model fit and posterior results for the reach and frequency channels.
- The default ROI and mROI prior distributions differ.
If you are interested in examining the induced prior for a particular model,
you can obtain this by calling sample_prior
, followed by a call to the
Analyzer
class's roi
or marginal_roi
method with the argument
use_posterior=False
.
Reasons to choose ROI priors:
- A common ROI prior can be used for all channels to create prior ROI parity. As the prior strength increases (standard deviation decreases), posterior ROI distributions will shrink toward a common value.
- Channel-specific ROI priors can be used to incorporate prior knowledge, such as experiment results.
- Although ROI priors don't control optimization budget shifts as well as mROI priors, optimization spend constraints can be used to limit the amount of budget shift proposed for any given channel.
Reasons to choose mROI priors:
- A common mROI can be used for all channels to create prior mROI parity. As the prior strength increases, posterior mROI values will shrink toward a common value.
- Prior mROI parity generally results in less significant optimization budget
shifts:
- If the same mROI prior is used for all channels, then the prior optimal budget allocation will equal historical.
- As the prior strength increases, posterior optimal budget allocation will shrink toward historical.
- Despite the use of strong mROI priors, a channel with reach and frequency
data might still receive a significant positive spend shift in optimization,
if we also use that channel's optimal rather than historical frequency. The
mROI prior is applied to the mROI under historical frequency, which is
always less than the mROI under optimal frequency. By default, budget
optimization is run under optimal frequency, but the optimization method
contains a boolean argument
use_optimal_freq
which can be used to set whether optimization is run under optimal or historical frequency.
It's important to keep in mind that mROI differs across time windows, so if your
optimization time window does not align with the time window of the mROI prior,
then the mROI priors might not regularize optimization budget shifts as
intended. You can adjust the time window of your optimization using the
selected_time
argument of
BudgetOptimizer.optimize()
.
You can adjust the time window of your mROI prior using the
roi_calibration_period
and rf_roi_calibration_period
arguments of
ModelSpec
. By
default, both time windows will be set to the full modeling time window.