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).  |