Proyecto desarrollado en el marco del Hackatón ONE – No Country 2025.
FlightOnTime es una solución predictiva que estima la probabilidad de que un vuelo despegue puntual o con retraso, a partir de datos históricos y características del vuelo.
Aviación Civil / Logística / Transporte Aéreo
Empresas aéreas, aeropuertos y pasajeros que dependen de la puntualidad de los vuelos.
Crear un MVP (Producto Mínimo Viable) que:
- Reciba información de un vuelo
- Procese los datos usando un modelo predictivo
- Devuelva:
- el estado del vuelo (Puntual / Retrasado)
- la probabilidad asociada
[ Cliente / Frontend ]
|
v
[ Backend Spring Boot ]
| | |
| | └── Base de Datos MySQL
| |
| └── Endpoints /stats
|
└── HTTP
v
[ Microservicio Flask ]
|
└── Modelo ML (.joblib)
Integración, persistencia, estadísticas y APIs REST
- Estefanía González
- Gabriel Romero
- Juan Gómez Martínez
- Javier Alberto Chávez Córdova
Limpieza de datos, entrenamiento y exportación del modelo
- Luis Cavero
- Cristian Saenz
Visualización y consumo de APIs
- Gabriel Romero
- Java 17
- Spring Boot 3.4.1
- Maven 4.0
- API REST
- MySQL
- Spring Data JPA
- Lombok
- Python 3.10+
- Flask 3.0.0
- flask-cors 4.0.0
- scikit-learn
- joblib 1.3.2
- pandas 2.3.3
- numpy 2.3.2
- waitress 2.1.2
- Jupyter Notebook
- IntelliJ IDEA
- Visual Studio Code
- Git & GitHub
- Insomnia / Postman
El modelo fue entrenado utilizando datasets públicos de Kaggle:
- https://www.kaggle.com/datasets/hrishitpatil/flight-data-2024/data
- https://www.kaggle.com/datasets/aadharshviswanath/flight-data/data
Incluyen información histórica de vuelos y variables operativas, complementadas con datos climáticos.
-
Archivo: champion_clima.joblib
-
Tipo: sklearn.pipeline.Pipeline
-
Clasificador: HistGradientBoostingClassifier
Numéricas:
- crs_dep_time
- crs_arr_time
- crs_elapsed_time
- distancia_km
- is_weekend
- Temperature_Celsius
- Wind_Speed_knots
- Visibility_km
- op_unique_carrier
- origin
- dest
- day_of_week
- month
- day_of_month
- bloque_horario
- Turbulence_Level
El modelo devuelve:
- Clase:
0 = A TIEMPO,1 = RETRASADO - Probabilidades asociadas
- Cargar el modelo entrenado
- Transformar requests provenientes del backend Java
- Ejecutar predicciones
- Retornar resultados vía HTTP
POST /predict
Entrada:
{
"aerolinea": "American Airlines",
"origen": "JFK",
"destino": "LAX",
"fechaPartida": "2026-06-15T14:30:00",
"distanciaKm": 3983
}
Salida:
{
"prevision": "RETRASADO",
"probabilidad": 0.9529,
"detalle": {
"prob_a_tiempo": 0.0471,
"prob_retraso": 0.9529}
}
- El cliente envía la solicitud
- Se guarda el vuelo (
FlightRequest) - Se consulta el microservicio Flask
- Se guarda la predicción (
Prediction) - Se retorna la respuesta al cliente
Antes de ejecutar el proyecto, asegúrese de:
-
Tener MySQL instalado y en ejecución
-
Tener creada la base de datos
-
Tener activo el microservicio Flask
-
Variables de entorno configuradas según los archivos de configuración del backend y del microservicio
👉 configuración de las variables de entorno
El microservicio de Machine Learning se encuentra en:👉 microservice/
-
Incluye:
- API Flask (
api.py) - Carga del modelo
.joblib - Endpoint
/predict
- API Flask (
El repositorio está organizado por dominios de responsabilidad, siguiendo una arquitectura de microservicios y separación de capas:
flightOnTime/
│
├── frontend/
│ ├── index.html
│ ├── styles.css
│ └── script.js
│
├── backend/
│ ├── src/main/java/
│ ├── docs/
│ └── pom.xml
│
├── microservice/
│ ├── api.py
│ ├── champion_clima.joblib
│ └── requirements.txt
│
├── datascience/
│ ├── notebooks/
│ ├── datasets/
│ └── models/
└── README.md # Documentación principal
📌 Nota: algunas carpetas pueden vivir en ramas específicas durante el desarrollo, pero esta es la estructura lógica final del proyecto.
-
main
Rama estable del proyecto. -
backend
Desarrollo de la API REST. -
datascience
Desarrollo del modelo predictivo. -
frontend
Desarrollo y visualización del consumo de la API.
- 🐍 Microservicio ML (Flask):
/microservice - 🧠 Data Science:
/data-science - 🎨 Frontend:
/frontend - ☕ Frontend:
/backend
- Iniciar MySQL
- Ejecutar el backend Spring Boot desde IntelliJ
- Activar entorno virtual y ejecutar api.py
- Probar endpoints con Insomnia o Postman
👉 Instrucciones completas para ejecutar el proyecto: Cómo ejecutar el proyecto
El backend Spring Boot se comunica con el microservicio de Machine Learning mediante una URL configurable por variable de entorno.
ORACLE_PREDICTION_URL = http://127.0.0.1:5000/predict
instrucciones para Configuración del microservicio Flask
Proyecto en desarrollo como MVP para la Hackatón ONE – No Country 2025.