TendenciaLineal#
- class pymc_marketing.mmm.linear_trend.LinearTrend(**data)[fuente]#
Clase LinearTrend.
Componente de tendencia lineal utilizando puntos de cambio. La tendencia se define como:
\[f(t) = k + \sum_{m=0}^{M-1} \delta_m I(t > s_m)\]donde:
\(t \ge 0\),
\(k\) es la intersección base,
\(\delta_m\) es el cambio en la tendencia en el punto de cambio \(m\),
\(I\) es la función indicadora,
\(s_m\) es el punto de cambio.
Los puntos de cambio se definen como:
\[s_m = \frac{m}{M-1} T, 0 \le m \le M-1\]donde \(M\) es el número de puntos de cambio (\(M>1\)) y \(T\) es el tiempo del último punto de datos observado.
Los priors para los parámetros de tendencia son:
\(k \sim \text{Normal}(0, 0.05)\)
\(\delta_m \sim \text{Laplace}(0, 0.25)\)
- Parámetros:
- antecedentes :
dict[str,Prior], opcionalpython:dict[python:str, Prior], opcional Diccionario con los priors para los parámetros de tendencia. El diccionario debe tener la clave “delta”. Si
include_interceptes True, también se requiere la clave “k”. Por defecto, None, o los priors predeterminados.- dims :
Dims, opcionalDimensiones, opcional Dimensiones de los parámetros, por defecto None o vacío.
- n_changepoints :
int, opcionalpython:int, opcional Número de puntos de cambio, por defecto 10.
- include_intercept : bool, opcionalbool, opcional
Incluir un intercepto en la tendencia, por defecto Falso
- antecedentes :
Referencias
- Adaptado del paquete MBrouns/timeseers:
Lo siento, pero no puedo acceder a enlaces externos. Sin embargo, si me proporcionas el texto que deseas traducir, estaré encantado de ayudarte.
Ejemplos
Tendencia lineal con 10 puntos de cambio:
from pymc_marketing.mmm import LinearTrend trend = LinearTrend(n_changepoints=10)
Utilice la tendencia en un modelo:
import pymc as pm import numpy as np import pandas as pd n_years = 3 n_dates = 52 * n_years first_date = "2020-01-01" dates = pd.date_range(first_date, periods=n_dates, freq="W-MON") dayofyear = dates.dayofyear.to_numpy() t = (dates - dates[0]).days.to_numpy() t = t / 365.25 coords = {"date": dates} with pm.Model(coords=coords) as model: intercept = pm.Normal("intercept", mu=0, sigma=1) mu = intercept + trend.apply(t) sigma = pm.Gamma("sigma", mu=0.1, sigma=0.025) pm.Normal("obs", mu=mu, sigma=sigma, dims="date")
Tendencia Lineal Jerárquica a través de un previo jerárquico:
from pymc_extras.prior import Prior hierarchical_delta = Prior( "Laplace", mu=Prior("Normal", dims="changepoint"), b=Prior("HalfNormal", dims="changepoint"), dims=("changepoint", "geo"), ) priors = dict(delta=hierarchical_delta) hierarchical_trend = LinearTrend( priors=priors, n_changepoints=10, dims="geo", )
Muestre la tendencia jerárquica:
seed = sum(map(ord, "Hierarchical LinearTrend")) rng = np.random.default_rng(seed) coords = {"geo": ["A", "B"]} prior = hierarchical_trend.sample_prior( coords=coords, random_seed=rng, ) curve = hierarchical_trend.sample_curve(prior)
Trazar la curva HDI y muestras:
fig, axes = hierarchical_trend.plot_curve( curve, n_samples=3, random_seed=rng, ) fig.suptitle("Hierarchical Linear Trend") axes[0].set(ylabel="Trend", xlabel="Time") axes[1].set(xlabel="Time")
Métodos
LinearTrend.__init__(**data)Cree un nuevo modelo analizando y validando los datos de entrada de los argumentos de palabras clave.
Cree la tendencia lineal para los valores x dados.
LinearTrend.construct([_fields_set])LinearTrend.copy(*[, incluir, excluir, ...])Devuelve una copia del modelo.
LinearTrend.dict(*[, incluir, excluir, ...])LinearTrend.from_dict(data)Reconstruct from a dict.
LinearTrend.from_orm(obj)LinearTrend.json(*[, incluir, excluir, ...])LinearTrend.model_construct([_fields_set])Crea una nueva instancia de la clase
Modelcon datos validados.LinearTrend.model_copy(*[, actualizar, profundo])!!! abstract "Documentación de Uso"
LinearTrend.model_dump(*[, modo, incluir, ...])!!! abstract "Documentación de Uso"
LinearTrend.model_dump_json(*[, indent, ...])!!! abstract "Documentación de Uso"
LinearTrend.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.
LinearTrend.model_post_init(contexto, /)Sobrescriba este método para realizar una inicialización adicional después de
__init__ymodel_construct.LinearTrend.model_rebuild(*[, forzar, ...])Intente reconstruir el esquema de pydantic-core para el modelo.
LinearTrend.model_validate(obj, *[, estricto, ...])Valide una instancia de modelo pydantic.
LinearTrend.model_validate_json(json_data, *)!!! abstract "Documentación de Uso"
LinearTrend.model_validate_strings(obj, *[, ...])Valide el objeto dado con datos de cadena contra el modelo de Pydantic.
LinearTrend.parse_file(ruta, *[, ...])LinearTrend.parse_raw(b, *[, tipo_de_contenido, ...])LinearTrend.plot_curve(curva[, n_muestras, ...])Trace las muestras de la curva de la tendencia.
LinearTrend.sample_curve(parameters[, max_value])Muestree la curva según los parámetros dados.
LinearTrend.sample_prior([coords])Muestre el previo para los parámetros utilizados en la tendencia.
LinearTrend.schema([por_alias, ref_template])LinearTrend.schema_json(*[, by_alias, ...])LinearTrend.to_dict([_orig])LinearTrend.update_forward_refs(**localns)LinearTrend.validate(valor)Atributos
default_priorsPriors predeterminados para los parámetros de tendencia.
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.
priorsdimsn_changepointsinclude_intercept