Saltar al contenido
Análisis de Series de Tiempo con Python

Modelo Autorregresivo Integrado de Medias Móviles (ARIMA)

Introducción

El modelo Autorregresivo Integrado de Medias Móviles (ARIMA) es una técnica estadística utilizada para analizar y predecir datos de series de tiempo. Consiste en una combinación de tres métodos diferentes: el modelo autorregresivo (AR), el modelo de medias móviles (MA) y la técnica de integración (I).

En primer lugar, el modelo AR usa la información histórica de la serie de tiempo para determinar la relación entre los valores pasados y futuros. En segundo lugar, el modelo MA se enfoca en los residuos del modelo AR y analiza las fluctuaciones aleatorias de la serie de tiempo. Finalmente, la técnica de integración se encarga de tratar la no estacionariedad de la serie, convirtiéndola en una serie estacionaria.

ARIMA es un modelo flexible que puede abordar diferentes tipos de datos de series de tiempo y trabajará para transformar los datos en una forma estacionaria y luego realizar una predicción. ARIMA es ampliamente utilizado en campos como la economía, el clima, la demanda de energía y el mercado de valores para modelar el comportamiento de las distintas variables a lo largo del tiempo y proporcionar predicciones útiles.

Resumen

El modelo ARIMA es una técnica de modelado popular utilizada para predecir series de tiempo con componentes de tendencia, estacionalidad y aleatoriedad. El acrónimo ARIMA significa Autoregressive Integrated Moving Average. La idea central detrás del modelo ARIMA es descomponer la serie de tiempo en tres componentes:

  • AR (Autoregressive): una relación entre los valores de la serie de tiempo en tiempos anteriores.
  • I (Integrated): una diferenciación de la serie de tiempo para hacerla estacionaria (es decir, sin tendencia ni estacionalidad).
  • MA (Moving Average): una relación entre los errores de predicción en tiempos anteriores.

En términos más simples, ARIMA modela el comportamiento de una serie de tiempo en función de valores pasados y otros factores. Para ajustar el modelo ARIMA a una serie de tiempo, se debe especificar el orden de las tres componentes: p, d y q.

  • p es el orden del modelo AR.
  • d es el número de veces que se diferencia la serie temporal.
  • q es el orden del modelo MA.

El valor de p se determina observando el comportamiento de la autocorrelación en la serie de tiempo. Si la autocorrelación es alta para valores anteriores, se puede utilizar un valor alto de p. El valor de q se determina de manera similar observando la correlación de los errores de predicción (conocidos como "residuos") en tiempos anteriores.

Una vez especificado el orden de las componentes ARIMA, se ajusta el modelo con datos históricos y luego se utiliza para realizar predicciones futuras. En resumen, el modelo ARIMA es una técnica poderosa de modelado de series de tiempo para predecir el comportamiento de una serie temporal basándose en valores pasados, errores de predicción y factores externos.

Aplicación teórica

Ecuación del Modelo ARIMA

El modelo ARIMA (Autoregressive Integrated Moving Average) es una extensión del modelo ARMA que incluye un componente de diferenciación para manejar series temporales que no son estacionarias. A continuación, se detalla la ecuación del modelo ARIMA y sus componentes.

1. Componentes del Modelo ARIMA

Un modelo ARIMA se denota como ARIMA(p, d, q), donde:

- p: Orden del componente autoregresivo (AR).
- d: Orden de diferenciación para hacer la serie estacionaria.
- q: Orden del componente de medias móviles (MA).

2. Ecuación del Modelo ARIMA

2.1 Diferenciación

El primer paso en ARIMA es aplicar la diferenciación para convertir una serie no estacionaria en una serie estacionaria. La diferenciación se aplica \(d\) veces, y se define como:

\[
\Delta^d X_t = (1 - B)^d X_t
\]

donde \(\Delta\) representa el operador de diferenciación y \(B\) es el operador de rezago.

2.2 Ecuación ARIMA(p, d, q)

Después de la diferenciación, el modelo ARIMA(p, d, q) se puede expresar como:

\[
\Phi(B) \Delta^d X_t = \Theta(B) \epsilon_t
\]

donde:

- \(\Phi(B)\) es el polinomio autoregresivo de orden \(p\):

  \[
  \Phi(B) = 1 - \phi_1 B - \phi_2 B^2 - \cdots - \phi_p B^p
  \]

- \(\Theta(B)\) es el polinomio de medias móviles de orden \(q\):

  \[
  \Theta(B) = 1 + \theta_1 B + \theta_2 B^2 + \cdots + \theta_q B^q
  \]

- \(\epsilon_t\) es el término de error blanco (residuo), que es una secuencia de errores independientes y normalmente distribuidos con media cero y varianza constante.

3. Descomposición en Componentes

La ecuación completa del modelo ARIMA(p, d, q) después de aplicar la diferenciación se puede descomponer en componentes AR y MA:

\[
(1 - \phi_1 B - \phi_2 B^2 - \cdots - \phi_p B^p) \Delta^d X_t = (1 + \theta_1 B + \theta_2 B^2 + \cdots + \theta_q B^q) \epsilon_t
\]

 4. Estimación de Parámetros

La estimación de los parámetros \(\phi_i\) y \(\theta_i\) se realiza utilizando métodos de máxima verosimilitud o mínimos cuadrados, dependiendo de la complejidad del modelo y la disponibilidad de datos.

5. Interpretación

- Componente AR (Autoregresivo): Representa la relación entre el valor actual de la serie temporal y los valores pasados.
- Componente MA (Medias Móviles): Representa la relación entre el valor actual de la serie temporal y los errores pasados.
- Diferenciación: Se utiliza para estabilizar la varianza y hacer que la serie sea estacionaria.

Ejemplo de un Modelo ARIMA(1, 1, 1)

Para un modelo ARIMA(1, 1, 1), la ecuación sería:

\[
(1 - \phi_1 B) \Delta X_t = (1 + \theta_1 B) \epsilon_t
\]

Después de aplicar la diferenciación, la ecuación del modelo se simplifica a:

\[
(1 - \phi_1 B)(X_t - X_{t-1}) = (1 + \theta_1 B) \epsilon_t
\]

Conclusión

El modelo ARIMA combina componentes autoregresivos, de medias móviles y diferenciación para modelar y pronosticar series temporales. La diferenciación se utiliza para convertir series no estacionarias en estacionarias, mientras que los componentes AR y MA modelan las dependencias en la serie temporal. La correcta especificación del modelo ARIMA es crucial para capturar las características subyacentes de la serie y obtener pronósticos precisos.

Transformación y Estacionariedad

La transformación y la estacionariedad son conceptos clave en el análisis de series temporales, especialmente al trabajar con modelos ARIMA. Aquí se explica cómo las transformaciones se utilizan para lograr la estacionariedad y por qué es esencial para el modelado efectivo.

1. Estacionariedad

1.1 Definición

Una serie temporal es estacionaria si sus propiedades estadísticas, como la media y la varianza, son constantes a lo largo del tiempo y no dependen del momento en el que se mide. Formalmente, una serie \( \{X_t\} \) es estacionaria si cumple con las siguientes condiciones:

- Media Constante: La media de \( X_t \) es la misma para cualquier \( t \). Es decir, \( E[X_t] = \mu \) es constante.

- Varianza Constante: La varianza de \( X_t \) es constante a lo largo del tiempo. Es decir, \( \text{Var}(X_t) = \sigma^2 \) es constante.

- Covarianza Constante: La covarianza entre \( X_t \) y \( X_{t+h} \) solo depende de la distancia \( h \) entre los dos puntos en el tiempo, no de los tiempos específicos. Es decir, \( \text{Cov}(X_t, X_{t+h}) \) depende solo de \( h \), no de \( t \).

1.2 Importancia de la Estacionariedad

La estacionariedad es crucial para la modelización de series temporales porque muchos modelos, incluidos ARIMA, suponen que la serie temporal es estacionaria. La estacionariedad asegura que los parámetros del modelo se mantengan consistentes a lo largo del tiempo y que las inferencias y pronósticos sean válidos.

2. Transformaciones para Lograr la Estacionariedad

Cuando una serie temporal no es estacionaria, se utilizan diversas transformaciones para lograrla. Estas transformaciones se aplican para estabilizar la media, la varianza y hacer que la serie sea más adecuada para el análisis y modelado.

2.1 Diferenciación

La diferenciación es una técnica para eliminar la tendencia y hacer que una serie temporal sea estacionaria. La diferencia de una serie temporal se calcula como:

\[
\Delta X_t = X_t - X_{t-1}
\]

Para series con tendencias estacionales, se puede aplicar diferenciación estacional:

\[
\Delta_s X_t = X_t - X_{t-s}
\]

donde \( s \) es el período estacional.

2.2 Transformación Logarítmica

La transformación logarítmica se usa para estabilizar la varianza de la serie temporal. Se aplica la función logarítmica a los datos:

\[
Y_t = \log(X_t)
\]

Esto es útil cuando los datos muestran heterocedasticidad (variabilidad cambiante a lo largo del tiempo).

2.3 Transformación de Raíz Cuadrada o Box-Cox

La transformación de raíz cuadrada se usa para estabilizar la varianza, especialmente si los datos tienen una varianza que crece con la media:

\[
Y_t = \sqrt{X_t}
\]

La transformación Box-Cox es una generalización que incluye una gama más amplia de transformaciones:

\[
Y_t = \frac{X_t^\lambda - 1}{\lambda} \quad \text{para} \quad \lambda \ne 0
\]

donde \(\lambda\) es un parámetro que se estima para encontrar la mejor transformación.

2.4 Descomposición de la Serie Temporal

En algunos casos, descomponer la serie en componentes de tendencia, estacionalidad y residualidad puede ayudar a lograr la estacionariedad en los residuos:

\[
X_t = T_t + S_t + R_t
\]

donde \(T_t\) es la tendencia, \(S_t\) es la estacionalidad y \(R_t\) es el componente residual.

3. Evaluación de la Estacionariedad

Una vez aplicada la transformación, es importante verificar si la serie se ha vuelto estacionaria. Esto se puede hacer mediante:

- Pruebas de Raíces Unitarias: Como el test de Dickey-Fuller aumentado (ADF) o el test de Phillips-Perron, que ayudan a determinar si una serie tiene una raíz unitaria y, por ende, no es estacionaria.

- Análisis de Autocorrelación (ACF) y Autocorrelación Parcial (PACF): Para examinar si las funciones de autocorrelación muestran patrones que sugieren estacionariedad.

Conclusión

La transformación y la estacionariedad son fundamentales para el análisis de series temporales. Las transformaciones, como la diferenciación y las transformaciones logarítmicas, son técnicas clave para convertir una serie no estacionaria en estacionaria, permitiendo el uso de modelos como ARIMA que requieren estacionariedad para una modelización y pronóstico efectivos. Evaluar la estacionariedad de la serie transformada asegura que el modelo ajustado sea válido y útil para la previsión futura.

 

Estimación de Parámetros y Evaluación del Modelo

La estimación de parámetros y la evaluación del modelo son pasos fundamentales en el análisis de series temporales, especialmente al trabajar con modelos como ARIMA. Aquí se detallan estos procesos con un enfoque matemático:

1. Estimación de Parámetros

La estimación de parámetros implica determinar los valores óptimos para los parámetros del modelo basándose en los datos observados. Para modelos como ARIMA, los parámetros que deben estimarse incluyen los coeficientes autoregresivos (\(\phi_i\)), los coeficientes de medias móviles (\(\theta_i\)) y el parámetro de diferenciación (\(d\)).

1.1 Método de Máxima Verosimilitud (ML)

El método de máxima verosimilitud es uno de los métodos más comunes para estimar los parámetros de un modelo ARIMA. Este método se basa en maximizar la función de verosimilitud, que mide la probabilidad de observar los datos dados los parámetros del modelo.

Para un modelo ARIMA(p, d, q), la función de verosimilitud se calcula usando la función de densidad condicional de los residuos. Dado un modelo ARIMA, la función de verosimilitud \(L(\phi, \theta, \sigma^2)\) se puede expresar como:

\[
L(\phi, \theta, \sigma^2) = \prod_{t=1}^T f(\epsilon_t \mid \phi, \theta, \sigma^2)
\]

donde \(f(\epsilon_t \mid \phi, \theta, \sigma^2)\) es la función de densidad de la distribución de los residuos \(\epsilon_t\).

1.2 Método de Mínimos Cuadrados (LS)

En algunos casos, se puede utilizar el método de mínimos cuadrados para estimar los parámetros. Este método minimiza la suma de los cuadrados de los residuos entre las observaciones reales y las predicciones del modelo. Para un modelo ARMA(p, q), la función de pérdida a minimizar es:

\[
Q(\phi, \theta) = \sum_{t=1}^T \left(X_t - \hat{X}_t \right)^2
\]

donde \(\hat{X}_t\) es la predicción del modelo.

1.3 Métodos Numéricos

Para modelos más complejos, se pueden utilizar métodos numéricos como el algoritmo de optimización de Newton-Raphson o el algoritmo de optimización de Nelder-Mead para encontrar los parámetros que maximizan la función de verosimilitud.

2. Evaluación del Modelo

La evaluación del modelo es crucial para verificar si el modelo ajustado representa adecuadamente los datos y proporciona pronósticos precisos. Esto se realiza mediante varias técnicas:

2.1 Análisis de Residuos

El análisis de residuos implica examinar la diferencia entre los valores observados y las predicciones del modelo. Los residuos deben comportarse como ruido blanco, es decir, deben ser independientes y distribuidos normalmente con media cero y varianza constante.

- Autocorrelación de Residuos: Se puede usar la función de autocorrelación de residuos (ACF) para verificar si los residuos tienen autocorrelación. En un modelo bien ajustado, la ACF de los residuos debe estar cerca de cero.

- Prueba de Normalidad: Se puede realizar una prueba de normalidad, como la prueba de Shapiro-Wilk, para verificar si los residuos siguen una distribución normal.

2.2 Evaluación de la Bondad de Ajuste

Se utilizan varias métricas para evaluar la bondad de ajuste del modelo:

- Criterio de Información de Akaike (AIC): Penaliza la complejidad del modelo. Se calcula como:

  \[
  \text{AIC} = -2 \log(L) + 2k
  \]

  donde \(L\) es el valor de la función de verosimilitud y \(k\) es el número de parámetros del modelo.

- Criterio de Información Bayesiano (BIC): Similar al AIC pero penaliza más fuertemente la complejidad del modelo. Se calcula como:

  \[
  \text{BIC} = -2 \log(L) + \log(T) k
  \]

  donde \(T\) es el número de observaciones.

- Raíz del Error Cuadrático Medio (RMSE): Mide la raíz cuadrada del error medio cuadrático entre los valores observados y las predicciones:

  \[
  \text{RMSE} = \sqrt{\frac{1}{T} \sum_{t=1}^T (X_t - \hat{X}_t)^2}
  \]

2.3 Validación Cruzada

La validación cruzada implica dividir los datos en conjuntos de entrenamiento y prueba. El modelo se ajusta con los datos de entrenamiento y se evalúa su rendimiento en el conjunto de prueba. Esto ayuda a asegurar que el modelo no esté sobreajustado a los datos de entrenamiento y que generalice bien a datos no vistos.

Conclusión

La estimación de parámetros y la evaluación del modelo son pasos fundamentales en el análisis de series temporales. La estimación de parámetros busca ajustar los coeficientes del modelo para que se ajusten a los datos observados, mientras que la evaluación del modelo asegura que el modelo ajustado sea adecuado y proporcione pronósticos precisos. Utilizando métodos de máxima verosimilitud, mínimos cuadrados y técnicas de evaluación como el análisis de residuos, el AIC, el BIC y la validación cruzada, se puede asegurar la robustez y la eficacia del modelo de series temporales.

 

Aplicación práctica

Un ejemplo práctico de cómo fittear un modelo ARIMA utilizando la librería de statsmodels en Python: Supongamos que tenemos una serie de tiempo (por ejemplo, ventas diarias de un producto) y queremos predecir su comportamiento futuro utilizando un modelo ARIMA. Primero, importamos las librerías necesarias:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import statsmodels.api as sm
from statsmodels.tsa.arima.model import ARIMA

Luego, cargamos los datos y visualizamos su comportamiento:

data = pd.read_csv('ventas.csv', index_col=0, parse_dates=True)
data.plot()
plt.show()

Serie de Tiempo Original

El gráfico muestra que la serie de tiempo tiene una tendencia creciente y una fluctuación estacional. Aplicaremos la técnica de diferenciación para estacionarizar la serie.

data_diff = data.diff().dropna()
data_diff.plot()
plt.show()

Serie de Tiempo Diferenciada

Ahora que tenemos la serie de tiempo estacionarizada, podemos proceder a ajustar el modelo ARIMA. Para ello necesitamos conocer los valores de p, d, q:

  • p: Orden del modelo autorregresivo (AR)
  • d: Orden de la diferenciación
  • q: Orden del modelo de medias móviles (MA)

Podemos utilizar la función ACF y PACF para estimar estos valores:

fig, axes = plt.subplots(1, 2, figsize=(15,4))
plot_acf(data_diff, ax=axes[0])
plot_pacf(data_diff, ax=axes[1])
plt.show()

Función ACF y PACF

La función ACF tiene un decaimiento exponencial y se corta en 1. La función PACF tiene un pico significativo en el rezago 1 y luego decae rápidamente. Estos patrones sugieren que se trata de un ARMA(1,1) o ARIMA(1,1,1).

Ahora podemos proceder con el ajuste del modelo:

model = ARIMA(data, order=(1, 1, 1))
results = model.fit()
print(results.summary())

El Resumen del Modelo ARIMA(1,1,1) se muestra a continuación:

SARIMAX Results
==============================================================================
Dep. Variable: ventas No. Observations: 365
Model: ARIMA(1, 1, 1) Log Likelihood -3141.927
Date: Wed, 17 Mar 2021 AIC 6289.855
Time: 13:05:46 BIC 6304.951
Sample: 0 HQIC 6295.981 - 365
Covariance Type: opg
==============================================================================
coef std err z P>|z| [0.025 0.975]
------------------------------------------------------------------------------
ar.L1 0.1181 0.182 0.648 0.517 -0.239 0.475
ma.L1 -0.9020 0.070 -12.917 0.000 -1.040 -0.764
sigma2 2.576e+07 1.82e-09 1.41e+16 0.000 2.58e+07 2.58e+07
==============================================================================

Ljung-Box (L1) (Q): 0.00 Jarque-Bera (JB): 184.75
Prob(Q): 0.99 Prob(JB): 0.00
Heteroskedasticity (H): 16.53 Skew: 0.65
Prob(H) (two-sided): 0.00 Kurtosis: 7.10
==============================================================================

Warnings:
[1] Covariance matrix calculated using the outer product of gradients (complex-step).

Finalmente, podemos generar las predicciones y graficarlas junto con la serie de tiempo original:

pred_start = data.index[-1]
pred_end = pred_start + pd.Timedelta(days=30)
pred = results.predict(start=pred_start, end=pred_end)
plt.plot(data, label='Observado')
plt.plot(pred, label='Predicción')
plt.legend()
plt.show()

Predicción con el Modelo ARIMA

La línea azul representa los valores observados, mientras que la línea anaranjada representa las predicciones del modelo ARIMA. Se puede observar que el modelo es capaz de capturar la tendencia general de la serie de tiempo y los patrones de fluctuación estacional.