在 Meridian 中,基准代表一种预期的结果,即在所有处理变量均设为基准值(付费媒体和自然媒体设为零;非媒体处理变量设为配置的基准值)的反事实情景下所产生的结果。由于结果不能为负值,因此负基准表示处理效应的因果推理存在统计误差,这通常意味着模型高估了处理变量的功劳。任何模型都难免存在一些统计误差,因此基准偶尔小幅低于零并不值得担心,但如果基准出现极端负值(或在整个时间窗口内汇总的基准为负的后验概率很高),这就明确表明模型需要调整。
在 ModelSpec 中设置 allows_negative_aggregate_baseline=False 后,负基准概率会变为 0.0,这一结果由负基准模型健康状况检查评估得出。该设置会将每次先验和后验抽样中结果的汇总基准约束为非负值,其中“汇总”是指对所有地理区域和时间段的基准值求和(而单个地理区域或时间段的基准值仍可能为负值)。
默认情况下,allows_negative_aggregate_baseline=True。如需启用该约束,请设置 allows_negative_aggregate_baseline=False:
from meridian.model import model
from meridian.model import spec
model_spec = spec.ModelSpec(allows_negative_aggregate_baseline=False)
mmm = model.Meridian(input_data=data, model_spec=model_spec)
约束机制的运作方式
预期基准是多个模型组成部分的总和:时间效应(knot_values;请参阅设置结)、地理区域主效应 (tau_g_excl_baseline)、控制变量,以及按基准值评估的非媒体处理变量。
当 allows_negative_aggregate_baseline=False 时,Meridian 会使用正交基变换(Householder 反射)对 knot_values 进行重新形参化,使所有地理区域和时间段的汇总基准由单个形参控制,而其余 \(K - 1\) 分量仍不受约束,用于捕获时间效应。
在先验和后验抽样过程中,Meridian 会首先对地理区域、控制变量和非媒体处理形参进行抽样,然后为该单个结形参设定 TruncatedNormal 先验。该先验带有一个取决于上述已抽样分量的动态下限,从而确保在每次抽样中,汇总后的结果基准始终为非负值。如果数据支持,单个地理区域或时间段的基准值仍可能为负值。
如需了解完整的技术详情,请参阅数学附录。
关键特性
将汇总基准约束为非负值可带来多项理想的统计和计算特性:
- 汇总基准为负的概率为零:每一次先验和后验抽样都遵循汇总结果基准的非负性约束,从而确保在针对所有地理区域和时间段进行评估时,
Analyzer.negative_baseline_probability()等于0.0,并且ModelReviewer中的负基准组件返回PASS(即概率为0.0)。如果对地理区域或时间段的子集(selected_geos、selected_times)进行评估,或者在revenue_per_kpi随地理区域或时间段变化时评估 KPI 基准 (use_kpi=True),则这类评估不受约束,可能会返回非零概率。 - 保留因果去混杂:旨在消除处理效应偏差的形参(包括地理区域主效应、控制变量系数以及
knot_values的其余 \(K - 1\) 分量)既不会被截断,也不受约束。 - 无需调优即可兼容所有模型结构:只需一个布尔值开关 (
allows_negative_aggregate_baseline=False) 即可启用,无需对惩罚项进行调优,也无需更改 Meridian 的默认先验,并且可无缝适用于地理区域级和国家级模型、任何结规范(单个常数截距 \(K = 1\)、手动结列表、完整时间效应 \(K = T\)或自动结选择)、控制变量、非媒体处理变量、自然媒体以及覆盖面和频次 (RF) 渠道。 - MCMC 抽样速度不会减慢:由于正交基变换矩阵是以闭式解预先计算的,且仅对单个形参进行截断,因此对于 No-U-Turn Sampler (NUTS) 而言,后验几何结构仍保持平滑,计算开销可以忽略不计。
- 当基准已为正值时,影响极小:仅对单个转换后的结形参进行截断,是一种影响最小且充分的先验调整。当数据和先验本身就已支持汇总基准为正值时,截断阈值位于分布左侧尾部的远端,因此与无约束模型相比,后验估计值仅略有变化。由于该设置会改变先验,因此每个模型的结果仍会存在差异;即使随机种子相同,在两种设置下生成的抽样结果也会有所不同。
与先验和模型健康状况的相互作用
将汇总基准约束为非负值会与模型先验产生相互作用,并可能导致先验与数据之间的冲突在模型健康状况诊断中显现出来。
处理变量先验和模型健康状况诊断
启用非负基准约束后,如果您的处理变量先验与非负汇总基准发生冲突,您可能会偶尔发现其他模型健康状况组件受到影响。
在无约束模型中,负基准的出现可能源于对处理变量先验的设定过于乐观。当针对投资回报率、边际投资回报率或贡献率设置的先验暗示总处理贡献率已超过观测到的总结果时,若强制要求汇总基准为非负值,就会在先验与数据之间引发冲突。这种冲突可能导致后验预测总结果超过观测到的总结果。
当这种冲突发生时,该约束会阻止模型将多余的增量结果“藏”在负基准中。这种冲突反而会在 ModelReviewer 诊断中显现出来:
- 收敛:如果强处理变量先验将抽样器推向非负基准边界,则
R-hat值 (max_r_hat >= 1.2) 会升高。 - 贝叶斯后验预测 P 值 (PPP):当后验预测总结果超过观测到的总结果时,检查结果为
FAIL(p 值< 0.05)。 - 拟合优度:R 平方值降低。
如果您在启用该约束后发现收敛问题、贝叶斯 PPP 检查未通过或 R 平方值降低,请检查并重新校准处理变量先验,而不是允许出现负基准。如需查看分步指南,请参阅减少出现基准为负或偏低的情况。
对 knot_values 先验的影响和自定义先验要求
在这一约束下,knot_values 的诱导先验不再是独立同分布 (i.i.d.) 的正态分布。由于第一个转换后的结坐标在下限处被截断,而该下限取决于地理区域、控制变量和非媒体处理变量的形参,因此重构后的 knot_values 彼此相关、总体向上偏移,并且依赖于这些形参。地理区域、控制变量和非媒体处理变量的形参本身的边际先验保持不变,因为这些形参是在被截断的结坐标之前抽样的。
所有其他模型形参(例如媒体 roi_m、mroi_m、contribution_m、tau_g_excl_baseline、gamma_c 和 gamma_n)的自定义先验不受限制,直接从各自指定的分布中抽样。
您可以使用 sample_prior 检查生成的先验。先验抽样结果包含重构后的 knot_values;内部形参 rotated_knot_0 和 rotated_knot_rest 则不会保存。
from meridian.analysis import analyzer
from meridian.model import model
from meridian.model import spec
model_spec = spec.ModelSpec(allows_negative_aggregate_baseline=False)
mmm = model.Meridian(input_data=data, model_spec=model_spec)
mmm.sample_prior(500)
# Prior draws of knot_values with dimensions (chain, draw, knots).
knot_values_prior = mmm.inference_data.prior.knot_values
# Prior probability of a negative aggregate baseline; 0.0 under the constraint.
analyzer.Analyzer(mmm).negative_baseline_probability(use_posterior=False)
通过将这些抽样结果与无约束模型 (allows_negative_aggregate_baseline=True) 的结果进行对比,可以直观地看出约束是如何改变 knot_values 先验的。运行 sample_posterior 后,您还可以使用 ModelDiagnostics.plot_prior_and_posterior_distribution(parameter='knot_values') 绘制 knot_values 的先验分布和后验分布。
数学附录
本部分介绍了非负汇总基准约束的数学公式表达。如需详细了解本部分中使用的数学符号,请参阅数学符号和输入数据。
1. 转换后的 KPI 尺度上的汇总基准条件
令 \(y_{g,t} = (\ddot{y}_{g,t}/p_g - m^{[Y]}) / s^{[Y]}\) 表示经过中心化并按人口规模缩放的 KPI。在反事实基准情景下,假设所有付费媒体和自然媒体变量均设为零,且非媒体处理变量均设为其基准值 \(x^{[N](0)}_{g,t,i}\),则地理区域 \(g\) 在时间 \(t\) 的转换后 KPI 预期值为:
\[ \hat{y}^{\text{base}}_{g,t} := E\left(Y_{g,t} \;\middle|\; \left\{x^{(0)}_{g,t,i}\right\}, \left\{z_{g,t,i}\right\}\right) = \mu_t + \tau_g + \sum\limits_{i=1}^{N_C} \gamma^{[C]}_{g,i} z_{g,t,i} + \sum\limits_{i=1}^{N_N} \gamma^{[N]}_{g,i} x^{[N](0)}_{g,t,i} \]
其中:
- \(\mu_t = \sum_{k=1}^{K} W_{t,k} b_k\) 是由 \(T \times K\) 结权重矩阵 \(W\) 和结形参 \(b = (b_1, \dots, b_K)^\top\) 确定的时变截距(请参阅
knots实参的运作方式)。 - \(\tau_g\) 是地理区域主效应。
- \(\gamma^{[C]}_{g,i} z_{g,t,i}\) 是控制变量\(i\)的贡献。
- \(\gamma^{[N]}_{g,i} x^{[N](0)}_{g,t,i}\) 是非媒体处理变量 \(i\) 取其反事实基准值\(x^{[N](0)}_{g,t,i}\)时的贡献。
令 \(u^{[Y]}_{g,t}\) 表示 revenue_per_kpi(当 revenue_per_kpi 为 None 时, \(u^{[Y]}_{g,t} = 1\)),并定义归一化结果权重\(w_{g,t}\):
\[ w_{g,t} = \frac{T \cdot p_g u^{[Y]}_{g,t}}{\sum\limits_{g'=1}^{G} \sum\limits_{t'=1}^{T} p_{g'} u^{[Y]}_{g',t'}} \]
使得 \(\sum_{g=1}^{G} \sum_{t=1}^{T} w_{g,t} = T\)。对 KPI 缩放转换求逆即可证明,当且仅当满足以下条件时,在所有地理区域和时间段内求和得到的汇总基准结果为非负值:
\[ \sum\limits_{k=1}^{K} W^*_k b_k + \text{offset}\left(\tau, \gamma^{[C]}, \gamma^{[N]}\right) \ge -\frac{T \cdot m^{[Y]}}{s^{[Y]}} \]
其中, \(W^*_k = \sum_{t=1}^{T} W_{t,k} \left(\sum_{g=1}^{G} w_{g,t}\right)\)是结 \(k\)按结果加权后的总贡献,\(\text{offset}(\tau, \gamma^{[C]}, \gamma^{[N]})\) 汇总了按结果加权的地理区域项、控制变量项和非媒体处理变量基准项:
\[ \text{offset}\left(\tau, \gamma^{[C]}, \gamma^{[N]}\right) = \sum\limits_{g=1}^{G} \sum\limits_{t=1}^{T} w_{g,t} \left( \tau_g + \sum\limits_{i=1}^{N_C} \gamma^{[C]}_{g,i} z_{g,t,i} + \sum\limits_{i=1}^{N_N} \gamma^{[N]}_{g,i} x^{[N](0)}_{g,t,i} \right) \]
2. knot_values 的正交基变换
为了在不改变先验几何结构的前提下,将线性组合 \((W^*)^\top b = \sum_{k=1}^{K} W^*_k b_k\)隔离到单个坐标中,Meridian 构造了一个 \(K \times K\) 对称正交矩阵 \(Q\)(\(Q Q^\top = I_K\))。该矩阵采用闭式 Householder 反射形式,并以单位向量 \(u = W^* / \|W^*\|_2\)作为其第一行。
定义转换后的结参数\(\tilde{b} = (\tilde{b}_1, \tilde{b}_2, \dots, \tilde{b}_K)^\top = Q b\)(使得 \(b = Q^\top \tilde{b}\);在模型计算图中,\(\tilde{b}_1\) 命名为 rotated_knot_0,\((\tilde{b}_2, \dots, \tilde{b}_K)\) 命名为 rotated_knot_rest):
结的汇总贡献仅取决于第一个转换后的坐标 \(\tilde{b}_1\):
\[ (W^*)^\top b = (W^*)^\top Q^\top \tilde{b} = \|W^*\|_2 \, \tilde{b}_1 \]
由于 \(Q\) 是正交矩阵,各向同性零均值正态先验\(b_k \stackrel{\text{i.i.d.}}{\sim} \text{Normal}(0, \sigma_b)\) 在正交变换下具有不变性,并会在转换后的坐标\(\tilde{b}_1, \tilde{b}_2, \dots, \tilde{b}_K\)上诱导出相互独立的\(\text{Normal}(0, \sigma_b)\) 先验:
\[ b_k \stackrel{\text{i.i.d.}}{\sim} \text{Normal}(0, \sigma_b) \quad \text{for } k = 1, \dots, K \quad \Longleftrightarrow \quad \tilde{b}_k \stackrel{\text{i.i.d.}}{\sim} \text{Normal}(0, \sigma_b) \quad \text{for } k = 1, \dots, K \]
3. 对 \(\tilde{b}_1\)的动态截断
在进行先验和后验抽样期间,Meridian 会首先对 \(\tau_g\)、\(\gamma^{[C]}_{g,i}\)和 \(\gamma^{[N]}_{g,i}\) 进行抽样,随后计算动态下限:
\[ \tilde{b}_{1,\text{low}}\left(\tau, \gamma^{[C]}, \gamma^{[N]}\right) = \frac{-\frac{T \cdot m^{[Y]}}{s^{[Y]}} - \text{offset}\left(\tau, \gamma^{[C]}, \gamma^{[N]}\right)}{\|W^*\|_2} \]
并为该单个形参 \(\tilde{b}_1\)设定 TruncatedNormal 先验:
\[ \tilde{b}_1 \sim \text{TruncatedNormal}\left(\text{loc}=0, \text{scale}=\sigma_b, \text{low}=\tilde{b}_{1,\text{low}}, \text{high}=\tilde{b}_{1,\text{high}}\right) \]
其中,截断上限设置为:
\[ \tilde{b}_{1,\text{high}} = \max\left(\tilde{b}_{1,\text{low}} + 50\sigma_b, \; 50\sigma_b\right) \]
该上限是数值计算方面的要求,而非建模层面的约束。No-U-Turn Sampler (NUTS) 会通过 TensorFlow Probability 的 TruncatedNormal 所用的 S 型转换,在无约束尺度上对 \(\tilde{b}_1\) 进行抽样,而该转换要求边界为有限值。将上限设置为比 0 和\(\tilde{b}_{1,\text{low}}\) 都至少大 \(50\sigma_b\) ,可使上尾部的先验概率小到可以忽略不计,因此在实际应用中,其效果相当于 \(+\infty\) 。
其余 \(K - 1\) 个转换后的结形参 \(\tilde{b}_2, \dots, \tilde{b}_K \stackrel{\text{i.i.d.}}{\sim} \text{Normal}(0, \sigma_b)\) 仍为无约束的正态变量,Meridian 会将原始结形参重构为 \(b = Q^\top \tilde{b}\)。