MaskedPrior#
- class pymc_marketing.special_priors.MaskedPrior(prior, mask, active_dim=None)[fuente]#
Cree variables a partir de un anterior solo sobre las entradas activas de una máscara booleana.
Advertencia
Esta clase es experimental y su API puede cambiar en versiones futuras.
- Parámetros:
- previo :
PrevioPrevio Base previa cuya variable está definida sobre
prior.dims. Internamente, la variable se crea solo para las entradas activas dadas pormasky luego se expande de nuevo a la forma completa con ceros en las posiciones inactivas.- máscara :
xarray.DataArrayxarray.DataArray Array booleano con las mismas dimensiones y forma que
prior.dimsmarcando entradas activas (True) e inactivas (False).- active_dim :
str, opcionalpython:str, opcional Nombre de la coordenada que indexa el subconjunto activo. Si no se proporciona, se genera un nombre como
"non_null_dims:<dim1>_<dim2>_...". Si una coordenada existente con el mismo nombre tiene una longitud diferente, se añade un sufijo con la longitud activa.
- previo :
Ejemplos
Enmascaramiento 1D simple.
import numpy as np import xarray as xr import pymc as pm from pymc_extras.prior import Prior from pymc_marketing.special_priors import MaskedPrior coords = {"country": ["Venezuela", "Colombia"]} mask = xr.DataArray( [True, False], dims=["country"], coords={"country": coords["country"]}, ) intercept = Prior("Normal", mu=0, sigma=10, dims=("country",)) with pm.Model(coords=coords): masked = MaskedPrior(intercept, mask) intercept_full = masked.create_variable("intercept")
Parámetros anidados previos con dimensiones reasignadas al subconjunto activo.
import numpy as np import xarray as xr import pymc as pm from pymc_extras.prior import Prior from pymc_marketing.special_priors import MaskedPrior coords = {"country": ["Venezuela", "Colombia"]} mask = xr.DataArray( [True, False], dims=["country"], coords={"country": coords["country"]}, ) intercept = Prior( "Normal", mu=Prior("HalfNormal", sigma=1, dims=("country",)), sigma=10, dims=("country",), ) with pm.Model(coords=coords): masked = MaskedPrior(intercept, mask) intercept_full = masked.create_variable("intercept")
Todas las entradas enmascaradas (devuelve ceros deterministas con las dimensiones originales).
import numpy as np import xarray as xr import pymc as pm from pymc_extras.prior import Prior from pymc_marketing.special_priors import MaskedPrior coords = {"country": ["Venezuela", "Colombia"]} mask = xr.DataArray( [False, False], dims=["country"], coords={"country": coords["country"]}, ) prior = Prior("Normal", mu=0, sigma=10, dims=("country",)) with pm.Model(coords=coords): masked = MaskedPrior(prior, mask) zeros = masked.create_variable("intercept")
Aplicar sobre una función de saturación priors:
from pymc_marketing.mmm import LogisticSaturation from pymc_marketing.special_priors import MaskedPrior coords = { "country": ["Colombia", "Venezuela"], "channel": ["x1", "x2", "x3", "x4"], } mask_excluded_x4_colombia = xr.DataArray( [[True, False, True, False], [True, True, True, True]], dims=["country", "channel"], coords=coords, ) saturation = LogisticSaturation( priors={ "lam": MaskedPrior( Prior( "Gamma", mu=2, sigma=0.5, dims=("country", "channel"), ), mask=mask_excluded_x4_colombia, ), "beta": Prior( "Gamma", mu=3, sigma=0.5, dims=("country", "channel"), ), } ) prior = saturation.sample_prior(coords=coords, random_seed=10) curve = saturation.sample_curve(prior) saturation.plot_curve( curve, subplot_kwargs={ "ncols": 4, "figsize": (12, 18), }, )
Probabilidad enmascarada sobre un subconjunto arbitrario de entradas (ejemplo 2D sobre (fecha, país)):
import numpy as np import xarray as xr import pymc as pm from pymc_extras.prior import Prior from pymc_marketing.special_priors import MaskedPrior coords = { "date": np.array(["2021-01-01", "2021-01-02"], dtype="datetime64[D]"), "country": ["Venezuela", "Colombia"], } mask = xr.DataArray( [[True, False], [True, False]], dims=["date", "country"], coords={"date": coords["date"], "country": coords["country"]}, ) intercept = Prior("Normal", mu=0, sigma=10, dims=("country",)) likelihood = Prior( "Normal", sigma=Prior("HalfNormal", sigma=1), dims=("date", "country") ) observed = np.random.normal(0, 1, size=(2, 2)) with pm.Model(coords=coords): mu = intercept.create_variable("intercept") masked = MaskedPrior(likelihood, mask) y = masked.create_likelihood_variable("y", mu=mu, observed=observed)
Métodos
MaskedPrior.__init__(prior, máscara[, dim_activa])MaskedPrior.create_likelihood_variable(nombre, ...)Cree una variable observada sobre el subconjunto activo y expanda a dimensiones completas.
MaskedPrior.create_variable(name[, xdist])Cree una variable determinista con dimensiones completas utilizando el subconjunto activo.
MaskedPrior.from_dict(datos)Deserializar MaskedPrior del diccionario creado por
to_dict.Serializar MaskedPrior a un diccionario que se puede serializar en JSON.