HSGP#
- class pymc_marketing.mmm.hsgp.HSGP(**data)[fuente]#
Componente HSGP.
Ejemplos
Configuración recomendada de HSGP según la literatura:
import numpy as np import pandas as pd import matplotlib.pyplot as plt from pymc_marketing.mmm import HSGP seed = sum(map(ord, "Out of the box GP")) rng = np.random.default_rng(seed) n = 52 X = np.arange(n) hsgp = HSGP.parameterize_from_data( X=X, dims="time", ) dates = pd.date_range("2022-01-01", periods=n, freq="W-MON") coords = { "time": dates, } prior = hsgp.sample_prior(coords=coords, random_seed=rng) curve = prior["f"] hsgp.plot_curve(curve, random_seed=rng) plt.show()
(
Source code,png,hires.png,pdf)
Usando una base desmedida para eliminar el efecto de «intercepto» de la primera base:
import numpy as np import pandas as pd import xarray as xr import matplotlib.pyplot as plt from pymc_marketing.mmm import HSGP from pymc_marketing.plot import plot_curve seed = sum(map(ord, "Out of the box GP")) rng = np.random.default_rng(seed) n = 52 X = np.arange(n) kwargs = dict(X=X, ls=25, eta=1, dims="time", m=200, L=150, drop_first=False) hsgp = HSGP(demeaned_basis=False, **kwargs) hsgp_demeaned = HSGP(demeaned_basis=True, **kwargs) dates = pd.date_range("2022-01-01", periods=n, freq="W-MON") coords = {"time": dates} 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)
HSGP con diferente función de covarianza
import numpy as np import pandas as pd import matplotlib.pyplot as plt from pymc_marketing.mmm import HSGP seed = sum(map(ord, "Change of covariance function")) rng = np.random.default_rng(seed) n = 52 X = np.arange(n) hsgp = HSGP.parameterize_from_data( X=X, cov_func="matern32", dims="time", ) dates = pd.date_range("2022-01-01", periods=n, freq="W-MON") coords = { "time": dates, } prior = hsgp.sample_prior(coords=coords, random_seed=rng) curve = prior["f"] hsgp.plot_curve(curve, random_seed=rng) plt.show()
(
Source code,png,hires.png,pdf)
HSGP con una función de enlace diferente a través del argumento
transformNota
El parámetro
transformdebe estar registrado o provenir de los espacios de nombrespytensor.tensoropymc.math. Consulte lapymc_extras.prior.register_tensor_transform()import numpy as np import pandas as pd import matplotlib.pyplot as plt from pymc_marketing.mmm import HSGP seed = sum(map(ord, "Change of covariance function")) rng = np.random.default_rng(seed) n = 52 X = np.arange(n) hsgp = HSGP.parameterize_from_data( X=X, dims="time", transform="sigmoid", ) dates = pd.date_range("2022-01-01", periods=n, freq="W-MON") coords = { "time": dates, } prior = hsgp.sample_prior(coords=coords, random_seed=rng) curve = prior["f"] hsgp.plot_curve(curve, random_seed=rng) plt.show()
(
Source code,png,hires.png,pdf)
Nuevas predicciones de datos con HSGP
import numpy as np import pandas as pd import pymc as pm import matplotlib.pyplot as plt from pymc_marketing.mmm import HSGP from pymc_extras.prior import Prior seed = sum(map(ord, "New data predictions")) rng = np.random.default_rng(seed) eta = Prior("Exponential", lam=1) ls = Prior("InverseGamma", alpha=2, beta=1) hsgp = HSGP( eta=eta, ls=ls, m=20, L=150, dims=("time", "channel"), ) n = 52 X = np.arange(n) dates = pd.date_range("2022-01-01", periods=n, freq="W-MON") coords = {"time": dates, "channel": ["A", "B"]} with pm.Model(coords=coords) as model: data = pm.Data("data", X, dims="time") hsgp.register_data(data).create_variable("f") idata = pm.sample_prior_predictive(random_seed=rng) prior = idata.prior n_new = 10 X_new = np.arange(n, n + n_new) new_dates = pd.date_range("2023-01-01", periods=n_new, freq="W-MON") with model: pm.set_data( new_data={ "data": X_new, }, coords={"time": new_dates}, ) post = pm.sample_posterior_predictive( prior, var_names=["f"], random_seed=rng, ) chain, draw = 0, 50 colors = ["C0", "C1"] def get_sample(curve): return curve.loc[chain, draw].to_series().unstack() ax = prior["f"].pipe(get_sample).plot(color=colors) post.posterior_predictive["f"].pipe(get_sample).plot( ax=ax, color=colors, linestyle="--", legend=False ) ax.set(xlabel="time", ylabel="f", title="New data predictions") plt.show()
HSGP de dimensiones superiores
import numpy as np import pymc as pm import matplotlib.pyplot as plt from pymc_marketing.mmm import HSGP seed = sum(map(ord, "Higher dimensional HSGP")) rng = np.random.default_rng(seed) n = 52 X = np.arange(n) hsgp = HSGP.parameterize_from_data( X=X, dims=("time", "channel", "product"), ) coords = { "time": range(n), "channel": ["A", "B"], "product": ["X", "Y", "Z"], } prior = hsgp.sample_prior(coords=coords, random_seed=rng) curve = prior["f"] fig, _ = hsgp.plot_curve( curve, random_seed=rng, subplot_kwargs={"figsize": (12, 8), "ncols": 3}, ) fig.suptitle("Higher dimensional HSGP prior") plt.show()
(
Source code,png,hires.png,pdf)
Métodos
HSGP.__init__(**data)Cree un nuevo modelo analizando y validando los datos de entrada de los argumentos de palabras clave.
HSGP.construct([_fields_set])HSGP.copy(*[, incluir, excluir, actualizar, profundo])Devuelve una copia del modelo.
HSGP.create_variable(name[, xdist])Cree una variable a partir de la configuración de HSGP.
HSGP.deterministics_to_replace%(name)sNombre de las variables determinísticas que se reemplazan con pm.Flat para fuera de muestra.
HSGP.dict(*[, incluir, excluir, por_alias, ...])HSGP.from_dict(datos)Cree un objeto a partir de un diccionario.
HSGP.from_orm(obj)HSGP.json(*[, incluir, excluir, por_alias, ...])HSGP.model_construct([_fields_set])Crea una nueva instancia de la clase
Modelcon datos validados.HSGP.model_copy(*[, actualizar, profundo])!!! abstract "Documentación de Uso"
HSGP.model_dump(*[, modo, incluir, excluir, ...])!!! abstract "Documentación de Uso"
HSGP.model_dump_json(*[, indent, ...])!!! abstract "Documentación de Uso"
HSGP.model_json_schema([por_alias, ...])Genera un esquema JSON para una clase de modelo.
HSGP.model_parametrized_name(params)Calcule el nombre de la clase para parametrizaciones de clases genéricas.
HSGP.model_post_init(contexto, /)Sobrescriba este método para realizar una inicialización adicional después de
__init__ymodel_construct.HSGP.model_rebuild(*[, forzar, raise_errors, ...])Intente reconstruir el esquema de pydantic-core para el modelo.
HSGP.model_validate(obj, *[, estricto, extra, ...])Valide una instancia de modelo pydantic.
HSGP.model_validate_json(json_data, *[, ...])!!! abstract "Documentación de Uso"
HSGP.model_validate_strings(obj, *[, ...])Valide el objeto dado con datos de cadena contra el modelo de Pydantic.
HSGP.parameterize_from_data(X, dims[, ...])Cree un HSGP informado por los datos con recomendaciones basadas en la literatura.
HSGP.parse_file(ruta, *[, tipo_de_contenido, ...])HSGP.parse_obj(obj)HSGP.parse_raw(b, *[, tipo_de_contenido, ...])HSGP.plot_curve(curve[, n_samples, ...])Dibuje la curva.
Registre los datos que se utilizarán en el modelo.
HSGP.sample_prior([coords])Muestra de la distribución previa.
HSGP.schema([por_alias, ref_template])HSGP.schema_json(*[, por_alias, ref_template])Convierte el objeto a un diccionario.
HSGP.update_forward_refs(**localns)HSGP.validate(valor)Atributos
model_computed_fieldsmodel_configConfiguración para el modelo, debe ser un diccionario que cumpla con [
ConfigDict][pydantic.config.ConfigDict].model_extraObtener campos adicionales establecidos durante la validación.
model_fieldsmodel_fields_setDevuelve el conjunto de campos que han sido establecidos explícitamente en esta instancia del modelo.
lsetaLcentereddrop_firstcov_funcmXX_middimstransformdemeaned_basis