Herramientas para Pronósticos de Series de Tiempo en Python — Parte 4: Greykite

El Cometa entra al duelo de herramientas en Python

Gonzalezhomar
tacosdedatos
7 min readSep 30, 2021

--

Foto: Iwan Shimko en Unsplash

Cómo señalé en la tercera parte de esta entrega, una herramienta para hacer pronósticos que me mucho gusto fue Prophet, cuyas implementaciones pueden ver aquí para la anterior entrega y aquí para este nuevo duelo:

En respuesta a esta herramienta desarrollada por Facebook, el equipo de inteligencia artificial de LinkedIn desarrollo el algoritmo Silverkite y un paquete de Python para implementarlo llamado Greykite, con el cual planea competir con Prophet. Así que inspirado por estas publicaciones, decidí incluir esta herramienta en mi duelo de pronósticos:

2. Greykite y Silverkite

Al igual que Prophet, el algoritmo de SilverKite fue desarrollado para trabajar bien con series de tiempo, a escala (múltiples series), y como lo señala el paper de Silverkite, cuando este algoritmo fue desarrollado, tenía los siguientes objetivos:

- Flexibilidad: El modelo debe ser capaz de manejar series de tiempo con tendencia, estacionalidad, días feriados, quiebres, autoregresión, entre otras. Por lo tanto, se le permite al usuario seleccionar cuales de los componentes necesitan y ajustar el modelo seleccionado. No obstante, el modelo trae valores predeterminados que permiten usar Silverkite directamente.
- Interpretabilidad: Para Silverkite no solo importa el desempeño, sino que también importa su interpretación. Para ello, incluye gráficas y plantillas para mejorar y explicar los pronósticos con supuestos claros.
- Velocidad: Silverkite permite usar plantillas para obtener pronósticos de manera rápida, por lo que sus pronósticos pueden ser implementados a escala rápidamente.

A diferencia de Prophet, en Silverkite no hay una ecuación que represente el modelo predictivo. En su lugar, presentan un diagrama con los procesos que hace el algoritmo:

- En un primer paso, extrae características que puedan influir en el modelo, como días feriados, tendencia estacionalidad.
- En segundo lugar, pasa dichas características a una base apropiada (como series de Fourier que también usa Prophet), para un modelo aditivo.
- En tercer lugar, Silverkite busca quiebres en la tendencia o en la estacionalidad.
- De las características extraídas en el segundo y tercer paso, busca un modelo de aprendizaje automático para explicar dichas variables.
- Y finalmente, de los residuales que quedan, busca un modelo de varianza condicional para capturar la volatilidad que aún persista.
- El usuario de Greykite, es decir, yo, puedo incluir variables explicativas o modificar los días feriados.

** Nota importante **

Actualmente trabajo Python desde la distribución anaconda, puesto que desde allí me resulta muy sencillo instalar paquetes en su propia terminal con el comando conda, ya que automáticamente detecta los paquetes faltantes y resuelve los conflictos. Sin embargo, al estar instalando algunos paquetes de pip, corrompí mi único “ambiente” (enviroment) y para resolverlo, la solución más fácil que encontré fue desinstalar y reinstalar completamente anaconda.

Y precisamente, dado que este paquete de Greykite solo se encuentra disponible en pip y no en conda (debido a que es relativamente nuevo), recomiendo crear un ambiente propio para su implementación. Esto evitará posibles conflictos con otros paquetes que pueden ser instalados después (como plotly, que funciona bastante bien con las gráficas de Greykite).

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

3. Series Mensuales

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í. En resumen, tengo 2 bloques de series: mensuales y trimestrales.

De mis 2 bloques de series, ahora iniciaré con la serie mensual de IEPS a las bebidas alcohólicas. Como antes, solo dejare el análisis completo para esta serie y en el resto de las series mensuales solo dejaré los resultados.

Llama mi atención, que cada herramienta para usar Greykite tiene ser especificada en la carga de paquetes (se aceptan sugerencias de simplificación):

En general, para utilizar Greykite en las series mensuales, solo tengo que crear los meta parámetros que servirán para identificar el formato de la serie: columna con la variable temporal, la variable a explicar, su frecuencia e incluso el formato de la fecha. Además modifiqué la estacionalidad para no considerar del tipo diaria y semanal, puesto que mis datos son mensuales.

Aquí destacó que los datos que necesito cargar a Greykite tienen una estructura similar a Prophet: una columna ts con el dato de fecha y una columna y con los datos de la variable a analizar; en teoría puedo modificar esto, pero así venía en la documentación, y ¿quién soy yo para modificar la documentación?

Como nota curiosa, Prophet realizaba el análisis de manera automática y poco me había detenido a analizar la frecuencia (M para mensual, Q de quaterly para trimestral); sin embargo Greykite es más exigente con la frecuencia, y tuve que señalar MS por Monthly Start para considerar la fecha inicial de cada mes, pues de otro modo, sólo con la frecuencia M, Greykite no la aceptaba.

3.1 IEPS Bebidas Alcohólicas

Con los parámetros generales para todas las series mensuales, puedo utilizar Greykite directamente salido de la caja con muy pocos comandos, por lo que el análisis completo para ajustar la serie de IEPS de bebidas alcohólicas se pueden hacer con los siguientes comandos:

Con los resultados ajustados, se puede mostrar como ajusta el modelo intra muestra (backtest) con los siguientes comandos:

Pronóstico intra muestra de IEPS de bebidas alcohólicas

Sin embargo, la parte interesante (para mí), la encuentro en los pronósticos que me arroja hacia adelante, los cuales se obtienen con el siguiente comando:

Pronóstico de IEPS a las bebidas alcohólicas

Y finalmente, se pueden analizar los componentes del pronóstico, con el siguiente comando:

Componentes del pronóstico de IEPS a las bebidas alcohólicas

Si bien, no me gusto del todo los pronósticos que arroja, dejaré en la conclusión mis comentarios sobre estos resultados.

3.2 IEPS Cervezas

Para el caso del IEPS a las cervezas, solo mostraré los resultados de su pronóstico:

Pronóstico del IEPS a Cervezas

3.3 IEPS Tabacos

Para el caso del IEPS a tabacos, solo mostraré los resultados de su pronóstico:

Pronóstico del IEPS a tabacos

3.4 IEPS Gasolinas y Diésel

Para el caso del IEPS federal a las gasolinas y diésel, solo mostraré los resultados de su pronóstico:

Pronóstico del IEPS federal a las gasolinas y diésel

3.5 IEPS Bebidas Saborizadas

Para el caso del IEPS a las bebidas saborizadas, solo mostraré los resultados de su pronóstico:

Pronóstico del IEPS a las bebidas saborizadas

3.6 IEPS Alimentos

Para el caso del IEPS a los alimentos de alta densidad calórica, solo mostraré los resultados de su pronóstico:

Pronóstico del IEPS a los alimentos de alta densidad calórica

3.7 Impuesto a la Importación

Para el caso del impuesto a la importación, solo mostraré los resultados de su pronóstico:

Pronóstico del impuesto a la importación

3.8 Ingresos Petroleros

Para el caso de los ingresos petroleros de la RFP, solo mostraré los resultados de su pronóstico:

Pronóstico de los ingresos petroleros de la RFP

Con todos los pronósticos de las series mensuales, los extraje con el siguiente comando:

4. Series Trimestrales

En general, para utilizar Greykite en las series trimestrales, solo tengo que volver a crear otros meta parámetros que le servirán a Greykite para identificar el formato de la serie: columna con la variable temporal, la variable a explicar, su frecuencia (QS) e incluso el formato de la fecha. Esto lo hice con los siguientes comandos:

4.1 Impuesto Sobre la Renta, ISR

Con ello, y al igual que en las series mensuales, la carga para que Greykite haga el ajuste trimestral de la serie del ISR resulta bastante directa, solo tuve que agregar las variables explicativas:

El ajuste del pronóstico que me da esta herramienta me parece más adecuado que en las series mensuales:

Pronóstico del ISR

4.2 Impuesto al Valor Agregado, IVA

En cuanto a la serie trimestral del IVA, el análisis es muy similar, con los siguientes resultados:

Pronóstico del IVA

5. Conclusión

Si bien Greykite tiene el objetivo de competir con Prophet, sus pronósticos, al menos en el caso de las series mensuales, no me gustaron del todo. Pensé que tenía algo que ver con las fechas, pero luego de leer otras fuentes, veo que los pronósticos de Greykite son poco volátiles:

https://www.kaggle.com/kaustubh93/time-series-forecasting-of-dogecoin-using-greykite

Creo que aún podría introducir ajustes a Greykite para que los pronósticos tengan un mejor comportamiento, pero de momento, y directamente salidos de la caja, estos fueron los resultados que arrojó. Que fue la misma situación para Prophet, con pronósticos directamente salidos de la caja.

De hecho, en las series trimestrales, me gustaron los resultados de Greykite, lo cual creo que se debe a que introduje variables explicativas. Por tanto, quedo atento a sugerencias o recomendaciones sobre que ajustes puedo hacer en el caso de las series mensuales.

Al final de este breve análisis, me gustó que pude implementar otra herramienta, a pesar de que Greykite resulta en una caja negra donde se introducen datos y arroja pronósticos. En conclusión, me gustó.

Sin embargo, y como señalé en las entregas anteriores, quiero evaluar estos pronósticos en términos de qué tan cercanos resultan a la siguiente observación. En esta cuarta parte, los pronósticos para el tercer trimestre de 2021 resultaron los siguientes:

Aprovechando, que el 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 el pronóstico que me da Greykite de la RFP para 2022 (en la última parte, juntaré todos los pronósticos):

Para ver la versión completa de este análisis, lo pueden consultar en mi repositorio de Github o la pueden ver directamente aquí. Vayan a darse una vuelta por las entregas anteriores de esta serie aquí:

Sin más por el momento, eso es to, eso es to, eso es todo amigos.

--

--

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