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)
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.
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)
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
|
Crear modos de Fourier para un período dado. |
Clases
|
Clase base para transformaciones de estacionalidad de Fourier. |
|
Estacionalidad mensual de Fourier. |
|
Estacionalidad semanal de Fourier. |
|
Estacionalidad de Fourier anual. |