meridian.model.model.Meridian

包含用于拟合 Meridian MMM 模型的主要功能。

input_data 一个 InputData 对象,包含模型的输入数据。
model_spec 一个 ModelSpec 对象,包含模型规范。
inference_data 一个可变的 arviz.InferenceData 对象,包含拟合模型后得出的数据。
n_geos 数据中的地理位置数量。
n_media_channels 数据中的媒体渠道数量。
n_rf_channels 数据中的覆盖面和频次 (RF) 渠道数量。
n_organic_media_channels 数据中的自然媒体渠道数量。
n_organic_rf_channels 数据中的自然覆盖面和频次 (RF) 渠道数量。
n_controls 数据中的控制变量数量。
n_non_media_channels 数据中的非媒体处理渠道数量。
n_times KPI 或支出数据中的时间段数量。
n_media_times 媒体数据中的时间段数量。
is_national 一个布尔值,用于指明数据是国家级数据(单个地理位置)还是非国家级数据(多个地理位置)。
knot_info 源自输入数据和模型规范的 KnotInfo
kpi 通过 input_data.kpi 构造的张量。
revenue_per_kpi 通过 input_data.revenue_per_kpi 构造的张量。如果 input_data.revenue_per_kpi 为 None,则该属性的值也为 None。
controls 通过 input_data.controls 构造的张量。
non_media_treatments 通过 input_data.non_media_treatments 构造的张量。
population 通过 input_data.population 构造的张量。
media_tensors 一组源自 input_data 的媒体张量。
rf_tensors 一组覆盖面和频次 (RF) 媒体张量。
organic_media_tensors 一组自然媒体张量。
organic_rf_tensors 一组自然覆盖面和频次 (RF) 媒体张量。
total_spend 一个张量,包含总支出(包括 media_tensors.media_spendrf_tensors.rf_spend)。
controls_transformer ControlsTransformer,用于使用模型的控制变量数据来缩放控制变量张量。
non_media_transformer CenteringAndScalingTransformer,用于使用模型的非媒体处理数据来缩放非媒体处理张量。
kpi_transformer KpiTransformer,用于使用模型的 KPI 数据来缩放 KPI 张量。
controls_scaled 按人口比例和中位数值进行归一化的控制变量张量。
non_media_treatments_scaled 按人口比例和中位数值进行归一化的非媒体处理张量。
kpi_scaled 按人口比例和中位数值进行归一化的 KPI 张量。
media_effects_dist 一个字符串,用于指定媒体随机效应在各个地理位置的分布情况。
unique_sigma_for_each_geo 一个布尔值,用于指明是否要针对每个地理位置使用唯一的残差方差。
prior_broadcast 一个 PriorDistribution 对象,包含广播分布。
baseline_geo_idx 基准地理位置的索引。
holdout_id 一个张量,包含留出 ID(如果有)。
posterior_sampler_callable 与此模型绑定的 PosteriorMCMCSampler 可调用项。
prior_sampler_callable 与此模型绑定的 PriorDistributionSampler 可调用项。

方法

adstock_hill_media

查看源代码

使用 Adstock 和 Hill 函数按所需顺序转换媒体。

实参
media 维度为 (n_geos, n_media_times, n_media_channels) 的张量,包含非负的媒体执行值。通常是展示次数,但也可以是任何指标,例如 media_spend。点击次数通常用于付费搜索广告。
alpha Adstock 和 Hill 计算的均匀分布。
ec Adstock 和 Hill 计算的偏移半正态分布。
slope Adstock 和 Hill 计算的确定性分布。
n_times_output 要输出的时间段数量。如果 media 中的时间段数量等于 self.n_media_times,则此实参是可选的;在这种情况下,n_times_output 默认为 self.n_times

返回结果
维度为 [..., n_geos, n_times, n_media_channels] 的张量,表示经过 Adstock 和 Hill 转换的媒体。

adstock_hill_rf

查看源代码

使用 Hill 和 Adstock 函数转换覆盖面和频次 (RF)。

实参
reach 维度为 (n_geos, n_media_times, n_rf_channels) 的张量,包含用于覆盖面的非负媒体执行值。
frequency 维度为 (n_geos, n_media_times, n_rf_channels) 的张量,包含用于频次的非负媒体执行值。
alpha Adstock 和 Hill 计算的均匀分布。
ec Adstock 和 Hill 计算的偏移半正态分布。
slope Adstock 和 Hill 计算的确定性分布。
n_times_output 要输出的时间段数量。如果 reach 中的时间段数量等于 self.n_media_times,则此实参是可选的;在这种情况下,n_times_output 默认为 self.n_times

返回结果
维度为 [..., n_geos, n_times, n_rf_channels] 的张量,表示经过 Hill 和 Adstock 转换的 RF。

create_inference_data_coords

查看源代码

为推理数据创建数据坐标。

create_inference_data_dims

查看源代码

expand_selected_time_dims

查看源代码

根据所选时间来验证并返回时间维度值。

如果 start_dateend_date 均为 None,则返回 None。如果指定了值,则 start_dateend_date 都包含在内,并且必须出现在输入数据的时间坐标中。

实参
start_date 所选时间段的开始日期。如果为 None,则表示输入数据中最早的时间维度值。
end_date 所选时间段的结束日期。如果为 None,则表示输入数据中最晚的时间维度值。

返回结果
所选时间段内输入数据中的时间维度值(作为 Meridian 格式的字符串)列表;如果两个实参均为 None,或者 start_dateend_date 对应输入数据中的整个时间范围,则不执行任何操作并传递 None。

可能引发的错误
如果 start_dateend_date 不在输入数据的时间维度中,则会出现 ValueError。

populate_cached_properties

查看源代码

立即激活所有缓存的属性。

将此 Meridian 对象作为捕获闭包的一部分来创建 tf.function 计算图时,该方法非常有用。在计算图中,内部状态突变会带来问题,因此该方法会在创建计算图之前冻结对象的状态。

sample_posterior

查看源代码

对后验分布运行马尔可夫链蒙特卡洛 (MCMC) 抽样。

如需详细了解这些实参,请参阅 windowed_adaptive_nuts

抽取的样本会合并到此模型的 Arviz inference_data 属性中。

实参
n_chains MCMC 链的数量。如果给定一个整数序列,将为每个元素调用一次 windowed_adaptive_nuts。每次 windowed_adaptive_nuts 调用的 n_chains 实参等于相应的整数元素。通过使用整数列表,可以将 windowed_adaptive_nuts 调用的链拆分为多个调用,从而减少每个调用的链数。这样可以减少内存用量。由于每次抽样调用都会在更少的链上进行优化,因此可能需要更多的自适应步骤才能收敛。
n_adapt 每条链的自适应抽样次数。
n_burnin 每条链的预选抽样次数。预选抽样发生在自适应抽样和保留抽样之间。
n_keep 每条链保留的抽样次数(整数),抽取的样本将用于推理。
current_state 可选的张量结构,用于初始化抽样。使用与 model.experimental_pin(**pins).sample(n_chains) 相同的形状和结构。
init_step_size 可选整数,用于确定在哪里初始化蛙跳积分器的步长。结构必须使用 current_state 进行广播。例如,如果初始状态为 { 'a': tf.zeros(n_chains), 'b': tf.zeros([n_chains, n_features]), },则 1.{'a': 1., 'b': 1.}{'a': tf.ones(n_chains), 'b': tf.ones([n_chains, n_features])} 中的任何一个均可。默认为对数密度维度的 ¼ 次方。
dual_averaging_kwargs 可选的字典关键字实参,要传递给 tfp.mcmc.DualAveragingStepSizeAdaptation。默认情况下,将 target_accept_prob 设置为 0.85,并使用调和平均数减小各链的接受概率,否则,使用类默认值。
max_tree_depth NUTS 以隐式方式构建的树的最大深度。最大蛙跳步数受 2**max_tree_depth 的限制,例如,节点深度为 max_tree_depth 的二叉树的节点数。默认设置为 10,这时的蛙跳步数最多为 1,024 步。
max_energy_diff 每次蛙跳时能量差的标量阈值,超出该阈值的蛙跳步称为发散样本。默认值为 1000
unrolled_leapfrog_steps 每个树扩展步骤要展开的蛙跳数。对 max_tree_depth 所隐含的最大轨迹长度应用直接线性乘数。默认值为 1
parallel_iterations 允许并行运行的迭代次数。必须是正整数。如需了解详情,请参阅 tf.while_loop
seed 用于设置种子,以获得可重现的结果。如需了解详情,请参阅 PRNG 和种子
**pins 这些用于调节所提供的联合分布,并直接传递给 joint_dist.experimental_pin(**pins)

可能抛出的错误
MCMCOOMError 如果模型内存不足,则会出现此错误。可以试着减小 n_keep 或以 n_chains 的形式传递整数列表,以便对链进行串行抽样。如需了解详情,请参阅运行 Meridian.sample_posterior 时发生 ResourceExhaustedError

sample_prior

查看源代码

从先验分布中抽样。

抽取的样本会合并到此模型的 Arviz inference_data 属性中。

实参
n_draws 从先验分布中抽样的次数。
seed 用于设置种子,以获得可重现的结果。如需了解详情,请参阅 PRNG 和种子