Evaluación de Modelos: Clasificación Multi-Etiqueta, Precisión y Cobertura

Introducción

Trataré aquí el problema de escoger una medida para evaluar clasificadores en ciertas situaciones difíciles. Este problema parece trivial pero es todo lo contrario: es un problema difícil, incómodo y a la vez de importancia absoluta! Si no se aclara desde un principio, nos hará perder cientos de horas de trabajo y (peor!) confundirá a todo el mundo a nuestro alrededor.

Cuál es el problema? Tenemos un clasificador ya entrenado y un conjunto de test, queremos medir la calidad del clasificador para poder anunciar al mundo (al cliente, al jefe…) que nuestro clasificador es “buenísimo”. O más comúnmente: vamos a prometer al cliente un nivel mínimo de calidad por encima del cuál podemos declarar el éxito del proyecto (y cobrar! o recibir aplausos, ascensos…)

Como muchos detalles difíciles, este problema parece trivial y aburrido y nadie quiere en un principio dedicarle tiempo… excepto los que saben. La realidad es que no se puede decidir la medida de evaluación sin antes considerar el problema en detalle. La clave aquí está en entender las posibles salidas esperadas del sistema (clases o etiquetas, output space, desired output, true output, true labels).

NOTA: En este artículo me refiero a veces a la clasificación de “documentos”, pero todo el contenido aplica de manera general a cualquier otro “objeto” que se vaya a etiquetar, como frases, imágenes, o representaciones de objetos o estados (any input pattern).

Multi-Clasificación

Los problemas de multi-clasificación son problemas en los que todos los objetos son etiquetados con una (y sólo una) etiqueta (label), que toma valores en un conjunto pre-definido (ver Wikipedia).

En los problemas de multi-clasificación la medida natural de calidad es lo que comúnmente llamamos “precisión” “exactitud” o “tasa de acierto” o “porcentaje de correctos” (accuracy, o probability of good classification (PGC) en inglés). La palabra precisión en este caso es ambigua así que utilizó “exactitud” para ser más preciso, y la abreviación PGC:

exactitud = precisión “Común” =  tasa de acierto = accuracy =

PGC = |documentos probados correctos| / |documentos probados|

En este caso el “porcentaje de error” es exactamente 1-PGC.

El Problema de la Precisión Desequilibrada

La exactitud o precisión esconde una trampa mortal: la precisión desequilibrada.

Se dice que tenemos un conjunto “desequilibrado” (unbalanced set) cuando un gran porcentaje de documentos son de una clase y el resto de clases sean minoritarias. Los conjuntos desequilibrados no son la excepción sino la norma en muchos tipos de problemas de clasificación. Por ejemplo, en problemas binarios con una gran mayoría de negativos (e.g. detección de spam, detección de gatos en fotos familiares…).

En el caso de conjuntos desequilibrados la exactitud pierde su interés como medida de evaluación, porque si se clasifica todo siempre con la clase más común, se obtiene una exactitud muy alta.

Ejemplo: Queremos evaluar un clasificador de spam con un conjunto de prueba de 1M de documentos en los que hay 1000 de spam. La precisión de un sistema que nunca detecta spam sería del (10E6-10E3)/10E6= 0.999.

En estos casos la exactitud nos dará una  impresión de calidad completamente falsa. Peor aún: cuanto mejor seamos detectando los casos difíciles, peor será la exactitud de nuestro sistema. Necesitamos otras medidas!

Solución 1: Coste Asimétrico

Si podemos asignar una sola etiqueta a cada documento, entonces el problema de la precisión desequilibrada se puede solucionar fácilmente ponderando los errores de cada clase con una “matriz de coste”. Basta definir el coste de cada tipo de mala clasificación, y calcular la media de precisión ponderada por este coste.

falta ejemplo!

Solución 2: precisión y cobertura

Además de la exactitud, existen otras medidas de evaluación. En particular hay dos medidas que nos serán muy útiles en el caso de multi-clasificación:

precisión (precision): “Proporción de etiquetas correctas respecto a las generadas”

cobertura (recall) : “Proporción de etiquetas correctas respecto a las deseadas”

(vemos que se redefine el término “precisión”, que ya no es igual a la exactitud.)

La precisión como la cobertura son complementarias: es fácil aumentar una disminuyendo la otra. Por ejemplo, un sistema “conservador” preferirá hacer el mínimo número de predicciones para no errar; en ese caso su precisión será alta pero su cobertura baja. Al contrario, un sistema que genere una gran cantidad de etiquetas aunque no esté seguro dará una alta cobertura pero una baja precisión.
Formalmente: Tenemos un conjunto de prueba de tamaño n con p casos de la clase A y n-p ejemplos de la clase no A. Nuestro clasificador etiqueta los n casos, etiquetándolos como K’ o no A’. El resultado final es el siguiente:

A no A
A’ tp (true positive) fp (false positive)
no A’ fn (false negative) tn (true negative)

donde tp+fp+fn+tn=n, p = tp+fn, n-p = fp+tn.

Ahora podemos definir formalmente la precisión y la cobertura de la clase A en el conjunto de prueba como:

precisión (precision) = tp / (tp+fp)

cobertura (recall) = tp / (tp+fn)

Para combinar ambas medidas en una se utiliza la media armónica1 de ambas, llamada medida F1

F1 = 2 * (precision*recall)/(precision+recall)

Hay que tratar dos casos especiales:

  • si no hay positivos (p=0) la cobertura no está definida. Lo mejor en este caso es eliminar la etiqueta completamente de la prueba. Si esto no fuera posible, se fijar arbitrariamente a 1 para que no penalice la media (aunque esto la sube artificialmente!)
  • si el clasificador no etiqueta ningún documento con la clase (tp+fp=0), la precisión no está definida y se fija arbitrariamente a 1 (si no dices nada no te puedes equivocar…)

Clasificación Multi-Etiqueta

Cuando un objeto puede ser clasificado con cero, una, o más de una etiquetas, nos encontramos en un problema de clasificación automática. En estos problemas la evaluación se complica.

Porqué? Veamos un ejemplo:

Imaginemos que un documento debería ser etiquetado con las etiquetas A,B y C. Pero el clasificador le ha asignado las etiquetas A y D. Qué precisión damos a este resultado? Cuántas etiquetas están bien? 1 de 3? 1 de 2? 1 de 4?
Una solución es aplicar estrictamente la regla de precisión anterior y decir simplemente que el documento está mal etiquetado (era A-B-C, no A-D). Pero de hecho hemos acertado la A, es decir que nuestro clasificador es mucho mejor que un clasificador que dijera por ejemplo D-E-F-G. No parece muy útil asignarle precisión 0 y obviar que parte del problema se ha resuelto bien. Esta solución casi nunca es utilizada2.

Otra alternativa es calcular la exactitud “por etiqueta”. Es decir, consideramos cada clase por separado como si se tratara de una clase binaria y luego sacamos la media. Pero ahora nos enfrentamos al problema de la precisión desequilibrada en cada una de las etiquetas! Y la definición de una matriz de coste es mucho más compleja porque además de las substituciones (A en vez de B), tenemos adiciones (A y B) y borrados (ni A ni B).

En la práctica la exactitud (o precisión común) no resulta una medida de evaluación útil y tenemos que pasar a medidas más complejas, en particular la precisión y la cobertura que vimos anteriormente.

Promedios Micro y Macro

La solución más comúnmente adoptada es calcula la precisión y cobertrua de cada etiqueta por separado, y luego calcular una media ponderada. Pero no hay un consenso de cómo se deben calcular las medias y en qué orden. Lo cierto es que llegando aquí el caos es total: cada uno calcula lo que quiere en el orden que quiere, a menudo usando términos incorrectos y sin definir las medidas. Numerosos paquetes de cálculo tienen errores o tratan los casos indefinidos de manera diferente, sin documentarlo. Tendrás que tener especial cuidado3

Existen dos maneras de calcular las medias:

Promedio Micro (micro-average): promedio ponderado por la frecuencia de cada etiqueta (da más importancia a las clases menos frecuentes y en general más difíciles)

Promedio Macro (macro-average): promedio ponderado de cada resultado (da más peso a las etiquetas más comunes).

Más exactamente, si tenemos clases C=(1,...,k) con tamaños (p_1,...,p_k), y obtenemos las precisiones (prec_1,...,prec_k), y las coberturas (rec_1,...,rec_k), entonces tenemos:

precisión media (micro) = \frac{1}{\sum_j p_j}\sum_i p_i \cdot prec_i
precisión media (macro) = \frac{1}{k}\sum_i prec_i

y de igual manera con la cobertura, remplazando en las formulas (prec_1,...,prec_k) por (rec_1,...,rec_k).

Hay que calcular por lo tanto para cada etiqueta su precisión y cobertura y su tamaño p. Luego calcular las medias macro y micro de precisión y de cobertura. Finalmente calcular el macro y micro F1 resultante.

Recomiendo siempre mirar los valores de precisión y cobertura para cada clase y por medias micro y macro, resumidas en dos tablas. Si resumes en un sólo F1 el resultado de toda la evaluación quedarás ciego, no sabrás ni qué está pasando con el clasificador ni qué está pasando con la medida de evaluación que utilizas.

Clase Tamaño Precisión Cobertura F1
clase 1
clase 2
…|…

y

Macro Precisión Macro Cobertura Macro F1 Micro Precisión Micro Cobertura Micro F1

  1. otras medias son posibles para ponderar más la precisión o la cobertura, ver aquí
  2. Esto es equivalente a reducir el problema de la multi-clasificación al problema de la clasificación, donde ahora cada subconjunto de clases en una nueva clase. Es una opción, pero muy estricta! En la práctica esta solución es útil solamente si una combinación de clases es incorrecta por tener una clase mal. Considera por ejemplo un compuesto químico en el que tener un solo elemento mal es suficiente para invalidar todo el resultado. 
  3. Por ejemplo SciKit propone 5 maneras de calcular la media, pero en todas ellas calcula las medias de F1 en vez de calcular la media de precisión y cobertura antes… Tampoco la documentación explica qué hace con los casos indefinidos. 
Anuncios