====== 8.f Otras métricas ====== Veamos ahora otras métricas de clasificación. ===== Top-N-Accuracy ===== En problemas de clasificación en los que hay muchísimos clases a clasificar , se puede usar otra métrica llamada **Top-N Accuracy**. Veamos en que consiste. El problema de clasificación de ImageNet hay 1000 posibles clases a clasificar. En ese caso cuando decimos que un "gato" es un "gato" es que la clase gato tiene la mayor probabilidad. Veamos un ejemplo con 10 objetos. ^ Clase ^ Probabilidad ^ | Casa | 0.06 | | Botella | 0,04 | | Farola | 0,15 | | Gato | 0,34 | | Perro | 0,28 | | Niño | 0,04 | | Adulto | 0,02 | | Bicicleta | 0,03 | | Semáforo | 0,001 | | Puente | 0,039 | Si la imagen es de un gato, en este caso diríamos que ha acertado ya que la probabilidad de ser gato es del 34% y es la mayor de todas. Y con eso calcularíamos el valor de ''Accuracy''. Sin embargo veamos este otro ejemplo: ^ Clase ^ Probabilidad ^ | Casa | 0.06 | | Botella | 0,04 | | Farola | 0,15 | | Gato | 0,28 | | Perro | 0,34 | | Niño | 0,04 | | Adulto | 0,02 | | Bicicleta | 0,03 | | Semáforo | 0,001 | | Puente | 0,039 | En este nuevo ejemplo, también le hemos pasado una imagen de una gato pero la probabilidad de ser gato es del 28% mientras que la de ser perro es del 34%. Por ello diríamos que no ha acertado. Sin embargo usando la métrica de ''Top-2 Accuracy'', diríamos que ha acertado si el gato está entre las 2 que tiene mayor probabilidad. Y en este caso si que diríamos que ha acertado. Esta métrica tiene sentido cuando hay muchísimas clases (En ImageNet hay 1000 clases). Y aunque la predicción correcta no sea la mejor al menos está entre las 2 primeras ''Top-2-Accuracy''. En el siguiente artículo [[https://keras.io/examples/vision/image_classification_with_vision_transformer/|Image classification with Vision Transformer]] se ve como se usa la métrica de ''Top-5-Accuracy''. === Keras === en keras se puede usar esta métrica con [[https://www.tensorflow.org/api_docs/python/tf/keras/metrics/SparseTopKCategoricalAccuracy|tf.keras.metrics.SparseTopKCategoricalAccuracy]]. Por defecto esta métrica calcula es ''top-5-Accuracy''.Pero se puede cambiar con el parámetro ''k''. model.compile(optimizer='sgd',loss='sparse_categorical_crossentropy',metrics=[keras.metrics.SparseTopKCategoricalAccuracy()]) model.compile(optimizer='sgd',loss='sparse_categorical_crossentropy',metrics=[keras.metrics.SparseTopKCategoricalAccuracy(k=5, name='top-5-accuracy')]) Más información: * [[https://www.baeldung.com/cs/top-n-accuracy-metrics|Top-N Accuracy Metrics]] * [[https://www.image-net.org/index.php|ImageNet]] * [[https://blog.roboflow.com/introduction-to-imagenet/|An Introduction to ImageNet]] * [[https://keras.io/examples/vision/image_classification_with_vision_transformer/|Image classification with Vision Transformer]] * [[https://stackoverflow.com/questions/58565394/what-is-the-difference-between-sparse-categorical-crossentropy-and-categorical-c|What is the difference between sparse_categorical_crossentropy and categorical_crossentropy?]] ===== Fbeta-score ===== El $F_{\beta}\text{-score}$ es como [[tema08.metricas_derivadas#F1-score]] pero permite ajustar si penalizamos más los falsos positivos o los falsos negativos. Al dar más importancia a uno que a otro realmente no es una métrica de rendimiento general ya que está "ponderada". La formula es: $$ F_{\beta}\text{-score}=\frac{(1+\beta^2) \cdot precision \cdot sensibilidad}{\beta^2 \cdot precision+sensibilidad} $$ Si $\beta=1$ la fórmula es la de $F_1\text{-score}$ por eso se le llama así porque la $\beta$ es un 1. Interpretación de β * Si β = 1, la métrica se reduce al F1-score, que da igual peso a la precisión y la sensibilidad. * Si β > 1, penaliza más una baja sensibilidad, lo que significa que los falsos negativos (FN) penalizan más que los falsos positivos (FP). * Si β < 1, penaliza más una baja precisión, lo que significa que los falsos positivos (FP) penalizan más que los falsos negativos (FN). Veamos ahora unos ejemplos: * Con β=1 ambos están equilibrados. Y da lo mismo que se intercambien los valores de Sensibilidad y Precisión ^ Sensibilidad ^ Precisión ^ β ^ $F_{1}\text{-score}$ ^ | $0,2$ | $0,6$ | $0,5$ | $0,3$ | | $0,6$ | $0,2$ | $0,5$ | $0,3$ | * Con β=2, la baja sensibilidad penaliza 4 veces más que la precisión ^ Sensibilidad ^ Precisión ^ β ^ $F_{2}\text{-score}$ ^ | $0,2$ | $0,6$ | $2$ | $0,23$ | | $0,6$ | $0,2$ | $2$ | $0,43$ | El caso base es 0,3 y al usar β=2; con una baja sensibilidad (0,2) el resultado es más bajo aun (0,23) mientras que con una alta sensibilidad (0,6) el valor es mayor (0,43) * Con β=0,5 la baja precisión penaliza 4 veces más que la sensibilidad ^ Sensibilidad ^ Precisión ^ β ^ $F_{0.5}\text{-score}$ ^ | $0,2$ | $0,6$ | $0,5$ | $0,43$ | | $0,6$ | $0,2$ | $0,5$ | $0,23$ | El caso base es 0,3 y al usar β=2 con una baja precisión (0,2) el resultado es más bajo aun (0,23) mientras que con una alta precisión (0,6) el valor es mayor (0,43) Más información: * [[https://stats.stackexchange.com/questions/221997/why-f-beta-score-define-beta-like-that/379474|Why f beta score define beta like that?]] * [[https://datascience.stackexchange.com/questions/22234/explanation-of-the-f-beta-formula|Explanation of the F beta formula]] * {{ :clase:iabd:pia:2eval:the_truth_of_the_f-measure.pdf |The truth of the F-measure}} ==== Valor de β ==== ¿Pero cuanto es realmente se valor? Veámoslo con un ejemplo con β = 2 frente a β = 2.5. * Si β = 2, la baja sensibilidad es 4 veces más importante que la precisión, porque 𝛽²=2²=4 * Si β = 2,5, la baja precisión es 6,25 veces más importante que la sensibilidad, porque 𝛽²=2,5²=6,25 Es decir, el valor de β no es la relación directa entre sensibilidad y precisión, sino que se eleva al cuadrado. A medida que β aumenta, la sensibilidad pesa exponencialmente más que la precisión. Para calcular la $\beta$ se usa la regla de: * Si queremos que la baja sensibilidad penalice $n$ veces más que la precisión, la fórmula es: $$ \beta=\sqrt{n} $$ * Si queremos que la baja precisión penalice $n$ veces más que la sensibilidad, la fórmula es: $$ \beta=\sqrt{\frac{1}{n}} $$ Veamos ahora ejemplo de valores alto y bajos de β. * **β>1**:Cuando es más costoso cometer falsos negativos (FN), es decir, cuando es crítico detectar todos los casos positivos aunque implique aumentar los falsos positivos. * Diagnóstico de enfermedades graves (Ejemplo: cáncer, VIH, COVID-19):Un falso negativo significa no diagnosticar a un paciente enfermo, lo que puede ser catastrófico.Es mejor un falso positivo (hacer más pruebas) que un falso negativo (no tratar a un paciente). * Detección de fraude financiero: Es preferible revisar más transacciones sospechosas (falsos positivos) que dejar pasar fraudes reales (falsos negativos). * Sistemas de seguridad y detección de amenazas (Ejemplo: detección de intrusos en redes, ataques cibernéticos, explosivos en aeropuertos, alarmas de incendio): No detectar una amenaza real puede ser desastroso. Se prefiere una mayor tasa de alertas (aunque haya algunas falsas). * **β<1**: Cuando es más costoso cometer falsos positivos (FP), es decir, cuando es crítico que los positivos realmente sean correctos, aunque se pasen por alto algunos casos positivos reales. * Clasificación de correos como spam: Un falso negativo (un spam que llega a la bandeja de entrada) es molesto, pero un falso positivo (un email importante que va a la carpeta de spam) puede ser grave. * Recomendación de productos o publicidad personalizada: Mostrar un anuncio irrelevante a un usuario (falso positivo) puede ser perjudicial para la experiencia del usuario y la tasa de conversión. Se prefiere precisión para mostrar menos anuncios pero mejor seleccionados. * Contratación automática basada en IA: Un falso positivo significaría contratar a un candidato inadecuado, lo que puede ser costoso para la empresa. Es mejor ser más estricto en la selección, aunque se descarte algún candidato válido. * Sistemas judiciales y de evaluación de riesgos penales: Un falso positivo (clasificar a una persona como de "alto riesgo" cuando no lo es) puede tener consecuencias graves en términos de derechos humanos. Se prefiere alta precisión para evitar etiquetar injustamente a personas como criminales. ==== Keras ==== En keras se puede usar esta métrica con [[https://www.tensorflow.org/api_docs/python/tf/keras/metrics/FBetaScore|tf.keras.metrics.FBetaScore]]. Lo importante es que hay que establecer el parámetro de β (como un ''float'' y no como un ''int''). metrics=[tf.keras.metrics.FBetaScore(beta=2.0)] history.history['fbeta_score'] history.history['val_fbeta_score'] Más información: * [[https://www.tensorflow.org/api_docs/python/tf/keras/metrics/FBetaScore|tf.keras.metrics.FBetaScore]]