Cuando el modelo m谩s complejo no es el que detecta mejor
Comparativa entre LSTM, Transformer y VAE-LSTM sobre 19.000 vuelos reales de Barajas. Y por qu茅 la p茅rdida de validaci贸n no es buena consejera.
C贸digo: github.com/iRuperth/SADAR Demo en vivo: huggingface.co/spaces/devrup404/sadar
El repositorio es p煤blico y est谩 abierto a colaboraciones, sugerencias y forks. Cualquier discusi贸n t茅cnica, issue o pull request es bienvenida.
El dato m谩s interesante del dataset no es un secuestro. Es un avi贸n que fingi贸 serlo durante treinta segundos por error.
El 31 de julio de 2017, un Airbus de Iberia vol贸 sobre Madrid con el c贸digo de secuestro activado en el transpondedor durante tres puntos de su trayectoria. Despu茅s volvi贸 a la normalidad. El vuelo era el IBE2845, el c贸digo transmitido era el 7500, y en el sistema secundario de vigilancia ese c贸digo significa interferencia il铆cita.
No era un secuestro. Era casi con total seguridad un fallo del transpondedor: tres puntos sobre los 171 que componen el registro completo del vuelo, a 800 metros de la pista, sin m谩s anomal铆a operativa. Aquel vuelo, anotado en un fichero parquet de 3,4 millones de filas, marca el inicio de este art铆culo. Y marca tambi茅n la pregunta t茅cnica que me llev茅 al proyecto: 驴puede un modelo aprender qu茅 aspecto tiene un vuelo normal y avisar cuando uno deja de parecerlo?
Este art铆culo presenta SADAR, un sistema de detecci贸n de anomal铆as en trayectorias a茅reas entrenado sobre dieciocho d铆as de tr谩fico real procedente del aeropuerto Adolfo Su谩rez Madrid-Barajas. Compara tres autoencoders profundos contra un baseline cl谩sico, eval煤a el sistema sobre un banco de anomal铆as sint茅ticas y discute con franqueza d贸nde funciona y d贸nde no.
Empecemos por el problema.
Planteamiento
La detecci贸n de incidentes en aviaci贸n civil rara vez puede formularse como un problema supervisado: los datos est谩n dominados por operaci贸n normal y los pocos eventos etiquetados son ambiguos. La alternativa est谩ndar es la monitorizaci贸n de conformidad: aprender la distribuci贸n del comportamiento normal y se帽alar las trayectorias que se apartan de ella. Esta es la formulaci贸n que adopta SADAR.
La distinci贸n importa. Decir "este vuelo se aparta del patr贸n aprendido" es defendible con datos. Decir "este vuelo es un incidente" requiere contexto operacional que el ADS-B no proporciona. SADAR opera estrictamente en el primer enunciado.
Datos
Los datos provienen de OpenSky Network, una red colaborativa de receptores ADS-B. El conjunto cubre 18 d铆as no consecutivos entre junio de 2017 y marzo de 2020, centrados en el espacio a茅reo de Barajas. Cada aeronave reporta una posici贸n cada 10 segundos, con 21 columnas por punto: posici贸n y din谩mica (latitud, longitud, altitud barom茅trica y geom茅trica, velocidad, rumbo, r茅gimen vertical), identidad (callsign, icao24, flight_id) y estado del transpondedor (squawk, alert, onground).
Las cifras crudas, tras la uni贸n y deduplicaci贸n:
- 3.429.638 filas.
- 19.057 vuelos distintos.
- Mediana de 175 puntos por vuelo, m谩ximo 1.606.
- Mediana de duraci贸n de 30,2 minutos.
El primer hallazgo del an谩lisis exploratorio fueron los huecos. La altitud GPS (geoaltitude) presenta un 24,79 % de valores ausentes. La velocidad y el rumbo, alrededor del 13 %. Estos huecos no son errores: corresponden a zonas de menor cobertura del receptor terrestre. Descart茅 la altitud GPS y me qued茅 con la barom茅trica, m谩s completa, tratando los huecos como una propiedad del problema y no como un fallo a corregir.
El segundo hallazgo provino del histograma del rumbo. Representado en un gr谩fico polar, las dos pistas paralelas de Barajas aparecen como dos l贸bulos opuestos.
El aeropuerto es identificable en los datos antes de proyectarlos sobre un mapa.
Esa propiedad circular del rumbo motiv贸 su codificaci贸n como par seno y coseno: para un autoencoder, 359掳 y 1掳 deben quedar adyacentes, y una codificaci贸n lineal lo impide.
Eventos reales en el conjunto
El dataset contiene 煤nicamente cuatro vuelos con c贸digo de emergencia en el transpondedor. Conviene describirlos con detalle, porque su escasez determina el planteamiento del problema:
- IBE2845 (Iberia, 31 de julio de 2017). Squawk 7500 durante tres puntos sobre 171, transmitido a 800 metros de pista. Compatible con un fallo del transpondedor.
- ELY395 (El Al, 2 de octubre de 2017). Squawk 7700 durante cinco puntos, declarado a 800 metros de pista. El avi贸n aterriz贸. Es el caso m谩s plausible de emergencia real.
- RYR61AD (Ryanair, 28 de enero de 2019). Squawk 7600 (fallo de comunicaciones). Un punto. Aterriz贸.
- SWR202Y (Swiss, 3 de febrero de 2020). Squawk 7700. Un punto. Aterriz贸.
Cuatro etiquetas en un universo de no etiquetas. Esta proporci贸n descarta el aprendizaje supervisado: ning煤n clasificador se entrena con cuatro positivos. Los cuatro vuelos se reservaron como conjunto de validaci贸n cualitativa, agrupados en 1.076 ventanas etiquetadas en data/processed/anomalies.npy, y no aparecen en ning煤n momento del entrenamiento.
Metodolog铆a
Aprendizaje de una sola clase
Sin etiquetas suficientes, el planteamiento es aprendizaje de una sola clase mediante autoencoders. La red aprende a reconstruir trayectorias normales. El error de reconstrucci贸n opera como score de anomal铆a: una entrada parecida a las del entrenamiento produce un error bajo; una entrada inusual lo eleva.
Entren茅 cuatro detectores bajo id茅nticas condiciones (mismo preprocesado, mismo split, mismo umbral) para permitir una comparaci贸n rigurosa:
| # | Modelo | Idea | Pesos |
|---|---|---|---|
| 0 | Isolation Forest | Estad铆sticas resumen por ventana, no secuencial | baseline |
| 1 | LSTM autoencoder | Reconstrucci贸n secuencial | 224 KB |
| 2 | Transformer autoencoder | Atenci贸n sobre la ventana completa | 635 KB |
| 3 | VAE-LSTM | Codificaci贸n probabil铆stica del espacio latente | 222 KB |
Preprocesado
Cuatro decisiones de preprocesado merecen menci贸n espec铆fica porque determinan la calidad final de un detector de trayectorias.
Coordenadas m茅tricas relativas a la pista. Latitud y longitud en grados resultan inadecuadas para modelar movimiento sobre un aeropuerto: las distancias dependen de la latitud, y el modelo no incorpora geodesia. El pipeline proyecta las coordenadas a UTM zona 30 (EPSG:32630), centradas en la pista de Barajas, y opera en metros.
Rumbo como par (sin, cos). Variable circular que la codificaci贸n lineal no representa con fidelidad. La codificaci贸n trigonom茅trica asegura que valores pr贸ximos en el c铆rculo lo sean tambi茅n en el espacio de features.
Split por fecha y por flight_id. Entrenamiento sobre 2017-2019, validaci贸n y test sobre 2020. Cada vuelo aparece en un 煤nico split. Esto bloquea simult谩neamente la fuga temporal y la de instancia.
Limpieza del conjunto de entrenamiento. Exclu铆 del entrenamiento los 100 vuelos con patr贸n de go-around y los cuatro con squawk de emergencia. El conjunto de entrenamiento debe representar la versi贸n m谩s conservadora de "vuelo normal". Mantener go-arounds dentro hace que el modelo aprenda a reconstruirlos sin dificultad, anulando su valor como anomal铆as.
Las ventanas finales tienen 60 pasos de 10 segundos (10 minutos por ventana), con solapamiento del 50 %. Siete features por paso:
[x_rel, y_rel, baroaltitude, velocity, sin_hdg, cos_hdg, vertrate]
El conjunto resultante: 61.008 ventanas de entrenamiento, 7.679 de validaci贸n, 7.788 de test y 1.076 etiquetadas como an贸malas. El escalador estandariza las features ajust谩ndose 煤nicamente sobre el conjunto de entrenamiento.
Arquitecturas
Isolation Forest sobre estad铆sticas resumen (media, desviaci贸n, m铆nimo y m谩ximo por feature). Baseline no secuencial cuya funci贸n es establecer la l铆nea de referencia que el deep learning debe superar.
LSTM autoencoder: encoder con una capa LSTM (hidden 64), cuello de botella lineal a un latente de dimensi贸n 16, decoder sim茅trico que desenrolla desde el latente repetido.
Transformer autoencoder: dos capas de encoder con cuatro cabezas de atenci贸n (d_model 64), codificaci贸n posicional sinusoidal, mismo cuello de botella a latente 16.
VAE-LSTM: encoder LSTM que produce la media y el logaritmo de la varianza, reparametrizaci贸n para que los gradientes fluyan a trav茅s del muestreo, decoder LSTM desde z. La p茅rdida combina el error de reconstrucci贸n (MSE) con la divergencia de Kullback-Leibler ponderada por un coeficiente beta de 0,0001193, seleccionado por Optuna.
std = torch.exp(0.5 * logvar)
eps = torch.randn_like(std)
z = mu + std * eps
Todos los modelos comparten el mismo loop de entrenamiento: optimizador Adam con weight decay, scheduler ReduceLROnPlateau, early stopping con paciencia 7, semilla fija a 42, tracking completo con MLflow.
Banco de anomal铆as sint茅ticas
Cuatro eventos reales no permiten una evaluaci贸n cuantitativa estable. Para suplir esta limitaci贸n, se inyectan anomal铆as controladas sobre vuelos normales del conjunto de test. Cinco familias, todas con rampa lineal de inicio para permitir la medici贸n de la latencia de detecci贸n (segundos desde el inicio de la perturbaci贸n hasta el primer cruce del umbral):
- Desviaci贸n de ruta: deformaci贸n lateral, magnitudes de 20, 40 y 80 km.
- Anomal铆a de altitud: offset de 300, 800 o 1.500 m.
- Anomal铆a de velocidad: factores multiplicativos de 0,4x, 1,6x y 2,2x.
- Holding: giros continuos con per铆odo de 120 o 240 segundos.
- Congelaci贸n del transpondedor: el ADS-B retiene el 煤ltimo valor durante el resto de la ventana.
La validaci贸n contra un simulador propio podr铆a parecer circular. Es una pr谩ctica est谩ndar en safety engineering: el simulador se dise帽贸 antes que los modelos y describe modos de fallo bien definidos, no patrones aprendidos del modelo. El conjunto produce 12 variantes (combinaciones de tipo e intensidad) y 24.000 ventanas sint茅ticas por modelo evaluado.
Hasta aqu铆, el planteamiento. Lo siguiente es ver si funciona.
Resultados
Resultados sobre el conjunto de test de 2020:
| Modelo | ROC-AUC real | PR-AUC real | ROC sint茅tico | Latencia mediana |
|---|---|---|---|---|
| Isolation Forest | 0,515 | 0,133 | 0,593 | n/d |
| LSTM-AE | 0,648 | 0,260 | 0,779 | 115 s |
| Transformer-AE | 0,614 | 0,227 | 0,743 | 115 s |
| VAE-LSTM | 0,659 | 0,299 | 0,792 | 120 s |
Los modelos profundos pr谩cticamente duplican la PR-AUC del baseline. Esta diferencia justifica la inversi贸n en deep learning: si el LSTM no hubiera batido al Isolation Forest, el resto del trabajo no habr铆a tenido sentido.
Una observaci贸n merece atenci贸n.
El Transformer gan贸 la p茅rdida de validaci贸n (0,038 frente a 0,053 del VAE y 0,072 del LSTM). Y perdi贸 la PR-AUC. Algo no cuadraba.
La explicaci贸n es directa: una arquitectura con suficiente capacidad reconstruye tambi茅n con cierta fidelidad las anomal铆as, lo que reduce la separabilidad entre normal y an贸malo medida por el error de reconstrucci贸n. En detecci贸n por reconstrucci贸n, la p茅rdida de validaci贸n es un mal proxy del rendimiento. Lo sabemos y aun as铆 la seguimos mirando.
Evalu茅 adem谩s dos ensembles, por promedio y por m谩ximo de los scores z-normalizados. Ninguno super贸 al VAE individual (PR-AUC 0,273 y 0,278 frente a 0,299), y los descart茅. El ensemble fue un intento de cerrar con un empuj贸n. No lo dio. Es honesto reportarlo.
Los n煤meros cuentan una parte. La otra est谩 en lo que no sale en la tabla.
Discusi贸n
Los resultados muestran un perfil de detecci贸n heterog茅neo por tipo de anomal铆a. El modelo final detecta con facilidad las perturbaciones ruidosas: ROC-AUC 0,984 en holding con periodo de 120 s, 0,989 en aceleraci贸n con factor 2,2, 0,899 en desviaci贸n de ruta de 80 km. Las perturbaciones sutiles (300 m de altitud, derivas peque帽as) requieren tiempos cercanos a los dos minutos y bajan al rango 0,51-0,55.
El caso m谩s relevante de la discusi贸n es la congelaci贸n del transpondedor.
El VAE lo detecta en el 1,2 % de los casos. Uno de cada ochenta intentos.
La explicaci贸n es estructural: un avi贸n en crucero estable cuyos valores se congelan produce un patr贸n muy pr贸ximo al de un avi贸n en crucero estable que contin煤a transmitiendo. El error de reconstrucci贸n permanece bajo y el score no llega a cruzar el umbral. Es una limitaci贸n del enfoque de reconstrucci贸n, no del entrenamiento.
Esta heterogeneidad delimita el alcance del sistema. SADAR es un detector de maniobras an贸malas, no un detector universal de incidentes. Su valor operativo est谩 en aquellas desviaciones que la red de reglas tradicional (sistemas tipo STCA o MSAW) no cubre, no en sustituir esos sistemas.
Antes de cerrar, conviene ser expl铆cito en lo que el sistema no hace.
Limitaciones
El sistema asume ciertas limitaciones documentadas expl铆citamente en el informe t茅cnico.
- Ausencia de planes de vuelo. SADAR no dispone de la ruta prevista de cada vuelo. La "desviaci贸n respecto a la ruta esperada" se aproxima por "desviaci贸n respecto al patr贸n medio". Un vuelo que se aparte de su plan asignado pero permanezca dentro del patr贸n medio no ser谩 marcado.
- Cobertura temporal. El conjunto consta de 18 d铆as no consecutivos entre 2017 y 2020. Modelar demanda, estacionalidad o predicci贸n temporal continua queda fuera del alcance.
- Congelaci贸n del transpondedor. Tasa de detecci贸n dentro de ventana del 1,2 %. Cualquier extensi贸n seria del sistema debe atacar este caso de forma espec铆fica (se帽ales derivadas, detecci贸n de cambio de r茅gimen, modelo dedicado).
- Huecos de cobertura. El 24,2 % de los vuelos en aire presentan gaps superiores a 120 segundos en la recepci贸n. Estos huecos son artefactos del receptor, no incidentes operativos. Tratarlos como etiquetas positivas generar铆a ruido sistem谩tico.
Sistema desplegado
El modelo final se sirve a trav茅s de una API construida sobre FastAPI que monta un frontend React + Vite + TypeScript en el mismo puerto, lo que permite un despliegue single-image en Hugging Face Spaces. El dashboard consta de tres pantallas:
- Tower console: radar en vivo sobre Barajas con los vuelos del d铆a y sus scores, alerta visual al cruzar el umbral.
- Simulator: inyecci贸n controlada de anomal铆as sobre un vuelo de referencia, con visualizaci贸n de la trayectoria deformada, el score y la latencia.
- Metrics: tabla comparativa de modelos, curvas precision-recall y ROC, matrices de confusi贸n, desglose por tipo de anomal铆a.
Stack y reproducibilidad
Python 3.11, PyTorch, FastAPI, MLflow y Optuna en el backend. Vite, React 18 y TypeScript en el frontend. Empaquetado en Docker single-image. Reproducibilidad garantizada por semillas fijas, configuraciones YAML que resuelven variables de entorno, y los checkpoints almacenados tambi茅n como artifacts de MLflow.
Conclusiones y trabajo futuro
SADAR demuestra que la monitorizaci贸n de conformidad de trayectorias a茅reas es abordable mediante autoencoders profundos entrenados exclusivamente sobre operaci贸n normal, con m茅tricas defendibles y un protocolo de evaluaci贸n reproducible. La comparaci贸n entre tres familias de modelos bajo id茅nticas condiciones permite justificar la elecci贸n del VAE-LSTM no solo por su PR-AUC final, sino por su perfil global de detecci贸n y latencia.
El Transformer no fue la elecci贸n correcta para este problema. Lo dejo documentado porque los descartes tambi茅n cuentan.
El trabajo futuro inmediato apunta a tres l铆neas. Primero, sustituir el Transformer por un TCN o un autoencoder convolucional para acotar la capacidad sin perder modelado temporal. Segundo, incorporar derivadas y detecci贸n de cambio de r茅gimen para atacar la congelaci贸n del transpondedor. Tercero, evaluar la incorporaci贸n de planes de vuelo cuando est茅n disponibles, lo que replantear铆a el problema como predicci贸n condicionada por el plan en lugar de aproximaci贸n al patr贸n medio.
El IBE2845 aterriz贸 sin incidentes el 31 de julio de 2017 y sus tres puntos en rojo no recibieron mayor atenci贸n. Glitch, anomal铆a o incidente, la realidad rara vez llega etiquetada, y construir sistemas que operen en ese terreno empieza por aceptarlo.






