¡Esta es una revisión vieja del documento!
En este apartado vamos a ampliar las métricas que podemos usar con la clasificación binaria las cuales ya vimos en 7. Entrenamiento de redes neuronales c) Métricas.
Para ampliar nos vamos a basar en este diagrama (que se puede ver en Matriz de confusión en Wikipedia)
Las métricas que ya las hemos explicado en el tema de métricas son:
Las métricas que ahora vamos a ver son métricas que hacen la media entre dos métricas de las que acabamos de indicar.
Para organizar las métricas según 2 criterios:
Las 4 métricas básicas son Sensibilidad, Especificidad, FPR y FNR. Según eso existen las siguientes métricas:
Accuracy (Exactitud) mide la proporción de predicciones correctas sobre el total de predicciones realizadas. Por lo que su fórmula es:
$$ Accuracy=\frac{TP+TN}{TP+FN+FP+TN} $$
$$ Accuracy=P(Predicción \; correcta|Predicción \; realizada) $$
$$ P(Predicción \; correcta|Predicción \; realizada)=P(Positivo \cap Enfermo) + P(Negativo \cap Sano)= $$
$$ P(Positivo|Enfermo)*P(Enfermo)+P(Negativo|Sano)*P(Sano)=Sensibilidad*Prevalencia+Especificidad*(1-Prevalencia) $$
$$ Accuracy=Sensibilidad*Prevalencia+Especificidad*(1-Prevalencia) $$
$$ Sensibilidad*Prevalencia+Especificidad*(1-Prevalencia)=\frac{TP}{(TP+FN)}*\frac{(TP+FN)}{TP+FN+FP+TN}+\frac{TN}{(FP+TN)}*\frac{(FP+TN)}{TP+FN+FP+TN}= $$
$$ \frac{TP}{TP+FN+FP+TN}+\frac{TN}{TP+FN+FP+TN}=\frac{TP+TN}{TP+FN+FP+TN}=Accuracy $$
Realmente esta no es una nueva métrica sino que es la misma que Accuracy pero con una prevalencia del 0.5
$$ Balanced \; Accuracy=\frac{Sensibilidad+Especificidad}{2} $$
$$ Accuracy=Sensibilidad*Prevalencia+Especificidad*(1-Prevalencia)= $$
$$ Sensibilidad*0,5+Especificidad*(1-0,5)=Sensibilidad*0,5+Especificidad*0,5= $$
$$ \frac{Sensibilidad}{2}+\frac{Especificidad}{2}=\frac{Sensibilidad+Especificidad}{2}=Balanced \; Accuracy $$
Es la suma de la sensibilidad más la especificidad menos 1.
$$ Informedness=sensibilidad+especificidad-1 $$
Mas información:
Para elegir cual es el mejor threshold posible a veces se usa el threshold que genera el mayor valor de Informedness
$$ Threhold=maximo \{ sensibilidad(threhold)+especificidad(threhold)-1 \} \;\; threshold \in [0,1] $$
La Area under the curve (AUC) es una métrica que nos dice el área de una curva ROC. Pero pasemos primero a explicar que es una curva ROC.
Lo primero es que cuando predecimos que ciertos valores son Positivos o Negativos, lo hacemos en base a un umbral. Normalmente si algo es menor o igual que 0.5 decimos que es Negativo
y si es mayor que 0.5 decimos que es Positivo
. Pero ese umbral es arbitrario.
La siguiente imagen muestra la distribución de valores que hemos definido como presuntamente Positivos y los presuntamente Negativos. Si superan ese umbral se convierten en Falsos Positivos o Falsos Negativos.
En las siguientes gráficas vamos a ver como afecta a nuestro modelo el variar el umbral.
Vamos a explicar cada columna de la imagen anterior:
\begin{align} True \: Positive \: Rate \: (TPR) &= \frac{TP}{TP+FN} \\ False \: Positive \: Rate \: (FPR) &= \frac{FP}{FP+TN} \end{align}
X
de la gráfica es el FPR y la Y
de la gráfica es el TPR.Cada una de las filas de la imagen son predicciones distintas, siendo:
Entonces, ¿Que es la Area under the curve (AUC)? Es el área de la curva ROC es decir el área rosa de las gráficas de la última columna. Si nos fijamos cuanto mejor es la predicción, mayor es el área rosa y por lo tanto mayor es la métrica de AUC.
En keras podemos usar la métrica de AUC de la siguiente forma: Su uso en Keras es
metrics=[tf.keras.metrics.AUC()] metrics=["AUC"]
y usarla como
history.history['auc'] history.history['val_auc']
Las 4 métricas derivadas son PPV, NPV, FDR y FOR.
Es la suma de la PPV más la NPV menos 1.
$$ Markdness=PPV+NPV-1 $$
Son métricas que juntan una métrica básica con una métrica derivada.
Es la media armónica entre Recall y Precision que permite combinar en una única métrica ambos valores. Se ha usado la media armónica ya que tiende atener un valor muy bajo para valores bajos. Por ello no se "cancelan" valores buenos de Sensibilidad con valores malos de Precision ya que en ese caso F1-score tenderá a ser bajo por lo que indicará que nuestro modelo es malo.
$$F1{\text -}score=\frac{2}{\frac{1}{Recall}+\frac{1}{Precision}}$$
Pero si sumamos las fracciones y hacemos la división:
$$F1{\text -}score=\frac{2}{\frac{1}{Recall}+\frac{1}{Precision}}= \frac{2}{\frac{Precision}{Recall \cdot Precision}+\frac{Recall}{Precision \cdot Recall}}= \frac{2}{\frac{Precision+Recall}{Recall \cdot Precision}} = \frac{2}{1}: \frac{Precision+Recall}{Recall \cdot Precision} = \frac { 2 \cdot Recall \cdot Precision}{Recall + Precision}$$
Siendo el resultado la formula que se ve como definición de F1-score:
$$F1{\text -}score=2 \cdot \frac {Recall \cdot Precision}{Recall + Precision}$$
Es otra métrica pero que tiene en cuenta que los datos no estén balanceados.
El MMC tiene un valor entre -1 a 1. Siendo:
$$MCC = \frac{ \mathit{TP} \times \mathit{TN} - \mathit{FP} \times \mathit{FN} } {\sqrt{ (\mathit{TP} + \mathit{FP}) ( \mathit{TP} + \mathit{FN} ) ( \mathit{TN} + \mathit{FP} ) ( \mathit{TN} + \mathit{FN} ) } }$$
Podemos hacer uso de la métrica con la función sklearn.metrics.matthews_corrcoef
de sklearn
Ejemplo de uso:
from sklearn.metrics import matthews_corrcoef y_true = [1,1,1,1,0,0,0,0] y_pred = [1,1,1,1,0,0,0,0] print("Valor para una predicción que acierta siempre=",matthews_corrcoef(y_true,y_pred)) y_true = [1,1,1,1,0,0,0,0] y_pred = [1,1,0,0,1,1,0,0] print("Valor para una predicción que acierta la mitad=",matthews_corrcoef(y_true,y_pred)) y_true = [1,1,1,1,0,0,0,0] y_pred = [0,0,0,0,1,1,1,1] print("Valor para una predicción que nunca acierta=",matthews_corrcoef(y_true,y_pred))
Valor para una predicción que acierta siempre= 1.0 Valor para una predicción que acierta la mitad= 0.0 Valor para una predicción que nunca acierta= -1.0
Mas información: