MMM.experiment#

MMM.experiment(experiment_type, data, **kwargs)[source]#

Run a CausalPy causal inference experiment.

Provides a convenient interface to run quasi-experimental analyses (Interrupted Time Series, Synthetic Control, Difference-in-Differences, Regression Discontinuity) using CausalPy, with results that can be directly converted to lift test calibration data.

Parameters:
experiment_typestr or ExperimentType

The type of experiment to run. Accepts string aliases:

  • "its": Interrupted Time Series

  • "sc": Synthetic Control

  • "did": Difference-in-Differences

  • "rd": Regression Discontinuity

datapd.DataFrame

The experiment data to pass to CausalPy.

**kwargs

Additional keyword arguments passed to the CausalPy experiment constructor. Common arguments include:

  • treatment_time: When the treatment/intervention started.

  • formula: Patsy formula for the model specification.

  • model: A CausalPy model (e.g. causalpy.pymc_models.LinearRegression()).

Returns:
ExperimentResult

A wrapped result with methods for summarizing, plotting, and converting to lift test format via ExperimentResult.to_lift_test().

Raises:
ImportError

If causalpy is not installed. Install it via pip install pymc-marketing[experiment].

ValueError

If experiment_type is not a valid experiment type.

See also

add_lift_test

Add an experiment result as lift test calibration.

add_lift_test_measurements

Add raw lift test measurements.

ExperimentResult

The result wrapper class.

Examples

Run a Synthetic Control experiment and use it to calibrate the MMM:

import causalpy as cp

result = mmm.experiment(
    experiment_type="sc",
    data=df_experiment,
    treatment_time=70,
    formula="actual ~ 0 + a + b + c",
    model=cp.pymc_models.WeightedSumFitter(
        sample_kwargs={"random_seed": 42}
    ),
)

# Visualize the experiment results
result.summary()
fig, ax = result.plot()

# Convert to lift test and add to model
mmm.add_lift_test(
    experiment=result,
    channel="tv",
    x=1000.0,
    delta_x=200.0,
)