Autor: John Collins, Data Scientist @Notus
Introducción:
La inteligencia artificial está transformando rápidamente la forma en que trabajamos y resolvemos problemas complejos. En particular, ChatGPT ha demostrado un potencial impresionante en el ámbito de la programación, permitiendo a los usuarios interactuar con el código de una manera más natural y eficiente.
En este blog, exploramos cómo ChatGPT nos puede ayudar en tareas de Data Science, en particular, para construir modelos predictivos. Usamos Noteable, que es un plugin que permite a ChatGPT interactuar con Jupyter Notebooks. Facilita la ejecución de tareas de análisis de datos y programación directamente desde la conversación con ChatGPT.
Para explorar el potencial de esta nueva herramienta, escogimos como tema el VRS (Virus respiratorio sincicial), que es un virus respiratorio común que generalmente causa síntomas leves similares a los del resfriado, pero puede ser grave para los bebés y los ancianos. Predecir su propagación e impacto es de suma importancia para una correcta gestión por parte de las autoridades sobre todo ahora, que este virus está teniendo una incidencia importante en la ocupación de camas de urgencia para niños en Chile.
El objetivo principal de este caso de estudio es contrastar el desarrollo tradicional de analítica (manual) con la programación asistida por ChatGPT + Noteable, destacando las ventajas y los posibles desafíos de cada método. Pese a ser un tema de gran importancia, no nos centraremos tanto en la precisión de las predicciones, sino en la eficiencia y accesibilidad de los diferentes enfoques de programación.
Metodología
Para realizar este caso de estudio, los pasos que seguimos fueron los siguientes:
- Metodología Tradicional: Llevamos a cabo un preprocesamiento de los datos y desarrollo del modelo de predicción de forma manual.
- Metodología IA: Repetimos la metodología usando asistencias de ChatGPT y Noteable.
- Comparación: Finalmente, se compararon los resultados y la experiencia que se tuvo utilizando ambas metodologías.
Por otro lado, la data escogida para este caso de estudio corresponde al conteo oficial de circulación de virus respiratorios del ISP (Instituto de Salud Pública de Chile), donde tenemos información por semana epidemiológica desde el 2019 hasta hoy (junio 2023).
Metodología Tradicional
Primero, se realizó un preprocesamiento de los datos, que fue completado en un par de horas. Lo más rescatable para mencionar es que la data venía con varias filas de totales y subtotales que había que omitir, además que era necesario cambiar las fechas a otro formato (datetime).
El modelo de predicción escogido fue SARIMA, que es un modelo estadístico que se utiliza comúnmente para el análisis y la predicción de series temporales. SARIMA combina varios componentes (Autorregresivo, media móvil, integrado y estacional) para capturar diferentes patrones en los datos de series temporales.
Luego, se entrenó el modelo con la información disponible, desde Enero de 2019 hasta Junio del año 2022. Se calcularon 6 semanas de predicción, las que fueron comparadas con los datos reales para la selección de los mejores parámetros para el modelo.
Como ejercicio final usamos el modelo para predecir la próximas 6 semanas de este año, usando los mismos parámetros definidos para el 2022, obteniendo los siguientes resultados:
Con esto, terminamos el desarrollo de un modelo que nos permite predecir el número de casos positivos de VRS en las próximas 6 semanas. Tiempo total de desarrollo: 6 horas aproximadamente.
Metodología IA: ChatGPT + Noteable
Ahora es el turno de probar las herramientas que nos entrega ChatGPT para este caso de estudio. El objetivo sigue siendo el mismo, realizar predicciones utilizando la misma base de datos usada anteriormente. Empecemos, así se ve el primer prompt y la respuesta:
Se ve bien! Sin embargo, cometió 2 errores:
- No existe la columna ‘index’ en la data original
- La columna ‘Año’ y sus datos tienen un carácter ‘◢’ inicial.
Afortunadamente, ChatGPT se da cuenta de estos problemas al tratar de compilar celdas de código, lee el error y automáticamente se corrige, como vemos a continuación:
A continuación, termina el preprocessing correspondiente descartando las líneas con “totales” y “subtotales” y transformando la fecha datetime.
Luego, ya habiendo preprocesado la data, comienza el trabajo de creación de un modelo de predicción.
Ya está creado satisfactoriamente el modelo de predicción, de acuerdo a los parámetros que eligió ChatGPT luego de inspeccionar los gráficos de autocorrelación y autocorrelación parcial. Sorprendente! Hasta acá llevamos solo un par de horas de trabajo.
Sin embargo, en el gráfico que nos entrega Noteable vemos lo siguiente:
Tenemos un problema. Lo que ocurre es que la data en azul (original) tiene índice del tipo ‘datetime’, a diferencia de la naranja (predicción) cuyo índice es simplemente numérico. Al tratar de graficar ambos considera el índice numérico como ‘UNIX time’, que contabiliza el tiempo transcurrido desde el 1 de enero del año 1970. Es por eso que se ubica en 1970 según el eje X.
Al tener identificado el problema, podemos explicarlo en Prompt y dar instrucciones bien precisas a ChatGPT para solucionarlo. Por otro lado, en aras de un ejercicio más didáctico, podríamos simular que no conocemos la solución y poner a prueba a ChatGPT, describiendo el problema para que intente resolverlo:
Una prometedora respuesta, revisemos el nuevo gráfico:
Listo, acabamos de predecir las próximas 52 semanas (no 6 porque olvidé escribirlo en el chat) de casos positivos de VRS en Chile, excelente! El proceso fue mucho más cómodo en comparación con la metodología tradicional, resultando ser más simple y tomando solo la mitad del tiempo previamente empleado.
Ejercicios adicionales
Se hicieron 2 ejercicios adicionales para explorar más allá las capacidades de la metodología IA.
- Replicabilidad: Usamos ChatGPT para rápidamente replicar la metodología con otras enfermedades que almacena la data del ISP, una tarea que tomaría considerablemente más tiempo de manera manual.
- Modelo más complejo: Intentamos desarrollar un modelo de mayor complejidad, LSTM (Long short-term memory), para obtener un mejor resultado y también aprender sobre su implementación en pytorch. Acá los resultados no fueron muy favorables. ChatGPT tuvo muchos problemas en varias etapas de este flujo de trabajo, principalmente en el manejo de los inputs y outputs del modelo. La mayoría de los problemas surgieron debido a errores de rangos, dimensiones, índices y tipos de variables con las que interactúa el modelo.
Conclusiones y aprendizajes
El primer aprendizaje importante en este proceso se relaciona con el preprocesamiento de los datos. En esta ocasión, el inicio fue lento debido a dificultades para realizar la primera lectura del archivo, ya que no se lograba identificar correctamente el ‘path’. Finalmente, tuvimos que recurrir a la lectura manual de los archivos para poder continuar utilizando la herramienta.
Otro aprendizaje muy importante en este proceso fue que es muy conveniente explicar claramente el contenido del archivo que se quiere procesar, el nombre de las columnas y los datos. En varias ocasiones, se hizo referencia a una columna con fechas como ‘Dates’ cuando ese no era el nombre correcto.
Entrando ya a lo que son las conclusiones, a continuación se presenta una tabla comparativa con los pros y contras de utilizar ambas metodologías de programación:
Comparativa | Manual | ChatGPT+Noteable |
---|---|---|
Velocidad | Es más rápido en tareas complejas, siempre y cuando estén dentro del alcance de habilidades del programador. | En tareas simples es más rápido. |
Replicabilidad | Depende de la capacidad y orden del programador. | Claro ganador, demuestra una gran capacidad en este ámbito. |
Orden y documentación | Depende de cada programador. | Todas las líneas de código vienen comentadas y también agrega celdas de markdown de documentación si se solicita. |
Depuración y manejo de errores | Errores complejos es más eficiente depurarlos de manera manual, más la posible ayuda de chatGPT (sin Noteable). | Errores simples son detectados y corregidos al instante. Por otro lado, errores complejos terminan en un loop. |
Accesibilidad | Requiere un alto nivel de programación. | El chat es intuitivo y fácil de usar, incluso para aquellos que no tienen experiencia previa en programación. |
Por otro lado, mi apreciación personal final de las tecnologías por separado fue:
- ChatGPT: 8/10. Muy bueno, pero mejorable aún.
- Noteable: 5/10. Buen concepto e idea, pero su ejecución aún necesita refinamiento. Estaremos muy atentos a nuevas versiones y herramientas.
Es importante mencionar que tuve la oportunidad de asistir a unos talleres dirigidos por el Director of Growth de Noteable. Durante su demostración, la plataforma tuvo varios contratiempos, lo que refuerza la necesidad de mejoras adicionales. Noteable puede ser ideal para proyectos sencillos y demostraciones rápidas (como los videos de «proyecto de ciencia de datos en 5 minutos» que se ven en YouTube), pero aún necesita ser pulido para manejar proyectos de mayor complejidad de manera eficiente.
Para aquellos que estén interesados en profundizar en este ejercicio, he adjuntado ambos scripts a continuación:
- Metodología tradicional
- Metodología IA (Advertencia: Está lleno de errores, decidí no borrarlos para mostrar como queda realmente el notebook)
Estos documentos proporcionan una visión detallada de los procesos y métodos utilizados en nuestro análisis.
Posibles usos
La integración de ChatGPT con Noteable (o Code Interpreter) e incluso otros plugins como Web Pilot, abre un abanico de posibilidades impresionante. Imagina la facilidad de interactuar con diversas APIs en una sola conversación con ChatGPT, o la capacidad de buscar información en la web, extraerla y procesarla en un notebook de Noteable, todo en un solo flujo de trabajo.
Por ejemplo, en un ejercicio que realicé, pregunté “¿Chile tiene impuestos corporativos altos o bajos? Dame la media de todos los países, el impuesto corporativo de Chile y en qué rango o posición se encuentra”. ChatGPT utilizó Web Pilot para encontrar la información en la web, y luego Noteable para hacer web scrapping y procesar los datos.
Este escenario no solo simplificaría la manipulación de APIs y la extracción de datos de la web, sino que también abriría puertas a nuevas oportunidades de automatización y eficiencia. La combinación de estas herramientas puede transformar la forma en que interactuamos con la información y los datos, haciendo que el análisis y la toma de decisiones sean más accesibles y eficientes que nunca.
Palabras finales
ChatGPT, en combinación con Noteable, es una herramienta poderosa que puede aportar significativamente a la productividad de un Data Scientist o de un Analista de Datos. Sin embargo, es importante recordar que, aunque es inteligente, no es infalible. Durante el desarrollo de este proyecto, hubo ocasiones en que se cometieron errores no solo de compilación, sino también en la manipulación de datos, como el descarte incorrecto de filas y columnas. Debido a esto, es crucial que siempre haya una revisión por parte de una persona con conocimientos sólidos en el área.
Recomendaría encarecidamente el uso de esta combinación de herramientas para los primeros acercamientos a los proyectos, MVPs, incluyendo las etapas de preprocesamiento inicial, análisis exploratorio, modelado y visualización. Para análisis más detallados y precisos, ChatGPT puede seguir siendo un recurso valioso, pero más como un asistente que como el conductor principal.
Estamos al borde de una nueva era de productividad y eficiencia en la programación y el análisis de datos. Los avances que vienen son emocionantes y prometedores. Estos avances nos permitirán ahorrar tiempo y esfuerzo en tareas repetitivas y tediosas, liberándonos para enfocarnos en la creatividad y la resolución de problemas más complejos. Además, la capacidad de colaborar con máquinas en tiempo real y obtener respuestas rápidas y precisas transformará la forma en que desarrollamos aplicaciones y analizamos datos. Estamos ante un futuro emocionante lleno de nuevas oportunidades y logros en el ámbito de la programación y el análisis de datos.