Adrián López Rendón · proyectos

ML de Satisfacción de Pasajeros Aéreos

426 words 2 min read #MLOps#Python#XGBoost#BentoML

Las aerolíneas enfrentan una competencia intensa donde la retención de clientes impacta directamente en los ingresos. Identificar pasajeros insatisfechos antes de que se vayan con la competencia es crítico. Este proyecto construye un pipeline de ML de principio a fin para predecir la satisfacción de pasajeros en tiempo real, permitiendo a los equipos de operaciones aéreas activar intervenciones proactivas de servicio al cliente y reducir la deserción mediante decisiones basadas en datos.

Arquitectura y Stack

  • Python 3.12 — lenguaje principal para toda la lógica de entrenamiento y servicio
  • XGBoost + Scikit-Learn — modelo campeón de gradient boosting y línea base de regresión logística
  • MLflow — seguimiento de experimentos; registra métricas AUC, hiperparámetros y artefactos del modelo en un almacén SQLite local
  • BentoML — empaquetado del modelo y API REST de producción con Swagger UI autogenerado (POST /predict)
  • Docker — contenedorización usando una imagen multi-etapa python:3.11-slim con libgomp1 para optimización de XGBoost
  • uv — gestión determinista de dependencias vía uv.lock

Logros Técnicos Clave

Consistencia entre entrenamiento y servicio — El preprocesador DictVectorizer se empaqueta directamente en el almacén de modelos de BentoML como un objeto personalizado (custom_objects={"dv": dv}), garantizando que la misma codificación categórica aprendida en el entrenamiento se aplique idénticamente en inferencia, eliminando el desajuste entre entrenamiento y servicio.

Código modular y entornos reproducibles — El código está separado limpiamente por responsabilidad: train.py maneja el pipeline completo de entrenamiento, service.py define la API de producción y bentofile.yaml gobierna el contrato de build. Las semillas aleatorias están fijadas, la versión de Python está bloqueada vía .python-version, y todas las dependencias están congeladas en uv.lock.

Preprocesamiento de características y seguimiento de experimentos — Un dataset de 24 características (calificaciones de servicio en escala 0–5, metadata de vuelo y demografía de pasajeros) se preprocesa mediante normalización de columnas e imputación de mediana, luego se codifica con DictVectorizer. Todas las corridas de entrenamiento se registran en MLflow, permitiendo comparación de métricas (AUC) y selección de modelo con trazabilidad completa.

Manejo defensivo de datos — El pipeline de entrenamiento incluye manejo explícito de try/except FileNotFoundError, una validación defensiva de tipo en la variable objetivo antes de la codificación binaria, e imputación de mediana para arrival_delay_in_minutes — una estrategia robusta resistente a distribuciones de retraso sesgadas.

Repositorio

github.com/sargent-mg/airline-passenger-satisfaction-ml