with pm.Model() as mmm:
mmm.add_coord("date", range(len(df)), mutable=True)
media_contributions = []
control_contributions = []
################## Sales #############################
for x in media_vars:
coef = pm.HalfNormal(f'coef_{x}', sigma=4)
alpha = pm.Gamma(f"sat_alpha_{x}", 3,1)
gamma = pm.Beta(f"sat_gamma_{x}", 2, 2)
data = pm.MutableData(f'{x}', dat[x], dims="date")
contribution = pm.Deterministic(f'contribution_{x}',coef * hill_transform_theano(data, alpha, gamma))
media_contributions.append(contribution)
for x in control_vars:
coef = pm.HalfNormal(f'coef_{x}', sigma=4)
data = pm.MutableData(f'{x}', dat[x], dims="date")
contribution = pm.Deterministic(f'contribution_{x}',coef * data)
control_contributions.append(contribution)
intercept = pm.Normal('Intercept', sigma=4)
noise = pm.HalfNormal(name="noise", sigma=1)
sales = pm.Normal(
'sales',
mu=intercept + sum(media_contributions) + sum(control_contributions) ,
sigma=noise,
observed=dat[target]
)
trace = pm.sample(2000, tune=2000, target_accept=0.9, cores=6, chains=4, return_inferencedata=True)
When I increase or decrease the X values and set it like below, the predictions remain stable
with mmm:
pm.set_data(data_new,coords={"date": np.arange(len(dat))})
sales_preds_posterior = pm.sample_posterior_predictive(trace,predictions=False,progressbar=False)
new_sales_preds = sales_preds_posterior.posterior_predictive["sales"].mean(axis=1).mean(axis=0).to_numpy()
where data_new consist of all variables (media+control) whose values are updated
What is wrong here? and how can i resolve it?