Ajustando el orden ARIMA con auto_arima
Ajustar a mano varios modelos ARIMA es didáctico, pero en un proyecto real con muchas series se vuelve lento. La librería pmdarima automatiza la búsqueda del mejor orden usando AIC como criterio.
Instalación
pip install pmdarima
pmdarima incluye la función auto_arima, que prueba combinaciones de p, d, q y se queda con la que minimice el criterio elegido.
Uso básico
from pmdarima.arima import auto_arima
# Dividimos en train/test
train = serie.iloc[:-12]
test = serie.iloc[-12:]
# Búsqueda automática
modelo_auto = auto_arima(
train,
seasonal=False,
d=None, # Deja que auto_arima determine d
max_p=3,
max_q=3,
information_criterion='aic',
trace=True,
error_action='ignore',
suppress_warnings=True,
stepwise=True
)
print(modelo_auto.summary())
Con trace=True verás en consola cada modelo probado y su AIC. stepwise=True acelera la búsqueda evitando probar todas las combinaciones posibles.
Interpretar el resultado
El resumen te dirá algo como:
Best model: ARIMA(1,1,1)
AIC: 482.34
Eso significa que, de todas las combinaciones probadas, ARIMA(1,1,1) fue la que mejor equilibrio encontró entre ajuste y complejidad según el AIC.
Una vez elegido el modelo, generas el pronóstico igual que antes:
prediccion = modelo_auto.predict(n_periods=12)
plt.figure(figsize=(12, 5))
plt.plot(train.index, train, label="Train", color="#1a1a1a")
plt.plot(test.index, test, label="Test", color="#a8e6cf")
plt.plot(test.index, prediccion, label="Predicción auto_arima", color="#ffcc00")
plt.legend()
plt.title("Pronóstico con auto_arima")
plt.grid(True, alpha=0.3)
plt.show()
AIC vs BIC
auto_arima usa AIC por defecto, pero puedes cambiar a BIC:
modelo_bic = auto_arima(train, information_criterion='bic', seasonal=False)
| Criterio | Tendencia | Cuándo usarlo |
|---|---|---|
| AIC | Prefiere modelos más complejos | Cuando buscas el mejor ajuste predictivo |
| BIC | Penaliza más la complejidad | Cuando prefieres modelos más simples e interpretables |
Limitaciones de auto_arima
- No siempre encuentra el modelo óptimo global porque
stepwisees una búsqueda guiada. - Con estacionalidad fuerte necesitas activar
seasonal=Truey especificarm(periodo estacional). - No sustituye el juicio del analista: debes seguir revisando residuos y métricas.
modelo_sarima = auto_arima(train, seasonal=True, m=12, max_p=3, max_q=3)
Resumen
auto_arima es una excelente herramienta para acelerar la experimentación. Te da un punto de partida sólido, pero recuerda que el modelo final debe validarse con test set, residuos y conocimiento del dominio. No es magia: es automatización con criterios estadísticos.