Giter Club home page Giter Club logo

kokit0 / nw4dayschallenge_atrasovuelos Goto Github PK

View Code? Open in Web Editor NEW
1.0 1.0 0.0 2.43 MB

Machine Learning馃 Predicci贸n de Atraso en Vuelos: Exploraci贸n de datos, modelos de clasificaci贸n (XGBoost, SVM), preparaci贸n de datos (One-Hot Encoding, PCA), y una interfaz de usuario simple en HTML + Flask. Herramientas utilizadas: Python, scikit-learn, XGBoost, Flask, y Postman.

Home Page: https://github.com/Kokit0/NW4daysChallenge_AtrasoVuelos

License: MIT License

Jupyter Notebook 98.64% Python 0.72% HTML 0.64%
api flask mlops mlops-workflow postman-api python rest-api

nw4dayschallenge_atrasovuelos's Introduction

NW4daysChallenge_AtrasoVuelos

An谩lisis del proyecto de Juan sobre Predicci贸n de Atrasos en Vuelos

Este proyecto se centra en la evaluaci贸n y mejora de un modelo de predicci贸n de atrasos de vuelos y su implementaci贸n en una interfaz de usuario, con el objetivo de poner a prueba su eficiencia mediante una API REST y un test de estr茅s.

Introducci贸n: Durante el desarrollo de este proyecto, se llevaron a cabo diversas tareas de an谩lisis de datos y modelado con el objetivo de predecir atrasos en vuelos. Se exploraron los datos iniciales y se aplicaron varias t茅cnicas de procesamiento, incluyendo la construcci贸n de nuevos atributos y la estandarizaci贸n de los datos. Adem谩s, se probaron varios modelos de aprendizaje autom谩tico, se ajustaron hiperpar谩metros y se evaluaron sus resultados. Este es un notebook de investigaci贸n basado en lo creado por Juan y budc贸 expandir ciertos aproaches que Juan n cubri贸, en especial, implementar t茅cnicas distintas en los modelos utilzados e intepretaciones especificas, se detalla el proceso seguido y se presentan los resultados obtenidos. A modo de gu铆a se sugiere focalizar el Notebook en 3 fases.

  • La primera: exploratoria con modificaciones en los datos y exposici贸n gr谩fica simple como tablas informativa unicamente.

  • la seguna modificaci贸n y preparaci贸n de los datos (imputaci贸n, eliminaci贸n, t茅cnicas de regularizacion, encoding, PCA ,etc)

  • y la ultima, probar distintas estrat茅gias con modelos que adhieren mejor aun analisis de clasificaci贸n predictorio de caracter preliminar binario como Atraso/no atraso.

Exploraci贸n de Datos: Se inici贸 el proyecto realizando una exploraci贸n de los datos, identificando caracter铆sticas clave y tendencias. Se observ贸 que los datos presentaban desaf铆os, como el desequilibrio entre las clases de atraso, exceso/ausencia de datos para algunosatributos como algunos destinos y la necesidad de manejar atributos categ贸ricos como dificultad general.

Preprocesamiento de Datos: Para abordar los desaf铆os, se realizaron los siguientes pasos:

  1. Reconstrucci贸n de Datos: Se reconstruyeron los datos previamente procesados, mejorando la selecci贸n de columnas y descartando aquellas que no eran relevantes.

  2. Construcci贸n de Nuevos Atributos: Se valid贸 la creaci贸n de atributos como "dif_min," que refleja la diferencia m谩xima entre los tiempos de vuelo planificados y operados, y "atraso_15," un indicador binario de atrasos mayores a 15 minutos. son un buen proxy para el alcance preliminar del proyecto.

  3. One-Hot Encoding: Para manejar atributos categ贸ricos, se aplic贸 la t茅cnica de one-hot encoding.

  4. Eliminaci贸n de Datos No Relevantes: Se eliminaron filas con valores alfanum茅ricos en caracter铆sticas espec铆ficas, ya que representaban un peque帽o porcentaje del conjunto de datos. (Feature: Vlo-I/Vlo-O | 0.02% erased).

Modelado: Se probaron varios modelos de aprendizaje autom谩tico, incluyendo Regresi贸n Log铆stica, SVM, y XGBoost. Se realizaron ajustes de hiperpar谩metros y se aplicaron t茅cnicas de regularizaci贸n como Lasso y Ridge junto a tunning se sus distintas estrat茅gias para optimizar timepo de procesamiento y resultado esperado. Adem谩s, se utiliz贸 la t茅cnica de sobremuestreo SMOTE para abordar el desequilibrio de clases.

Resultados: El modelo final de XGBoost con SMOTE y estandarizaci贸n mostr贸 mejoras significativas en t茅rminos de precisi贸n y recall en comparaci贸n con los modelos anteriores. El F1-score balanceado indic贸 un equilibrio razonable entre precision y recall. La precisi贸n general del modelo fue del 82%, aunque la precisi贸n para la clasificaci贸n de "Atraso" sigue siendo un 谩rea de mejora pero un recall de un 0.78 es un buen paso en la direcci贸n correcta.

M茅tricas XGBoost Clasificaci贸n M茅tricas XGBoost Clasificaci贸n

Pr贸ximos Pasos del modelo y sus dependencias

El proyecto se encuentra en una etapa avanzada, y se espera que se completen las tareas pendientes para lograr una soluci贸n funcional y eficiente. La implementaci贸n de la API REST y la prueba de estr茅s son muchisimo mas sencillas de implementar y resolver que mejorar la precisi贸n y fitness de un modelo o b煤squeda de mejores datos, feature engineering, etc. Por lo que me gustar铆a completar este proceso y ver como optimizarlo y automatizarlo. Creo que son pasos cruciales para demostrar la capacidad del modelo en un entorno real.

Desaf铆os Enfrentados con el modelo

  • Sobreajuste (Overfitting): Inicialmente, el modelo ten铆a problemas de sobreajuste, lo que requer铆a ajustes adicionales.

  • Desbalance de Datos: Los datos presentaban un desbalance entre vuelos a tiempo y con atrasos, lo que afect贸 la calidad del modelo.

  • Limitaciones de Recursos: Restricciones de hardware y tiempo de procesamiento limitaron la optimizaci贸n de hiperpar谩metros y modelos. Mas tiempo o mas recursos hubieran mejorado este resultado.

(el Jupyter Notebook contiene anotaciones y observaciones mucho mas detalladas sobre el desarrollo, alcances y limitantes de este analisis. ver en Challenge_NW_MLE_MLOPS_Atraso_vuelos_v2.ipynb)

Interfaz de Usuario

Se cre贸 una interfaz de usuario simple en front.html, que en teor铆a permite a los usuarios ingresar informaci贸n relevante para la predicci贸n, como el operador de vuelo y el mes. Esta interfaz deb铆a de actuar como el punto de entrada para interactuar con el modelo. en frontv2.html constru铆 uno mas avanxzado que budsca hacer lo mismo pero este es un ejemplo de la interfaz de usuario que utilizar谩 mi modelo y c贸mo los usuarios pueden interactuar con 茅l. Mi idea es que lso usuasrios interactuen seleccionando lso operadores, mes de vuelo, tipo de vvuelo y sigla destino para que el modelo pueda devolverles una idea general de como se comportar铆a su viaje, con posibilidad de retraso o no y su probabilidad numerica. Lo ideal ser铆a poder quizas insertar los atributos de ['OPERA', 'MES', 'TIPOVUELO', 'SIGLADES', 'DIANOM','temporada_alta', 'dif_min', 'periodo_dia'] con nombres mas claros para interacci贸n con el usuario. Algunos pueden ser redundantes (como temprada_alta y MES ya que uno puede describir al otro), pero esto depende de la decisi贸n final de negocio.

Pendientes y Pasos Sugeridos

A pesar de los avances, a煤n quedan tareas por completar para alcanzar la meta final:

  1. Implementaci贸n de API REST: El modelo se export贸 y serializ贸 en formato .pkl. Sin embargo, persisten problemas t茅cnicos al intentar conectar el modelo a una API REST. Las pruebas en un entorno local (mi notebook) se han realizado, pero la falta de acceso desde el navegador (distintos fueron probados) podr铆a estar relacionada con limitaciones propias de mi notebook. Una limitaci贸n imprevista. Es posible que se requieran configuraciones en dispositivos preparados para este tipo de procesos m谩s avanzados. Si yo dispusiera de un dispositivo m谩s moderno, se esperar铆a una implementaci贸n exitosa de la API REST. Cre茅 un mockup del README.md de como podria ser el archivo para que un usuario ejecute el proyecto ya en modo funcional. este qued贸 guardado como InfoReadme.md.

  2. Prueba de Estr茅s (Stress Test): Se avanz贸 en inicializar las herramientas de prueba de estr茅s utilizando herramientas como wrk para evaluar el rendimiento del sistema bajo una alta carga, con el objetivo de procesar eficientemente al menos 50,000 solicitudes en 45 segundos. Mont茅 el request en un Postman https://web.postman.co/ para forzar los requests pero sin acceso desde mi computador al puerto 'http://127.0.0.1:5000/predecir_atraso' que dise帽茅 en la app.py por lo que no se logra aun hacer la validaci贸n del funcionamiento del modelo en local.

Si se logr贸 hacer un "handshake" entre Postman y mi servidor local desde el software en linea usando http://127.0.0.1:5000/predecir_atraso con un breve codigo el cual retorn贸 exitosamente.

Hand shake proof

Postman recibiendo/enviando requests - Satus 200 OK en Verde

Esto nos indica que la configuraci贸n posterior necesaria para las pruebas de restfull API y capacidad de carga del modelo en Cloud est谩 algunos pasos mas adelante nomas. Ser铆a genial extender mas esta investigaci贸n con soporte de algun colega mas Senior en dise帽o de Redes y Sistemas Infraestructura a este nivel para verificar su correcto funcionamiento pero, so far, logramos operar con 茅xito hasta esta instancia.

  1. Despliegue en la Nube: Idealmente, se considerar铆a desplegar la aplicaci贸n en una plataforma en la nube para garantizar su disponibilidad y escalabilidad. En lo personal, puedo manejar SageMaker, Elastic (de AWS) y he desarrollado pruebas de concepto con Azure web pero me limitan los costos para probar la eficiencia del modelo una ves montado y no dispongo de credito para ejecutar tales cloud deployment. Tambien cuento con un proyecto End to End e MLFlow que da muestra de mejor dise帽o del sistema de carpetas (que pseudo-ilustr茅 con mi Generador_Template.py) creando el entorno de folders fudacional para que un modelo persista, uso de scripts para reconstruir automatizadamente los requerimientos del modelo que se est茅 construyendo y desplegando , CI/CDI con su Pipeline, config.yaml, params.yaml (check de parametros correctos de las features previo validaci贸n) e input / output para los productos generados siendo guardados en folders como Constants, Components y Artifacts. Espero mejorarlo para exponerlo en breve.

Conclusi贸n: En resumen, este proyecto involucr贸 un proceso completo de exploraci贸n, preprocesamiento y modelado de datos para predecir atrasos en vuelos. Hubo varios cambios de direcci贸n en su desarrollo, como la prueba con otros modelos que no se adjuntaron por entregar nulo valor anal铆tico. pero sirvi贸 como referencia y descarte del tipo de objetivo del analisis y el tipo de variables en juego. Si bien con XGboost se lograron mejoras notables en la precisi贸n y el recall luego de realizar multiples combinaciones de otras t茅cnicas y 'tuneo', todav铆a existen oportunidades para ajustes adicionales y mejoras en la detecci贸n de atrasos. Como ejercicio y 'maqueteo', el proyecto representa un avance significativo en la direcci贸n correcta y sienta las bases para futuros desarrollos y refinamientos, claro est谩, una ves se seleccione un dataset definitivo optimo y balanceado y un objetivo conciso a explorar bajo los algoritmos preliminares.

Librer铆as Claves Utilizadas:

  • Pandas
  • Scikit-learn
  • XGBoost
  • Imbalanced-learn (SMOTE)
  • Matplotlib
  • Seaborn

Duraci贸n del Proyecto: El proyecto se realiz贸 en un total de aproximadamente 8-9 horas distribuidas en varias sesiones de trabajo a lo largo de 4 d铆as efectivos.

WORKFLOW:

Clonemos el repository

https://github.com/Kokit0/NW4daysChallenge_AtrasoVuelos.git

Crea el entorno (Conda o custom) luego de abrir y cargar el repositorio.

en terminal VSCode (o tu Git BASH en la carpeta donde descargues el proyecto)

python -m venv NWMLEMLOPSenv

Recuerda activar tu entorno.

NWMLEMLOPSenv/Scripts/activate

Instalar dependencias

Estas son dependencias basales para correr el modelo desde un repositorio con su propio sistema de folder y files mas desarrollado. Sugiero antes e generar las carpetas y otros, para ver el modelo en ejecuci贸n en modo prueba, lo mas simple es activar pimero un entorno python y verlo directamente en el '.ipynb' https://github.com/Kokit0/NW4daysChallenge_AtrasoVuelos/blob/main/notebooks/Challenge_NW_MLE_MLOPS_Atraso_vuelos_v2.ipynb

pip install -r .\requirements.txt

Ejecutar generador_Templado.py (si deseas una instancia limpia custom)

Este templado es una herramienta quer cree para generar el sistema decarpetas inicial sobre el cual se puede iterar en el mismo repositorio copiado en su propia IDE. Es solamente un headstart y permite comenzar a organisar el repositorio para mayores systematizaciones. En otro ptroyecto qu estoy desarrollando en paralelo a este (https://github.com/Kokit0/End-to-End-MLP-with-MLFlow), he creado un end to end con MLFlow que explora mucho mas a fondo la generaci贸n de estos templados de kickstart. por ahora lo usar茅 como prueba de concepto b谩sica funcional.

python Generador_Template.py  

Actualizar dataset segun predilecci贸n. En nuestro caso utilizaremos 'dataset_SCL.csv' como el dataset sin limpieza. el Notebook genera un dataset "limpio" con el cual luego se entrenar铆a el modelo. Para recrear dersde cero: utilizar dataset_SCL.csv.

https://github.com/Kokit0/NW4daysChallenge_AtrasoVuelos/raw/main/data/dataset_SCL.csv

Ejecutemos la app Flask (app.py)

python app.py

otros no relevantes pero parte del proceso de exploraci贸n y construcci贸n de este Repositorio

  • Constru铆 algunos archivos intermediarios que me sirvieron para verificar funcionalidades a lo alrgo del proceso, desde versiones de calling (handshake entre servidor e instancia local) para Postman HandShakeTestapp.py. Este simplemente al ser montado, genera un calculo gausseano lo que prueba que el poder de calculo es viable desde esta plataforma y la comunicaci贸n + computaci贸n en nuestra "caja negra" estan ocurriendo exitosamente.

  • Lo mismo con los frontv1.html que no son de utilidad en el esquema del sistema de archivos de este repositorio pero si paso intermedio para el desarrollo del dise帽o inicial del .html para la pagina que con la que el usuario podr铆a interactuar.

  • adem谩s, est谩 Research_notebook01.ipynb que es un placeholder que genero automaticamente con mi Generador_Templado.py. Este notebook es el autom谩tico generado sobre el que fui trabajando el modelo final. No tiene contenido y solo lo dejo en el repositorio como evidencia de su potencial al automatizar la creaci贸n de los file types necesarios para construir un folder system para un modelo de persistencia.

  • Version Control Por 煤ltimo, se decidi贸 no realizar control de versiones estrictos, ya que todo el desarrollo inicial consisti贸 en dise帽ar el Jupyter Notebook, explorar el objetivo del desaf铆o y luego redactar el generador templado que luego se pobl贸 directamente con los archivos. Se realizaron comandos de commits y push de todos los archivos a medida que fueron realizados, pero no se requiri贸 de branching debido a que se trat贸 de ejecuciones en fr铆o sin necesidad de paralelizar labores con control de versiones. En InfoReadme.md dejo informaci贸n de contacto y minimas instrucciones de run del repositorio funcional como mockup.


Licencia

Este proyecto est谩 bajo la licencia [Licencia MIT]. Puedes consultar el archivo [LICENSE.md] para obtener m谩s detalles.

nw4dayschallenge_atrasovuelos's People

Contributors

kokit0 avatar

Stargazers

 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    馃枛 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 馃搳馃搱馃帀

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google 鉂わ笍 Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.