View source on GitHub
|
Contains prior distributions for each model parameter.
meridian.model.prior_distribution.PriorDistribution(
*,
knot_values: backend.tfd.Distribution = dataclasses.field(default_factory=lambda : backend.tfd.Normal(backend.\n np_float_dtype(0.0), backend.np_float_dtype(5.0), name=constants.\n KNOT_VALUES)),
tau_g_excl_baseline: backend.tfd.Distribution = dataclasses.field(default_factory=lambda : backend.tfd.Normal(backend.\n np_float_dtype(0.0), backend.np_float_dtype(5.0), name=constants.\n TAU_G_EXCL_BASELINE)),
beta_m: backend.tfd.Distribution = dataclasses.field(default_factory=lambda : backend.tfd.HalfNormal(backend.\n np_float_dtype(5.0), name=constants.BETA_M)),
beta_rf: backend.tfd.Distribution = dataclasses.field(default_factory=lambda : backend.tfd.HalfNormal(backend.\n np_float_dtype(5.0), name=constants.BETA_RF)),
beta_om: backend.tfd.Distribution = dataclasses.field(default_factory=lambda : backend.tfd.HalfNormal(backend.\n np_float_dtype(5.0), name=constants.BETA_OM)),
beta_orf: backend.tfd.Distribution = dataclasses.field(default_factory=lambda : backend.tfd.HalfNormal(backend.\n np_float_dtype(5.0), name=constants.BETA_ORF)),
eta_m: backend.tfd.Distribution = dataclasses.field(default_factory=lambda : backend.tfd.HalfNormal(backend.\n np_float_dtype(1.0), name=constants.ETA_M)),
eta_rf: backend.tfd.Distribution = dataclasses.field(default_factory=lambda : backend.tfd.HalfNormal(backend.\n np_float_dtype(1.0), name=constants.ETA_RF)),
eta_om: backend.tfd.Distribution = dataclasses.field(default_factory=lambda : backend.tfd.HalfNormal(backend.\n np_float_dtype(1.0), name=constants.ETA_OM)),
eta_orf: backend.tfd.Distribution = dataclasses.field(default_factory=lambda : backend.tfd.HalfNormal(backend.\n np_float_dtype(1.0), name=constants.ETA_ORF)),
gamma_c: backend.tfd.Distribution = dataclasses.field(default_factory=lambda : backend.tfd.Normal(backend.\n np_float_dtype(0.0), backend.np_float_dtype(5.0), name=constants.GAMMA_C)),
gamma_n: backend.tfd.Distribution = dataclasses.field(default_factory=lambda : backend.tfd.Normal(backend.\n np_float_dtype(0.0), backend.np_float_dtype(5.0), name=constants.GAMMA_N)),
xi_c: backend.tfd.Distribution = dataclasses.field(default_factory=lambda : backend.tfd.HalfNormal(backend.\n np_float_dtype(5.0), name=constants.XI_C)),
xi_n: backend.tfd.Distribution = dataclasses.field(default_factory=lambda : backend.tfd.HalfNormal(backend.\n np_float_dtype(5.0), name=constants.XI_N)),
alpha_m: backend.tfd.Distribution = dataclasses.field(default_factory=lambda : backend.tfd.Uniform(backend.\n np_float_dtype(0.0), backend.np_float_dtype(1.0), name=constants.ALPHA_M)),
alpha_rf: backend.tfd.Distribution = dataclasses.field(default_factory=lambda : backend.tfd.Uniform(backend.\n np_float_dtype(0.0), backend.np_float_dtype(1.0), name=constants.ALPHA_RF)),
alpha_om: backend.tfd.Distribution = dataclasses.field(default_factory=lambda : backend.tfd.Uniform(backend.\n np_float_dtype(0.0), backend.np_float_dtype(1.0), name=constants.ALPHA_OM)),
alpha_orf: backend.tfd.Distribution = dataclasses.field(default_factory=lambda : backend.tfd.Uniform(backend.\n np_float_dtype(0.0), backend.np_float_dtype(1.0), name=constants.ALPHA_ORF)\n ),
ec_m: backend.tfd.Distribution = dataclasses.field(default_factory=lambda : backend.tfd.TruncatedNormal(\n backend.np_float_dtype(0.8), backend.np_float_dtype(0.8), backend.\n np_float_dtype(0.1), backend.np_float_dtype(10.0), name=constants.EC_M)),
ec_rf: backend.tfd.Distribution = dataclasses.field(default_factory=lambda : backend.tfd.\n TransformedDistribution(backend.tfd.LogNormal(backend.np_float_dtype(\n 0.7), backend.np_float_dtype(0.4)), backend.bijectors.Shift(backend.\n np_float_dtype(0.1)), name=constants.EC_RF)),
ec_om: backend.tfd.Distribution = dataclasses.field(default_factory=lambda : backend.tfd.TruncatedNormal(\n backend.np_float_dtype(0.8), backend.np_float_dtype(0.8), backend.\n np_float_dtype(0.1), backend.np_float_dtype(10.0), name=constants.EC_OM)),
ec_orf: backend.tfd.Distribution = dataclasses.field(default_factory=lambda : backend.tfd.\n TransformedDistribution(backend.tfd.LogNormal(backend.np_float_dtype(\n 0.7), backend.np_float_dtype(0.4)), backend.bijectors.Shift(backend.\n np_float_dtype(0.1)), name=constants.EC_ORF)),
slope_m: backend.tfd.Distribution = dataclasses.field(default_factory=lambda : backend.tfd.Deterministic(\n backend.np_float_dtype(1.0), name=constants.SLOPE_M)),
slope_rf: backend.tfd.Distribution = dataclasses.field(default_factory=lambda : backend.tfd.LogNormal(backend.\n np_float_dtype(0.7), backend.np_float_dtype(0.4), name=constants.SLOPE_RF)),
slope_om: backend.tfd.Distribution = dataclasses.field(default_factory=lambda : backend.tfd.Deterministic(\n backend.np_float_dtype(1.0), name=constants.SLOPE_OM)),
slope_orf: backend.tfd.Distribution = dataclasses.field(default_factory=lambda : backend.tfd.LogNormal(backend.\n np_float_dtype(0.7), backend.np_float_dtype(0.4), name=constants.SLOPE_ORF)\n ),
sigma: backend.tfd.Distribution = dataclasses.field(default_factory=lambda : backend.tfd.HalfNormal(backend.\n np_float_dtype(5.0), name=constants.SIGMA)),
roi_m: backend.tfd.Distribution = dataclasses.field(default_factory=lambda : backend.tfd.LogNormal(backend.\n np_float_dtype(0.2), backend.np_float_dtype(0.9), name=constants.ROI_M)),
roi_rf: backend.tfd.Distribution = dataclasses.field(default_factory=lambda : backend.tfd.LogNormal(backend.\n np_float_dtype(0.2), backend.np_float_dtype(0.9), name=constants.ROI_RF)),
mroi_m: backend.tfd.Distribution = dataclasses.field(default_factory=lambda : backend.tfd.LogNormal(backend.\n np_float_dtype(0.0), backend.np_float_dtype(0.5), name=constants.MROI_M)),
mroi_rf: backend.tfd.Distribution = dataclasses.field(default_factory=lambda : backend.tfd.LogNormal(backend.\n np_float_dtype(0.0), backend.np_float_dtype(0.5), name=constants.MROI_RF)),
contribution_m: backend.tfd.Distribution = dataclasses.field(default_factory=lambda : backend.tfd.Beta(backend.\n np_float_dtype(1.0), backend.np_float_dtype(99.0), name=constants.\n CONTRIBUTION_M)),
contribution_rf: backend.tfd.Distribution = dataclasses.field(default_factory=lambda : backend.tfd.Beta(backend.\n np_float_dtype(1.0), backend.np_float_dtype(99.0), name=constants.\n CONTRIBUTION_RF)),
contribution_om: backend.tfd.Distribution = dataclasses.field(default_factory=lambda : backend.tfd.Beta(backend.\n np_float_dtype(1.0), backend.np_float_dtype(99.0), name=constants.\n CONTRIBUTION_OM)),
contribution_orf: backend.tfd.Distribution = dataclasses.field(default_factory=lambda : backend.tfd.Beta(backend.\n np_float_dtype(1.0), backend.np_float_dtype(99.0), name=constants.\n CONTRIBUTION_ORF)),
contribution_n: backend.tfd.Distribution = dataclasses.field(default_factory=lambda : backend.tfd.TruncatedNormal(loc=\n backend.np_float_dtype(0.0), scale=backend.np_float_dtype(0.1), low=-\n backend.np_float_dtype(1.0), high=backend.np_float_dtype(1.0), name=\n constants.CONTRIBUTION_N))
)
PriorDistribution is a utility class for Meridian. The required shapes of the
arguments to PriorDistribution depend on the modeling options and data
shapes passed to Meridian. For example, ec_m is a parameter that represents
the half-saturation for each media channel. The ec_m argument must have
either batch_shape=[] or batch_shape equal to the number of media
channels. In the case of the former, each media channel gets the same prior.
An error is raised upon Meridian construction if any prior distribution has a shape that cannot be broadcast to the shape designated by the model specification.
The parameter batch shapes are as follows:
| Parameter | Batch shape |
|---|---|
knot_values |
n_knots |
tau_g_excl_baseline |
n_geos - 1 |
beta_m |
n_media_channels |
beta_rf |
n_rf_channels |
beta_om |
n_organic_media_channels |
beta_orf |
n_organic_rf_channels |
eta_m |
n_media_channels |
eta_rf |
n_rf_channels |
eta_om |
n_organic_media_channels |
eta_orf |
n_organic_rf_channels |
gamma_c |
n_controls |
gamma_n |
n_non_media_channels |
xi_c |
n_controls |
xi_n |
n_non_media_channels |
alpha_m |
n_media_channels |
alpha_rf |
n_rf_channels |
alpha_om |
n_organic_media_channels |
alpha_orf |
n_organic_rf_channels |
ec_m |
n_media_channels |
ec_rf |
n_rf_channels |
ec_om |
n_organic_media_channels |
ec_orf |
n_organic_rf_channels |
slope_m |
n_media_channels |
slope_rf |
n_rf_channels |
slope_om |
n_organic_media_channels |
slope_orf |
n_organic_rf_channels |
sigma |
(σ) |
roi_m |
n_media_channels |
roi_rf |
n_rf_channels |
mroi_m |
n_media_channels |
mroi_rf |
n_rf_channels |
contribution_m |
n_media_channels |
contribution_rf |
n_rf_channels |
contribution_om |
n_organic_media_channels |
contribution_orf |
n_organic_f_channels |
contribution_n |
n_non_media_channels |
(σ) n_geos if unique_sigma_for_each_geo, otherwise this is 1
Methods
broadcast
broadcast(
n_geos: int,
n_media_channels: int,
n_rf_channels: int,
n_organic_media_channels: int,
n_organic_rf_channels: int,
n_controls: int,
n_non_media_channels: int,
unique_sigma_for_each_geo: bool,
n_knots: int,
is_national: bool,
set_total_media_contribution_prior: bool,
kpi: float,
total_spend: np.ndarray
) -> PriorDistribution
Returns a new PriorDistribution with broadcast distribution attributes.
| Args | |
|---|---|
n_geos
|
Number of geos. |
n_media_channels
|
Number of media channels used. |
n_rf_channels
|
Number of reach and frequency channels used. |
n_organic_media_channels
|
Number of organic media channels used. |
n_organic_rf_channels
|
Number of organic reach and frequency channels used. |
n_controls
|
Number of controls used. |
n_non_media_channels
|
Number of non-media channels used. |
unique_sigma_for_each_geo
|
A boolean indicator whether to use the same
sigma parameter for all geos. Only used if n_geos > 1. For more
information, see ModelSpec.
|
n_knots
|
Number of knots used. |
is_national
|
A boolean indicator whether the prior distribution will be adapted for a national model. |
set_total_media_contribution_prior
|
A boolean indicator whether the ROI priors should be set to achieve a total media constribution prior with target mean and variance. |
kpi
|
Sum of the entire KPI across geos and time. Required if
set_total_media_contribution_prior=True.
|
total_spend
|
Spend per media channel summed across geos and time. Required
if set_total_media_contribution_prior=True.
|
| Returns | |
|---|---|
A new PriorDistribution broadcast from this prior distribution,
according to the given data dimensionality.
|
| Raises | |
|---|---|
ValueError
|
If custom priors are not set for all channels. |
has_deterministic_param
has_deterministic_param(
param: backend.tfd.Distribution
) -> bool
__eq__
__eq__(
other
)
Return self==value.
View source on GitHub