Introducción

Uno de los objetivos principales del machine learning es la construcción de clasificadores, esto es, algoritmos que puedan predecir una categoría (por ejemplo, Verdadero – Falso) a partir de unos datos de entrada. La mayoría de los métodos modernos presentan una performance aceptable para esta tarea pero, cuando se trata de muestras desbalanceadas, la calidad de nuestro clasificador muy probablemente se vea afectada.

 

¿Qué es una muestra desbalanceada?. Es un conjunto de datos donde la distribución de las clases no es uniforme y una o varias de ellas están sobre/infra-representada. Ejemplos reales pueden ser: detectar cierta enfermedad rara en una población, el uso fraudulento de una tarjeta de crédito o las conexiones dañinas a un servidor. En todos estos casos la proporción de casos positivos será mucho menor que la de casos negativos. Si queremos construir un buen clasificador debemos enfrentar un par de problemas a la hora de entrenar y evaluar nuestros modelos

Entrenamiento

De aquí en adelante consideraremos que nos enfrentamos a un problema de clasificación binario, es decir, sólo tendremos dos categorías: positiva (1) y negativa (0). Además, sin perder generalidad, asumiremos que la clase positiva está extremadamente infrarepresentada (digamos que sólo el 1% de nuestros datos es positivo).
La gran parte de los métodos de clasificación se basan en minimizar (o maximizar) alguna función que representa el error que estamos cometiendo, de manera que el algoritmo tenderá a minimizar el error en la clase negativa ya que ésta representa casi la totalidad de los datos. En otras palabras, el error convergerá a cero (aproximadamente cero) si nos esforzamos en no cometer errores en la clase negativa pues estaríamos acertando en el 99% de los casos. Esto provoca que los algoritmos ajusten el modelo en favor de la clase más representada.
Para evitarlo, es necesario hacer un tratamiento ya sea a nivel de datos o a nivel de algoritmo. El primer caso se basa en rebalancear las clases disminuyendo la clase mayoritaria o aumentando la minoritaria. A nivel de algoritmo las soluciones no suelen ser tan genéricas y dependen del clasificador que estemos tratando. Los métodos más típicos son:
  • Modificando los datos: Métodos de resampleado.
    • down-sampling: Consiste básicamente en eliminar datos de la clase mayoritaria, con la consiguiente perdida de información
    • over-sampling: Consiste en aumentar el número de casos de la clase minoritaria.
      • Con remplazamiento: simplemente se duplican los casos minoritarios
      • SMOTE: consiste en crear ejemplos negativos de manera artificial
      • SHRINK: se crean ejemplos positivos re-etiquetando ejemplos negativos.
  • Modificando el algoritmo: costes, rebalanceos y penalizaciones
    • Si el método lo permite, es posible usar en cada iteración una muestra de los datos originales pero igualando la proporción de las clases. Es común en arboles de decisión [1].
    • Penalización del error: Se trata de dar un mayor peso a los errores cometidos al clasificar mal un caso positivo. Al ser una solución genérica puede aplicarse a cualquier algoritmo.
    • Método de contrapesos: Consiste en parametrizar las clases para ajustarlas al desbalanceo.
    • Si el output del algoritmo es probabilístico, es práctica común ajustar el umbral de decisión entre la clase positiva y la negativa.
Por supuesto, siempre existe la posibilidad de lanzar tu algoritmo y esperar que funcione, de hecho el artículo [6] contempla esto, estudiando el caso de datos desbalanceados pero con clases no superpuestas (i.e. donde las distribuciones de ambas clases son distintas)

Evaluación

Matriz de confusión

Otro de los problemas que surgen al tratar datos desbalanceados es la métrica de evaluación. Es común usar la exactitud como medida para determinar cuán bueno es un clasificador.
  • La exactitud se define: exactitud = Prob(clasificar bien un registro)
El problema surge de que, por la naturaleza de los datos, el clasificador que predice siempre 0, tendría una exactitud del cercana al 100% pero obviamente, éste no es un clasificador útil. Para datos asimétricos es más común usar medidas como la precisión, la sensibilidad, o una medida de síntesis de ambas.

Definimos a continuación tales métricas:

Para dejar claro estos conceptos supongamos un escenario de diagnostico médico: Cierta enfermedad se presenta en el  ≈ 2% de la población. Dos laboratorios han desarrollado sendas pruebas clínicas para diagnosticarla que arrojaron los siguientes resultados (las tablas de abajo se conocen como matrices de confusión):

    
A priori podríamos pensar que el laboratorio B presenta una prueba de diagnosis más efectiva puesto que tiene una mayor exactitud, sin embargo, como hemos visto, incluso la prueba diagnóstica “El paciente siempre está sano” tendría una muy alta exactitud, convirtiéndola en una métrica poco representativa.
Al valorar las otras métricas vemos que el laboratorio A presenta una prueba con un 41% de precisión, esto es, de cada 10 veces que la prueba concluye enfermo, sólo 4 son realmente enfermedad, mientras que el laboratorio B obtiene un 77% en esta métrica. Sin embargo, al valorar una prueba de diagnosis lo primero que debemos tener en cuenta es cuántos pacientes enfermos no serán diagnosticados, y esto es lo que mide la sensibilidad. Según la prueba del laboratorio A: 9 de cada 10 pacientes con la enfermedad son diagnosticados correctamente (equiv. 90% sensibilidad)Mientras que para el laboratorio B ese porcentaje disminuye a 8 de cada 10. Por tanto, debemos concluir que la prueba A es mejor que la prueba B.
En conclusión, hemos visto que la exactitud no es una buena métrica para valorar datos desbalanceados y que la precisión/sensibilidad ofrece una mejor visión de cuán bueno es un clasificador ya que se fija sólo en la parte positiva de la muestra. La decisión de escoger un clasificador frente a otro depende de nuestro caso de estudio, de nuestros requerimientos de negocio y de como penalicemos falsos positivos contra falsos negativos. Como regla de oro:
  • Si queremos minimizar falsos negativos a costa de tener más falsos positivos, entonces la métrica a escoger es la sensibilidad.
  • En el caso contrario de minimizar falsos positivos contra aumentar falsos negativos, escogeremos la precisión.
  • Si ambos errores tienen la misma importancia, escogeremos una medida de síntesis como F-score, G-mean o alguna versión ponderada de éstas.
  • Siempre existe la opción de crear una métrica basada en nuestro problema específico.

Curvas ROC

Otro popular método es la evaluación de clasificadores a través de curvas ROC y el área debajo de éstas (AUC por sus siglas en inglés). Pese a que el análisis ROC es consistente incluso para clases desbalanceadas y ha sido (y es) ampliamente utilizado en la literatura científica, papers recientes [39] apuestan por el uso de la curva de precisión-sensibilidad (PRC por sus siglas en inglés.), al ser esta más informativa para datos asimétricos. Las imágenes de abajo están generadas a partir de datos sintéticos (i.e. no son datos reales.) pero demuestran perfectamente cómo el análisis ROC nos puede guiar hacia resultados incorrectos.
Hemos generado dos clasificadores: Rojo (Bueno), Azul (Mejor). Hemos dibujado las curvas ROC y PRC y calculado el área debajo de las mismas (usando el paquete precrec de R). En este tipo de análisis una curva es mejor que otra si ésta la domina.
a) Comparación para datos balanceados. 265 casos positivos vs 235 casos negativos. Las métricas para el clasificador Rojo son AUC = 87.3% , AUPRC = 87.9% y Exactitud = 79.6%; mientras que para el clasificador azul AUC = 99.0%, AUPRC = 99.1% y Exactitud = 93.6%
b) Comparación para datos desbalanceados. 18 casos positivos vs 482 casos negativos. Las métricas para el clasificador rojo son AUC = 88.5%, AUPRC = 16.8% y F-score = 0.33; mientras que para el clasificador azul AUC = 99.7%, AUPRC = 87.5% y F-score = 0.85
Como podemos ver, en el caso desbalanceado, el clasificador rojo obtiene un AUC cercana al 90% pese a ser un mal clasificador (abajo, la matriz de confusión), esto es algo que no sucede si los datos son balanceados, donde un AUC > 90% se considera una muy buena marca, mientras, el área bajo la curva PRC ofrece un dato menos optimista: 17%. Un mal clasificador
Algo parecido ocurre con las métricas del clasificador azul AUC = 99.7% y AUPRC = 87.5%. El AUC da un clasificador casi perfecto mientras que el AUPRC da un dato más realista.
Matrices de confusión usando el umbral que maximiza el F-score

Un ejemplo práctico

Con todo lo aprendido vamos a ver un ejemplo con el famoso dataset de Kaggle: Credit Card Fraud Detection. Este dataset consiste en  ≈ 285000 transacciones con tarjeta de crédito de las cuales unas 500 son fraudulentas, es decir sólo el 0.17% de nuestros datos están en la clase positiva.
Para nuestro caso de estudio vamos a usar el algoritmo xgboost (Random forest) en tres versiones distintas: La primera es usando el algoritmo tal cual (que llamaremos unweighted); la segunda es usando la versión Weighted [1], esto es, el algoritmo asignara pesos a las clases; la tercera es tratar los datos previamente con SMOTE [4] hasta conseguir un desbalanceo menor, y aplicar la versión Weighted algoritmo.
Los detalles técnicos se dan a continuación. La hiperparametrización se ha realizado con el objetivo de maximizar el AUPRC.
  • Modelo Unweighted:
    • Profundidad max del árbol = 10
    • epochs = 500
    • regularización = En cada epoch sólo se toman la mitad del dataset y por cada árbol el 70% de las columnas
    • learning rate = 0.1
  • Modelo Weighted
    • Misma parametrización que el modelo Unweighted pero usando contrapesos según recomienda la documentación del algoritmo
  • Modelo SMOTE
    • Profundidad max del árbol = 8
    • epochs = 150
    • sin regularización
    • learning rate = 0.1
    • SMOTE
      • Under-Sampling de la clase mayoritaria al 5%
      • Over-Sampling de la clase minoritaria 400%
      • Usando los 3 vecinos más próximos
      • La clase minoritaria ahora representa el 7% de los datos
Los hiperparámetros de los modelos ya demuestran algo de lo complejo que es entrenar datos desbalanceados. Los modelos sin SMOTE necesitan muchas epochs y mucha profundidad en los árboles (es decir, modelos muy complejos) para poder clasificar bien la clase positiva. Como consecuencia de ese entrenamiento tan profundo, el modelo tiende a sobreajustar los datos, teniendo que regularizar el entrenamiento añadiendo ruido. Mientras, el modelo SMOTE no es tan complejo, los árboles son más pequeños y no son necesarias tantas vueltas para entrenarlo (esto es normal porque ahora tenemos más datos de la clase minoritaria).
Los resultados se pueden ver abajo:

La diferencia entre los métodos es muy ligera y desde luego el gráfico ROC no muestra diferencia alguna, mientras que la curva PRC muestra cierta dominación del modelo SMOTE. Los datos de las métricas y las matrices de confusión se muestran abajo. El umbral τ se ha escogido para maximizar la sensibilidad a costa de la precisión y comparar los tres clasificadores a mismo nivel de sensibilidad (85.7%):

Como puede observarse a mismo nivel de sensibilidad el clasificador SMOTE ofrece el doble de precisión. En términos del problema que nos ocupa A mismo nivel de detección de fraude, el modelo SMOTE arroja la mitad de falsas alarmas. De aquí concluimos que el modelo SMOTE bate a los otros dos, algo que no podemos concluir del análisis ROC

Conclusión

El análisis de datos desbalanceados presenta una serie de características peculiares que merecen un trato distinto tanto a la hora de entrenar como a la hora de evaluar. En el entrenamiento es conveniente preprocesar los datos o usar versiones ponderadas de nuestros algoritmos. Mientras que por la parte de la evaluación, hemos visto como la exactitud y el área bajo la curva ROC no son buenos indicadores de la calidad es nuestro modelo y hemos dado alternativas.
Pese a ello, en el mismo ejemplo de Kaggle que hemos analizado aquí, no es raro encontrar gente usando estas métricas y afirmando tener un clasificador casi perfecto… y otros usuarios felicitándoles por ello.

 


Luis Morillo Najarro BI Software Developer at Indizen

References

[1Chao Chen, Andy Liaw: “Using Random Forest to Learn Imbalanced Data”, 2004.

[2Gustavo E. A. P. A. Batista, Ronaldo C. Prati, Maria Carolina Monard: “A study of the behavior of several methods for balancing machine learning training data”, SIGKDD Explorations, pp. 20-292004.

[3Jesse Davis, Mark Goadrich: “The relationship between Precision-Recall and ROC curves”, ICML2006.

[4Kevin W. Bowyer, Nitesh V. Chawla, Lawrence O. Hall, W. Philip Kegelmeyer: “SMOTE: Synthetic Minority Over-sampling Technique”, J. Artif. Intell. Res.2002.

[5Nitesh V. Chawla, Nathalie Japkowicz, Aleksander Kotcz: “Editorial: special issue on learning from imbalanced data sets”, SIGKDD Explorations, pp. 1-62004.

[6Ronaldo C. Prati, Gustavo E. A. P. A. Batista, Maria Carolina Monard: “Class Imbalances versus Class Overlapping: An Analysis of a Learning System Behavior”, MICAI2004.

[7TOM FAWCETTLearning from Imbalanced Classes2016. URL https://svds.com/learning-imbalanced-classes/.

[8Takaya Saito, Marc RehmsmeierROC and precision-recall with imbalanced datasets2015. URL https://classeval.wordpress.com/simulation-analysis/roc-and-precision-recall-with-imbalanced-datasets/.

[9Takaya Saito, Marc Rehmsmeier: “The Precision-Recall Plot Is More Informative than the ROC Plot When Evaluating Binary Classifiers on Imbalanced Datasets”, PloS one2015.