tvp#
Time Varying Gaussian Process Multiplier for Marketing Mix Modeling (MMM).
Designed to model time-varying effects in marketing mix models (MMM).
This module provides a time-varying Gaussian Process (GP) multiplier, using the Hilbert Space Gaussian Process (HSGP) approximation.
Examples#
Create a basic PyMC model using the time-varying GP multiplier:
import numpy as np
import pymc as pm
import pandas as pd
from pymc_marketing.hsgp_kwargs import HSGPKwargs
from pymc_marketing.mmm.tvp import create_time_varying_gp_multiplier, infer_time_index
# Generate example data
np.random.seed(0)
dates = pd.Series(pd.date_range(start="2020-01-01", periods=365))
sales = np.random.normal(100, 10, size=len(dates))
# Infer time index
time_index = infer_time_index(dates, dates, time_resolution=5)
# Define model configuration
hsgp_kwargs = HSGPKwargs(
m=200,
L=None,
eta_lam=1,
ls_mu=10,
ls_sigma=5,
cov_func=None,
)
coords = {"time": dates}
with pm.Model(coords=coords) as model:
# Shared time index variable
time_index_shared = pm.Data("time_index", time_index)
# Base parameter
base_sales = pm.Normal("base_sales", mu=100, sigma=10)
# Time-varying GP multiplier
varying_coefficient = create_time_varying_gp_multiplier(
name="sales",
dims="time",
time_index=time_index_shared,
time_index_mid=int(len(dates) / 2),
time_resolution=5,
hsgp_kwargs=hsgp_kwargs,
)
# Final sales parameter
sales_estimated = base_sales * varying_coefficient
# Likelihood
pm.Normal("obs", mu=sales_estimated, sigma=10, observed=sales)
# Sample from the model
with model:
trace = pm.sample()
# Plot results
import matplotlib.pyplot as plt
pm.plot_trace(trace, var_names=["base_sales"])
plt.show()
Functions
|
Create a time-varying Gaussian Process multiplier. |
|
Infer the time-index given a new dataset. |
|
Time varying prior, based on the Hilbert Space Gaussian Process (HSGP). |