通过分布系列的组合设置自定义先验

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 之前,请考虑在渠道之间(但在同一分布系列内)改变参数是否会有帮助,或者使用其他分布系列是否会更好。