Herramientas para Pronósticos de Series de Tiempo en Python — Parte 5: Neural Prophet

Gonzalezhomar
tacosdedatos
Published in
8 min readOct 4, 2021

Otro Profeta entra al duelo de herramientas en Python

Foto: Bradley Dunn en Unsplash

1. Introducción

Finalizó la quinta parte de este duelo de pronósticos, con el competidor Neural Prophet. Como su nombre lo indica es pariente de Prophet el modelo desarrollado por el equipo de inteligencia artificial de Facebook, y que ya utilicé con mucho agrado:

Por tanto, al haber tenido el gusto de usar Prophet quise probar los resultados de este primo suyo. Para esta parte, seguiré trabajando el problema planteado en la parte 1, que consiste en estimar los principales ingresos del Gobierno Federal de México, que conforman la Recaudación Federal Participable. Para más detalles pueden ver la parte 1 de este proyecto aquí:

La notebook que acompaña a esta publicación se puede encontrar en mi repositorio de Github o la pueden ver directamente aquí.

2. Neural Prophet

Neural Prophet es un paquete desarrollado para mantener las mismas características que ya tiene Prophet: simplicidad de uso, posibilidad de añadir variables explicativas y fácil implementación. Me cruce con la existencia de este paquete aquí en Medium:

La principal diferencia entre Prophet y Neural Prophet, radica en que este último utiliza redes neuronales que permiten mejorar el pronóstico como son:

- Método de gradiente descendente para optimización basado en *PyTorch* en lugar del paquete estadístico *Stan* que es base de *Prophet*.
- Modela la autocorrelación de series de tiempo usando redes autoregresivas (*AR-Net*).
- Modela los regresores rezagados usando una red neuronal separada.
- Tiene capas internas no lineales (de la red neuronal) que son configurables.
- Se puede ajustar a horizontes específicos de pronóstico.
- Pérdidas y métricas personalizadas.

Por el lado de las desventajas, se pierde la ecuación modelo de Prophet, por lo cuál Neural Prophet prácticamente se convierte en una caja negra. Si bien parece que hay gente trabajando en cómo explicar el modelo subyacente, de manera similar a como funciona Greykite, estos modelos son prácticamente imposibles de explicar. El trabajo que hacen las redes neuronales es aproximar el comportamiento observado de las funciones, pero sin una ecuación base para el modelo.

Finalmente, vale la pena señalar que Neural Prophet aún se encuentra en versión beta, por lo que espero en un futuro probar sus actualizaciones. De hecho, al igual que Greykite, no se encuentra en conda, por lo que recomiendo crear su propio ambiente en anaconda para trabajar con este paquete, desde la terminal:

3. Series Mensuales

Otra vez comenzaré con la serie de IEPS de bebidas alcohólicas, para la cual presentaré el análisis completo (incluyendo el código) y en el resto de las series sólo dejaré los resultados.

3.1 IEPS Bebidas Alcohólicas

Al usar Neural Prophet veo que los comandos para hacer el ajuste de la serie son análogos a Prophet. Y de hecho, también me gustó la animación de como la red neural se va ajustando y al final queda una pequeña barra al 100%:

Al igual que en Prophet, puedo graficar como se ven los componentes de Neural Prophet:

Gráfico de los componentes de la serie del IEPS a las bebidas alcohólicas

Una función que llamó mi atención en Neural Prophet es graficar el efecto de los parámetros, lo cual es, hasta cierto punto, una visualización del modelo subyacente:

Gráfico del efecto de los parámetros en la serie del IEPS a las bebidas alcohólicas

Y finalmente, los comandos para graficar los pronósticos de Neural Prophet son similares a aquellos de Prophet. Cabe señalar que usó la versión sencilla de las gráficas que corre usando paquete matplotlib, en lugar de las gráficas interactivas que hice para Prophet con plotly; de momento no exploré dichas gráficas:

Pronóstico del IEPS a las bebidas alcohólicas

3.2 IEPS Cervezas

Luego de aplicar la misma metodología de Neural Prophet a la serie de IEPS de cervezas, estos son los pronósticos que obtuve:

Pronóstico del IEPS cervezas

3.3 IEPS Gasolinas y Diésel

Con Neural Prophet para la serie del IEPS federal a la venta de gasolinas y diésel, estos son los pronósticos que obtuve:

Pronósticos del IEPS a las gasolinas y diésel

3.4 IEPS Tabacos

Luego de correr Neural Prophet a la serie del IEPS a tabacos, estos son los pronósticos:

Pronóstico del IEPS a tabacos

3.5 IEPS Bebidas Saborizadas

Siguiendo con la serie del IEPS a tabacos, estos son los pronósticos que me da Neural Prophet:

Pronóstico del IEPS a las bebidas saborizadas

3.6 IEPS Alimentos

Luego de correr Neural Prophet a la serie del IEPS a los alimentos de alta densidad calórica, estos son los pronósticos

Pronóstico del IEPS a los alimentos

3.7 Impuesto a la Importación

Luego de correr Neural Prophet a la serie del impuesto a la importación, estos son los pronósticos:

Pronóstico del Impuesto a la Importación

3.8 Ingresos Petroleros

Y finalmente para las series mensuales, con la serie de los ingresos petroleros de la RFP, estos son los pronósticos:

Pronóstico de los Ingresos Petroleros

Con las series mensuales completas, las extraigo para su comparación:

4. Series Trimestrales

Ahora pasaré a las series trimestrales. Aquí sí realicé algunos ajustes al modelo base, que incluyeron agregar mis variables explícativas que determiné en la primera parte de este duelo.

4.1 Impuesto Sobre la Renta, ISR

En el caso de esta serie, las variables explicativas que utilizaré, son el Producto Interno Bruto (PIB) y una variable dummy para señalar cuando ocurrió una reforma a Ley de este impuesto. Para agregar estas variables explicativas tuve que generar por un lado el bloque hasta las observaciones que tengo, y por otro (cortando los datos donde aún no tengo observaciones), las variables explicativas “a futuro”:

Esto es un poco diferente a Prophet, pues éste automáticamente hace la estimación en el rango donde tengo observaciones y expande su horizonte hasta donde tiene variables explicativas. En cambio, Neural Prophet interpreta los huecos como observaciones pérdidas (“missing values”) y no hace esta corrección automáticamente.

Además, me gustó que en la documentación de Neural Prophet el comando para agregar este tipo de variables explicativas se llama add_future_regressor. Para ello, el comando que utilicé para ajustar la serie fue el siguiente:

Luego del ajuste, al código para calcular el pronóstico de Neural Prophet solo se le agregan las observaciones a futuro de mis variables explícativas:

Pronóstico del ISR en términos reales

Los componentes y los efectos de los parámetros de esta serie trimestral, se sacan de manera idéntica que para el caso mensual:

Gráfico de componentes de la serie del ISR
Gráfico de efecto de los parámetros en la serie del ISR

4.2 Impuesto al Valor Agregado, IVA

Al usar Neural Prophet para la serie del IVA, pero con variables explicativas de la tasa vigente del IVA y el mismo PIB, obtuve el siguiente pronóstico:

Pronóstico del IVA en términos reales

5. Pre Cierre

Siendo fan de Prophet, Neural Prophet result[o igualmente sencillo de utilizar, y sus pronósticos también lucen bastante prometedores. Y a diferencia de Greykite me parece que son más adecuados, aún utilizando el módelo recién salido de la caja.

Al final de este breve análisis, me gustó que pude implementar una nueva herramienta. De manera similar a Prophet y a Greykite, Neural Prophet resulta en una caja negra donde se introducen datos y arroja pronósticos. No obstante, también me gustó.

Lamentablemente, me encontré con que al correr el mismo módelo, con los mismos datos, a veces me generaba diferentes pronósticos. Esto me parece que le resta un poco de confianza a este modelo.

Llegando a lo bueno, como objetivo de esta carrera, quiero evaluar estos pronósticos en términos de qué tan cercanos resultan a la siguiente observación. En esta quinta parte, los pronósticos para el tercer trimestre de 2021 resultaron los siguientes:

Aprovechando, que el pasado 8 de septiembre, el Gobierno Federal presentará su Iniciativa de Ley de Ingresos de la Federación para 2022, me parece oportuno extraer el siguiente pronóstico de la RFP para 2022:

Para ver la versión completa de este análisis, lo pueden consultar en mi repositorio de Github o la pueden ver directamente aquí.

6. ¡Arranca el duelo!

En resumen, los pronósticos de los 5 competidores para el tercer trimestre de 2021 resultaron los siguientes:

En un par de meses tendré las observaciones completas y evaluaré los resultados de estos modelos.

Aprovechando, que el pasado 8 de septiembre, el Gobierno Federal presentó su Iniciativa de Ley de Ingresos de la Federación para 2022, me parece oportuno extraer y comparar los pronósticos que me da cada una de estas metodologías de la RFP para 2022, y compararlas con el pronóstico federal:

Me gustaria comentar que con excepción de los pronósticos de Holt Winters, los pronósticos apuntan a una RFP menor que la estimada en la Ley de Ingresos de la Federación. Pero al final del día, no quiero evualar el pronóstico del Gobierno Federal, en términos de lo aquí presentado, porque al final del día tampoco sé qué es lo que pasará.

Más bien lo que buscó es averiguar cuál de estos modelos resulta mejor… aunque tendré que esperar, pues la RFP 2022 real se conocerá hasta abril de 2023 cuando el Gobierno Federal presente su Cuenta Pública anual.

Yo seguiré prácticando con más herramientas, y tal vez, agregue más herramientas a este duelo. Que comiencé la carrera, y ¡que las probabilidades estén siempre en su favor!… ¿Muy oscura esta frase? Bueno, pues ¡qué la fuerza los acompañe!

Las otras partes de este proyecto, las pueden consultar aquí:

--

--

Gonzalezhomar
tacosdedatos

Economista y entusiasta de modelación matemática, estadística, teoría de juegos y ciencia de datos. English spoken. https://gonzalezhomar.netlify.app