Meridian 提供了一个自定义分布对象 (prior_distribution.IndependentMultivariateDistribution),可让您将多个系列的分布组合成一个先验分布。例如,您可能希望使用对数正态分布为三个媒体渠道定义投资回报率先验,并为第四个媒体渠道定义半正态先验:
import numpy as np
import tensorflow_probability.substrates.jax as tfp_jax
from meridian.model import model, prior_distribution, spec
distributions = [
tfp_jax.distributions.LogNormal(
np.array([0.2, 0.2, 0.2], dtype=np.float64),
np.array([0.9, 0.9, 0.9], dtype=np.float64),
),
tfp_jax.distributions.HalfNormal(np.float64(5.0)),
]
roi_m_prior = (
prior_distribution.IndependentMultivariateDistribution(distributions)
)
prior = prior_distribution.PriorDistribution(roi_m=roi_m_prior)
model_spec = spec.ModelSpec(prior=prior)
meridian_model = model.Meridian(
input_data=..., # an `InputData` object
model_spec=model_spec,
)
您可能会发现运行时间略有延长,这是因为 IndependentMultivariateDistribution 会在底层将张量拆分并委托给其子分布。在使用 IndependentMultivariateDistribution 之前,请考虑在渠道之间(但在同一分布系列内)改变参数是否会有帮助,或者使用其他分布系列是否会更好。