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()oadd_lift_measurements_to_likelihood_from_saturation()en su lugar.- Parámetros:
- df_lift_test
pd.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_mapping
dict[str,str] Diccionario de nombres de variables a dimensiones.
- saturation_function
Callable[[np.ndarray],np.ndarray] Función que toma el gasto y devuelve la saturación.
- model
Optional[Model], optional Modelo PyMC con un número arbitrario de coordenadas, por defecto None
- dist
pymc.dims.DimDistributionclass, 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.
- df_lift_test
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, )