HSGPPeriódico#

class pymc_marketing.mmm.hsgp.HSGPPeriodic(**data)[fuente]#

Componente HSGP para datos periódicos.

Ejemplos

HSGPPeriódico con configuración predeterminada:

import numpy as np
import pandas as pd

import matplotlib.pyplot as plt

from pymc_marketing.mmm import HSGPPeriodic
from pymc_extras.prior import Prior

seed = sum(map(ord, "Periodic GP"))
rng = np.random.default_rng(seed)

n = 52 * 3
dates = pd.date_range("2023-01-01", periods=n, freq="W-MON")
X = np.arange(n)
coords = {
    "time": dates,
}
scale = Prior("HalfNormal", sigma=1)
ls = Prior("InverseGamma", alpha=2, beta=1)

hsgp = HSGPPeriodic(
    scale=scale,
    m=20,
    cov_func="periodic",
    ls=ls,
    period=52,
    dims="time",
)
hsgp.register_data(X)

prior = hsgp.sample_prior(coords=coords, random_seed=rng)
curve = prior["f"]
fig, axes = hsgp.plot_curve(
    curve,
    n_samples=3,
    random_seed=rng,
)
ax = axes[0]
ax.set(xlabel="Date", ylabel="f", title="HSGP with period of 52 weeks")
plt.show()

(Source code, png, hires.png, pdf)

../../_images/pymc_marketing-mmm-hsgp-HSGPPeriodic-1.png

HSGPPeriódico con función de enlace a través del argumento transform

Nota

El parámetro transform debe estar registrado o ser de los espacios de nombres pytensor.tensor o pymc.math. Consulte la pymc_extras.prior.register_tensor_transform()

import numpy as np
import pandas as pd

import matplotlib.pyplot as plt

from pymc_marketing.mmm import HSGPPeriodic
from pymc_extras.prior import Prior

seed = sum(map(ord, "Periodic GP"))
rng = np.random.default_rng(seed)

n = 52 * 3
dates = pd.date_range("2023-01-01", periods=n, freq="W-MON")
X = np.arange(n)
coords = {
    "time": dates,
}
scale = Prior("Gamma", mu=0.25, sigma=0.1)
ls = Prior("InverseGamma", alpha=2, beta=1)

hsgp = HSGPPeriodic(
    scale=scale,
    m=20,
    cov_func="periodic",
    ls=ls,
    period=52,
    dims="time",
    transform="exp",
)
hsgp.register_data(X)

prior = hsgp.sample_prior(coords=coords, random_seed=rng)
curve = prior["f"]
fig, axes = hsgp.plot_curve(
    curve,
    n_samples=3,
    random_seed=rng,
)
ax = axes[0]
ax.set(xlabel="Date", ylabel="f", title="HSGP with period of 52 weeks")
plt.show()

(Source code, png, hires.png, pdf)

../../_images/pymc_marketing-mmm-hsgp-HSGPPeriodic-2.png

Base menospreciada para HSGPPeriodic

import numpy as np
import pandas as pd
import xarray as xr

import matplotlib.pyplot as plt

from pymc_marketing.mmm import HSGPPeriodic
from pymc_marketing.plot import plot_curve

seed = sum(map(ord, "Periodic GP"))
rng = np.random.default_rng(seed)

scale = 0.25
ls = 1
kwargs = dict(ls=ls, scale=scale, period=52, cov_func="periodic", dims="time", m=20)

n = 52 * 3
dates = pd.date_range("2023-01-01", periods=n, freq="W-MON")
X = np.arange(n)
coords = {"time": dates}

hsgp = HSGPPeriodic(demeaned_basis=False, **kwargs).register_data(X)
hsgp_demeaned = HSGPPeriodic(demeaned_basis=True, **kwargs).register_data(X)

def sample_curve(hsgp):
    return hsgp.sample_prior(coords=coords, random_seed=rng)["f"]

non_demeaned = sample_curve(hsgp).rename("False")
demeaned = sample_curve(hsgp_demeaned).rename("True")

combined = xr.merge([non_demeaned, demeaned]).to_array("demeaned")
_, axes = combined.pipe(plot_curve, "time", same_axes=True)
axes[0].set(title="Demeaned the intercepty first basis")
plt.show()

(Source code, png, hires.png, pdf)

../../_images/pymc_marketing-mmm-hsgp-HSGPPeriodic-3.png

HSGPPeriódico de dimensiones superiores con datos periódicos

import numpy as np
import pandas as pd

import pymc as pm

import matplotlib.pyplot as plt

from pymc_marketing.mmm import HSGPPeriodic
from pymc_extras.prior import Prior

seed = sum(map(ord, "Higher dimensional HSGP with periodic data"))
rng = np.random.default_rng(seed)

n = 52 * 3
dates = pd.date_range("2023-01-01", periods=n, freq="W-MON")
X = np.arange(n)

scale = Prior("HalfNormal", sigma=1)
ls = Prior("InverseGamma", alpha=2, beta=1)

hsgp = HSGPPeriodic(
    X=X,
    scale=scale,
    ls=ls,
    m=20,
    cov_func="periodic",
    period=52,
    dims=("time", "channel", "product"),
)

coords = {
    "time": dates,
    "channel": ["A", "B"],
    "product": ["X", "Y", "Z"],
}
prior = hsgp.sample_prior(coords=coords, random_seed=rng)
curve = prior["f"]
fig, axes = hsgp.plot_curve(
    curve,
    n_samples=3,
    random_seed=rng,
    subplot_kwargs={"figsize": (12, 8), "ncols": 3},
)
plt.show()

(Source code, png, hires.png, pdf)

../../_images/pymc_marketing-mmm-hsgp-HSGPPeriodic-4.png

Métodos

HSGPPeriodic.__init__(**data)

Cree un nuevo modelo analizando y validando los datos de entrada de los argumentos de palabra clave.

HSGPPeriodic.construct([_fields_set])

HSGPPeriodic.copy(*[, incluir, excluir, ...])

Devuelve una copia del modelo.

HSGPPeriodic.create_variable(name[, xdist])

Crear variable HSGP.

HSGPPeriodic.deterministics_to_replace%(name)s

Nombre de las variables determinísticas que se reemplazan con pm.Flat para fuera de muestra.

HSGPPeriodic.dict(*[, incluir, excluir, ...])

HSGPPeriodic.from_dict(datos)

Cree un objeto a partir de un diccionario.

HSGPPeriodic.from_orm(obj)

HSGPPeriodic.json(*[, incluir, excluir, ...])

HSGPPeriodic.model_construct([_fields_set])

Crea una nueva instancia de la clase Model con datos validados.

HSGPPeriodic.model_copy(*[, actualizar, profundo])

!!! abstract "Documentación de Uso"

HSGPPeriodic.model_dump(*[, modo, incluir, ...])

!!! abstract "Documentación de Uso"

HSGPPeriodic.model_dump_json(*[, indent, ...])

!!! abstract "Documentación de Uso"

HSGPPeriodic.model_json_schema([por_alias, ...])

Genera un esquema JSON para una clase de modelo.

HSGPPeriodic.model_parametrized_name(params)

Calcule el nombre de la clase para parametrizaciones de clases genéricas.

HSGPPeriodic.model_post_init(context, /)

Sobrescriba este método para realizar una inicialización adicional después de __init__ y model_construct.

HSGPPeriodic.model_rebuild(*[, forzar, ...])

Intente reconstruir el esquema de pydantic-core para el modelo.

HSGPPeriodic.model_validate(obj, *[, ...])

Valide una instancia de modelo pydantic.

HSGPPeriodic.model_validate_json(json_data, *)

!!! abstract "Documentación de Uso"

HSGPPeriodic.model_validate_strings(obj, *)

Valide el objeto dado con datos de cadena contra el modelo de Pydantic.

HSGPPeriodic.parse_file(ruta, *[, ...])

HSGPPeriodic.parse_obj(obj)

HSGPPeriodic.parse_raw(b, *[, tipo_de_contenido, ...])

HSGPPeriodic.plot_curve(curva[, n_muestras, ...]

Dibuje la curva.

HSGPPeriodic.register_data(X)

Registre los datos que se utilizarán en el modelo.

HSGPPeriodic.sample_prior([coords])

Muestra de la distribución previa.

HSGPPeriodic.schema([por_alias, ref_plantilla])

HSGPPeriodic.schema_json(*[, por_alias, ...])

HSGPPeriodic.to_dict([_orig])

Convierte el objeto a un diccionario.

HSGPPeriodic.update_forward_refs(**localns)

HSGPPeriodic.validate(valor)

Atributos

model_computed_fields

model_config

Configuración para el modelo, debe ser un diccionario que cumpla con [ConfigDict][pydantic.config.ConfigDict].

model_extra

Obtener campos adicionales establecidos durante la validación.

model_fields

model_fields_set

Devuelve el conjunto de campos que han sido establecidos explícitamente en esta instancia del modelo.

ls

scale

cov_func

period

m

X

X_mid

dims

transform

demeaned_basis