El médico que diagnosticaba vampiros

Precisión diagnóstica con datos desbalanceados.

Precisión diagnóstica

Se analiza el problema del desbalance de clases en modelos biomédicos y cómo la precisión global puede resultar inútil cuando la clase minoritaria es la clínicamente relevante. Se explica cuáles son las métricas más adecuadas y se exponen las principales estrategias para abordar el desbalance, como el sobremuestreo (SMOTE, ADASYN), el submuestreo selectivo (pares de Tomek) y métodos de ensamble que estabilizan la precisión en escenarios con baja prevalencia.

En 1894, un médico vienés publicó un estudio titulado “La prevalencia de la hemofagia en pacientes con palidez persistente”. En él aseguraba haber desarrollado una prueba capaz de detectar vampiros con un 99% de precisión. El problema, claro, era que en su muestra de 1000 pacientes solo había uno que realmente mordía cuellos (y probablemente por amor, no por hambre). Su prueba simplemente respondía “no vampiro” en todos los casos. ¡Y voilà! Un 99,9% de éxito estadístico.

El doctor, feliz, fue a celebrarlo… de noche, por supuesto.

Está bien, lo admito, me acabo de inventar la historia del médico que diagnosticaba vampiros, pero no creáis que se encuentra muy alejada de la realidad, ya que resume una de las trampas más frecuentes en ciencia de datos y en investigación biomédica: la ilusión de la precisión.

En muchas ocasiones, nuestra práctica clínica nos coloca como actores en escenarios en los que lo raro es lo que más importa: una enfermedad infrecuente, una complicación quirúrgica poco habitual, una reacción adversa que ocurre una vez entre mil. Y justo ahí, donde más atención deberíamos tener, las métricas tradicionales pueden jugarnos la peor de las bromas si no tenemos en cuenta la rareza de lo que queremos predecir y del desequilibrio entre las diferentes posibilidades diagnósticas.

Así que, en esta entrada, hablaremos de cómo evitar caer en la trampa de los datos desbalanceados. O, dicho de otro modo, de cómo no convertirnos en el doctor vienés que diagnosticaba vampiros con una eficacia perfecta… pero que nunca detectó uno.

Un 99% de precisión diagnóstica… y cero utilidad clínica

Supongamos que diseñáis un algoritmo para detectar una enfermedad rara como puede ser nuestra temida fildulastrosis, que afecta a una de cada mil personas. Entrenáis el modelo, lo probáis y os devuelve un glorioso 99,9% de exactitud diagnóstica. Brindáis, bailáis, publicáis el trabajo… hasta que algún lector habitual de este blog os hace la pregunta incómoda: ¿y cuántos pacientes enfermos habéis detectado realmente?

Seguro que ya os imagináis dónde está la trampa. Si el modelo dice “sano” en todos los casos, acertará el 99,9% de las veces… pero fallará en el único caso que realmente nos interesa. En medicina, como en la caza de vampiros, los falsos negativos pueden costar caro.

Para entender por qué ocurre esto, no tenemos más que mirar la tabla de contingencia, aunque a los que se dedican a la ciencia de datos les gusta más el nombre de matriz de confusión.

Esta tabla 2×2 separa los aciertos y errores del modelo en cuatro compartimentos: verdaderos positivos (VP, el modelo dice “enfermo” y realmente lo está), verdaderos negativos (VN, dice “sano” y acierta), falsos positivos (FP, dice “enfermo” pero el paciente está bien) y falsos negativos (FN, dice “sano” cuando en realidad está enfermo).

Si elegimos la precisión o exactitud diagnóstica como métrica para evaluar el rendimiento del modelo, solo tendremos en cuenta el número global de aciertos y, claro, si el número de sanos es abrumador, los errores en los enfermos quedarán diluidos. Es como si felicitáramos a un médico por curar el 99% de los catarros… cuando se le pasan todos los infartos.

¿Y podemos hacer algo para evitar esta trampa si hay mucho desequilibrio entre las dos posibilidades diagnósticas? Como casi siempre, podemos.

Lo más sencillo será elegir con cuidado la métrica más adecuada para valorar el desempeño del modelo o prueba diagnóstica. Los clínicos estamos habituados a utilizar sensibilidad, especificidad, valores predictivos, cocientes de probabilidad, curvas ROC y cosas así, pero en el mundo del aprendizaje automático las tres métricas más populares son:

– Sensibilidad: de todos los enfermos reales, ¿qué proporción detectó el modelo? Es lo que en inglés se denomina recall.

– Valor predictivo positivo: de todos los que el modelo dice que están enfermos, ¿qué proporción lo están de verdad? En los artículos en inglés lo veréis como precision, pero tened cuidado de no confundir con nuestra “precisión”, que es sinónimo de exactitud (que en la pérfida Albión se conoce como accuracy).

F-1-score: es la media armónica de las dos anteriores, por lo que pondera un poco las dos métricas.

¿Cuál de todas estas es más recomendable utilizar? Como regla general, si los datos están bien balanceados podremos usar la precisión o exactitud sin problemas, pero si hay desbalance importante, será preferible recurrir a estos tres que hemos explicado más arriba. En cualquier caso, el rendimiento general del modelo en todos los umbrales diagnósticos nos lo indicará su área bajo la curva ROC.

Todo lo que hemos dicho tiene en cuenta únicamente los aspectos estadísticos. Ya sabemos que el contexto clínico en el que apliquemos el modelo nos puede hacer aconsejable elegir una determinada métrica frente a las demás.

En cualquier caso, todo lo dicho nos servirá para entender mejor la utilidad del modelo o prueba diagnóstica, pero también puede interesarnos aplicar alguna técnica para mejorar la capacidad de aprendizaje del modelo durante su entrenamiento.

¿Creéis que tenemos alguna forma de mejorar el entrenamiento cuando hay gran desequilibrio de categorías de la variable objetivo de diagnóstico? Seguid leyendo y lo veréis.

Fabricar pacientes sintéticos (pero con ética)

Una vez que nos damos cuenta de que nos faltan casos positivos (como ocurre con los vampiros o los casos de fildulastrosis), el siguiente paso lógico es intentar equilibrar el conjunto de datos para que los algoritmos puedan aprender a diagnosticar también los casos raros. Pero ¿qué hacer si la realidad no nos da suficientes ejemplos? Fácil: nos los inventamos, pero siguiendo unas reglas determinadas.

Aquí entran en juego las técnicas de sobremuestreo, que consisten en aumentar artificialmente el número de ejemplos de la clase minoritaria.

La forma más sencilla sería duplicar los casos raros existentes, pero esto sería como enseñarle a un estudiante de medicina la misma radiografía cien veces: al final memoriza la imagen, pero no aprende a diagnosticar. El estudiante se “sobreajusta” (overfitting) y fallará estrepitosamente ante nuevos casos.

Por suerte, hay una forma más creativa: SMOTE (Synthetic Minority Oversampling Technique). Este método no copia, sino que genera nuevos ejemplos sintéticos basados en los existentes.

Imaginad que cada paciente enfermo es un punto en un espacio multidimensional donde cada eje representa una variable (edad, presión arterial, nivel de hemoglobina, etc.). SMOTE toma uno de esos puntos y busca sus k vecinos más cercanos de la misma clase (otros pacientes enfermos). Luego, elige uno de ellos al azar y crea un nuevo paciente en algún lugar intermedio entre los dos, combinando sus valores. El resultado es un paciente ficticio pero plausible, que amplía el espacio de ejemplos de la clase minoritaria sin simplemente duplicar casos.

Lo fascinante de SMOTE es que no inventa datos absurdos, sino que explora zonas intermedias del espacio de variables, donde podrían existir casos reales, pero aún no observados. Volviendo a nuestro ejemplo del estudiante de medicina, sería como usar simuladores de pacientes: no son reales, pero reflejan con bastante fidelidad la diversidad del mundo clínico.

Vemos, pues, que SMOTE es como el alumno aplicado que va tomando apuntes para rellenar los huecos que encuentra en su cuaderno. Pero aún tenemos otro alumno un poco más quisquilloso y rebelde, que se fija con mayor interés en aquellos datos que no entiende. Estamos hablando de ADASYN (Adaptive Synthetic Sampling), que no se conforma con generar ejemplos de forma uniforme, sino preferencialmente allí donde el modelo tiene más dificultades para aprender.

La lógica de funcionamiento de ADASYN es sencilla pero poderosa. Supongamos que entrenamos un modelo para detectar casos de fildulastrosis y observamos que, en algunos perfiles clínicos, el algoritmo se confunde más: por ejemplo, en mujeres jóvenes con síntomas atípicos o en ancianos con comorbilidades.

ADASYN es capaz de identificar automáticamente esas zonas del espacio de datos donde los errores son frecuentes y generar más ejemplos sintéticos precisamente allí. Es decir, no rellena huecos al azar, sino que refuerza las zonas problemáticas de conocimiento del modelo, ayudándole a aprender a diagnosticar justo los pacientes que más le hacen dudar.

Cuando menos, es más: metemos el bisturí

Hasta ahora hemos visto el problema desde el punto de vista de suponer que nos faltan enfermos, pero existe otro abordaje posible: pensar que nos sobran sanos. Bajo este nuevo enfoque, podemos reducir el número de ejemplos de la clase mayoritaria para equilibrar el conjunto utilizando la técnica contraria: el submuestreo.

Esta técnica tiene dos ventaja claras. Por una parte, el modelo aprende más rápido al tener menos datos. Por otra, se ve obligado a prestar atención a lo poco frecuente. Pero hay un riesgo evidente: podemos eliminar ejemplos útiles, información que contenía señales importantes. Por eso hay que elegir bien un bisturí fino para el recorte, huyendo de la tentación de meter la motosierra.

Para evitar cortar al azar, se han diseñado algunos métodos como el de los pares de enlaces de Tomek, descrito antes de que el aprendizaje automático se hiciese tan popular.

La idea, sencilla a la par que elegante, es identificar los pares de ejemplos que están sospechosamente cerca el uno del otro, pero pertenecen a clases distintas. Es decir, casos que confunden al modelo porque se encuentran justo en la frontera entre lo “normal” y lo “patológico”.

Generalmente, se elimina el ejemplo de la clase mayoritaria del par, de modo que la frontera entre clases quede más clara. Siguiendo con los paralelismos médicos a los que me he vuelto tan aficionado en esta entrada, sería como extirpar el tejido sano que estaba interfiriendo con la visión del tumor en una cirugía diagnóstica: doloroso, pero necesario para que el modelo vea mejor.

Las ventajas del trabajo en equipo

Una vez que hemos “arreglado” los datos y están balanceados, llega la hora de construir un modelo robusto y eficaz. Y, como en muchas tareas que hacemos en nuestro día a día, el trabajo en equipo puede ayudarnos a marcar la diferencia.

Los llamados métodos de ensamble combinan varios modelos más simples (por ejemplo, varios árboles de decisión) para producir un resultado final más estable y preciso. Son como un comité médico: cada especialista aporta su opinión, y el diagnóstico conjunto suele ser mejor que el de cualquiera por separado.

Estos métodos ya los vimos con más detalle en una entrada anterior, pero digamos de manera resumida que hay dos abordajes posibles.

El primero es realizar muchos árboles, ya sea mediante técnicas de agregación por remuestreo (bagging) o de bosques aleatorios (random forest). Una vez que los hemos hecho, promediamos el resultado de todos los árboles para obtener nuestra predicción.

El segundo, también con árboles de decisión, es emplear técnicas de boosting en los que cada árbol se entrena de manera sucesiva para mejorar el rendimiento de los anteriores.

Podéis repasar la entrada previa si queréis refrescar el tema con más detalle.

Lo bueno de estos árboles de decisión es que pueden hacer algún truco propio, además de lo que hemos comentado hasta ahora. Los bosques aleatorios, por ejemplo, pueden construirse con datos estratificados, con lo que se garantiza que cada muestra tenga una proporción de clases representativa o balanceada.

Además, muchos de estos algoritmos permiten asignar un peso mayor a las categorías minoritarias durante el entrenamiento, modificando la función de pérdida o el criterio de división de los nodos para penalizar más los errores en las clases minoritarias.

Y, por si fuera poco, los algoritmos de boosting (como AdaBoost, Gradient Boosting, XGBoost, LightGBM, etc.) pueden ajustar dinámicamente los pesos de las observaciones según el error cometido, de forma que los ejemplos de clases minoritarias (más difíciles de clasificar) reciben mayor peso en iteraciones posteriores. Esto permite que el modelo aprenda más de los errores relacionados con las clases subrepresentadas.

Además, siempre nos quedará el recurso que ya mencionamos más arriba, que es modificar el umbral de probabilidad para decidir la clase final (en lugar de quedarnos con el 0,5 que marca por defecto el modelo), con lo que podremos optimizar nuestras métricas y adaptarlas mejor al contexto clínico.

Nos vamos…

Y aquí lo vamos a dejar por hoy.

Hemos visto que manejar datos desbalanceados es como practicar medicina en un hospital lleno de casos raros: necesitas equilibrio, métricas adecuadas y una buena dosis de escepticismo.

No basta con presumir de un 99% de acierto. Hay que entender qué está acertando y qué está ignorando el modelo. De lo contrario, podríais acabar publicando el estudio definitivo sobre vampiros… sin haber visto uno en toda vuestra carrera. Así que recordad: la precisión puede ser una ilusión tan seductora como los colmillos de Drácula.

Hemos visto también algunas de las técnicas más sofisticadas a las que podemos recurrir para equilibrar las categorías diagnósticas cuando haya mucho desbalance entre las dos. Sin embargo, en algunas ocasiones nos podremos manejar modificando los umbrales diagnóstico y eligiendo la métrica apropiada.

En ciencia de datos se utilizan algunas métricas a las que nosotros, los que nos dedicamos a la biomedicina, somos menos adeptos, como es el F-1-score. Aunque está bien combinar en un solo número la sensibilidad y el valor predictivo positivo, si lo pensáis bien, el F-1-score tiene un punto débil que para nosotros puede ser muy importante: ignora los verdaderos negativos.

Fijarnos únicamente en los sanos que clasificamos de forma correcta puede ser peligroso si estamos trabajando en un programa de cribado de cáncer o de diagnóstico de una enfermedad muy rara, por poner algún ejemplo. Aquí, los verdaderos negativos importan mucho.

Claro que para eso podemos recurrir a otra métrica que tiene en cuenta las cuatro celdas de la tabla de contingencia para calcular una medida equilibrada del rendimiento global del modelo, cuyo valor puede oscilar desde -1 (predicción totalmente errónea) hasta +1 (predicción perfecta), pasando por el 0 (equivalente a tirar una moneda al aire para hacer el diagnóstico).

Estamos hablando del coeficiente de correlación de Matthews, que no se deja engañar fácilmente por los números grandes ni por los conjuntos de datos tramposos. Pero esa es otra historia…

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Información básica sobre protección de datos Ver más

  • Responsable: Manuel Molina Arias.
  • Finalidad:  Moderar los comentarios.
  • Legitimación:  Por consentimiento del interesado.
  • Destinatarios y encargados de tratamiento:  No se ceden o comunican datos a terceros para prestar este servicio. El Titular ha contratado los servicios de alojamiento web a Aleph que actúa como encargado de tratamiento.
  • Derechos: Acceder, rectificar y suprimir los datos.
  • Información Adicional: Puede consultar la información detallada en la Política de Privacidad.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos. Al hacer clic en el botón Aceptar, aceptas el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Antes de aceptar puedes ver Configurar cookies para realizar un consentimiento selectivo.   
Privacidad