This section describes the default prior distributions for the Meridian
model. All prior distributions are specified by the prior_distribution
argument, which accepts a
PriorDistribution
object. Each parameter has its own argument in the PriorDistribution
constructor, and the joint prior distribution assumes that all of the priors are
independent.
Distributions can be specified as either a vector (such as,
tfp.distributions.Normal([1, 2, 3], [1, 1, 2])
) or as a scalar (such as
tfp.distributions.Normal(1, 2)
). All scalar distributions are broadcast to the
length of the parameter vector that they represent.
knot_values
Parameter: \(b_k\)
Default Prior: Normal(0, 5)
Rationale:
- Uninformative prior dictating how much time can have an effect.
- Uninformative because you want the flexibility to allow time to have a strong effect.
- Can be learned from the data given multiple geos per time period, and also multiple time periods per knot when the number of knots is low.
tau_g_excl_baseline
Parameter: \(\tau_g\)
Default Prior: Normal(0, 5)
Rationale:
- Uninformative prior dictating geo-differences.
- Uninformative because you want the flexibility to allow geo to have a strong effect.
- Can be learned from the data given multiple time periods per geo.
roi_m
and roi_rf
Parameter: \(\text{ROI}_m,\text{ROI}_n^{(rf)}\)
Default Prior: LogNormal(0.2, 0.9)
Rationale:
- This prior says that a priori the mean ROI across channels are 1.83, 50% of ROIs are greater than 1.22, 80% are between 0.5 and 6.0, 95% are between 0.25 and 9.0, and 99% are less than 10.0.
- By default, each channel is assigned the same ROI prior.
beta_m
and beta_rf
Parameter: \(\beta_m,\beta_n^{(rf)}\)
Default Prior: HalfNormal(5)
Rationale:
- Uninformative prior on hierarchical mean of geo-level media effects
(
beta_gm; beta_grf
) for impression and reach and frequency media channels respectively. - Uninformative because the interpretation of
beta_m
can vary widely given transformations, scaling, and kind of media execution.
eta_m
and eta_rf
Parameter: \(\eta_m,\eta_n^{(rf)}\)
Default Prior: HalfNormal(1)
Rationale:
Moderate regularization encourages pooling across geos. This leads to lower variance estimates at the cost of increased bias, and allows the model to use the data more efficiently.
gamma_c
Parameter: \(\gamma_c\)
Default Prior: Normal(0, 5)
Rationale:
Uninformative because of the wide range of control variables you can possibly see.
xi_c
Parameter: \(\xi_c\)
Default Prior: HalfNormal(5)
Rationale:
- Uninformative to allow a wide range of geo variation in control variable effects.
- By default, pooling is weaker for control effects than for media effects because control effects are simple linear effects (without the complexity of Hill and Adstock transformations).
alpha_m
and alpha_rf
Parameter: \(\alpha_m,\alpha_n^{(rf)}\)
Default Prior: Uniform(0, 1)
Rationale: Uninformative to allow data to inform the decay rate.
ec_m
Parameter: \(ec_m\)
Default Prior: TruncatedNormal(0.8, 0.8, 0.1, 10)
. This is the conditional
distribution \(X|0.1 < X < 10\), where \(X \sim N(0.8,0.8)\).
Rationale:
- The data is scaled such that when \(ec=1\), the half-saturation happens at the median of the non-zero media units per capita across geos and time. \(ec=k\) means that the half-saturation happens at \(X\) times the median value.
- This prior has mean near one, which is a reasonable a priori assumption of where the half-saturation happens.
- The truncation is done to keep the parameter within a reasonable range for parameter identifiability.
- If a channel is way under-saturated (\(ec > 10\)) or way over-saturated
(\(ec < 0.1\)), the data does not really contain information about the
half-saturation point anyway. In such cases, the
ec_m
parameter determines the shape of the response curve, but shouldn't be interpreted as an accurate estimate of half-saturation.
ec_rf
Parameter: \(ec_n^{(rf)}\)
Default Prior: LogNormal(0.7, 0.4) + 1
# Tensorflow Probability Syntax
tfp.distributions.TransformedDistribution(
tfp.distributions.LogNormal(0.7, 0.4),
tfp.bijectors.Shift(0.1)
)
Rationale:
- Moderately informative to prevent non-identification with
slope_rf
. - Set in conjunction with the
slope_rf
prior so that the prior distribution for optimal frequency has a mean of 2.1 and 90% CI of[1.0, 4.4]
. This is considered to be a reasonable range of optimal frequency.
slope_m
Parameter: \(\text{slope}_m\)
Default Prior: Deterministic(1)
Rationale:
- Difficult to learn because of identifiability reasons.
Deterministic (1)
means it is restricted to concave Hill curves.- The budget optimization algorithm produces a global optimum when Hill curves are concave. Changing this prior can lead to non-concave Hill curves and budget optimization can no longer produce a global optimum.
slope_rf
Parameter: \(\text{slope}_n^{(rf)}\)
Default Prior: LogNormal(0.7, 0.4)
Rationale:
- Moderately informative to prevent non-identification with
ec_rf
. - Set in conjunction with the
ec_rf
prior so that the prior distribution for optimal frequency has a mean of 2.1 and 90% CI of[1, 4.4]
, a reasonable range of optimal frequency.
sigma
Parameter: \(\sigma_g\)
Default Prior: HalfNormal(5)
Rationale:
Uninformative because residual variance varies widely by advertiser.