Tiempedia: Modelos SARIMA y Órdenes Estacionales
Guía del artículo
Nuestro viaje a través del emocionante mundo de las series de tiempo ha sido una odisea de aprendizaje continuo. Desde los conceptos iniciales hasta los modelos de suavizamiento exponencial, desde los modelos autoregresivos (AR) hasta las combinaciones de AR y media móvil (ARMA), y desde los modelos ARIMA hasta la selección de órdenes, cada parte previa nos ha llevado un paso más cerca de la maestría en el análisis y predicción de series temporales.
En esta octava entrega, nos adentraremos en un terreno crucial: los "Modelos SARIMA" (Seasonal ARIMA). Estos modelos son especialmente efectivos para comprender y predecir series de tiempo con componentes estacionales. Además, abordaremos otro desafío importante en el análisis de series temporales: la selección de órdenes estacionales (P, D, Q) y órdenes no estacionales (p, d, q) para optimizar nuestros modelos.
Antes de sumergirnos en los Modelos SARIMA y las complejidades de la selección de órdenes, recordemos todo lo que hemos aprendido en "Tiempedia". Cada parte previa ha contribuido a construir una base sólida para comprender mejor este tema crucial.
En esta parte, exploraremos la formulación de los Modelos SARIMA, cómo se ajustan a los datos y cómo seleccionar las órdenes adecuadas para capturar las estacionalidades en nuestras series temporales. Al dominar estos conceptos, estaremos mejor preparados para enfrentar la variabilidad estacional en una amplia gama de datos.
Sin más demora, adentrémonos en el mundo de los Modelos SARIMA y las órdenes estacionales, y descubramos cómo pueden mejorar nuestra capacidad para comprender y predecir eventos temporales.
1. Modelos SARMA
El modelo SARMA, que significa "Seasonal Autoregressive Moving Average," es una extensión del modelo ARMA (Autoregressive Moving Average) que incluye componentes tanto estacionales como no estacionales para modelar series de tiempo con patrones de estacionalidad.
Aquí está la descripción y formulación del modelo SARMA:
Componente Autoregresivo Estacional (SAR):
La fórmula general del componente SAR es: Xt=ϕ1Xt−p+ϕ2Xt−2p+…+ϕpXt−p∗+at
Donde:
Componente Media Móvil Estacional (SMA):
La fórmula general del componente SMA es: Xt=at−θ1at−p−θ2at−2p−…−θqat−q∗
Donde:
Componente de Estacionalidad:
La fórmula general del componente de estacionalidad es: St=St−m
Donde:
Componente No Estacional (ARMA):
La fórmula general del componente ARMA no estacional es: Xt=ϕ1Xt−1+ϕ2Xt−2+…+ϕpXt−p+at−θ1at−1−θ2at−2−…−θqat−q
Donde:
El modelo SARMA se utiliza para modelar series de tiempo que exhiben patrones de estacionalidad tanto a corto plazo como a largo plazo. La elección de los órdenes p, q, P y Q (para los componentes no estacionales y estacionales) se basa en el análisis de autocorrelación y autocorrelación parcial de los datos, así como en la intuición y el conocimiento del dominio.
Selección de órdenes (p, d, q) y (P, D, Q)
La selección de los órdenes (p, d, q) y (P, D, Q) en un modelo SARIMA (Seasonal Autoregressive Integrated Moving Average) es uno de los pasos más importantes en el análisis de series de tiempo. Estos órdenes determinan cómo se modelarán los componentes estacionales y no estacionales de la serie de tiempo. Aquí hay un proceso general para seleccionar estos órdenes:
Paso 1: Identificación de la Diferenciación (d y D)
Primero, debes identificar los órdenes de diferenciación necesarios para hacer que la serie de tiempo sea estacionaria, tanto a nivel no estacional (d) como estacional (D). Esto implica aplicar diferenciaciones sucesivas hasta que la serie sea estacionaria. Utiliza pruebas estadísticas como la Prueba de Dickey-Fuller Aumentada (ADF) para evaluar la estacionariedad. Deja de diferenciar cuando la serie se vuelve estacionaria (p-value < 0.05) o cuando los gráficos de ACF y PACF de los datos diferenciados sugieran que ya no hay tendencias evidentes.
Recomendado por LinkedIn
Paso 2: Identificación del Orden AR y MA (p, q, P, Q)
Una vez que la serie es estacionaria (o después de aplicar las diferenciaciones necesarias), observa los gráficos de autocorrelación (ACF) y autocorrelación parcial (PACF) tanto para los rezagos no estacionales como estacionales. Estos gráficos te ayudarán a identificar los órdenes AR (p) y MA (q) para los componentes no estacionales, así como los órdenes AR estacionales (P) y MA estacionales (Q) para los componentes estacionales.
Componente No Estacional (p, q):
Componente Estacional (P, Q):
Paso 3: Ajuste y Evaluación de Modelos
Ajusta varios modelos SARIMA utilizando diferentes combinaciones de órdenes (p, d, q) y (P, D, Q) que hayas identificado en el Paso 2. Evalúa la calidad de estos modelos utilizando métricas de evaluación como el Error Cuadrático Medio (RMSE), el Error Absoluto Medio (MAE) y el Error Absoluto Porcentual Medio (MAPE) en un conjunto de datos de prueba. También puedes considerar utilizar criterios de información como el AIC (Criterio de Información de Akaike) o el BIC (Criterio de Información Bayesiano) para seleccionar el mejor modelo.
Paso 4: Selección del Mejor Modelo
Selecciona el modelo SARIMA que tenga el mejor rendimiento en función de las métricas de evaluación y otros criterios relevantes. Este será tu modelo SARIMA final.
Es importante destacar que la selección de órdenes (p, d, q) y (P, D, Q) puede requerir experimentación y ajustes iterativos. También es útil considerar el conocimiento del dominio y la intuición sobre el comportamiento de los datos al seleccionar los órdenes. Además, las bibliotecas de software como statsmodels en Python suelen ofrecer funciones que realizan la selección automática de órdenes basándose en criterios como el AIC o el BIC. Estas funciones pueden ser útiles como punto de partida en la selección de órdenes adecuados.
2. Estimación y pronóstico
Una vez que hayas seleccionado los órdenes adecuados (p, d, q) y (P, D, Q) para tu modelo SARIMA y hayas ajustado el modelo a tus datos, puedes proceder a realizar estimaciones y pronósticos. Aquí tienes los pasos para estimar y pronosticar con un modelo SARIMA en Python utilizando la biblioteca statsmodels:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from statsmodels.tsa.statespace.sarimax import SARIMAX
# Cargar tus datos de serie de tiempo (reemplaza esto con tus datos)
# ts es tu serie de tiempo, asegúrate de tener tus datos y fechas correctamente.
# Aquí asumimos que ya tienes un DataFrame llamado 'ts'.
# ts.index debe ser de tipo datetime.
# Por ejemplo, puedes cargar tus datos desde un archivo CSV: ts = pd.read_csv('datos.csv', parse_dates=['Fecha'], index_col='Fecha')
# Ajustar el modelo SARIMA con los órdenes (p, d, q) y (P, D, Q) seleccionados
order = (p, d, q) # Órdenes no estacionales
seasonal_order = (P, D, Q, m) # Órdenes estacionales (m es el número de períodos por temporada)
model = SARIMAX(ts, order=order, seasonal_order=seasonal_order)
results = model.fit()
# Estimaciones (ajustar el modelo a los datos existentes)
estimated = results.fittedvalues
# Pronósticos (pronosticar valores futuros)
n_forecast = 12 # Número de períodos a pronosticar
forecast = results.get_forecast(steps=n_forecast)
# Obtener intervalos de confianza para los pronósticos
forecast_ci = forecast.conf_int()
# Visualizar los datos originales, las estimaciones y los pronósticos
plt.figure(figsize=(12, 6))
plt.plot(ts, label='Datos Originales')
plt.plot(estimated, label='Estimaciones', color='orange')
plt.plot(forecast.predicted_mean, label='Pronósticos', color='green')
plt.fill_between(forecast_ci.index, forecast_ci.iloc[:, 0], forecast_ci.iloc[:, 1], color='pink', alpha=0.3, label='Intervalo de Confianza')
plt.title('Modelo SARIMA: Estimaciones y Pronósticos')
plt.xlabel('Fecha')
plt.ylabel('Valor')
plt.legend()
plt.show()
Asegúrate de reemplazar (p, d, q), (P, D, Q, m), y ts con los valores apropiados para tu modelo SARIMA y tus datos de serie de tiempo. Este código ajusta el modelo SARIMA a tus datos, realiza estimaciones y pronósticos, y muestra un gráfico que incluye los datos originales, las estimaciones y los pronósticos, junto con un intervalo de confianza.
Recuerda que la calidad de los pronósticos depende en gran medida de la elección adecuada de los órdenes (p, d, q) y (P, D, Q), así como de la calidad de tus datos y de la validez de las suposiciones del modelo SARIMA en relación con tu serie de tiempo específica.
3. Ejemplo Python
Aquí tienes un ejemplo en Python de cómo ajustar un modelo SARIMA (Seasonal Autoregressive Integrated Moving Average) a una serie de tiempo y realizar pronósticos utilizando la biblioteca statsmodels. En este ejemplo, utilizaremos una serie de tiempo sintética para fines ilustrativos:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from statsmodels.tsa.statespace.sarimax import SARIMAX
# Crear una serie de tiempo sintética (reemplaza esto con tus datos)
np.random.seed(42)
date_rng = pd.date_range(start='2023-01-01', end='2023-12-31', freq='D')
ts = pd.Series(np.random.randn(len(date_rng)), index=date_rng)
# Ajustar el modelo SARIMA
order = (1, 1, 1) # Órdenes no estacionales (p, d, q)
seasonal_order = (1, 1, 1, 7) # Órdenes estacionales (P, D, Q, m), aquí m=7 para datos diarios
model = SARIMAX(ts, order=order, seasonal_order=seasonal_order)
results = model.fit()
# Pronosticar valores futuros
n_forecast = 30 # Número de días a pronosticar
forecast = results.get_forecast(steps=n_forecast)
# Obtener intervalos de confianza para los pronósticos
forecast_ci = forecast.conf_int()
# Visualizar los datos originales y los pronósticos
plt.figure(figsize=(12, 6))
plt.plot(ts, label='Datos Originales')
plt.plot(forecast.predicted_mean, label='Pronósticos', color='green')
plt.fill_between(forecast_ci.index, forecast_ci.iloc[:, 0], forecast_ci.iloc[:, 1], color='pink', alpha=0.3, label='Intervalo de Confianza')
plt.title('Modelo SARIMA: Pronósticos')
plt.xlabel('Fecha')
plt.ylabel('Valor')
plt.legend()
plt.show()
En este ejemplo:
Recuerda que en una aplicación real, debes reemplazar la serie de tiempo sintética con tus propios datos y ajustar los órdenes SARIMA según las características de tu serie de tiempo. Además, ten en cuenta que la calidad de los pronósticos depende de la elección adecuada de los órdenes y de la validez de las suposiciones del modelo SARIMA en relación con tus datos.
4. Aplicaciones
Los modelos SARIMA (Seasonal Autoregressive Integrated Moving Average) son ampliamente utilizados en una variedad de aplicaciones de análisis de series de tiempo debido a su capacidad para capturar patrones estacionales y tendencias en los datos. Aquí hay algunas aplicaciones comunes de los modelos SARIMA:
Estos son solo algunos ejemplos de las numerosas aplicaciones de los modelos SARIMA en diversos sectores. Los modelos SARIMA son especialmente útiles cuando se trata de datos temporales que exhiben patrones estacionales y tendencias que pueden ser difíciles de capturar con otros enfoques.
Espero que este artículo te haya sido interesante y te sirva para aclarar algunas dudas. si te quedó alguna duda me puedes contactar o dejarla en los comentarios. Si tienes alguna opinión también déjala en los comentarios.