Temas acerca de Inteligencia Artificial
Foto de Usuario
DiegoHDMGZ

Ranking Troomes
Mensajes: 8
Registrado: 18 Abr 2020, 17:33

Clasificación de la causa de muerte (COVID u otra) de pacientes registrados en el SINADEF

Mensaje por DiegoHDMGZ » 15 Ene 2021, 13:24

  1. Resumen :
    Se escogió un dataset de los registros de los fallecidos del SINADEF por distintas enfermedades. Se creó un modelo de clasificación para poder determinar, a partir de los registros del fallecido, si este murió por COVID o por otra enfermedad. El dataset original contenía una gran cantidad de causante de muertes aparte del COVID, por lo que se tuvo que hacer un preprocesamiento para binarizar la data. Se seleccionaron atributos relevantes y se compararon 4 modelos de clasificación.
  2. Descripción del dataset:
    • Dataset original:
      Link: https://www.datosabiertos.gob.pe/datase ... ministerio
      Tambien pueden ver el dataset en el .zip que subí en mi github (ver la última parte de este post)
      descripcionDataset.png
    • Dataser Procesado:
      Dentro del dataset existen ciertos caracteres especiales que van a impedir que podamos leerlo desde Weka. Existen los caracteres ‘ y “ . Por ejemplo, en P’aro cardiaco (probablemente por un error) y en Hepatitis “C”. Para resolver esto, creé un programa en Python (ver el archivo preprocess.py en el github en la parte final del post) que elimine esos caracteres especiales.

      Eliminaremos los registros que de defunción de antes del año 2020 ya que no había COVID en ese entonces. Eliminaremos el atributo fecha ya que basta con tener el año y el mes. Además eliminaremos el atributo 1 del identificador ya que no es relevante. También eliminaremos el atributo “TIEMPO EDAD” ya que nos quedaremos solo con las personas mayores a 1 año.

      En el dataset consideran que una muerte puede tener múltiples causas, pero para simplificar el modelo vamos a binarizar la data. Reemplazaremos los atributos 20 – 31 por la clase “MUERTE POR COVID” con posibles valores de “SI”, “NO”. Si algún paciente tiene alguna causa que contenga la palabra “COVID”, se le considerará el valor de la nueva clase como “SI”, caso contrario como “NO”.

      Por último, se eliminan aquellos registros que tengan algún atributo como “IGNORADO” o “NO REGISTRADO” (excepto cuando haya demasiada pérdida de data).

      De los atributos restantes seleccionamos los relevantes con Weka utilizando InfoGainAttributeEval:
      seleccionAtributos.png
      Eliminamos los últimos 4 atributos

      Por último, balanceamos la data haciendo downsampling en ambas clases (ya que la cantidad de datos es demasiada y no habrá memoria suficiente para correr los algoritmos) y nos queda la siguiente distribución:
      balanceo.png
      Finalmente el dataset limpio puede verse en este archivo:
  3. Descripción de los resultados con las técnicas usadas
    Primero normalizamos los datos. Luego aplicamos cada uno de los algoritmos de clasificación estudiados:
    • Árbol de Decisión
      decisionTree.png
    • Random Forest
      randomForest.png
    • Bayes Net
      BayesNet.png
    • SVM
      SVM.png
  4. Conclusiones
    El mejor modelo es el de Random Forest ya que obtuvo el mayor accuracy (80.04%) así como los mayores TP rate (76.9% y 83.5%). Hay que notar que no hay una gran variación entre los 2 TP rate lo cual es bueno ya que el modelo no favorece una clase sobre la otra.
    Estimo que los resultados podrían ser mejores si la data fuera consistente, lo cual se detallará en la siguiente sección.
    Además es necesario recalcar que el balanceo era completamente necesario aquí ya que la gran cantidad de muertes era por enfermedades distintas a COVID y eso hubiera afectado a los algoritmos a inclinarse por la clase de muerte por "NO COVID".
  5. Problemas con la data
    En esta sección se detallarán algunos de los principales problemas que se tuvo al procesar la data.

    En primer lugar, el csv contenía caracteres especiales como la coma (,) , comillas dobles (") , comillas simples (') lo cual dificultaban la lectura desde Weka o desde librerías como panda.

    Además había muchos errores en las instancias, como por ejemplo escribir “COVID IDENTICADO” en lugar de “COVID IDENTIFICADO”, o escribir "COVI" en lugar de "COVID". Se entiende que son errores humanos de tipeo, pero esto afecta al procesamiento de los datos para producir modelos de predicción.

    Por último, dentro de las causas de muerte, se utilizaban varias frases para referirse a lo mismo, causando redundancia. Pongo como ejemplo los siguientes datos encontrados :
    redundanciaDatos.png
    "CASO CONFIRMADO DE COVID", "CASO CONFIRMADO DE COVID 19" y "CASO CONFIRMADO DE COVID-19" por ejemplo, hacen referencia a lo mismo, pero al estar escrito diferente, podría dar a entender que son distintas causas. Una solución para esto podría ser que se tengan un diccionario de posibles etiquetas para las causas de muertes de tal forma que el llenado de datos sea más estructurado.
  6. Github
    https://github.com/DiegoHDMGZ/IAA-PC2/t ... sificacion
    Contiene los datasets y el programa en python para poder eliminar caracteres especiales y binarizar la clase


Responder