LinearTrendEffect#
- class pymc_marketing.mmm.additive_effect.LinearTrendEffect(**data)[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:
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__
(**data)Create a new model by parsing and validating input data from keyword arguments.
LinearTrendEffect.construct
([_fields_set])LinearTrendEffect.copy
(*[, include, ...])Returns a copy of the model.
Create the required data in the model.
Create the trend effect in the model.
LinearTrendEffect.dict
(*[, include, ...])LinearTrendEffect.json
(*[, include, ...])LinearTrendEffect.model_construct
([_fields_set])Creates a new instance of the
Model
class with validated data.LinearTrendEffect.model_copy
(*[, update, deep])!!! abstract "Usage Documentation"
LinearTrendEffect.model_dump
(*[, mode, ...])!!! abstract "Usage Documentation"
LinearTrendEffect.model_dump_json
(*[, ...])!!! abstract "Usage Documentation"
Generates a JSON schema for a model class.
Compute the class name for parametrizations of generic classes.
LinearTrendEffect.model_post_init
(context, /)Override this method to perform additional initialization after
__init__
andmodel_construct
.LinearTrendEffect.model_rebuild
(*[, force, ...])Try to rebuild the pydantic-core schema for the model.
LinearTrendEffect.model_validate
(obj, *[, ...])Validate a pydantic model instance.
LinearTrendEffect.model_validate_json
(...[, ...])!!! abstract "Usage Documentation"
Validate the given object with string data against the Pydantic model.
LinearTrendEffect.parse_file
(path, *[, ...])LinearTrendEffect.parse_raw
(b, *[, ...])LinearTrendEffect.schema
([by_alias, ...])LinearTrendEffect.schema_json
(*[, by_alias, ...])LinearTrendEffect.set_data
(mmm, model, X)Set the data for new predictions.
LinearTrendEffect.update_forward_refs
(**localns)LinearTrendEffect.validate
(value)Attributes
model_computed_fields
model_config
Configuration for the model, should be a dictionary conforming to [
ConfigDict
][pydantic.config.ConfigDict].model_extra
Get extra fields set during validation.
model_fields
model_fields_set
Returns the set of fields that have been explicitly set on this model instance.
trend
prefix
date_dim_name
linear_trend_first_date