fourier#

Transformaciones de estacionalidad de Fourier.

Este módulo proporciona transformaciones de estacionalidad de Fourier para su uso en Modelos de Mezcla de Marketing. La estacionalidad de Fourier es un conjunto de funciones seno y coseno que se pueden utilizar para modelar patrones periódicos en los datos.

There are three types of Fourier seasonality transformations available:

  • Fourier Anual: Una estacionalidad anual con un período de 365.25 días.

  • Mensual de Fourier: Una estacionalidad mensual con un período de 365.25 / 12 días

  • Fourier Semanal: Una estacionalidad semanal con un período de 7 días

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

../../_images/pymc_marketing-mmm-fourier-1.png

Ejemplos#

Utilice la estacionalidad de Fourier anual para el modelo de mezcla de marketing personalizado.

import pandas as pd
import pymc as pm

from pymc_marketing.mmm import YearlyFourier

yearly = YearlyFourier(n_order=3)

dates = pd.date_range("2023-01-01", periods=52, freq="W-MON")

dayofyear = dates.dayofyear.to_numpy()

with pm.Model() as model:
    fourier_trend = yearly.apply(dayofyear)

Trazar la tendencia de estacionalidad de Fourier previa.

(Source code)

Cambia la distribución previa de la estacionalidad de Fourier.

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

prior = Prior("Normal", mu=0, sigma=0.10)
yearly = YearlyFourier(n_order=6, prior=prior)

Incluso hacerlo jerárquico…

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

# "fourier" is the default prefix!
prior = Prior(
    "Laplace",
    mu=Prior("Normal", dims="fourier"),
    b=Prior("HalfNormal", sigma=0.1, dims="fourier"),
    dims=("fourier", "hierarchy"),
)
yearly = YearlyFourier(n_order=3, prior=prior)

¡Toda la representación gráfica seguirá funcionando! Simplemente pasa cualquier coordenada.

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

../../_images/pymc_marketing-mmm-fourier-3.png

Predicciones fuera de muestra con estacionalidad de Fourier al cambiar el día del año utilizado en el modelo.

import pandas as pd
import pymc as pm

from pymc_marketing.mmm import YearlyFourier

periods = 52 * 3
dates = pd.date_range("2022-01-01", periods=periods, freq="W-MON")

training_dates = dates[: 52 * 2]
testing_dates = dates[52 * 2 :]

yearly = YearlyFourier(n_order=3)

coords = {
    "date": training_dates,
}
with pm.Model(coords=coords) as model:
    dayofyear = pm.Data(
        "dayofyear",
        training_dates.dayofyear.to_numpy(),
        dims="date",
    )

    trend = pm.Deterministic(
        "trend",
        yearly.apply(dayofyear),
        dims="date",
    )

    idata = pm.sample_prior_predictive().prior

with model:
    pm.set_data(
        {"dayofyear": testing_dates.dayofyear.to_numpy()},
        coords={"date": testing_dates},
    )

    out_of_sample = pm.sample_posterior_predictive(
        idata,
        var_names=["trend"],
    ).posterior_predictive["trend"]

Utilice la estacionalidad de Fourier anual y mensual juntas.

Por defecto, el prefijo de la estacionalidad de Fourier se establece en «fourier». Sin embargo, el prefijo se puede cambiar durante la inicialización para evitar conflictos en los nombres de las variables.

import pandas as pd
import pymc as pm

from pymc_marketing.mmm import (
    MonthlyFourier,
    YearlyFourier,
)

yearly = YearlyFourier(n_order=6, prefix="yearly")
monthly = MonthlyFourier(n_order=3, prefix="monthly")

dates = pd.date_range("2023-01-01", periods=52, freq="W-MON")
dayofyear = dates.dayofyear.to_numpy()

coords = {
    "date": dates,
}

with pm.Model(coords=coords) as model:
    yearly_trend = yearly.apply(dayofyear)
    monthly_trend = monthly.apply(dayofyear)

    trend = pm.Deterministic(
        "trend",
        yearly_trend + monthly_trend,
        dims="date",
    )

with model:
    prior_samples = pm.sample_prior_predictive().prior

Funciones

generate_fourier_modes(periods, n_order[, ...])

Crear modos de Fourier para un período dado.

Clases

FourierBase(**data)

Clase base para transformaciones de estacionalidad de Fourier.

MonthlyFourier(**data)

Estacionalidad mensual de Fourier.

WeeklyFourier(**data)

Estacionalidad semanal de Fourier.

YearlyFourier(**data)

Estacionalidad de Fourier anual.