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.distributions.continuous.Gamma'>, name='lift_measurements', get_indices=<function exact_row_indices>, variable_indexer_factory=<function create_variable_indexer>)[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.

modelo : Opcional[pm.Model], opcionalOpcional[pm.Model], opcional

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

dist : pm.Distribution clase, opcionalclase pm.Distribution, opcional

Distribución de PyMC a utilizar para la verosimilitud, por defecto pm.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.

variable_indexer_factory : Callable[[pm.Model, Indices], Callable[[str], TensorVariable]], opcionalCallable[[pm.Model, Indices], Callable[[python:str], TensorVariable]], opcional

Función para crear un indexador de variables, por defecto create_variable_indexer, que crea una función para indexar variables en el modelo. Esto se utiliza para determinar los valores de los parámetros para evaluar la función de saturación.

Ejemplos

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

import pymc as pm
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 dont matter here, just the shape
    alpha = pm.HalfNormal("alpha_in_model", dims=("channel", "date"))
    lam = pm.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 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 = pm.HalfNormal("saturation_lam", dims="channel")
    beta = pm.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 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 = pm.HalfNormal("saturation_lam", dims=("channel", "geo"))
    beta = pm.HalfNormal("saturation_beta", dims=("channel", "geo"))

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