preloader

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.

varianza_explicada.JPG

El resultado ideal de esta métrica es 1.0 (cuanto más pequeño, peor).

python
from sklearn.metrics import explained_variance_score
import numpy as np
python
y_true = np.array([3, -0.5, 2, 7])
y_pred = np.array([2.5, 0.0, 2, 8])
python
explained_variance_score(y_true, y_pred)
0.9571734475374732
python
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.

max_error.JPG

El valor ideal es 0.

python
from sklearn.metrics import max_error
python
y_true = [3, 2, 7, 1]
y_pred = [4, 2, 7, 1]
python
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).

mae.JPG

Cuanto más pequeño, mejor.

python
from sklearn.metrics import mean_absolute_error
python
y_true = np.array([3, -0.5, 2, 7])
y_pred = np.array([2.5, 0.0, 2, 8])
python
mean_absolute_error(y_true, y_pred)
0.5
python
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.

mse.JPG

Cuanto más pequeño, mejor.

python
from sklearn.metrics import mean_squared_error
python
y_true
array([ 3. , -0.5,  2. ,  7. ])
python
y_pred
array([2.5, 0. , 2. , 8. ])
python
mean_squared_error(y_true, y_pred)
0.375
python
(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.

python
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.

msle.JPG

Cuanto más pequeño, mejor.

python
from sklearn.metrics import mean_squared_log_error
python
y_true = [3, 5, 2.5, 7]
y_pred = [2.5, 5, 4, 8]
python
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.

medae.JPG

Cuanto más pequeño, mejor.

python
from sklearn.metrics import median_absolute_error
python
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.

accuracy.JPG

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.

python
from sklearn.metrics import accuracy_score
python
y_true = [0, 1, 2, 3]
y_pred = [0, 2, 1, 3]
python
accuracy_score(y_true, y_pred, normalize=True)
0.5
python
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.

precision2.JPG

El mejor valor es un 1 y el peor, un 0.

python
from sklearn.metrics import precision_score
y_true = [0, 1, 2, 0, 1, 2]
y_pred = [0, 2, 1, 0, 0, 1]
python
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.

recall2.JPG

El mejor valor es un 1 y el peor, un 0.

python
from sklearn.metrics import recall_score
python
y_true = [0, 1, 2, 0, 1, 2]
y_pred = [0, 2, 1, 0, 0, 1]
python
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.

average_precision.JPG

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.

f1score2.JPG

Una puntuación F1 alcanza su mejor valor en 1 y la peor puntuación en 0.

python
from sklearn.metrics import f1_score
python
y_true = [0, 1, 2, 0, 1, 2]
y_pred = [0, 2, 1, 0, 0, 1]
python
f1_score(y_true, y_pred, average=None)
array([0.8, 0. , 0. ])
python
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:

mutual_info.JPG

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:

comments powered by Disqus