-
Notifications
You must be signed in to change notification settings - Fork 187
Open
Description
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
Labels
No labels