![]() |
包含每个模型形参的先验分布。
meridian.model.prior_distribution.PriorDistribution(
*,
knot_values: tfp.distributions.Distribution = dataclasses.field(default_factory=lambda : tfp.distributions.Normal(0.0, \n 5.0, name=constants.KNOT_VALUES)),
tau_g_excl_baseline: tfp.distributions.Distribution = dataclasses.field(default_factory=lambda : tfp.distributions.Normal(0.0, \n 5.0, name=constants.TAU_G_EXCL_BASELINE)),
beta_m: tfp.distributions.Distribution = dataclasses.field(default_factory=lambda : tfp.distributions.HalfNormal(5.0,\n name=constants.BETA_M)),
beta_rf: tfp.distributions.Distribution = dataclasses.field(default_factory=lambda : tfp.distributions.HalfNormal(5.0,\n name=constants.BETA_RF)),
beta_om: tfp.distributions.Distribution = dataclasses.field(default_factory=lambda : tfp.distributions.HalfNormal(5.0,\n name=constants.BETA_OM)),
beta_orf: tfp.distributions.Distribution = dataclasses.field(default_factory=lambda : tfp.distributions.HalfNormal(5.0,\n name=constants.BETA_ORF)),
eta_m: tfp.distributions.Distribution = dataclasses.field(default_factory=lambda : tfp.distributions.HalfNormal(1.0,\n name=constants.ETA_M)),
eta_rf: tfp.distributions.Distribution = dataclasses.field(default_factory=lambda : tfp.distributions.HalfNormal(1.0,\n name=constants.ETA_RF)),
eta_om: tfp.distributions.Distribution = dataclasses.field(default_factory=lambda : tfp.distributions.HalfNormal(1.0,\n name=constants.ETA_OM)),
eta_orf: tfp.distributions.Distribution = dataclasses.field(default_factory=lambda : tfp.distributions.HalfNormal(1.0,\n name=constants.ETA_ORF)),
gamma_c: tfp.distributions.Distribution = dataclasses.field(default_factory=lambda : tfp.distributions.Normal(0.0, \n 5.0, name=constants.GAMMA_C)),
gamma_n: tfp.distributions.Distribution = dataclasses.field(default_factory=lambda : tfp.distributions.Normal(0.0, \n 5.0, name=constants.GAMMA_N)),
xi_c: tfp.distributions.Distribution = dataclasses.field(default_factory=lambda : tfp.distributions.HalfNormal(5.0,\n name=constants.XI_C)),
xi_n: tfp.distributions.Distribution = dataclasses.field(default_factory=lambda : tfp.distributions.HalfNormal(5.0,\n name=constants.XI_N)),
alpha_m: tfp.distributions.Distribution = dataclasses.field(default_factory=lambda : tfp.distributions.Uniform(0.0, \n 1.0, name=constants.ALPHA_M)),
alpha_rf: tfp.distributions.Distribution = dataclasses.field(default_factory=lambda : tfp.distributions.Uniform(0.0, \n 1.0, name=constants.ALPHA_RF)),
alpha_om: tfp.distributions.Distribution = dataclasses.field(default_factory=lambda : tfp.distributions.Uniform(0.0, \n 1.0, name=constants.ALPHA_OM)),
alpha_orf: tfp.distributions.Distribution = dataclasses.field(default_factory=lambda : tfp.distributions.Uniform(0.0, \n 1.0, name=constants.ALPHA_ORF)),
ec_m: tfp.distributions.Distribution = dataclasses.field(default_factory=lambda : tfp.distributions.\n TruncatedNormal(0.8, 0.8, 0.1, 10, name=constants.EC_M)),
ec_rf: tfp.distributions.Distribution = dataclasses.field(default_factory=lambda : tfp.distributions.\n TransformedDistribution(tfp.distributions.LogNormal(0.7, 0.4), tfp.\n bijectors.Shift(0.1), name=constants.EC_RF)),
ec_om: tfp.distributions.Distribution = dataclasses.field(default_factory=lambda : tfp.distributions.\n TruncatedNormal(0.8, 0.8, 0.1, 10, name=constants.EC_OM)),
ec_orf: tfp.distributions.Distribution = dataclasses.field(default_factory=lambda : tfp.distributions.\n TransformedDistribution(tfp.distributions.LogNormal(0.7, 0.4), tfp.\n bijectors.Shift(0.1), name=constants.EC_ORF)),
slope_m: tfp.distributions.Distribution = dataclasses.field(default_factory=lambda : tfp.distributions.Deterministic(\n 1.0, name=constants.SLOPE_M)),
slope_rf: tfp.distributions.Distribution = dataclasses.field(default_factory=lambda : tfp.distributions.LogNormal(0.7,\n 0.4, name=constants.SLOPE_RF)),
slope_om: tfp.distributions.Distribution = dataclasses.field(default_factory=lambda : tfp.distributions.Deterministic(\n 1.0, name=constants.SLOPE_OM)),
slope_orf: tfp.distributions.Distribution = dataclasses.field(default_factory=lambda : tfp.distributions.LogNormal(0.7,\n 0.4, name=constants.SLOPE_ORF)),
sigma: tfp.distributions.Distribution = dataclasses.field(default_factory=lambda : tfp.distributions.HalfNormal(5.0,\n name=constants.SIGMA)),
roi_m: tfp.distributions.Distribution = dataclasses.field(default_factory=lambda : tfp.distributions.LogNormal(0.2,\n 0.9, name=constants.ROI_M)),
roi_rf: tfp.distributions.Distribution = dataclasses.field(default_factory=lambda : tfp.distributions.LogNormal(0.2,\n 0.9, name=constants.ROI_RF)),
mroi_m: tfp.distributions.Distribution = dataclasses.field(default_factory=lambda : tfp.distributions.LogNormal(0.0,\n 0.5, name=constants.MROI_M)),
mroi_rf: tfp.distributions.Distribution = dataclasses.field(default_factory=lambda : tfp.distributions.LogNormal(0.0,\n 0.5, name=constants.MROI_RF))
)
PriorDistribution 是 Meridian 的实用程序类。PriorDistribution
的实参所需的形状取决于传递给 Meridian 的建模选项和数据形状。例如,ec_m
形参表示每个媒体渠道的半饱和度。对于 ec_m
实参,要么其 batch_shape=[]
,要么 batch_shape
等于媒体渠道数。在前一种情况下,每个媒体渠道都会获得相同的先验。
如果有任何先验分布的形状无法广播到模型规范指定的形状,则在构建 Meridian 时会出错。
形参批次形状如下所示:
形参 | 批次形状 |
---|---|
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 |
如果 unique_sigma_for_each_geo
为 True,则 (σ) 为 n_geos
,否则为 1
属性 | |
---|---|
knot_values
|
时间效应结的先验分布。默认分布为 Normal(0.0, 5.0) 。 |
tau_g_excl_baseline
|
地理位置效应的先验分布,表示每个地理位置相对于基准地理位置的平均 KPI。此形参会广播到长度为 n_geos - 1 的向量,保留地理位置顺序,并排除 baseline_geo 。采样后,Meridian.inference_data 会包含此形参的一个修改版本,名为 tau_g ,其长度为 n_geos ,并且在与 baseline_geo 对应的位置包含一个零。如果 n_geos = 1 ,Meridian 会忽略此分布。默认分布为 Normal(0.0, 5.0) 。
|
beta_m
|
对于展示媒体渠道 (beta_gm ),地理位置级媒体效应的分层分布形参的先验分布。当 media_effects_dist 设置为 'normal' 时,它是分层平均值。当 media_effects_dist 设置为 'log_normal' 时,它是底层对数变换 Normal 分布平均值的分层形参。如果 paid_media_prior_type 为 'roi' 或 'mroi' ,Meridian 会忽略此分布,改为使用 roi_m 或 mroi_m 先验。默认分布为 HalfNormal(5.0) 。
|
beta_rf
|
对于覆盖面和频次媒体渠道 (beta_grf ),地理位置级媒体效应的分层分布形参的先验分布。当 media_effects_dist 设置为 'normal' 时,它是分层平均值。当 media_effects_dist 设置为 'log_normal' 时,它是底层对数变换 Normal 分布平均值的分层形参。如果 paid_media_prior_type 为 'roi' 或 'mroi' ,Meridian 会忽略此分布,改为使用 roi_m 或 mroi_rf 先验。默认分布为 HalfNormal(5.0) 。
|
beta_om
|
对于自然媒体渠道 (beta_gom ),地理位置级媒体效应的分层分布形参的先验分布。当 media_effects_dist 设置为 'normal' 时,它是分层平均值。当 media_effects_dist 设置为 'log_normal' 时,它是底层对数变换 Normal 分布平均值的分层形参。默认分布为 HalfNormal(5.0) 。
|
beta_orf
|
对于自然覆盖面和频次媒体渠道 (beta_gorf ),地理位置级媒体效应的分层分布形参的先验分布。当 media_effects_dist 设置为 'normal' 时,它是分层平均值。当 media_effects_dist 设置为 'log_normal' 时,它是底层对数变换 Normal 分布平均值的分层形参。默认分布为 HalfNormal(5.0) 。
|
eta_m
|
对于展示媒体渠道 (beta_gm ),地理位置级媒体效应的分层分布形参的先验分布。当 media_effects_dist 设置为 'normal' 时,它是分层标准差。当 media_effects_dist 设置为 'log_normal' 时,它是底层对数变换 Normal 分布标准差的分层形参。默认分布为 HalfNormal(1.0) 。
|
eta_rf
|
对于覆盖面和频次媒体渠道 (beta_grf ),地理位置级媒体效应的分层分布形参的先验分布。当 media_effects_dist 设置为 'normal' 时,它是分层标准差。当 media_effects_dist 设置为 'log_normal' 时,它是底层对数变换 Normal 分布标准差的分层形参。默认分布为 HalfNormal(1.0) 。
|
eta_om
|
对于自然媒体渠道 (beta_gom ),地理位置级媒体效应的分层分布形参的先验分布。当 media_effects_dist 设置为 'normal' 时,它是分层标准差。当 media_effects_dist 设置为 'log_normal' 时,它是底层对数变换 Normal 分布标准差的分层形参。默认分布为 HalfNormal(1.0) 。
|
eta_orf
|
对于自然 RF(覆盖面和频次)媒体渠道 (beta_gorf ),地理位置级媒体效应的分层分布形参的先验分布。当 media_effects_dist 设置为 'normal' 时,它是分层标准差。当 media_effects_dist 设置为 'log_normal' 时,它是底层对数变换 Normal 分布标准差的分层形参。默认分布为 HalfNormal(1.0) 。 |
gamma_c
|
gamma_gc (即地理位置 g 的控制变量 c 的系数)的分层平均值的先验分布。层次结构是基于地理位置定义的。默认分布为 Normal(0.0, 5.0) 。
|
gamma_n
|
gamma_gn (即地理位置 g 的非媒体渠道 n 的系数)的分层平均值的先验分布。层次结构是基于地理位置定义的。默认分布为 Normal(0.0, 5.0) 。
|
xi_c
|
gamma_gc (即地理位置 g 的控制变量 c 的系数)的分层标准差的先验分布。层次结构是基于地理位置定义的。默认分布为 HalfNormal(5.0) 。
|
xi_n
|
gamma_gn (即地理位置 g 的非媒体渠道 n 的系数)的分层标准差的先验分布。层次结构是基于地理位置定义的。默认分布为 HalfNormal(5.0) 。
|
alpha_m
|
媒体输入的 geometric decay Adstock 形参的先验分布。默认分布为 Uniform(0.0, 1.0) 。
|
alpha_rf
|
覆盖面和频次输入的 geometric decay Adstock 形参的先验分布。默认分布为 Uniform(0.0, 1.0) 。
|
alpha_om
|
自然媒体输入的 geometric decay Adstock 形参的先验分布。默认分布为 Uniform(0.0, 1.0) 。
|
alpha_orf
|
自然 RF 输入的 geometric decay Adstock 形参的先验分布。默认分布为 Uniform(0.0, 1.0) 。
|
ec_m
|
媒体输入的 half-saturation Hill 形参的先验分布。默认分布为 TruncatedNormal(0.8, 0.8, 0.1, 10) 。
|
ec_rf
|
覆盖面和频次输入的 half-saturation Hill 形参的先验分布。默认分布为 TransformedDistribution(LogNormal(0.7,
0.4), Shift(0.1)) 。
|
ec_om
|
自然媒体输入的 half-saturation Hill 形参的先验分布。默认分布为 TruncatedNormal(0.8, 0.8,
0.1, 10) 。
|
ec_orf
|
自然 RF 输入的 half-saturation Hill 形参的先验分布。默认分布为 TransformedDistribution(
LogNormal(0.7, 0.4), Shift(0.1)) 。
|
slope_m
|
媒体输入的 slope Hill 形参的先验分布。默认分布为 Deterministic(1.0) 。
|
slope_rf
|
覆盖面和频次输入的 slope Hill 形参的先验分布。默认分布为 LogNormal(0.7, 0.4) 。
|
slope_om
|
自然媒体输入的 slope Hill 形参的先验分布。默认分布为 Deterministic(1.0) 。
|
slope_orf
|
自然 RF 输入的 slope Hill 形参的先验分布。默认分布为 LogNormal(0.7, 0.4) 。
|
sigma
|
噪声标准差的先验分布。默认分布为 HalfNormal(5.0) 。
|
roi_m
|
每个媒体渠道的投资回报率 (ROI) 先验分布。仅当 paid_media_prior_type 为 'roi' 时,才使用此形参。在这种情况下,beta_m 是作为 roi_rf 、alpha_rf 、ec_rf 、slope_rf 以及与每个媒体渠道相关联的支出的确定性函数加以计算的。默认分布为 LogNormal(0.2, 0.9) 。如果 kpi_type 为 'non_revenue' 且未提供 revenue_per_kpi ,系统会将投资回报率解读为每支出一个货币单位所带来的增量 KPI 单位数。在这种情况下,系统会忽略 roi_m 和 roi_rf 的默认值,并为所有渠道分配一个共同的投资回报率先验,以实现媒体总贡献率的目标平均值和标准差。
|
roi_rf
|
每个覆盖面和频次渠道的投资回报率先验分布。仅当 paid_media_prior_type 为 'roi' 时,才使用此形参。在这种情况下,beta_rf 是作为 roi_rf 、alpha_rf 、ec_rf 、slope_rf 以及与每个覆盖面和频次渠道相关联的支出的确定性函数计算的。默认分布为 LogNormal(0.2, 0.9) 。如果 kpi_type 为 'non_revenue' 且未提供 revenue_per_kpi ,系统会将投资回报率解读为每支出一个货币单位所带来的增量 KPI 单位数。在这种情况下,系统会忽略 roi_m 和 roi_rf 的默认值,并为所有渠道分配一个共同的投资回报率先验,以实现媒体总贡献率的目标平均值和标准差。
|
mroi_m
|
每个媒体渠道的边际投资回报率 (mROI) 先验分布。仅当 paid_media_prior_type 为 'mroi' 时,才使用此形参。在这种情况下,beta_m 是作为 mroi_m 、alpha_m 、ec_m 、slope_m 以及与每个媒体渠道相关联的支出的确定性函数加以计算的。默认分布为 LogNormal(0.0, 0.5) 。如果 kpi_type 为 'non_revenue' 且未提供 revenue_per_kpi ,系统会将边际投资回报率解读为每支出一个货币单位所带来的边际增量 KPI 单位数。在这种情况下,系统不会提供默认分布,因此用户必须自行指定。
|
mroi_rf
|
每个覆盖面和频次渠道的边际投资回报率先验分布。仅当 paid_media_prior_type 为 'mroi' 时,才使用此形参。在这种情况下,beta_rf 是作为 mroi_rf 、alpha_rf 、ec_rf 、slope_rf 以及与每个媒体渠道相关联的支出的确定性函数计算的。默认分布为 LogNormal(0.0, 0.5) 。如果 kpi_type 为 'non_revenue' 且未提供 revenue_per_kpi ,系统会将边际投资回报率解读为每支出一个货币单位所带来的边际增量 KPI 单位数。在这种情况下,系统不会提供默认分布,因此用户必须自行指定。
|
方法
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,
sigma_shape: int,
n_knots: int,
is_national: bool,
set_total_media_contribution_prior: bool,
kpi: float,
total_spend: np.ndarray
) -> PriorDistribution
返回具有广播分布属性的新 PriorDistribution
。
实参 | |
---|---|
n_geos
|
地理位置数。 |
n_media_channels
|
使用的媒体渠道数。 |
n_rf_channels
|
使用的覆盖面和频次渠道数。 |
n_organic_media_channels
|
使用的自然媒体渠道数。 |
n_organic_rf_channels
|
使用的自然覆盖面和频次渠道数。 |
n_controls
|
使用的控制变量数。 |
n_non_media_channels
|
使用的非媒体渠道数。 |
sigma_shape
|
一个描述 Sigma 形参的形状的数字。它要么是 1 (如果 sigma_for_each_geo=False ),要么是 n_geos (如果 sigma_for_each_geo=True )。如需了解详情,请参阅 ModelSpec 。 |
n_knots
|
使用的结数。 |
is_national
|
一个布尔值,指明先验分布是否会针对国家级模型进行调整。 |
set_total_media_contribution_prior
|
一个布尔值,指明是否应设置投资回报率先验,以实现具有目标平均值和方差的媒体总贡献率先验。 |
kpi
|
所有地理位置和时间段的所有 KPI 的总和。如果 set_total_media_contribution_prior=True ,则为必需。 |
total_spend
|
每个媒体渠道的支出,所有地理位置和时间段的总和。如果 set_total_media_contribution_prior=True ,则为必需。 |
返回结果 | |
---|---|
根据给定的数据维数,从此先验分布广播的新 PriorDistribution 。 |
可能引发的错误 | |
---|---|
ValueError
|
如果没有为所有渠道设置自定义先验。 |
has_deterministic_param
has_deterministic_param(
param: tfp.distributions.Distribution
) -> bool
__eq__
__eq__(
other
)
返回 self==value。