Métricas de evaluación de modelos
Índice de contenido
Modelos de regresión
Puntuación de varianza explicada
La varianza explicada (explained variance score) mide la proporción en la que un modelo matemático explica la variación (dispersión) de un conjunto de datos. La parte complementaria de la variación total se denomina variación residual o inexplicable.

El resultado ideal de esta métrica es 1.0 (cuanto más pequeño, peor).
from sklearn.metrics import explained_variance_score
import numpy as np
y_true = np.array([3, -0.5, 2, 7])
y_pred = np.array([2.5, 0.0, 2, 8])
explained_variance_score(y_true, y_pred)
0.9571734475374732
1 - (np.var(y_true-y_pred)/np.var(y_true))
0.9571734475374732
Error máximo
La métrica de error máximo (max error) calcula el error residual máximo, es decir, el máximo error que se ha obtenido entre un valor real y una predicción.

El valor ideal es 0.
from sklearn.metrics import max_error
y_true = [3, 2, 7, 1]
y_pred = [4, 2, 7, 1]
max_error(y_true, y_pred)
1
Error absoluto medio (MAE)
El error absoluto medio (mean absolute error) es una medida de la diferencia entre dos variables continuas y se utiliza para cuantificar la precisión de una técnica de predicción comparando los valores predichos con los reales (observados).

Cuanto más pequeño, mejor.
from sklearn.metrics import mean_absolute_error
y_true = np.array([3, -0.5, 2, 7])
y_pred = np.array([2.5, 0.0, 2, 8])
mean_absolute_error(y_true, y_pred)
0.5
sum(abs(y_true-y_pred))/len(y_true)
0.5
Error cuadrático medio (MSE)
El error cuadrático medio (mean squared error) mide el promedio de los errores al cuadrado, es decir, la diferencia entre el estimador y lo que se estima.

Cuanto más pequeño, mejor.
from sklearn.metrics import mean_squared_error
y_true
array([ 3. , -0.5, 2. , 7. ])
y_pred
array([2.5, 0. , 2. , 8. ])
mean_squared_error(y_true, y_pred)
0.375
(sum((y_true - y_pred)**2))/len(y_true)
0.375
Raíz del error cuadrático medio (RMSE)
La raíz del error cuadrático medio (root-mean-square error) o raíz de la desviación cuadrática media (root-mean-square deviation, RMSD) también es una medida de la diferencia entre el estimador y lo que se estima.
Cuanto más pequeño, mejor.
mean_squared_error(y_true, y_pred, squared = False)
0.6123724356957945
Error logarítmico cuadrático medio (MSLE)
Es simplemente un RMSE calculado en escala logarítmica. Esta métrica es más apropiada para casos en que la variable objetivo tiene un crecimiento exponencial, como el recuento de la población, las ventas promedio de un producto durante un periodo de años, etc.

Cuanto más pequeño, mejor.
from sklearn.metrics import mean_squared_log_error
y_true = [3, 5, 2.5, 7]
y_pred = [2.5, 5, 4, 8]
mean_squared_log_error(y_true, y_pred)
0.03973012298459379
Error absoluto mediano (MedAE)
Esta métrica es particularmente interesante porque es robusta a los valores atípicos. Se calcula tomando la mediana de todas las diferencias absolutas entre la variable objetivo y la predicción.

Cuanto más pequeño, mejor.
from sklearn.metrics import median_absolute_error
y_true = [3, -0.5, 2, 7]
y_pred = [2.5, 0.0, 2, 8]
median_absolute_error(y_true, y_pred)
0.5
Coeficiente de determinación, R cuadrado
Representa la proporción de varianza de la variable objetivo que ha sido explicada por las variables independientes en el modelo. Proporciona una indicación de bondad de ajuste y, por lo tanto, de cómo de bien es probable que el modelo vaya a predecir nuevas muestras, a través de la proporción de varianza explicada.
Esta métrica se verá más en profundidad en la sección de modelos de regresión, más adelante.
Otras métricas
Existen otras métricas apropiadas para evaluar el rendimiento de regresión, que no se tratarán aquí.
Modelos de clasificación
Exactitud (accuracy)
Calcula la exactitud, ya sea mediante la fracción o el recuento de predicciones correctas.

El mejor valor es un 1 (todo el conjunto de etiquetas predichas para una muestra coincide estrictamente con el conjunto real de etiquetas) y el peor, un 0.
from sklearn.metrics import accuracy_score
y_true = [0, 1, 2, 3]
y_pred = [0, 2, 1, 3]
accuracy_score(y_true, y_pred, normalize=True)
0.5
accuracy_score(y_true, y_pred, normalize=False)
2
Precisión (precision)
La precisión es el ratio tp / (tp + fp), donde tp es el número de verdaderos positivos y fp el número de falsos positivos. La precisión nos da una idea de la capacidad del modelo clasificador de no etiquetar como positiva una muestra que realmente es negativa.

El mejor valor es un 1 y el peor, un 0.
from sklearn.metrics import precision_score
y_true = [0, 1, 2, 0, 1, 2]
y_pred = [0, 2, 1, 0, 0, 1]
precision_score(y_true, y_pred, average=None)
array([0.66666667, 0. , 0. ])
Para la clase 0:
- TP: I I
- Fp: I P(clase_0) = 2/(2+1) = 0.66666667
Para la clase 1:
- Tp: 0
- Fp: I I P(clase_1) = 0/(0+2) = 0
Para la clase 2:
- Tp: 0
- Fp: I P(clase_2) = 0/(0+1) = 0
Recuperación (recall)
El recall es el ratio tp / (tp + fn), donde tp es el número de verdaderos positivos y fn el número de falsos negativos. Nos permite hacernos una idea de la capacidad del modelo clasificador de encontrar todas las muestras positivas.

El mejor valor es un 1 y el peor, un 0.
from sklearn.metrics import recall_score
y_true = [0, 1, 2, 0, 1, 2]
y_pred = [0, 2, 1, 0, 0, 1]
recall_score(y_true, y_pred, average=None)
array([1., 0., 0.])
Para la clase 0:
- Tp: I I
- Fn: 0 R(clase_0) = 2/(2+0) = 1
Precisión promedio (average precision)
Calcula la precisión promedio (AP) a partir de las predicciones. Básicamente, resume una curva precision-recall (que veremos más adelante) como la media ponderada de las precisiones logradas en cada umbral, con el aumento en el recall del umbral anterior utilizado como ponderación.

Puntuación F1
La puntuación F1 se define como la media armónica de la precisión y el recall, y se puede interpretar como un promedio ponderado de ambos. La contribución relativa de precisión y recall a la puntuación F1 es la misma.

Una puntuación F1 alcanza su mejor valor en 1 y la peor puntuación en 0.
from sklearn.metrics import f1_score
y_true = [0, 1, 2, 0, 1, 2]
y_pred = [0, 2, 1, 0, 0, 1]
f1_score(y_true, y_pred, average=None)
array([0.8, 0. , 0. ])
f1_score_0 = 2*(0.66666667*1.)/(0.66666667+1.)
f1_score_0
0.8000000023999999
Pérdida logarítmica (log loss)
La pérdida logarítmica, también conocida como pérdida de regresión logística o pérdida de entropía cruzada, es la función de pérdida utilizada en la regresión logística (multinomial) y sus extensiones, como las redes neuronales, y se considera la métrica de clasificación basada en probabilidades más importante.
La log loss se basa en una función de probabilidad. De hecho, Log Loss es -1 * el logaritmo de la función de probabilidad, la cual responde a la pregunta “¿cómo de probable pensó el modelo que era el conjunto de resultados realmente observado?”.
Cuanto más pequeña, mejor.
Modelos de agrupamiento
Mutual info score
La información mutua (MI) es una medida de la similitud entre dos etiquetas de los mismos datos. Donde |Ui| es el número de muestras en el cluster Ui y |Vj| es el número de muestras en el cluster Vj, la Información Mutua (Mutual Information) entre los clusters U y V viene dada como:

Adjusted mutual info score
Indica la información mutua ajustada entre dos agrupaciones. La información mutua ajustada (AMI) es un ajuste de la Mutual Information (MI) para tener en cuenta el azar. Explica el hecho de que MI es generalmente más alta para dos agrupaciones con una mayor cantidad de agrupaciones, independientemente de si en realidad se comparte más información. Para dos agrupaciones y , el AMI se da como:
