实现 MCMC 收敛
收敛性缺失通常是由以下某种原因造成的:
- 对数据而言模型设定不佳。这种问题可能存在于似然(模型设定)或先验中。
-
Meridian.sample_posterior
的n_adapt + n_burnin
或n_keep
实参不够大。
如需让链收敛,请按顺序尝试以下建议:
- 通过回答以下问题检查是否存在可识别性或弱可识别性:
-
您是否有具备高度多重共线性的
media
或controls
变量? -
您的
media
或controls
变量的变化是否过小,以至于难以估计其效应? -
某个
media
或controls
是否与时间高度相关,甚至与时间完全共线?如需了解详情,请参阅何时必须使用knots < n_times
。 -
某个
media
变量是否非常稀疏?稀疏可能意味着渠道中的执行次数极少、有太多的地理位置没有执行,或有太多的时间段没有媒体执行(尤其是当knots
的数量接近n_times
时)。 - 重新评估先验。信息量极少的先验通常会导致收敛困难,但在某些情况下,信息量极大的先验也可能会导致收敛困难。
- 如果您的 KPI 是收入,或者您有“每个 KPI 的收入”数据,针对付费媒体渠道,请考虑采用投资回报率先验和校准中的建议。
- 如果您没有收入数据,那么针对付费媒体渠道,请考虑采用在效果不是收入时设置自定义先验中的建议。降低媒体总贡献率先验平均值和/或标准差可能有助于实现足够的正则化程度。
-
调整建模选项。具体来说,请尝试减少
ModelSpec
的knots
实参。其他需要调整的建模选项包括ModelSpec
的unique_sigma_for_each_geo
或media_effects_dist
。 -
检查是否存在数据错误,例如,
population
顺序是否与地理位置的media
顺序不一致。Meridian 的模型假定媒体和控制效应采用地理位置层次结构。如果这一假设与您的数据不符,可进一步将这些形参正则化,方法是对测量分层方差的形参(eta_m
和xi_c
)设置先验,例如HalfNormal(0.1)
。您还可以使用Deterministic(0)
先验关闭地理位置层次结构假设。 - 考虑自己是否有足够的数据。如需了解详情,请参阅所需数据量。
后验与先验相同时
如果模型要尝试理解的变量很多,无论想了解哪个特定变量,都需要更多的数据。营销组合建模分析 (MMM) 通常试图在没有那么多数据点的情况下对许多变量进行推理,尤其是使用国家级模型时。这意味着在某些情况下,特定媒体渠道的数据可能包含较少的信息。当某一特定渠道的支出较低、按比例缩放的媒体执行方差较小,或渠道间按比例缩放的媒体执行相关性较高时,这种情况可能会加剧。如需详细了解数据量,请参阅所需数据量。如需详细了解低支出渠道,请参阅低支出渠道。
您可以使用信息量越来越少的先验,让先验和后验彼此不同。回想一下,先验是在考虑数据之前对形参的估计值,而后验则是在考虑数据之后对形参的估计值。如果数据中的信息很少,则前后数据会很相似。当先验中的信息相对较多时,情况尤其如此。这里的“相对”是指先验中的信息相对于数据中的信息。这意味着,如果设置的先验中信息量不够大,数据总是可以支配先验。但是,如果先验相对于数据来说信息量较少,而数据的信息量也较少,那么后验就会很宽,表示存在很多不确定性。
一种简化方式是从为投资回报率等形参设置的先验着眼。如果您设置了自己认为合理的先验,就不必过于担心先验的相对信息量。如果数据中的信息很少或没有信息,那么从贝叶斯的角度来看,先验和后验相似是合理的。如果数据中包含大量信息,那么先验很可能会因为这些数据而发生变化。
低支出渠道
低支出渠道尤其容易出现与投资回报率先验相似的投资回报率后验。每个渠道都有一定范围的投资回报率值能够与数据较好地拟合。如果这个范围很大,完全覆盖了大部分先验概率质量,那么后验往往就会与先验相似。相较于高支出渠道,低支出渠道的合理投资回报率值的范围往往要大得多,这是因为低支出渠道需要非常高的投资回报率才能对模型拟合产生很大影响。大范围的投资回报率值更有可能较好地拟合数据。
系统会根据提供的媒体指标(例如展示次数和点击次数)对媒体效应进行模型分析。媒体指标的规模和支出水平都不会影响模型拟合,也不会影响可合理归因于渠道的增量效果范围。投资回报率是指增量效果除以支出。因此,将合理的增量效果值范围转换为投资回报率范围时,支出较大的渠道中与数据拟合较好的投资回报率值范围将较窄。
注意:对于普通最小二乘回归,协变量的比例对拟合没有影响。在贝叶斯回归设置中,如果对系数应用先验,该比例可能会有影响;不过,Meridian 会对每个媒体指标应用比例转换。例如,将渠道的展示次数扩大 100 倍,不会影响 Meridian 模型拟合。
投资回报率结果因使用的先验不同而大相径庭时
根据是使用投资回报率默认先验还是使用 Beta 默认先验,投资回报率结果可能会大相径庭。
使用投资回报率默认先验和 Beta 默认先验可能会影响投资回报率结果,原因如下:
- 使用投资回报率默认先验时,每个媒体渠道的后验投资回报率都会被正则化为相同的分布。这是好事,因为每个渠道都得到了公平对待。
- 使用媒体系数 (Beta) 的默认先验时,每个媒体渠道的后验投资回报率都会被正则化为不同的分布。这是因为媒体数据的缩放比例与各渠道所使用的缩放比例不同。因此,相同的 Beta 值意味着不同渠道的投资回报率不同。相对于默认投资回报率先验,媒体系数的默认先验也是无信息的,以反映不同渠道的媒体数据在缩放比例上可能存在的巨大差异。
- 如果数据中的信息很少,先验和后验会相似,如后验与先验相同时中所述。如果数据中的信息很少,且使用 Beta 先验,不同媒体渠道的后验投资回报率将有所不同。不过,这种差异仅源于媒体渠道的不公平先验,而非数据。总而言之,重要的是不要把不同渠道的不同投资回报率结果解读为从数据中提取信号的结果,因为这种差异只是由不公平先验引起的。
运行 Meridian.sample_posterior
时发生 ResourceExhaustedError
Meridian.sample_posterior
会调用 tfp.experimental.mcmc.windowed_adaptive_nuts
,当对大量链进行并行抽样或使用大型数据集进行训练时,GPU 的内存消耗会很大。
如需降低 GPU 内存消耗峰值,一种方式是对链进行串行抽样。通过向 n_chains
传递整数列表,就可以实现这一功能。例如,通过连续调用 tfp.experimental.mcmc.windowed_adaptive_nuts
,n_chains=[5, 5]
将对总共 10 条链进行抽样,每次都使用实参 n_chains=5
。
请注意,这样做会产生运行时成本。由于使用这种方法可以通过连续调用 MCMC 抽样方法来减少内存消耗,因此总运行时将随传递给 n_chains
的列表长度呈线性增长。例如,n_chains=[5,5]
的运行时最多可能是 n_chains=10
的 2 倍,而 n_chains=[4,3,3]
的运行时最多可能是其 3 倍。
自然媒体贡献过高
如果自然媒体贡献高于预期,则表示使用的先验可能不合适。自然媒体没有明确的投资回报率,因此使用回归系数形参化方法,并使用系数(beta_om
或 beta_orf
)先验。如果发现自然媒体的贡献高于预期,建议重新审视用于自然媒体渠道的先验。默认情况下,假定的先验相对来说信息量较少,但假定具有正面效果,可能会导致较高的先验平均值。如果数据中的信息很少,这也可能会导致后验平均值偏高。如果存在此问题,您可能需要考虑使用一个在分布范围低端权重更大的替代先验。此外,请注意,当 media_effects_dist = 'log_normal'
时,$\beta_i^{[OM]}$ 是地理位置级媒体效应对数的先验平均值,即 $\log(\beta_{g,i}^{[OM]})$。在本例中,默认先验 HalfNormal(5.0)
可能过多地假设了远离零值的先验权重。指数化后,这种情况会更加严重,您可能需要考虑使用零附近的权重较大的先验,例如 HalfNormal(0.1)
先验。请注意,虽然方差很小,但在指数化尺度上它仍然提供了一个很宽的可能值范围。或者,为了获得更大的灵活性,您可以考虑使用允许同时设置位置和尺度的正态先验,例如 Normal(0.0, 3.0)
。同样,当 media_effects_dist = 'normal'
时,您可能需要考虑使用尺度比默认值更小的先验,例如 HalfNormal(1.0)
。
有关控制变量在不同组或地理位置间不存在差异的错误
这一错误意味着,您的一个国家级变量在地理位置间不存在差异,并且您设置了“knots = n_times”。当 “knots = n_times”,每个时间段都有自己的形参。国家级变量只因时间而异,在地理位置间不存在差异。因此,国家级变量与时间完全共线,对于每个时间段都有形参的模型来说是多余的。这意味着,您可以保留国家级变量,也可以设置“knots < n_times”。选择哪个变量取决于您的解释目标。
R 平方值为负
在训练集或测试集中,R 平方值可能会为负,原因如下:
- 如果先验较强,而数据的信号较弱(即信噪比低),后验分布可能会显著地受到先验的影响。这可能会导致 Meridian 模型在训练集上拟合,其中误差平方和 (SSE) 大于总平方和 (SST),从而得到一个负的 R 平方值。如需了解详情,请参阅 Gelman 等人的著作(2018 年)。
- 如果模型与训练数据拟合,但未能泛化到测试集,则测试集上的 R 平方值为负。任何模型都可能出现这种情况。在 Meridian 中,如果将留出数据指定为最后 N 个连续时间点,就会出现此问题。如需了解详情,请参阅留出观测结果。
- 数据输入错误可能导致 R 平方值为负。特别是,地理位置级人口数量不正确可能会产生很大影响,因为 R 平方值是按原始 KPI 缩放比例衡量的,但建模是按人均 KPI 缩放比例完成的。 另一个常见的输入错误是 KPI 的人口数量缩放两次。在将 KPI 输入到 Meridian 之前预先缩放 KPI 时会出现这种情况,因为 Meridian 之后会再次自动缩放人均 KPI。