MMM.agregar_mediciones_de_prueba_de_elevación#

MMM.add_lift_test_measurements(df_lift_test, dist=<class 'pymc.dims.distributions.scalar.Gamma'>, name='lift_measurements')[fuente]#

Añadir pruebas de elevación al modelo.

El modelo para la diferencia de la curva de saturación de un canal se crea a partir de x y x + delta_x para cada canal. Esta variable aleatoria se condiciona luego utilizando el aumento empírico, delta_y, y sigma de la prueba de aumento con la distribución especificada dist.

El pseudo-código para la prueba del ascensor es el siguiente:

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))

El modelo debe ser construido antes de agregar las pruebas de elevación.

Parámetros:
df_lift_testpd.DataFrame
DataFrame con los resultados de la prueba de elevación con al menos las siguientes columnas:
  • DIM_NAME: nombre de la dimensión. Una columna por dimensión en mmm.dims.

  • channel: nombre del canal. Debe estar presente en channel_columns.

  • x: valor del eje x de la prueba de elevación.

  • delta_x: cambio en el valor del eje x de la prueba de elevación.

  • delta_y: cambio en el valor del eje y de la prueba de elevación.

  • sigma: desviación estándar de la prueba de elevación.

distpymc.dims.DimDistribution, optional

The distribution to use for the likelihood, by default pymc.dims.Gamma

nombre : str, opcionalpython:str, opcional

El nombre de la probabilidad de la(s) contribución(es) de la prueba de elevación, por defecto «lift_measurements». Se requiere un cambio de nombre si se llama a este método múltiples veces.

Aumentos:
RuntimeError

Si el modelo aún no ha sido construido.

KeyError

Si la columna “channel” o cualquiera de las dimensiones del modelo no está presente en df_lift_test.

Ejemplos

Primero construya el modelo y luego agregue las mediciones de la prueba de elevación.

import pandas as pd
import numpy as np

from pymc_marketing.mmm import GeometricAdstock, LogisticSaturation

from pymc_marketing.mmm.multidimensional import MMM

model = MMM(
    date_column="date",
    channel_columns=["x1", "x2"],
    target_column="target",
    adstock=GeometricAdstock(l_max=8),
    saturation=LogisticSaturation(),
    yearly_seasonality=2,
    dims=("geo",),
)

X = pd.DataFrame(
    {
        "date": np.tile(
            pd.date_range(start="2025-01-01", end="2025-05-01", freq="W"), 2
        ),
        "x1": np.random.rand(34),
        "x2": np.random.rand(34),
        "target": np.random.rand(34),
        "geo": 17 * ["FIN"] + 17 * ["SWE"],
    }
)
y = X["target"]

model.build_model(X.drop(columns=["target"]), y)

df_lift_test = pd.DataFrame(
    {
        "channel": ["x1", "x1"],
        "geo": ["FIN", "SWE"],
        "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)