Data · IA · Investigación

Motor RAG médico-aeronáutico

El motor técnico abierto detrás de la evaluación de aptitud de pilotos: arquitectura Dual-Engine (RAG air-gapped + ML) sobre datos y normativa públicos.

El motor técnico: código abierto. El producto es privado; la ingeniería que lo sostiene, no. Es el motor detrás de AeroFit, el producto.

1 estrella2026rol: autor únicoestado: activo

01 Problema y contexto

Evaluar la aptitud médica de un piloto exige cruzar señales clínicas con una normativa extensa, y hacerlo de forma reproducible y trazable. Este repositorio es el motor técnico que resuelve esa parte con datos y documentos públicos, sin exponer nada comercialmente sensible.

Medicina aeronáutica: la evaluación de aptitud psicofísica de pilotos, un dominio donde una decisión vale lo que vale la norma que la respalda. El sistema trabaja contra normativa pública chilena e internacional (las DAN 19, 61, 67, 121 y 135 de la DGAC y el Manual Médico Aeronáutico de OACI, Doc 8984) bajo dos restricciones duras: la información clínica no puede salir del entorno de ejecución, y toda respuesta debe ser rastreable hasta su fuente. Es el motor técnico abierto sobre el que se construye un producto privado: el producto es privado, la ingeniería que lo sostiene no.

02 Solución

Dos motores acoplados: (1) un modelo predictivo clásico estima el riesgo y (2) un motor RAG local responde citando la normativa aplicable; un «prompt puente» inyecta la salida del modelo como contexto del LLM. Todo air-gapped, para que ningún dato salga del entorno.

  1. Comprensión del dominio: delimitación del criterio de aptitud a partir de la normativa aplicable, con la clase de riesgo como objetivo prioritario.
  2. Preparación de datos: filtrado de outliers por rango intercuartílico, imputación con KNNImputer, escalado con StandardScaler y división train/test estratificada.
  3. Corrección del desbalance: la distribución es cercana a 90/10 a favor de los casos aptos; SMOTE se aplicó solo sobre entrenamiento para no contaminar la evaluación.
  4. Modelamiento comparativo: Random Forest frente a SVM con kernel RBF y regresión logística como línea base interpretable.
  5. Segmentación no supervisada: K-Means con k=3 para explorar perfiles de riesgo latentes; PCA solo como herramienta de visualización.
  6. Motor RAG air-gapped: Mistral-7B servido con Ollama y embeddings vectoriales nomic-embed-text sobre 14.501 pares pregunta/respuesta derivados de la normativa pública.
  7. Integración por prompt puente: la salida del clasificador se inyecta como contexto del modelo de lenguaje, que recupera y cita el artículo aplicable.
  8. Validación: K-Fold estratificado con k=5 para medir generalización.

03 Resultados

Cifras verificables en el repositorio y su documentación:

0.65Recall en la clase de riesgo (Random Forest + SMOTE)
0.38Precisión en la clase de riesgo, sacrificada de forma deliberada
0.48F1 en la clase de riesgo
0.75F1 promedio en K-Fold (k=5), con ±1,3 % entre folds

04 Cómo está construido

Arquitectura Dual-Engine: un motor RAG ejecutado localmente (air-gapped) con Ollama, Mistral-7B y embeddings vectoriales (nomic-embed-text) sobre normativa aeronáutica y médica pública (DAN 19/61/67/121/135, Manual Médico OACI 8984), integrado por un «prompt puente» con un motor predictivo de machine learning. Sigue la metodología CRISP-DM de principio a fin. Es el trabajo de ingeniería más riguroso del autor y el componente abierto sobre el que se construye el producto privado AeroFit: el producto es privado; la ingeniería que lo sostiene, no.

05 Decisiones éticas

  • Se priorizó el recall sobre la clase de riesgo por encima de la precisión. En evaluación médica el falso negativo (declarar apto a quien no lo está) es el error con consecuencias reales, y el modelo marca de más a sabiendas.
  • Toda la inferencia corre air-gapped en local. Ningún dato clínico sale del entorno de ejecución ni pasa por una API de terceros.
  • El motor RAG responde citando la fuente normativa y tiene instrucción explícita de no inferir fuera de ella.
  • El sistema se declara como motor de apoyo a la decisión, no como dispositivo médico. No emite diagnósticos.
  • La limitación del dataset se documenta en el propio repositorio en vez de omitirse, porque condiciona cómo deben leerse los resultados.

06 Aspectos destacados

  • Arquitectura Dual-Engine: motor RAG air-gapped (Ollama + Mistral-7B + embeddings vectoriales nomic-embed-text) acoplado a un modelo predictivo por un «prompt puente».
  • Comparativa de modelos con baseline honesto: Random Forest (ganador) vs SVM-RBF vs Regresión Logística como línea base; balanceo con SMOTE ante un desbalance 90/10.
  • Preparación de datos: imputación KNN, detección de outliers por IQR, normalización con StandardScaler, y análisis no supervisado con K-Means (k=3) + PCA para explorar estructura.
  • Validación con K-Fold (k=5): F1 promedio 0.75 (±1.3%). En la clase de riesgo prioriza Recall (0.65) sobre precisión (0.38), con F1 0.48: en medicina el error costoso es el falso negativo. Cifras del pipeline previo a la optimización de accuracy.
  • Dataset declarado como proxy: CCHS (población general canadiense, público), no datos de pilotos. Limitación explícita, no dato oculto.

07 Limitaciones

El motor predictivo se entrenó sobre el CCHS (Canadian Community Health Survey), una encuesta pública de salud de población general canadiense obtenida de Kaggle. No son datos de pilotos. Se eligió como proxy ante la ausencia de datos aeromédicos abiertos, y las conclusiones no son extrapolables a población aeronáutica sin reentrenar con datos del dominio. Las etiquetas de riesgo y los 14.501 pares del corpus RAG también son sintéticos. Las cifras corresponden al pipeline estable previo a la optimización de accuracy: el F1 de 0.48 en la clase de riesgo es bajo y el trabajo sigue abierto.