![]() |
包含用于拟合 Meridian MMM 模型的主要功能。
meridian.model.model.Meridian(
input_data: meridian.data.input_data.InputData
,
model_spec: (meridian.model.spec.ModelSpec
| None) = None,
inference_data: (az.InferenceData | None) = None
)
方法
adstock_hill_media
adstock_hill_media(
media: tf.Tensor,
alpha: tf.Tensor,
ec: tf.Tensor,
slope: tf.Tensor,
n_times_output: (int | None) = None
) -> tf.Tensor
使用 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
adstock_hill_rf(
reach: tf.Tensor,
frequency: tf.Tensor,
alpha: tf.Tensor,
ec: tf.Tensor,
slope: tf.Tensor,
n_times_output: (int | None) = None
) -> tf.Tensor
使用 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_coords(
n_chains: int, n_draws: int
) -> Mapping[str, np.ndarray | Sequence[str]]
为推理数据创建数据坐标。
create_inference_data_dims
create_inference_data_dims() -> Mapping[str, Sequence[str]]
expand_selected_time_dims
expand_selected_time_dims(
start_date: (tc.Date | None) = None, end_date: (tc.Date | None) = None
) -> (list[str] | None)
根据所选时间来验证并返回时间维度值。
如果 start_date
和 end_date
均为 None,则返回 None。如果指定了值,则 start_date
和 end_date
都包含在内,并且必须出现在输入数据的时间坐标中。
实参 | |
---|---|
start_date
|
所选时间段的开始日期。如果为 None,则表示输入数据中最早的时间维度值。 |
end_date
|
所选时间段的结束日期。如果为 None,则表示输入数据中最晚的时间维度值。 |
返回结果 | |
---|---|
所选时间段内输入数据中的时间维度值(作为 Meridian 格式的字符串)列表;如果两个实参均为 None,或者 start_date 和 end_date 对应输入数据中的整个时间范围,则不执行任何操作并传递 None。
|
可能引发的错误 | |
---|---|
如果 start_date 或 end_date 不在输入数据的时间维度中,则会出现 ValueError。
|
populate_cached_properties
populate_cached_properties()
立即激活所有缓存的属性。
将此 Meridian 对象作为捕获闭包的一部分来创建 tf.function
计算图时,该方法非常有用。在计算图中,内部状态突变会带来问题,因此该方法会在创建计算图之前冻结对象的状态。
sample_posterior
sample_posterior(
n_chains: (Sequence[int] | int),
n_adapt: int,
n_burnin: int,
n_keep: int,
current_state: (Mapping[str, tf.Tensor] | None) = None,
init_step_size: (int | None) = None,
dual_averaging_kwargs: (Mapping[str, int] | None) = None,
max_tree_depth: int = 10,
max_energy_diff: float = 500.0,
unrolled_leapfrog_steps: int = 1,
parallel_iterations: int = 10,
seed: (Sequence[int] | None) = None,
**pins
)
对后验分布运行马尔可夫链蒙特卡洛 (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
sample_prior(
n_draws: int, seed: (int | None) = None
)
从先验分布中抽样。
抽取的样本会合并到此模型的 Arviz inference_data
属性中。
实参 | |
---|---|
n_draws
|
从先验分布中抽样的次数。 |
seed
|
用于设置种子,以获得可重现的结果。如需了解详情,请参阅 PRNG 和种子。 |