agregar_observaciones_de_saturación#

pymc_marketing.mmm.lift_test.add_saturation_observations(df_lift_test, variable_mapping, saturation_function, model=None, dist=<class 'pymc.dims.distributions.scalar.Gamma'>, name='lift_measurements', get_indices=<function exact_row_indices>)[fuente]#

Agregue observaciones de saturación a la probabilidad del modelo.

Función general para añadir mediciones de elevación a la probabilidad del modelo.

No debe utilizarse directamente para uso general. Utilice MMM.add_lift_test_measurements() o add_lift_measurements_to_likelihood_from_saturation() en su lugar.

Parámetros:
df_lift_testpd.DataFrame
DataFrame con los resultados de la prueba de elevación con al menos las siguientes columnas:
  • 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.

Se asume que cualquier columna adicional son coordenadas en el modelo.

variable_mappingdict[str, str]

Diccionario de nombres de variables a dimensiones.

saturation_functionCallable[[np.ndarray], np.ndarray]

Función que toma el gasto y devuelve la saturación.

modelOptional[Model], optional

Modelo PyMC con un número arbitrario de coordenadas, por defecto None

distpymc.dims.DimDistribution class, optional

PyMC dim distribution to use for the likelihood, by default Gamma

nombre : str, opcionalpython:str, opcional

Nombre de la probabilidad, por defecto «lift_measurements»

get_indices : Callable[[pd.DataFrame, pm.Model], Indices], opcionalCallable[[pd.DataFrame, pm.Model], Indices], opcional

Función para obtener los índices del DataFrame en el modelo, por defecto exact_row_indices que asume que las columnas se mapean exactamente a las coordenadas del modelo.

Ejemplos

Agregar pruebas de elevación para la saturación variable en el tiempo a un modelo:

import pymc as pm
import pymc.dims as pmd
import pandas as pd
from pymc_marketing.mmm.lift_test import add_saturation_observations

df_base_lift_test = pd.DataFrame(
    {
        "x": [1, 2, 3],
        "delta_x": [1, 2, 3],
        "delta_y": [1, 2, 3],
        "sigma": [0.1, 0.2, 0.3],
    }
)

def saturation_function(x, alpha, lam):
    return alpha * x / (x + lam)

# These are required since alpha and lam
# have both channel and date dimensions
df_lift_test = df_base_lift_test.assign(
    channel="channel_1",
    date=["2019-01-01", "2019-01-02", "2019-01-03"],
)

coords = {
    "channel": ["channel_1", "channel_2"],
    "date": ["2019-01-01", "2019-01-02", "2019-01-03", "2019-01-04"],
}
with pm.Model(coords=coords) as model:
    # Usually defined in a larger model.
    # Distributions don't matter here, just the shape
    alpha = pmd.HalfNormal("alpha_in_model", dims=("channel", "date"))
    lam = pmd.HalfNormal("lam_in_model", dims="channel")

    add_saturation_observations(
        df_lift_test,
        variable_mapping={
            "alpha": "alpha_in_model",
            "lam": "lam_in_model",
        },
        saturation_function=saturation_function,
    )

Utilice las clases de saturación para añadir pruebas de elevación a un modelo. NOTA: Esto es lo que sucede internamente en MMM.

import pymc as pm
import pymc.dims as pmd
import pandas as pd

from pymc_marketing.mmm import LogisticSaturation
from pymc_marketing.mmm.lift_test import add_saturation_observations

saturation = LogisticSaturation()

df_base_lift_test = pd.DataFrame(
    {
        "x": [1, 2, 3],
        "delta_x": [1, 2, 3],
        "delta_y": [1, 2, 3],
        "sigma": [0.1, 0.2, 0.3],
    }
)

df_lift_test = df_base_lift_test.assign(
    channel="channel_1",
)

coords = {
    "channel": ["channel_1", "channel_2"],
}
with pm.Model(coords=coords) as model:
    # Usually defined in a larger model.
    # Distributions dont matter here, just the shape
    lam = pmd.HalfNormal("saturation_lam", dims="channel")
    beta = pmd.HalfNormal("saturation_beta", dims="channel")

    add_saturation_observations(
        df_lift_test,
        variable_mapping=saturation.variable_mapping,
        saturation_function=saturation.function,
    )

Añadir pruebas de elevación para funciones de canal y saturación geográfica.

import pymc as pm
import pymc.dims as pmd
import pandas as pd

from pymc_marketing.mmm import LogisticSaturation
from pymc_marketing.mmm.lift_test import add_saturation_observations

saturation = LogisticSaturation()

df_base_lift_test = pd.DataFrame(
    {
        "x": [1, 2, 3],
        "delta_x": [1, 2, 3],
        "delta_y": [1, 2, 3],
        "sigma": [0.1, 0.2, 0.3],
    }
)

df_lift_test = df_base_lift_test.assign(
    channel="channel_1",
    geo=["G1", "G2", "G2"],
)

coords = {
    "channel": ["channel_1", "channel_2"],
    "geo": ["G1", "G2", "G3"],
}
with pm.Model(coords=coords) as model:
    # Usually defined in a larger model.
    # Distributions dont matter here, just the shape
    lam = pmd.HalfNormal("saturation_lam", dims=("channel", "geo"))
    beta = pmd.HalfNormal("saturation_beta", dims=("channel", "geo"))

    add_saturation_observations(
        df_lift_test,
        variable_mapping=saturation.variable_mapping,
        saturation_function=saturation.function,
    )