SoftPlusHSGP#
- class pymc_marketing.mmm.hsgp.SoftPlusHSGP(**data)[fuente]#
HSGP con transformación softplus.
El uso de la transformación softplus mapea el GP latente a valores positivos. Luego, normalizamos multiplicativamente por la media temporal para que el multiplicador resultante tenga una media de 1 en la primera dimensión, manteniéndose estrictamente positivo.
Ejemplos
Literatura recomendada para la configuración de SoftPlusHSGP:
import numpy as np import pandas as pd import matplotlib.pyplot as plt from pymc_marketing.mmm import SoftPlusHSGP seed = sum(map(ord, "Out of the box GP")) rng = np.random.default_rng(seed) n = 52 X = np.arange(n) hsgp = SoftPlusHSGP.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)
Nuevas predicciones de datos con SoftPlusHSGP
Nota
Al realizar las predicciones, el modelo necesita ser transformado para mantener los datos centrados alrededor de 1. Hay una función auxiliar
pymc_marketing.model_graph.deterministics_to_flat()que se puede utilizar para transformar el modelo al realizar predicciones fuera de muestra.Esta transformación se maneja automáticamente en los MMMs proporcionados.
import numpy as np import pandas as pd import pymc as pm import matplotlib.pyplot as plt from pymc_marketing.mmm import SoftPlusHSGP from pymc_marketing.model_graph import deterministics_to_flat from pymc_extras.prior import Prior seed = sum(map(ord, "New data predictions with SoftPlusHSGP")) rng = np.random.default_rng(seed) eta = Prior("Exponential", lam=1) ls = Prior("InverseGamma", alpha=2, beta=1) hsgp = SoftPlusHSGP( eta=eta, ls=ls, m=20, L=150, dims=("time", "channel"), ) n = 52 X = np.arange(n) channels = ["A", "B", "C"] dates = pd.date_range("2022-01-01", periods=n, freq="W-MON") coords = {"time": dates, "channel": channels} 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 - 1 , n + n_new) last_date = dates[-1] new_dates = pd.date_range(last_date, periods=n_new + 1, freq="W-MON") with deterministics_to_flat(model, hsgp.deterministics_to_replace("f")): 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, rng.choice(prior.sizes["draw"]) colors = [f"C{i}" for i in range(len(channels))] 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()
Métodos
SoftPlusHSGP.__init__(**data)Cree un nuevo modelo analizando y validando los datos de entrada de los argumentos de palabra clave.
SoftPlusHSGP.construct([_fields_set])SoftPlusHSGP.copy(*[, incluir, excluir, ...])Devuelve una copia del modelo.
SoftPlusHSGP.create_variable(name[, xdist])Cree la variable.
Nombre de las variables determinísticas que se reemplazan con pm.Flat para fuera de muestra.
SoftPlusHSGP.dict(*[, incluir, excluir, ...])SoftPlusHSGP.from_dict(datos)Cree un objeto a partir de un diccionario.
SoftPlusHSGP.json(*[, incluir, excluir, ...])SoftPlusHSGP.model_construct([_fields_set])Crea una nueva instancia de la clase
Modelcon datos validados.SoftPlusHSGP.model_copy(*[, actualizar, profundo])!!! abstract "Documentación de Uso"
SoftPlusHSGP.model_dump(*[, modo, incluir, ...])!!! abstract "Documentación de Uso"
SoftPlusHSGP.model_dump_json(*[, indent, ...])!!! abstract "Documentación de Uso"
SoftPlusHSGP.model_json_schema([por_alias, ...])Genera un esquema JSON para una clase de modelo.
Calcule el nombre de la clase para parametrizaciones de clases genéricas.
SoftPlusHSGP.model_post_init(contexto, /)Sobrescriba este método para realizar una inicialización adicional después de
__init__ymodel_construct.SoftPlusHSGP.model_rebuild(*[, forzar, ...])Intente reconstruir el esquema de pydantic-core para el modelo.
SoftPlusHSGP.model_validate(obj, *[, ...])Valide una instancia del modelo pydantic.
SoftPlusHSGP.model_validate_json(json_data, *)!!! abstract "Documentación de Uso"
Valide el objeto dado con datos de cadena contra el modelo de Pydantic.
SoftPlusHSGP.parameterize_from_data(X, dims)Cree un HSGP informado por los datos con recomendaciones basadas en la literatura.
SoftPlusHSGP.parse_file(ruta, *[, ...])SoftPlusHSGP.parse_raw(b, *[, tipo_de_contenido, ...])SoftPlusHSGP.plot_curve(curve[, n_samples, ...])Dibuje la curva.
Registre los datos que se utilizarán en el modelo.
SoftPlusHSGP.sample_prior([coords])Muestra de la distribución previa.
SoftPlusHSGP.schema([por_alias, ref_template])SoftPlusHSGP.schema_json(*[, por_alias, ...])Convierte el objeto a un diccionario.
SoftPlusHSGP.update_forward_refs(**localns)SoftPlusHSGP.validate(valor)Atributos
model_computed_fieldsmodel_configConfiguración para el modelo, debe ser un diccionario que se ajuste a [
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