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_time_varying_gp_multiplier(name, ...)

Create a time-varying Gaussian Process multiplier.

infer_time_index(date_series_new, ...)

Infer the time-index given a new dataset.

time_varying_prior(name, X, dims[, X_mid, ...])

Time varying prior, based on the Hilbert Space Gaussian Process (HSGP).