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 por mask y 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.dims marcando 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.

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.

MaskedPrior.to_dict()

Serializar MaskedPrior a un diccionario que se puede serializar en JSON.