Descomposición estacional en Python
Separar una serie en tendencia, estación y lo que queda.
import numpy as np
import pandas as pd
from statsmodels.tsa.seasonal import STL, seasonal_decompose
index = pd.date_range("2026-01-01", periods=180, freq="D")
rng = np.random.default_rng(13)
estacion = 8 * np.sin(2 * np.pi * np.arange(180) / 30)
serie = pd.Series(90 + np.arange(180) * 0.05 + estacion
+ rng.normal(0, 1.5, 180), index=index)
clasico = seasonal_decompose(serie, period=30)
print(round(float(clasico.trend.dropna().iloc[0]), 2))
print(round(float(clasico.seasonal.abs().max()), 2))
stl = STL(serie, period=30).fit()
print(round(float(stl.resid.std()), 3), round(float(stl.trend.iloc[-1]), 2))
Cómo funciona
seasonal_decomposenecesita el período.STLes la versión más robusta, basada en loess.- El residuo es lo que a un modelo aún le falta explicar.
Palabras clave y builtins usados aquí
asfloatprintround
El intento, en números
- Líneas
- 16
- Caracteres a escribir
- 610
- Tokens
- 210
- Ritmo de tres estrellas
- 115 tpm
Al ritmo de tres estrellas de 115 tokens por minuto, este intento toma unos 110 segundos.
Paso 3 de 6 en Series de tiempo; paso 15 de 19 en Estadística con statsmodels.