Skip to content

Instantiating Priors for Contribution Media Type #908

@paul-jdfagan

Description

@paul-jdfagan

Hello Meridian Devs,

I'm having trouble instantiating priors for contribution media type. In my case, I have a couple of experiments I want to include in the model and leave the remaining channels to the default prior. I see lots of excellent documentation for ROI prior type but less for the Contribution prior use case. Any help would be much appreciated.

I know I need to translate a mean and SE to a beta distribution per the docs.

import numpy as np
import tensorflow_probability.substrates.numpy.distributions as tfd
from meridian.model import prior_distribution, spec, model
import meridian.constants as constants

#  Lift test results
calibrated = {
    "channel1": {"mean": 0.12, "se": 0.03},
    "channel2": {"mean": 0.15, "se": 0.025},
}

#  Estimate Beta parameters
def estimate_beta_params(mean, se):
    var = se**2
    sum_params = (mean * (1 - mean)) / var - 1
    return mean * sum_params, (1 - mean) * sum_params

#  Build prior lists in order of paid channels
alpha, beta = [], []
for ch in data.get_all_paid_channels():
    if ch in calibrated:
        a, b = estimate_beta_params(calibrated[ch]["mean"], calibrated[ch]["se"])
    else:
        a, b = 2.0, 8.0  # Regularizing default
    alpha.append(a)
    beta.append(b)

#  Build batched Beta prior
contribution_prior = tfd.Beta(
    concentration1=np.array(alpha, dtype=np.float32),
    concentration0=np.array(beta, dtype=np.float32),
    name=constants.CONTRIBUTION_M
)

#  Plug into model
prior = prior_distribution.PriorDistribution(contribution_m=contribution_prior)

model_spec = spec.ModelSpec(
    prior=prior,
    media_effects_dist="log_normal",
    media_prior_type="contribution",
    holdout_id=holdout_id,
    knots=20
)

mmm = model.Meridian(input_data=data, model_spec=model_spec)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions