Saltar al contenido

lección 7

ARIMA: el modelo que reúne las piezas

Cómo (p, d, q) reúne todo el recorrido —AR, I y MA—, SARIMA para la estacionalidad, y la comparación honesta contra la línea base.

⏱ 55 min

Hasta ahora has ido recogiendo piezas sueltas sin que nadie te dijera para qué servían juntas. Aprendiste a hacer una serie estacionaria diferenciándola, y a contar cuántas veces hacía falta. Aprendiste a leer la autocorrelación para medir la memoria de una serie, y a distinguir la memoria directa que mide la autocorrelación parcial de la que viaja de rebote. Aprendiste que una serie se parece a sí misma en el pasado y que esa dependencia es información aprovechable. Cada una de esas cosas parecía una herramienta de diagnóstico independiente. No lo eran: eran las partes de un mismo modelo, desmontado para que las entendieras una a una. Ahora toca montarlo. Ese modelo se llama ARIMA, y es la pieza que convierte todo tu diagnóstico en un pronóstico.

ARIMA es un acrónimo de tres letras que son, exactamente, las tres cosas que has aprendido: AutoRegressive, Integrated, Moving Average, o en español autorregresivo, integrado y de media móvil. Cada letra es un componente, y cada componente tiene un número que lo gradúa. El modelo entero se escribe ARIMA(p, d, q), y esos tres números —p, d, q— son todo lo que hay que decidir para configurarlo. La buena noticia, y lo que hace que esta lección sea más un reencuentro que un aprendizaje nuevo, es que ya sabes de dónde sale cada uno de los tres. No hay magia: p sale de la PACF, d sale de las diferenciaciones, q sale de la ACF. El modelo es la receta que junta tus tres diagnósticos.

## Las tres letras, una a una

La I de integrado es la más fácil, porque es literalmente lo que ya hiciste. El parámetro d es el número de veces que hay que diferenciar la serie para que sea estacionaria: el orden de integración del que hablamos al comprobar la estacionariedad. Si una serie se vuelve estacionaria con una diferenciación, d vale 1. Si necesita dos, d vale 2. Si ya era estacionaria de partida, d vale 0. ARIMA incorpora la diferenciación por dentro: le das la serie original, le dices cuánto diferenciar, y él diferencia para modelar y deshace la diferenciación al final para devolverte el pronóstico en las unidades reales. No tienes que diferenciar a mano antes de pasársela; el modelo lo hace, pero el valor de d lo decides tú con el test de Dickey-Fuller, exactamente como aprendiste.

La AR de autorregresivo captura la idea de que el valor de hoy depende directamente de los valores anteriores. "Autorregresivo" significa, descomponiendo la palabra, que la serie se regresa sobre sí misma: predice el valor de hoy a partir de sus propios valores pasados, como si hicieras una regresión donde las variables explicativas son la propia serie unos pasos atrás. El parámetro p dice cuántos pasos atrás se miran: un AR de orden 2 predice cada valor a partir de los dos anteriores. ¿Y de dónde sale el p adecuado? De la PACF, la autocorrelación parcial, que precisamente mide la memoria directa de la serie quitando los rebotes. El retraso donde la PACF se corta en seco sugiere el p. Esa es la utilidad concreta de aquel gráfico que aprendiste a leer: no era adorno, era el instrumento que fija esta letra.

La MA de media móvil es la más sutil de las tres, y conviene no confundirla con la media móvil que usabas para suavizar: es otra cosa que, por un accidente histórico, comparte nombre. Aquí "media móvil" significa que el valor de hoy depende de los errores de las predicciones anteriores. La idea es elegante: si ayer el modelo predijo de más, esa información —el error cometido— dice algo útil sobre hoy, y el componente MA la aprovecha. El parámetro q dice de cuántos errores pasados se tira. ¿Y de dónde sale el q? De la ACF, la autocorrelación normal: el retraso donde la ACF se corta en seco lo sugiere. La otra mitad de aquel diagnóstico de correlogramas, puesta a trabajar.

ARIMA(p, d, q) no introduce ideas nuevas: cada letra se lee de un diagnóstico que ya sabes hacer. El modelo solo junta las tres piezas.

Vale la pena situar de dónde viene esto, porque explica por qué ARIMA dominó el pronóstico durante décadas. En 1970, dos estadísticos, George Box y Gwilym Jenkins, publicaron un libro que reunió todas estas ideas sueltas —la autorregresión que venía de los años veinte, la diferenciación, la media móvil de los errores— en un método ordenado y reproducible para construir modelos de series. No inventaron los componentes; inventaron la receta para combinarlos: mira la serie, hazla estacionaria, lee los correlogramas, propón un modelo, ajústalo, comprueba los residuos, y si no están limpios, vuelve a empezar. Esa disciplina —el método Box-Jenkins— convirtió el pronóstico de un arte intuitivo en un procedimiento que se podía enseñar y repetir, y es la razón de que ARIMA siga siendo el modelo de referencia contra el que se compara cualquier método nuevo.

Box-Jenkins no es una receta de un solo paso: si los residuos del modelo todavía tienen estructura, se vuelve atrás y se reajusta. Solo se cierra cuando están limpios y el modelo bate a la base.

## SARIMA: cuando la estacionalidad también cuenta

ARIMA, tal cual, tiene un punto ciego que ya habrás anticipado: no sabe nada de estacionalidad. Sus tres letras capturan la memoria a corto plazo y la tendencia, pero no el hecho de que cada diciembre se parezca al anterior o cada lunes a los lunes. Para eso existe la extensión estacional, SARIMA —la S de seasonal—, que añade otra tanda de tres parámetros, los mismos tres pero aplicados al periodo estacional en vez de a los pasos inmediatos. Donde ARIMA mira el valor de ayer, SARIMA mira además el valor de hace un periodo completo —el mismo día de la semana pasada, el mismo mes del año anterior—, y donde ARIMA diferencia respecto al día anterior, SARIMA puede diferenciar también respecto al periodo.

Un modelo SARIMA se escribe con los tres parámetros normales más tres estacionales más el periodo, y aunque parezca que son muchos números, la lógica para fijarlos es idéntica a la de ARIMA, solo que mirando los correlogramas en los retrasos múltiplos del periodo. El pico de la ACF en el retraso 12 —que aprendiste a reconocer como la firma de la estacionalidad— es justo lo que gradúa la parte estacional del modelo. No es un método distinto: es el mismo, extendido para que la memoria larga del calendario entre en la ecuación igual que entra la memoria corta de los días vecinos. En la práctica, cualquier serie de negocio con estacionalidad —que son casi todas— se modela con SARIMA, no con ARIMA pelado.

1import numpy as np
2import pandas as pd
3from statsmodels.tsa.arima.model import ARIMA
4
5# Serie con tendencia y memoria corta (no estacional)
6np.random.seed(42)
7n = 120
8ruido = np.random.normal(0, 1, n)
9serie = np.zeros(n)
10for t in range(1, n):
11 serie[t] = 0.6 * serie[t-1] + ruido[t] # memoria autorregresiva
12serie = pd.Series(np.cumsum(serie) + np.linspace(0, 20, n)) # + tendencia (pide d=1)
13
14# ARIMA(p=1, d=1, q=0): un termino AR, una diferenciacion, sin MA
15modelo = ARIMA(serie, order=(1, 1, 0)).fit()
16pred = modelo.forecast(10)
17
18# Comprobaciones estructurales, nunca el forecast crudo
19print(f"Pronostica {len(pred)} pasos")
20print(f"El pronostico continua la tendencia al alza: {pred.iloc[-1] > serie.iloc[-1]}")
21print(f"El modelo estimo 1 termino AR: {modelo.model.order == (1, 1, 0)}")

ARIMA(1,1,0): un término AR y una diferenciación; se comprueba la forma del pronóstico, no sus valores

## El AIC: comparar modelos sin engañarse

Leer los correlogramas sugiere un punto de partida para p y q, pero rara vez da la respuesta exacta: dos personas con experiencia pueden proponer modelos ligeramente distintos y los dos ser razonables. Así que en la práctica se prueban varias combinaciones cercanas y hay que elegir entre ellas. Y aquí aparece una trampa que ya conoces de todo el oficio: si eliges el modelo que mejor se ajusta a los datos que ya has visto, elegirás siempre el más complejo, porque un modelo con más parámetros siempre puede ajustarse mejor a los datos de entrenamiento. Es el sobreajuste de siempre, con otra ropa: el modelo que mejor memoriza el pasado no es el que mejor predice el futuro.

Para elegir sin caer en esa trampa existe una herramienta pensada exactamente para eso: el AIC, el criterio de información de Akaike. El AIC es un número que combina dos cosas que tiran en direcciones opuestas: cómo de bien ajusta el modelo los datos, y cuántos parámetros usa para conseguirlo. Premia el buen ajuste y penaliza la complejidad. La idea es profunda y conecta con todo lo que has aprendido sobre no engañarse: un modelo que ajusta un poco mejor pero a costa de muchos más parámetros probablemente esté memorizando ruido, no capturando señal, así que el AIC lo castiga. Entre dos modelos, se prefiere el de AIC más bajo, porque es el que logra el mejor equilibrio entre explicar los datos y no pasarse de complejo.

Hay un detalle que conviene fijar para no malinterpretar el AIC: su valor absoluto no significa nada. Un AIC de 450 no es "bueno" ni "malo" por sí mismo; el AIC solo sirve para comparar modelos ajustados sobre exactamente la misma serie. Dices "este modelo tiene menos AIC que aquel otro, luego lo prefiero", nunca "este modelo tiene un AIC de 450, luego es bueno". Y, muy importante, el AIC compara el ajuste penalizado por complejidad, que es una ayuda enorme para descartar candidatos, pero no sustituye a la prueba definitiva. La última palabra sobre si un modelo sirve no la tiene el AIC: la tiene la validación sobre datos que el modelo no ha visto, partidos por el calendario. El AIC te ayuda a elegir entre candidatos; la línea base y el corte temporal te dicen si el ganador vale algo de verdad.

El AIC baja al mejorar el ajuste y sube al añadir parámetros de más: el mínimo marca el modelo que explica sin memorizar ruido. Solo compara, nunca califica en absoluto.

Consejo de senior: existe una herramienta llamada auto_arima que prueba muchas combinaciones de p, d, q (y las estacionales) por su cuenta y se queda con la de menor AIC. Es cómoda y la vas a ver en producción, pero no la trates como un botón mágico. Automatiza la búsqueda, no el criterio: sigue siendo tuyo decidir si el periodo estacional es el correcto, si la serie necesitaba una transformación logarítmica, y —sobre todo— si el modelo que escupe bate a la línea base sobre el futuro reservado. Un auto_arima que entrega el modelo de menor AIC y pierde contra "igual que el año pasado" ha hecho su trabajo y aun así no sirve. La automatización te ahorra las pruebas, no la honestidad.

## La prueba que de verdad importa: ARIMA contra la línea base

Llega el momento de aplicar la conducta que vertebra todo este recorrido. Tienes un modelo elegante, con sus tres letras bien fundamentadas y su AIC optimizado. No vale nada hasta que haya batido al adversario trivial sobre datos que no ha visto. Así que el procedimiento es el de siempre, sin atajos: partes la serie por el calendario —lo antiguo para ajustar, lo reciente para medir—, ajustas el ARIMA solo con la parte antigua, le pides que pronostique el tramo reciente, y comparas su error con el del pronóstico ingenuo sobre exactamente ese mismo tramo y con exactamente la misma métrica. Si el ARIMA no baja claramente del error de la línea base, toda su elegancia es decorativa.

Esta comparación es la que separa un ejercicio académico de un trabajo serio, y es sorprendente cuántas veces el modelo sofisticado pierde. No porque ARIMA sea malo —es excelente—, sino porque hay series en las que la memoria y la tendencia que ARIMA captura ya están casi del todo en "igual que ayer" o "igual que el año pasado", y entonces el margen de mejora es minúsculo o nulo. Descubrir eso no es un fracaso: es información valiosísima. Significa que tu serie es intrínsecamente difícil de predecir mejor que lo trivial, y que el esfuerzo debe ir a otra parte —a conseguir más datos, a mejores variables externas— y no a afinar un modelo que no puede ganar. La línea base no solo valida el modelo: también te dice cuándo rendirte con elegancia.

1import numpy as np
2import pandas as pd
3from statsmodels.tsa.arima.model import ARIMA
4
5# Serie con tendencia + memoria, 100 pasos
6np.random.seed(42)
7n = 100
8e = np.random.normal(0, 1, n)
9x = np.zeros(n)
10for t in range(1, n):
11 x[t] = 0.7 * x[t-1] + e[t]
12serie = pd.Series(np.cumsum(x) + np.linspace(0, 30, n))
13
14# Particion por TIEMPO: 85 para ajustar, 15 para medir
15train, test = serie[:85], serie[85:]
16
17# ARIMA(1,1,1) ajustado SOLO con el tramo de entrenamiento
18modelo = ARIMA(train, order=(1, 1, 1)).fit()
19pred_arima = modelo.forecast(15).values
20
21# Linea base ingenua simple: repetir el ultimo valor conocido
22pred_base = np.repeat(train.iloc[-1], 15)
23
24def rmse(real, pred):
25 return float(np.sqrt(np.mean((np.array(real) - np.array(pred))**2)))
26
27rmse_arima = rmse(test.values, pred_arima)
28rmse_base = rmse(test.values, pred_base)
29print(f"ARIMA bate a la linea base (RMSE menor): {rmse_arima < rmse_base}")

ARIMA ajustado solo con el pasado y comparado con la línea base sobre el tramo reservado, con la misma métrica

El error más caro con ARIMA no es elegir mal p, d o q: es ajustar el modelo con toda la serie, incluido el tramo que luego usas para medirlo. Si ajustas con todo y después "mides" sobre una parte que el modelo ya conocía, obtendrás un error minúsculo que no tiene nada que ver con lo que el modelo hará en producción, donde el futuro todavía no existe. Es la misma trampa de mirar el futuro durante el entrenamiento, trasladada a ARIMA. El modelo se ajusta SOLO con el tramo de entrenamiento, y el tramo de prueba no se toca hasta el final, para medir una sola vez.

## Lo que has montado

ARIMA es el punto donde todas las piezas sueltas de este recorrido encajan en una sola herramienta. La diferenciación que aprendiste para la estacionariedad es la I. La memoria directa que mide la PACF es la AR. La memoria de los errores que asoma en la ACF es la MA. La estacionalidad que detectabas por los picos en los múltiplos del periodo es lo que añade SARIMA. Y el AIC es la forma de elegir entre candidatos sin dejarte seducir por el que más memoriza. No has aprendido un modelo nuevo de cero: has visto cómo lo que ya sabías diagnosticar se convierte en lo que configura un modelo real.

Pero fíjate en lo que ha hecho falta para dar por bueno el ARIMA, porque es lo mismo que hizo falta con el suavizado exponencial y con cualquier modelo que hayas tocado nunca: partirlo por el tiempo, ajustarlo solo con el pasado, medirlo contra la línea base con una métrica honesta. El modelo cambia; la conducta de evaluación no. Y todavía hay preguntas sobre esa evaluación que no hemos respondido del todo: ¿cuánto me puedo fiar de un pronóstico a diez pasos frente a uno a un paso?, ¿cómo expreso la incertidumbre de lo que predigo en vez de dar un número a secas?, ¿cómo valido de forma aún más exigente que un solo corte temporal? Eso —cómo se evalúa un pronóstico con todas las de la ley— es lo último que falta.

Regístrate para guardar tu progreso.