Technical
Objetivos Difíciles de Optimizar: el ROC AUC
Paulo Maia · 18 de diciembre de 2020
En muchos problemas de clasificación binaria, especialmente en dominios con problemas altamente desbalanceados (como el sector médico y la detección de eventos raros), es necesario asegurar que nuestro modelo no adquiera un sesgo excesivo hacia la clase más prevalente.
Por eso probablemente hayas escuchado que la precisión no es una métrica adecuada para validar clasificadores en configuraciones desbalanceadas. En su lugar, es preferible utilizar otras métricas de rendimiento que sean robustas ante el desbalanceo, como el ROC AUC y el F1-score. Entonces, ¿por qué no entrenamos modelos que optimicen directamente estas métricas? En algunos casos no es posible o eficiente hacerlo porque no son diferenciables. Esta es una serie de artículos en los que explicaremos cómo optimizar tu modelo para estas métricas (o versiones suavizadas de ellas), comenzando con el ROC AUC.
¿Qué es el ROC AUC?
Una curva ROC es un gráfico que ilustra la capacidad diagnóstica de un clasificador binario para diferentes umbrales discriminativos en su salida probabilística. Se construye fijando umbrales en las probabilidades predichas por el modelo en varios valores entre 0 y 1, y calculando la Tasa de Verdaderos Positivos (proporción de muestras positivas predichas correctamente como positivas) y la Tasa de Falsos Positivos (proporción de muestras negativas predichas incorrectamente como positivas). La curva ROC es el gráfico de todos estos puntos determinados, como se muestra a continuación.
En aprendizaje automático, típicamente queremos lograr la curva con el área más alta posible. ¿Por qué? Quizás no lo sabías, pero el área bajo la curva ROC equivale a la probabilidad de que el clasificador ordene una instancia positiva elegida al azar por delante de una instancia negativa elegida al azar (la demostración de este teorema está disponible aquí). En otras palabras, cuál es la probabilidad de asignar una prioridad mayor a un paciente enfermo que a uno sano.
Podemos pensar en el ROC AUC como la precisión de un modelo de ranking cuando se expone a un par de muestras de clases opuestas (por ejemplo, una enferma y otra sana). Siendo la entropía cruzada el enfoque suavizado de facto para entrenar clasificadores binarios cuando tenemos en mente la precisión, la entropía cruzada de un modelo de ranking pairwise (por ejemplo, una red neuronal siamesa) sería una forma suavizada de aprendizaje que tiende a maximizar el ROC AUC.
¿Cómo optimizar el ROC AUC?
Supongamos que tenemos un modelo (por ejemplo, una red neuronal profunda) como el siguiente que, dadas las características de entrada, predice una puntuación continua.
Como discutimos anteriormente, maximizar el ROC AUC es equivalente a maximizar la precisión del signo de la diferencia de puntuación para un par positivo-negativo:
Por lo tanto, podemos simplemente usar una arquitectura Siamesa, donde cada rama contendrá nuestro modelo objetivo, entrenado con pares positivo-negativo. En nuestra arquitectura, las puntuaciones se restarán y se pasarán a través de una activación sigmoid para aproximar la probabilidad de que la muestra positiva tenga una puntuación mayor que la muestra negativa.
Para generar nuestros lotes de entrenamiento, cada par tendrá una muestra de cada clase, una en la rama negativa y otra en la rama positiva, lo que significa que la etiqueta de verdad siempre será 1, ya que la probabilidad de la rama positiva siempre debería ser mayor que la de la rama negativa. El modelo se entrena minimizando la pérdida de entropía cruzada de este objetivo pairwise. No convergiremos a una solución ingenua aquí porque los pesos en cada rama de una red siamesa se comparten.
Esto significa que el modelo recibe una penalización cada vez que el lado negativo tiene una puntuación mayor que el positivo. De esta forma, estamos optimizando el modelo para que siempre asigne una puntuación mayor a la clase positiva (input_pos) cuando se compara con una clase negativa (input_neg), que es esencialmente la definición de optimizar ROC AUC.
Entonces, ¿cómo convertimos esta red en un modelo operacional que devuelva las clases binarias? Necesitamos reducir nuestra red a una única rama, con los pesos preentrenados, y determinar un valor de umbral para la puntuación predicha por encima del cual el modelo clasifica la clase como positiva.
Validación
Esta arquitectura fue probada en el conjunto de datos CIFAR10 en Keras, creando un problema artificialmente desbalanceado. La clase positiva se consideró como "aviones", y la clase negativa como todas las otras clases del conjunto de datos. La clase positiva fue luego submuestreada al 5% para crear un problema artificialmente desbalanceado.
Posteriormente, utilizamos una red feedforward con capas internas de dropout y comparamos el rendimiento de la estrategia basada en entropía cruzada simple con los modelos basados en siamesa que discutimos en este artículo. El experimento se repitió 5 veces con diferentes semillas aleatorias para obtener un valor medio más independiente del proceso de selección de imágenes.
El valor medio de ROC AUC para la Red Siamesa fue (86 ± 1,3)%, mientras que para la red de una única rama el valor se redujo a (72,2 ± 7,2)%, demostrando que optimizar el modelo con la arquitectura siamesa fue beneficioso para el ROC AUC.
Conclusión
Este artículo explicó cómo optimizar tu modelo para una métrica diferente, basándose en la interpretación probabilística del ROC AUC.
En NILG.AI, hemos trabajado en numerosas aplicaciones médicas y de marketing, donde los objetivos tienden a estar extremadamente desbalanceados. Hemos utilizado esta estrategia en varios proyectos, logrando en cada caso un rendimiento superior con esta estrategia de aprendizaje en comparación con enfoques tradicionales. Si te enfrentas a un problema similar, hablemos sobre cómo podemos colaborar en este tipo de enfoques de aprendizaje.
