← Volver![]()
Detección de ECG anormal con RNN y LSTM
Comparación controlada Conv1D–SimpleRNN vs Conv1D–LSTM con partición por registro y MLflow
Problema
Distinguir ritmo sinusal normal de ECG anormal (16 categorías agrupadas) evitando fugas de información entre registros.
Datos
ECG signals (1000 fragments), Kaggle: 1,000 fragmentos de 10 s, 17 clases, 45 registros MIT-BIH.
Métodos
- Filtro pasa banda 0.5–40 Hz, remuestreo 360→180 Hz y z-score por fragmento
- Partición por registro con StratifiedGroupKFold (≈64/16/20)
- Extractor Conv1D común + SimpleRNN vs LSTM
- Pesos de clase solo con entrenamiento
- Umbral ajustado en validación (Macro F1); test abierto una sola vez
- Registro de experimentos en MLflow
Resultados
- Ganó SimpleRNN en validación (ROC-AUC 52.62 % vs 49.16 % de la LSTM); la LSTM más compleja no generalizó mejor con 45 registros.
- En prueba (201 fragmentos) el modelo no fue satisfactorio: sensibilidad 72.03 %, especificidad 18.97 %, balanced accuracy 45.50 % y accuracy 56.72 %, por debajo del 71.70 % de clasificar todo como anormal. Se documentó así, sin maquillar.
Galería
Herramientas
PythonTensorFlow / KerasSciPyscikit-learnMLflowDatabricks