Infarction Prediction: Detección de infartos a través de imágenes de ECG

Proyecto de IA con el objetivo de ayudar a los médicos de atención primaria y emergencias a agilizar y mejorar sus diagnósticos de infarto

Paloma Ggc
Saturdays.AI
10 min read7 hours ago

--

Índice de contenidos:

  1. Objetivo del proyecto
  2. Dataset
  3. Modelo
  4. Entrenamiento
  5. Métricas
  6. Interfaz
  7. Conclusiones
  8. Autores

> Haz clic aquí para consultar el repositorio de GitHub del proyecto.

1. Objetivo del proyecto

Infarction Prediction es un proyecto de inteligencia artificial diseñado para detectar casos de infarto de miocardio a través de la imagen de un electrocardiograma (ECG).

Según datos del Instituto Nacional de Estadística (INE), las enfermedades cardiovasculares son, seguidas del cáncer, la principal causa de mortalidad en España (Figura 1).

Actualmente, los infartos de miocardio suponen más de 13.000 muertes anuales (Figura 2), y aunque en los últimos años esa cifra ha ido mejorando, los datos aún son muy altos.

Figura 1. Causas de defunción en España entre 2019 y 2022
Figura 2: Defunciones por infarto de miocardio en España entre 2016 y 2022

En la mayoría de casos, los infartos son atendidos por médicos de emergencias en una ambulancia, y estos se enfrentan a los siguientes obstáculos:

  • Tienen solo 10 minutos para interpretar el electrocardiograma y decidir si envían o no al paciente al hospital. El tiempo es clave.
  • Atienden todo tipo de urgencias, por lo tanto, aunque saben interpretar un electrocardiograma (ECG), no están especializados en cardiología.
  • Los médicos de la sanidad pública realizan guardias de 24h, y el agotamiento puede afectar a la toma de decisiones.

El objetivo de este proyecto es servir de apoyo a los médicos de atención primaria a la hora de atender un infarto y así poder salvar más vidas.

2. Dataset

Para desarrollar este proyecto hemos usado el dataset PTB-XL, el mayor conjunto de datos público de formas de onda de ECG, incluye 21837 registros de 18885 pacientes (Figura 3).

2.1. Por qué este dataset

El principal obstáculo cuando abordas cualquier proyecto de inteligencia artificial es conseguir datos para poder entrenar un modelo. Esto es especialmente complicado en proyectos relacionados con la salud ya que los datos médicos suelen ser privados.

En nuestro caso, hay que añadirle una complicación extra: el tipo de datos. Como nuestro proyecto está pensado para ser usado por médicos de emergencias, hay que tener en cuenta a qué tipo de datos tendrán acceso en el momento de atender al paciente.

Hay casos en los que no se podrá acceder al historial médico, bien porque no tenga acceso, bien porque no pueda identificar al paciente, o bien porque esté en una zona rural sin cobertura. Además, el tiempo es clave, solo hay 10 minutos para tomar una decisión, no pueden perderlo en pruebas que no sean decisivas. Por lo tanto, tenemos que pensar que en muchos casos el médico de emergencias solo dispondrá del ECG que pueda hacerle al paciente en la ambulancia.

Es decir, necesitábamos conseguir imágenes públicas de electrocardiogramas y encontrar la manera más óptima de interpretar los datos para poder entrenar un modelo de deep learning.

Tras mucha búsqueda y pruebas, PTB-XL fue el mejor dataset que encontramos que cumpliera todos nuestros requisitos.

Figura 3. Tabla comparativa de datasets de ECG’s

2.2. Cómo se hizo el dataset

El conjunto de datos de electrocardiogramas PTB-XL fue creado por un equipo de investigadores del Physikalisch-Technische Bundesanstalt (PTB), una institución alemana dedicada a la investigación y desarrollo en áreas como la metrología y la tecnología médica.

2.2.1. Adquisición de datos originales

Las señales de ECG fueron registradas utilizando dispositivos de Schiller AG durante casi siete años, entre octubre de 1989 y junio de 1996.

Originalmente se recopilaron los registros de electrocardiogramas en su forma de onda, en un formato privado y comprimido.

También se recopiló información demográfica y médica básica, como edad, sexo, peso y altura de los pacientes.

2.2.2. Anotación de los Registros

Los registros de ECG fueron anotados conforme a la norma SCP-ECG por hasta dos cardiólogos. Una gran parte de los registros fue validada después por un segundo cardiólogo para asegurar la precisión de las anotaciones.

  • Se añadieron múltiples declaraciones de forma, ritmo y diagnósticas de un conjunto de 71 diferentes.
  • Para las etiquetas diagnósticas, se proporcionó una organización jerárquica en términos de 5 superclases generales y 24 subclases (Figura 4).
  • También se llevó a cabo una revisión técnica de la calidad de la señal para asegurarse de que fuera adecuada para su análisis.
Figura 4. Gráfico con las superclases y subclases de diagnóstico del dataset

2.2.3. Preprocesamiento

Antes de usar los datos, se realizaron diversas tareas para prepararlos:

  • A fin de proteger la privacidad de pacientes y trabajadores siguiendo las normativas de HIPAA, se recurrió al uso de identificadores únicos, pseudónimos y desfases aleatorios en las fechas.
  • Los datos de las señales y metadatos se convirtieron a formatos abiertos para facilitar su uso y procesamiento por parte de la comunidad de aprendizaje automático.
  • Las señales de ECG se almacenaron con una precisión de 16 bits y una frecuencia de muestreo de 500 Hz. Además, se proporcionó una versión reducida con una frecuencia de muestreo de 100 Hz, que es la que nosotros hemos utilizado para entrenar el modelo.

2.2.4. Creación del dataset

Se creó una base de datos estructurada, ptbxl_database.csv, que contiene 28 columnas categorizadas en identificadores, metadatos generales, declaraciones de ECG y metadatos de señal.

El conjunto de datos fue publicado en 2019 con el objetivo de facilitar la investigación en la interpretación automática de electrocardiogramas.

2.2.5. Derechos y permisos

> Si quieres saber más acerca del dataset puedes consultar este artículo.

> Si quieres descargarte el dataset puedes hacerlo desde aquí.

Ambos están sujetos a la licencia Creative Commons Attribution 4.0 International License. Esto significa que puedes utilizar, compartir, adaptar, distribuir y reproducir su contenido en cualquier medio o formato, siempre y cuando des el crédito correspondiente a los autores originales y a la fuente original.

2.2.6. Autores

Estos autores contribuyeron a partes iguales: Patrick Wagner, Nils Strodthoff.

Otros autores y afiliaciones:

  • Physikalisch-Technische Bundesanstalt, Berlin, Germany
  • Patrick Wagner, Ralf-Dieter Bousseljot, Dieter Kreiseler & Tobias Schaeffter
  • Fraunhofer Heinrich Hertz Institute, Berlin, Germany
  • Patrick Wagner, Nils Strodthoff & Wojciech Samek
  • Technical University Berlin, Berlin, Germany
  • Patrick Wagner & Tobias Schaeffter
  • German Heart Center Berlin, Charité — Universitätsmedizin, Berlin, Germany
  • Fatima I. Lunze
  • King’s College London, London, UK
  • Tobias Schaeffter

3. Modelo

Tras probar distintos modelos y arquitecturas, finalmente nos decantamos por el uso de una red neuronal convolucional 1D (CNN) robusta utilizando TensorFlow y Keras. Este modelo está diseñado para tareas de clasificación e incorpora técnicas para asegurar un rendimiento y una generalización óptimos.

3.1. Arquitectura del Modelo

Usamos un modelo ‘Sequential’ que permite una construcción sencilla, capa por capa(Figura 5).

El núcleo de nuestro modelo consta de cinco capas convolucionales 1D, cada una con 32 filtros, un tamaño de kernel de 3 y padding ‘same’.

Las características clave incluyen:

  • LeakyReLU Activation: Maneja efectivamente las entradas negativas.
  • Batch Normalization: Estabiliza y acelera el entrenamiento.
  • Dropout Regularization: Previene el sobreajuste con una tasa de dropout de 0.3.

La salida de las capas convolucionales se aplana y se introduce en una capa completamente conectada con 2 unidades para poder hacer clasificación binaria. Finalmente, usamos una función de activación ‘softmax’ para convertir las salidas en probabilidades, lo que nos permite clasificar los datos.

Figura 5. Sequential Model

Compilamos el modelo (Figura 6) utilizando el optimizador Adam con de 0.0001.

Como función de pérdida hemos usado ‘categorical_crossentropy’, y sacado las siguientes métricas de rendimiento: Recall, Precision, AUC (Área Bajo la Curva ROC), y los recuentos de Falsos Negativos, Falsos Positivos, Verdaderos Negativos y Verdaderos Positivos.

Figura 6. Optimización y compilación

4. Entrenamiento

Entrenamos el modelo con el conjunto de datos usando un tamaño de lote (‘batch_size’) de 64 durante un máximo de 50 épocas (Figura 7). Utilizamos datos de validación para monitorear el rendimiento y el parámetro ‘class_weight’ para manejar el desequilibrio de clases.

Varios callbacks mejoran el proceso de entrenamiento:

  • EarlyStopping: Detiene el entrenamiento si el AUC de validación no mejora durante 20 épocas y restaura los mejores pesos.
  • ReduceLROnPlateau: Disminuye la tasa de aprendizaje cuando el AUC de validación se estabiliza, manteniendo un umbral mínimo para la tasa de aprendizaje.
Figura 7. Entrenamiento del modelo

5. Métricas

Hay tres métricas fundamentales en el diagnóstico del infarto de miocardio mediante el ECG (Figura 8):

  • AUC (Área Bajo la Curva): Evalúa la capacidad del modelo para diferenciar entre casos positivos y negativos. Un AUC más alto indica una mayor precisión diagnóstica, crucial para minimizar diagnósticos omitidos e intervenciones innecesarias.
  • Precisión: Mide la proporción de casos verdaderos positivos entre todas las predicciones positivas. Una alta precisión garantiza que los pacientes identificados como con infarto de miocardio realmente tengan la condición, reduciendo el riesgo de falsos positivos.
  • Recall (Sensibilidad): Indica la capacidad del modelo para identificar correctamente los casos positivos reales. Un alto recall es esencial para garantizar que los pacientes con infarto de miocardio no sean pasados por alto, permitiendo tratamientos oportunos que pueden salvar vidas. Esta métrica es especialmente importante en la detección de patologías, ya que el precio de un falso negativo puede ser una vida.
Figura 8. Métricas de rendimiento: AUC, Precision, Recall, Loss

Hemos obtenido buenas métricas para validación y test.

En conjunto, estas métricas aseguran la precisión y confiabilidad del modelo en entornos clínicos, lo que beneficia a los pacientes al reducir tanto los casos no detectados como los tratamientos innecesarios.

6. Interfaz

La predicción de infarto mediante IA podría usarse de dos maneras:

  • Integrarse dentro de los electrocardiógrafos y sacar la predicción por pantalla.
  • Ser parte de una app dirigida a médicos de atención primaria con la que puedan obtener una predicción simplemente subiendo una fotografía del ECG.

En el primer caso habría que trabajar en conjunto con las empresas de electrocardiógrafos, teniendo en cuenta que no todas las ambulancias usan los mismos. Por este motivo, nuestro enfoque principal es el de una app que puedan tener en su teléfono los profesionales de la salud, creemos que sería la forma más rápida y fácil de extender su uso.

Aunque la app móvil aún está en proceso de desarrollo, hemos creado con Streamlit una interfaz de prueba desde donde se puede probar la eficacia del modelo (Figura 9).

Figura 9. Interfaz de Streamlit para probar las predicciones del modelo

6.1. Funcionamiento

Carga de Imagen: El usuario carga una imagen de un ECG en la interfaz de Streamlit (Figura 10).

Procesamiento de Imagen: La imagen se somete a una serie de transformaciones: escala de grises, división en leads, preprocesamiento de leads, extracción de señales, normalización y conversión 1D, y reducción de dimensionalidad (Figura 11).

Predicción: Se realiza una predicción usando el modelo entrenado cnn_model.h5

Resultado: El sistema muestra si la imagen indica un infarto de miocardio o si es una lectura normal (Figura 12).

Figura 10. Imagen de ECG cargada en la interfaz de Streamlit
Figura 11. Preprocesamiento de las imágenes
Figura 12. Predicción del modelo y grado de confianza

6.2. Código de la interfaz

La interfaz consta de dos scripts que trabajan en conjunto:

  • app.py: contiene el código para cargar imágenes de ECG, procesarlas y realizar predicciones de infarto de miocardio (Figura 13).
  • ecg.py: proporciona las funciones necesarias para realizar el procesamiento de las imágenes de ECG y realizar la predicción de infarto de miocardio utilizando el modelo entrenado.

Es decir, el primer script es la interfaz de usuario con la que los usuarios finales interactúan, mientras que el segundo script es la “mecánica interna” que realiza el procesamiento de datos y la predicción.

Figura 13. Captura de un trozo del código de app.py

> Si quieres consultar el código completo de la app, echa un vistazo a nuestro repositorio de GitHub

7. Conclusiones

Infarction Prediction ha demostrado ser una herramienta prometedora para la detección temprana de infartos de miocardio a través de imágenes de electrocardiogramas (ECG).

El modelo de red neuronal convolucional mostró buen desempeño en métricas como AUC, precisión y recall. Sin embargo, se ha observado una disminución en la precisión cuando se utilizan imágenes de ECG de España. Éstas tienen un formato ligeramente diferente a las del sistema sanitario alemán con las que fue entrenado el modelo, por lo que sería bueno entrenarlo con datos locales para mejorar su efectividad.

La alta precisión y sensibilidad del modelo son cruciales para evitar errores, ayudando a los médicos a tomar decisiones rápidas y precisas y salvar vidas.

Por último es importante garantizar la privacidad y seguridad de los datos del paciente tanto en el entrenamiento del modelo como en su uso, cumpliendo con normativas como HIPAA y GDPR.

En resumen, Infarction Prediction tiene el potencial de reducir las muertes por infarto de miocardio al proporcionar un diagnóstico rápido y preciso. Con mejoras continuas y la integración de datos locales, podría convertirse en una herramienta estándar en la práctica médica, optimizando los recursos de salud y mejorando los resultados clínicos.

8. Autores

Este proyecto fue creado por un equipo de la 7ª edición de Saturdays.AI Madrid:

--

--