Gráficos ACF y PACF: Interpretación y código en Python

Una guía práctica para profesionales que trabajan con datos secuenciales

Gráficos ACF y PACF: Interpretación y código en Python

Por HolaGPT Editorial · 10 min lectura · 2026-07-13

En el análisis de series temporales, pocos gráficos son tan reveladores como el correlograma de autocorrelación (ACF) y el de autocorrelación parcial (PACF). Estas herramientas condensan la esencia de la dependencia secuencial: cómo el pasado reciente o lejano influye en el valor actual. Si trabajas con precios de activos, demanda de productos o sensores industriales, dominar estos gráficos te ahorrará semanas de prueba y error al construir modelos.

Muchos profesionales hispanohablantes se topan con ellos al estudiar modelos ARIMA o al buscar patrones cíclicos en sus dashboards. Sin embargo, la interpretación no es trivial; un trazo de la ACF que decae lentamente puede indicar no estacionariedad, mientras que un corte brusco en la PACF sugiere el orden de un modelo autorregresivo. Este artículo te enseña a generarlos con Python y a leerlos como un experto, con ejemplos reales y código listo para copiar.

Además, plataformas de IA como HolaGPT están integrando capacidades de diagnóstico de series temporales para acelerar estas tareas repetitivas. Si aprovechas este conocimiento combinado con asistentes inteligentes, podrás enfocarte en la estrategia mientras la máquina produce los gráficos y la primera interpretación.

¿Qué es la autocorrelación?

La autocorrelación mide la correlación de una serie consigo misma en pasos de tiempo anteriores. En otras palabras, cuantifica si el valor en el instante t está relacionado con el valor en t-1, t-2 y así sucesivamente. Matemáticamente, para un retardo k, la función de autocorrelación (ACF) se define como:

ACF(k) = Corr(Y_t, Y_{t-k})

Cuando el coeficiente es cercano a 1, existe una fuerte relación positiva; si es cercano a -1, la relación es negativa. Un valor próximo a 0 indica ausencia de dependencia. La ACF se suele representar con un gráfico de barras o de segmentos llamado correlograma, donde el eje X son los retardos y el Y el coeficiente de correlación.

Es importante entender que la autocorrelación no demuestra causalidad, pero sí revela la \'memoria\' del proceso. Por ejemplo, la temperatura de una ciudad a las 10:00 está altamente correlacionada con la temperatura a las 09:00, y esa dependencia puede extenderse varias horas atrás.

¿Qué es la autocorrelación parcial?

La autocorrelación parcial (PACF) da un paso más: mide la correlación directa entre la observación actual y un retardo específico, eliminando la influencia de los retardos intermedios. Es decir, la PACF para el retardo k es la correlación entre Y_t e Y_{t-k} después de remover el efecto de Y_{t-1}, Y_{t-2}, …, Y_{t-(k-1)}. Para calcularla se usan modelos autorregresivos que aíslan la contribución neta de cada retardo.

La diferencia con la ACF es crítica en la identificación de modelos. Mientras que la ACF puede mostrar correlación para un retardo debido a la transmisión de información a través de retardos menores, la PACF muestra si existe una conexión directa. Por ejemplo, en un modelo AR(2) puro, la ACF decae gradualmente, pero la PACF se corta justo después del retardo 2, porque solo los dos primeros valores afectan directamente al valor actual.

Importancia en el análisis de series temporales

Estos gráficos son el puente entre los datos brutos y la elección del modelo adecuado. Las aplicaciones más comunes incluyen:

Saltarse este análisis visual conduce a modelos mal especificados y predicciones poco fiables. No importa si usas Prophet, ARIMA o redes neuronales, entender la estructura de dependencia te da una ventaja enorme.

Cómo generar los gráficos en Python

El ecosistema de Python ofrece la librería statsmodels, que incluye funciones dedicadas a trazar ACF y PACF de manera inmediata. También puedes usar matplotlib para personalizar los correlogramas. A continuación, un flujo de trabajo completo.

Preparación del entorno y los datos

Asegúrate de tener instalados statsmodels, matplotlib y pandas:

pip install statsmodels matplotlib pandas

Vamos a trabajar con un dataset real de pasajeros aéreos (AirPassengers), cargado directamente desde statsmodels, o bien puedes usar tu propia serie. Inicia el script:

import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.tsa.stattools import adfuller
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf

# Cargar datos
df = pd.read_csv('AirPassengers.csv', index_col='Month', parse_dates=True)
print(df.head())

Si el dataset no está disponible, puedes simular una serie no estacionaria con una tendencia y componente aleatorio para practicar.

Gráfico de autocorrelación (ACF)

La función plot_acf de statsmodels genera el correlograma con bandas de confianza del 95% (por defecto). El parámetro lags controla cuántos retardos mostrar; un valor práctico es el número de observaciones dividido entre cuatro. Ejemplo con 40 retardos:

plt.figure(figsize=(12,5))
plot_acf(df['#Passengers'], lags=40, alpha=0.05, title='ACF de AirPassengers')
plt.xlabel('Retardo (meses)')
plt.ylabel('Autocorrelación')
plt.tight_layout()
plt.show()

El argumento alpha=0.05 define el nivel de significación para las bandas (1 - alpha). La salida mostrará barras azules con líneas horizontales que delimitan la zona de ruido blanco; los picos que superan ese umbral son estadísticamente significativos.

Gráfico de autocorrelación parcial (PACF)

El código es similar, usando plot_pacf. Aquí la interpretación se centra en los retardos que presentan correlación directa después de controlar por los demás:

plt.figure(figsize=(12,5))
plot_pacf(df['#Passengers'], lags=40, alpha=0.05, method='ywm', title='PACF de AirPassengers')
plt.xlabel('Retardo (meses)')
plt.ylabel('Autocorrelación parcial')
plt.tight_layout()
plt.show()

El parámetro method puede ser \'ywm\' (Yule-Walker con media) o \'ols\' (mínimos cuadrados). Para series pequeñas, \'ywm\' suele ser más estable. Examina la gráfica: si los primeros dos o tres retardos muestran picos fuera de las bandas y luego caen abruptamente, estás ante un proceso AR de ese orden.

También puedes personalizar los colores o el estilo usando kwargs internos; por ejemplo, marker='o' para cambiar el punto en PACF.

Lectura e interpretación de correlogramas

Interpretar bien estos gráficos es más un arte que una ciencia exacta, pero existen patrones claros que te guiarán.

Series no estacionarias

Si la ACF decae muy lentamente (por ejemplo, el primer retardo es de 0.9, el décimo aún es 0.7, y el vigésimo sigue por encima de 0.5), la serie probablemente tiene una tendencia y requiere diferenciación. En la PACF se observa a menudo un solo pico enorme en el retardo 1. La regla práctica: si la ACF tarda más de cinco a seis retardos en caer por debajo de las bandas de confianza, aplica una diferenciación simple y vuelve a graficar.

Procesos AR(p)

Un proceso autorregresivo puro se caracteriza por un PACF que se corta bruscamente después del orden p, mientras que la ACF muestra un decaimiento exponencial o sinusoidal. Ejemplo: si la PACF solo tiene picos significativos en los retardos 1 y 2, y a partir del 3 están dentro de las bandas, tienes un AR(2). La ACF irá disminuyendo gradualmente sin un corte definido.

Procesos MA(q)

En un modelo de media móvil, el comportamiento es opuesto: la ACF se corta tras el orden q, y la PACF decae gradualmente. Así, si la ACF muestra solo picos significativos en los retardos 1, 2 y 3 y luego cae, estás ante un MA(3). La PACF puede tener una forma sinusoidal amortiguada.

Procesos ARMA(p,q)

Ambos gráficos exhiben un decaimiento progresivo; la identificación de los órdenes exactos se vuelve más compleja y suele requerir criterios de información (AIC, BIC) junto con la inspección visual. No obstante, los patrones te permiten descartar modelos puros y enfocarte en combinaciones.

Estacionalidad

Picos significativos cada cierto número de retardos (por ejemplo, en 12, 24, 36 para datos mensuales) revelan estacionalidad. En esos casos, primero intenta una diferenciación estacional (D) y luego estudia la ACF/PACF de la serie resultante.

Errores comunes y buenas prácticas

Incluso analistas experimentados caen en trampas al usar estos gráficos. Aquí algunos consejos para sacarles el máximo provecho.

Ejemplo práctico completo: ventas mensuales de un ecommerce

Imaginemos que trabajas en un departamento de operaciones y necesitas pronosticar las ventas mensuales en USD para los próximos seis meses. Cargamos los datos históricos de dos años (24 meses) y seguimos estos pasos:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
from statsmodels.tsa.stattools import adfuller

# Simular datos con tendencia y estacionalidad
np.random.seed(42)
fechas = pd.date_range('2021-01-01', periods=24, freq='M')
ventas = 1000 + np.arange(24)*30 + 200*np.sin(np.arange(24)*2*np.pi/12) + np.random.normal(0, 100, 24)
df = pd.DataFrame({'ventas': ventas}, index=fechas)

# Ver estacionariedad
adf_result = adfuller(df['ventas'])
print(f"ADF p-valor: {adf_result[1]:.4f}")  # Si >0.05, diferenciar

# Primera diferenciación
df['ventas_diff'] = df['ventas'].diff().dropna()

# Gráficos
fig, axes = plt.subplots(1, 2, figsize=(14,5))
plot_acf(df['ventas_diff'].dropna(), lags=12, alpha=0.05, ax=axes[0], title='ACF diferenciada')
plot_pacf(df['ventas_diff'].dropna(), lags=12, alpha=0.05, ax=axes[1], title='PACF diferenciada', method='ywm')
plt.tight_layout()
plt.show()

Al ejecutar, el p-valor del test ADF resultó alto (0.68), confirmando no estacionariedad. Tras la diferenciación, la ACF muestra un decaimiento rápido con un pico significativo en retardo 1 y quizás en 2; la PACF tiene un pico fuerte en retardo 1 y después se corta. Este patrón sugiere un modelo ARIMA(1,1,0) o (0,1,1). Probamos ambos y comparamos AIC. La inspección visual nos evitó probar decenas de combinaciones.

Este flujo se puede automatizar con scripts que iteren sobre distintas diferenciaciones y muestren los gráficos en loop. La interpretación manual sigue siendo el filtro humano indispensable para decidir la complejidad del modelo.

Herramientas complementarias y el rol de la IA

Más allá de Python, R ofrece las funciones acf y pacf del paquete stats, y Excel cuenta con complementos de análisis que generan correlogramas básicos. Sin embargo, la flexibilidad y reproducibilidad de Python lo convierten en la opción preferida en entornos profesionales.

Las plataformas de inteligencia artificial para profesionales, como HolaGPT, están comenzando a ofrecer módulos donde cargas tu serie y obtienes automáticamente los gráficos ACF, PACF y una sugerencia de modelo, reduciendo el tiempo de diagnóstico de horas a minutos. La IA no reemplaza al experto, pero elimina tareas rutinarias y permite centrarse en la interpretación estratégica y en la comunicación de resultados a los equipos de negocio.

Si estás iniciando en el mundo de las series temporales, dominar ACF y PACF te brinda una intuición sólida que luego potencializarás con asistentes inteligentes.