LinearTrendEffect#
- class pymc_marketing.mmm.additive_effect.LinearTrendEffect(trend, prefix)[source]#
Wrapper for LinearTrend to use with MMM’s MuEffect protocol.
This class adapts the LinearTrend component to be used as an additive effect in the MMM model.
- Parameters:
- trend
LinearTrend
The LinearTrend instance to wrap.
- prefix
str
The prefix to use for variables in the model.
- trend
Examples
Out of sample predictions:
Note
No new changepoints are used for the out of sample predictions. The trend effect is linearly extrapolated from the last changepoint.
import pandas as pd import numpy as np import matplotlib.pyplot as plt import pymc as pm from pymc_marketing.mmm.linear_trend import LinearTrend from pymc_marketing.mmm.additive_effect import LinearTrendEffect seed = sum(map(ord, "LinearTrend out of sample")) rng = np.random.default_rng(seed) class MockMMM: pass dates = pd.date_range("2025-01-01", periods=52, freq="W") coords = {"date": dates} model = pm.Model(coords=coords) mock_mmm = MockMMM() mock_mmm.dims = () mock_mmm.model = model effect = LinearTrendEffect( trend=LinearTrend(n_changepoints=8), prefix="trend", ) with mock_mmm.model: effect.create_data(mock_mmm) pm.Deterministic( "effect", effect.create_effect(mock_mmm), dims="date", ) idata = pm.sample_prior_predictive(random_seed=rng) idata["posterior"] = idata.prior n_new = 10 + 1 new_dates = pd.date_range( dates.max(), periods=n_new, freq="W", ) with mock_mmm.model: mock_mmm.model.set_dim("date", n_new, new_dates) effect.set_data(mock_mmm, mock_mmm.model, None) pm.sample_posterior_predictive( idata, var_names=["effect"], random_seed=rng, extend_inferencedata=True, ) draw = rng.choice(range(idata.posterior.sizes["draw"])) sel = dict(chain=0, draw=draw) before = idata.posterior.effect.sel(sel).to_series() after = idata.posterior_predictive.effect.sel(sel).to_series() ax = before.plot(color="C0") after.plot(color="C0", linestyle="dashed", ax=ax) plt.show()
(
Source code
,png
,hires.png
,pdf
)Methods
LinearTrendEffect.__init__
(trend, prefix)Create the required data in the model.
Create the trend effect in the model.
LinearTrendEffect.set_data
(mmm, model, X)Set the data for new predictions.