Este Notebook fue creado y ejecutado usando Google Colab con el dataset almacenado en Google Drive, para correrlo en tu Jupyter Notebook local tendrías que preparar tu ambiente local y realizar las actualizaciones al código.
¿Puede una máquina detectar señales de alarma en un fetal? Anomalías y agrupamiento en cardiotocografía
Un recorrido práctico por técnicas de detección de anomalías y clustering aplicadas a datos reales de monitorización fetal.
Durante el embarazo, el cardiotocograma (CTG) es uno de los exámenes más utilizados para evaluar el bienestar del bebé antes del nacimiento. Registra la frecuencia cardíaca fetal y las contracciones uterinas, y su interpretación correcta puede marcar la diferencia entre un parto seguro y una situación de riesgo.
El problema es que leer un CTG requiere experiencia clínica. Las señales son ruidosas, los patrones son sutiles, y el volumen de exámenes en un hospital puede ser enorme. Aquí es donde el aprendizaje automático no supervisado entra en juego: ¿podemos entrenar un modelo para que aprenda, sin etiquetas, qué es un CTG “normal” y cuándo algo se sale de ese patrón?
En este artículo exploramos exactamente eso. Usando un dataset público de 2,126 cardiotocogramas clasificados por obstetras expertos, aplicamos tres familias de técnicas:
- Detección de outliers estadísticos — IQR y regla de las 3σ para identificar valores extremos variable a variable.
- Detección de anomalías con Machine Learning — Isolation Forest, Local Outlier Factor (LOF) y One-Class SVM para capturar patrones anómalos sin asumir distribuciones previas.
- Agrupamiento con K-Means — para descubrir grupos naturales en los datos y ver si se alinean con el estado clínico del feto.
Al final evaluamos si los “outliers” que detectan los modelos corresponden realmente a los casos sospechosos y patológicos etiquetados por los médicos. Los resultados son reveladores.
¿Listo para ver cómo aprende una máquina a detectar señales de alarma? Acompáñanos.
Acerca del Dataset
Datos de cardiotocografía fetal
Se procesaron automáticamente 2126 cardiotocogramas fetales (CTG) y se midieron las características diagnósticas correspondientes. Además, tres obstetras expertos clasificaron los CTG y se asignó a cada uno de ellos una etiqueta de clasificación consensuada. La clasificación se realizó tanto en función de un patrón morfológico (A, B, C, …) como del estado fetal (N, S, P). Por lo tanto, el conjunto de datos puede utilizarse tanto para experimentos de 10 clases como de 3 clases.
- ALTV: percentage of time with abnormal long term variability (SisPorto)
- mLTV: mean value of long term variability (SisPorto)
- DL: light decelerations
- DS: severe decelerations
- DP: prolongued decelerations
- DR: repetitive decelerations
- Width: histogram width
- Min: low freq. of the histogram
- Max: high freq. of the histogram
- Nmax: number of histogram peaks
- Nzeros: number of histogram zeros
- Mode: histogram mode
- Mean: histogram mean
- Median: histogram median
- Variance: histogram variance
- Tendency: histogram tendency: -1=left assymetric; 0=symmetric; 1=right assymetric
- A: calm sleep
- B: REM sleep
- C: calm vigilance
- D: active vigilance
- SH: shift pattern (A or Susp with shifts)
- AD: accelerative/decelerative pattern (stress situation)
- DE: decelerative pattern (vagal stimulation)
- LD: largely decelerative pattern
- FS: flat-sinusoidal pattern (pathological state)
- SUSP: suspect pattern
- CLASS: Class code (1 to 10) for classes A to SUSP
- NSP:- Normal=1; Suspect=2; Pathologic=3
Fuente: Kaggle
A lo largo de este artículo recorrimos el camino completo de un análisis de datos no supervisado aplicado a un problema médico real: desde la carga y limpieza del dataset hasta la evaluación de los modelos frente a etiquetas clínicas.
Lo que más destaca de este ejercicio no es ninguna técnica en particular, sino la complementariedad entre métodos:
- Los métodos estadísticos (IQR, 3σ) son rápidos e interpretables, pero asumen que las anomalías son simplemente valores extremos en una variable a la vez.
- Isolation Forest, LOF y One-Class SVM van más allá: aprenden qué es “normal” en el espacio multidimensional de los datos y flagean todo lo que no encaja en ese patrón.
- K-Means, sin ver ni una sola etiqueta, fue capaz de agrupar los CTG en clusters con composiciones de estado fetal muy distintas entre sí, lo que sugiere que la estructura de los datos refleja genuinamente diferencias clínicas.
¿Qué sigue?
Este análisis es un punto de partida. Algunas extensiones naturales para quienes quieran profundizar:
- Clasificación supervisada: usar las etiquetas NSP para entrenar un clasificador (Random Forest, SVM, XGBoost) y comparar su desempeño con los métodos no supervisados aquí presentados.
- Detección multivariada más robusta: ampliar LOF y One-Class SVM a más variables, no solo FM y UC.
- Explicabilidad: aplicar SHAP o LIME para entender qué variables contribuyen más a que un CTG sea marcado como anómalo.
- Clustering alternativo: probar DBSCAN, que no requiere especificar K de antemano y puede descubrir clusters de forma arbitraria.
Reflexión final
La cardiotocografía es un ejemplo perfecto de por qué el machine learning en salud es tan prometedor y, a la vez, tan delicado. Los modelos pueden ser herramientas poderosas de apoyo al diagnóstico, pero deben entenderse como una segunda opinión, no como un oráculo. La interpretación clínica sigue siendo insustituible.
Esperamos que este recorrido haya sido útil. Si te quedaron dudas, encontraste algún error o quieres compartir cómo extendiste este análisis, déjanos un comentario.
— Hasta la próxima.
