MMM.add_lift_test_measurements#
- MMM.add_lift_test_measurements(df_lift_test, dist=<class 'pymc.distributions.continuous.Gamma'>, name='lift_measurements')[source]#
Add lift tests to the model.
The model difference of a channel’s saturation curve is created from
xandx + delta_xfor each channel. This random variable is then conditioned using the empirical lift,delta_y, andsigmaof the lift test with the specified distributiondist.The pseudo-code for the lift test is as follows:
model_estimated_lift = saturation_curve(x + delta_x) - saturation_curve(x) empirical_lift = delta_y dist(abs(model_estimated_lift), sigma=sigma, observed=abs(empirical_lift))
The model has to be built before adding the lift tests.
- Parameters:
- df_lift_test
pd.DataFrame - DataFrame with lift test results with at least the following columns:
channel: channel name. Must be present inchannel_columns.x: x axis value of the lift test.delta_x: change in x axis value of the lift test.delta_y: change in y axis value of the lift test.sigma: standard deviation of the lift test.
- dist
pm.Distribution, optional The distribution to use for the likelihood, by default pm.Gamma
- name
str, optional The name of the likelihood of the lift test contribution(s), by default “lift_measurements”. Name change required if calling this method multiple times.
- df_lift_test
- Raises:
RuntimeErrorIf the model has not been built yet.
KeyErrorIf the ‘channel’ column is not present in df_lift_test.
Examples
Build the model first then add lift test measurements.
import pandas as pd import numpy as np from pymc_marketing.mmm import ( GeometricAdstock, LogisticSaturation, MMM, ) model = MMM( date_column="date_week", channel_columns=["x1", "x2"], adstock=GeometricAdstock(l_max=8), saturation=LogisticSaturation(), control_columns=[ "event_1", "event_2", ], yearly_seasonality=2, ) X: pd.DataFrame = ... y: np.ndarray = ... model.build_model(X, y) df_lift_test = pd.DataFrame( { "channel": ["x1", "x1"], "x": [1, 1], "delta_x": [0.1, 0.2], "delta_y": [0.1, 0.1], "sigma": [0.1, 0.1], } ) model.add_lift_test_measurements(df_lift_test)