====== 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]]