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_intercept es 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

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")
Tendencia lineal jerárquica previa

Métodos

LinearTrend.__init__(**data)

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

LinearTrend.apply(t)

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_orm(obj)

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

LinearTrend.model_construct([_fields_set])

Crea una nueva instancia de la clase Model con 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.

LinearTrend.model_parametrized_name(params)

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__ y model_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_obj(obj)

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.update_forward_refs(**localns)

LinearTrend.validate(valor)

Atributos

default_priors

Priors predeterminados para los parámetros de tendencia.

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.

priors

dims

n_changepoints

include_intercept