Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprende Métricas | Comparación de Modelos
Clasificación con Python

bookMétricas

Hasta este punto, hemos utilizado la precisión como la métrica principal para evaluar el rendimiento del modelo. Sin embargo, la precisión tiene algunas limitaciones. Ahora discutiremos sus desventajas e introduciremos varias métricas adicionales — basadas en VP, VN, FP y FN — que ayudan a abordar estos problemas.

Precisión

La precisión representa la proporción de predicciones correctas:

precisioˊn=correctascorrectas+incorrectas=VP+VNVP+VN+FP+FN\text{precisión} = \frac{\text{correctas}}{\text{correctas} + \text{incorrectas}} = \frac{\textcolor{green}{\text{VP}} + \textcolor{green}{\text{VN}}}{\textcolor{green}{\text{VP}} + \textcolor{green}{\text{VN}} + \textcolor{red}{\text{FP}} + \textcolor{red}{\text{FN}}}

Sin embargo, la precisión tiene sus desventajas. Por ejemplo, imagina que intentas predecir si un paciente tiene una enfermedad rara. El conjunto de datos contiene 99.9% de pacientes sanos y solo 0.1% con la enfermedad. En este caso, predecir siempre que el paciente está sano resultaría en una precisión de 0.999, aunque dicho modelo sería completamente inútil.

A estos conjuntos de datos se les llama desbalanceados, y en tales casos, la precisión balanceada es una métrica más adecuada.

Precisión equilibrada

La precisión equilibrada calcula por separado la proporción de predicciones positivas correctas y la proporción de predicciones negativas correctas, luego las promedia. Este enfoque otorga igual importancia a cada clase, independientemente de cuán desbalanceado esté el conjunto de datos.

balanced_accuracy=12TPP+12TNNaccuracy=TP+TNP+N\begin{aligned} \text{balanced\_accuracy} &= \frac12 \cdot \frac{\textcolor{green}{\text{TP}}}{\text{P}} + \frac12 \cdot \frac{\textcolor{green}{\text{TN}}}{\text{N}}\\ \text{accuracy} &= \frac{\textcolor{green}{\text{TP}} + \textcolor{green}{\text{TN}}}{\text{P} + \text{N}} \end{aligned}

Donde

  • P=TP+FN\text{P} = \textcolor{green}{\text{TP}} + \textcolor{red}{\text{FN}} - número total de instancias positivas (clase 1);
  • N=TN+FP\text{N} = \textcolor{green}{\text{TN}} + \textcolor{red}{\text{FP}} - número total de instancias positivas (clase 0).

En el ejemplo de enfermedad rara, la precisión equilibrada de un modelo que siempre predice "saludable" sería 0.5, lo que resalta efectivamente el problema. Por lo tanto, este problema se aborda.

Sin embargo, la precisión equilibrada aún no distingue entre errores de tipo 1 y errores de tipo 2, al igual que la precisión regular. Aquí es donde entran en juego la precisión y la recuperación.

Precisión

La métrica de precisión indica cuántos de los valores que el modelo predijo como positivos fueron realmente positivos. Es la proporción de verdaderos positivos sobre todas las predicciones positivas realizadas por el modelo:

precision=TPTP+FP\text{precision} = \frac{\textcolor{green}{\text{TP}}}{\textcolor{green}{\text{TP}} + \textcolor{red}{\text{FP}}}

Al utilizar la métrica de precisión, se puede comprender con qué frecuencia ocurre un error de tipo 1. Una alta precisión indica que los errores de tipo 1 son poco frecuentes, mientras que una baja precisión señala que estos errores ocurren con mayor frecuencia.

Recall

La métrica de recall muestra la proporción de casos positivos reales que el modelo predijo correctamente:

recall=precision=TPTP+FN\text{recall} = \text{precision} = \frac{\textcolor{green}{\text{TP}}}{\textcolor{green}{\text{TP}} + \textcolor{red}{\text{FN}}}

La métrica de recall ayuda a comprender con qué frecuencia ocurre un error de tipo 2. Un recall alto significa que los errores de tipo 2 son poco frecuentes, mientras que un recall bajo indica que ocurren con mayor frecuencia.

Sin embargo, tanto la precisión como el recall tienen limitaciones. Por ejemplo, un modelo que predice únicamente la clase positiva (1) logrará un recall perfecto, pero su precisión será baja. Por otro lado, un modelo que predice correctamente solo una instancia positiva y clasifica todo lo demás como negativo tendrá precisión perfecta, pero un recall muy bajo.

Esto demuestra que, aunque es sencillo construir un modelo con precisión perfecta o recall perfecto, es mucho más difícil lograr un buen desempeño en ambas métricas. Por ello, es importante considerar ambas métricas; afortunadamente, existe una métrica que las combina.

Puntaje F1

El puntaje F1 es la media armónica de la precisión y la exhaustividad (recall). Se prefiere la media armónica sobre la media aritmética porque penaliza situaciones en las que uno de los valores (ya sea precisión o exhaustividad) es bajo, lo que la convierte en una medida más equilibrada del rendimiento de un modelo.

F1=21precision+1recall=2precisionrecallprecision+recall\text{F1} = \frac{2}{\frac{1}{\text{precision}} + \frac{1}{\text{recall}}} = \frac{2 \cdot \text{precision} \cdot \text{recall}}{\text{precision} + \text{recall}}

El puntaje F1 combina tanto la precisión como la exhaustividad en una sola métrica. Solo será alto si tanto la precisión como la exhaustividad son relativamente altas, por lo que es una medida útil cuando se necesita equilibrar ambos tipos de errores.

La elección de la métrica adecuada depende de la tarea específica. La exactitud (o exactitud balanceada para conjuntos de datos desbalanceados) es intuitiva y proporciona una visión general del rendimiento global del modelo. Si se necesita un análisis más detallado de los tipos de errores que comete el modelo, la precisión ayuda a identificar errores de tipo 1, mientras que la exhaustividad resalta los errores de tipo 2. El puntaje F1 muestra cuán equilibrado está el modelo en términos de ambos tipos de errores.

Note
Estudiar más

Otro métrico comúnmente utilizado es ROC/AUC, sobre el cual puedes leer más en este artículo.

Métricas en Python

Scikit-learn proporciona implementaciones para todas estas métricas en el módulo sklearn.metrics:

from sklearn.metrics import accuracy_score, balanced_accuracy_score, precision_score, recall_score, f1_score

accuracy = accuracy_score(y_true, y_pred)
balanced_accuracy = balanced_accuracy_score(y_true, y_pred)
precision = precision_score(y_true, y_pred)
recall = recall_score(y_true, y_pred)
f1 = f1_score(y_true, y_pred)

Si deseas obtener métricas como precisión, recall y F1-score todas a la vez, sklearn proporciona la función classification_report():

12345678910111213
import pandas as pd import seaborn as sns from sklearn.metrics import classification_report from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import train_test_split df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b71ff7ac-3932-41d2-a4d8-060e24b00129/titanic.csv') X, y = df.drop('Survived', axis=1), df['Survived'] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1) random_forest = RandomForestClassifier().fit(X_train, y_train) y_pred = random_forest.predict(X_test) # Display a classification report print(classification_report(y_test, y_pred))
copy
Note
Nota

Soporte se refiere al número de ocurrencias reales de cada clase en el conjunto de prueba. Promedio macro calcula el promedio de cada métrica (precisión, recall, F1) entre todas las clases por igual, sin considerar el desbalance de clases. Promedio ponderado también promedia las métricas entre todas las clases, pero otorga mayor peso a las clases con más instancias (basado en su soporte).

question mark

¿Qué métrica de evaluación proporciona un equilibrio entre precisión y recall, ofreciendo un único valor que refleja ambos?

Select the correct answer

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 5. Capítulo 2

Pregunte a AI

expand

Pregunte a AI

ChatGPT

Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla

Awesome!

Completion rate improved to 4.17

bookMétricas

Desliza para mostrar el menú

Hasta este punto, hemos utilizado la precisión como la métrica principal para evaluar el rendimiento del modelo. Sin embargo, la precisión tiene algunas limitaciones. Ahora discutiremos sus desventajas e introduciremos varias métricas adicionales — basadas en VP, VN, FP y FN — que ayudan a abordar estos problemas.

Precisión

La precisión representa la proporción de predicciones correctas:

precisioˊn=correctascorrectas+incorrectas=VP+VNVP+VN+FP+FN\text{precisión} = \frac{\text{correctas}}{\text{correctas} + \text{incorrectas}} = \frac{\textcolor{green}{\text{VP}} + \textcolor{green}{\text{VN}}}{\textcolor{green}{\text{VP}} + \textcolor{green}{\text{VN}} + \textcolor{red}{\text{FP}} + \textcolor{red}{\text{FN}}}

Sin embargo, la precisión tiene sus desventajas. Por ejemplo, imagina que intentas predecir si un paciente tiene una enfermedad rara. El conjunto de datos contiene 99.9% de pacientes sanos y solo 0.1% con la enfermedad. En este caso, predecir siempre que el paciente está sano resultaría en una precisión de 0.999, aunque dicho modelo sería completamente inútil.

A estos conjuntos de datos se les llama desbalanceados, y en tales casos, la precisión balanceada es una métrica más adecuada.

Precisión equilibrada

La precisión equilibrada calcula por separado la proporción de predicciones positivas correctas y la proporción de predicciones negativas correctas, luego las promedia. Este enfoque otorga igual importancia a cada clase, independientemente de cuán desbalanceado esté el conjunto de datos.

balanced_accuracy=12TPP+12TNNaccuracy=TP+TNP+N\begin{aligned} \text{balanced\_accuracy} &= \frac12 \cdot \frac{\textcolor{green}{\text{TP}}}{\text{P}} + \frac12 \cdot \frac{\textcolor{green}{\text{TN}}}{\text{N}}\\ \text{accuracy} &= \frac{\textcolor{green}{\text{TP}} + \textcolor{green}{\text{TN}}}{\text{P} + \text{N}} \end{aligned}

Donde

  • P=TP+FN\text{P} = \textcolor{green}{\text{TP}} + \textcolor{red}{\text{FN}} - número total de instancias positivas (clase 1);
  • N=TN+FP\text{N} = \textcolor{green}{\text{TN}} + \textcolor{red}{\text{FP}} - número total de instancias positivas (clase 0).

En el ejemplo de enfermedad rara, la precisión equilibrada de un modelo que siempre predice "saludable" sería 0.5, lo que resalta efectivamente el problema. Por lo tanto, este problema se aborda.

Sin embargo, la precisión equilibrada aún no distingue entre errores de tipo 1 y errores de tipo 2, al igual que la precisión regular. Aquí es donde entran en juego la precisión y la recuperación.

Precisión

La métrica de precisión indica cuántos de los valores que el modelo predijo como positivos fueron realmente positivos. Es la proporción de verdaderos positivos sobre todas las predicciones positivas realizadas por el modelo:

precision=TPTP+FP\text{precision} = \frac{\textcolor{green}{\text{TP}}}{\textcolor{green}{\text{TP}} + \textcolor{red}{\text{FP}}}

Al utilizar la métrica de precisión, se puede comprender con qué frecuencia ocurre un error de tipo 1. Una alta precisión indica que los errores de tipo 1 son poco frecuentes, mientras que una baja precisión señala que estos errores ocurren con mayor frecuencia.

Recall

La métrica de recall muestra la proporción de casos positivos reales que el modelo predijo correctamente:

recall=precision=TPTP+FN\text{recall} = \text{precision} = \frac{\textcolor{green}{\text{TP}}}{\textcolor{green}{\text{TP}} + \textcolor{red}{\text{FN}}}

La métrica de recall ayuda a comprender con qué frecuencia ocurre un error de tipo 2. Un recall alto significa que los errores de tipo 2 son poco frecuentes, mientras que un recall bajo indica que ocurren con mayor frecuencia.

Sin embargo, tanto la precisión como el recall tienen limitaciones. Por ejemplo, un modelo que predice únicamente la clase positiva (1) logrará un recall perfecto, pero su precisión será baja. Por otro lado, un modelo que predice correctamente solo una instancia positiva y clasifica todo lo demás como negativo tendrá precisión perfecta, pero un recall muy bajo.

Esto demuestra que, aunque es sencillo construir un modelo con precisión perfecta o recall perfecto, es mucho más difícil lograr un buen desempeño en ambas métricas. Por ello, es importante considerar ambas métricas; afortunadamente, existe una métrica que las combina.

Puntaje F1

El puntaje F1 es la media armónica de la precisión y la exhaustividad (recall). Se prefiere la media armónica sobre la media aritmética porque penaliza situaciones en las que uno de los valores (ya sea precisión o exhaustividad) es bajo, lo que la convierte en una medida más equilibrada del rendimiento de un modelo.

F1=21precision+1recall=2precisionrecallprecision+recall\text{F1} = \frac{2}{\frac{1}{\text{precision}} + \frac{1}{\text{recall}}} = \frac{2 \cdot \text{precision} \cdot \text{recall}}{\text{precision} + \text{recall}}

El puntaje F1 combina tanto la precisión como la exhaustividad en una sola métrica. Solo será alto si tanto la precisión como la exhaustividad son relativamente altas, por lo que es una medida útil cuando se necesita equilibrar ambos tipos de errores.

La elección de la métrica adecuada depende de la tarea específica. La exactitud (o exactitud balanceada para conjuntos de datos desbalanceados) es intuitiva y proporciona una visión general del rendimiento global del modelo. Si se necesita un análisis más detallado de los tipos de errores que comete el modelo, la precisión ayuda a identificar errores de tipo 1, mientras que la exhaustividad resalta los errores de tipo 2. El puntaje F1 muestra cuán equilibrado está el modelo en términos de ambos tipos de errores.

Note
Estudiar más

Otro métrico comúnmente utilizado es ROC/AUC, sobre el cual puedes leer más en este artículo.

Métricas en Python

Scikit-learn proporciona implementaciones para todas estas métricas en el módulo sklearn.metrics:

from sklearn.metrics import accuracy_score, balanced_accuracy_score, precision_score, recall_score, f1_score

accuracy = accuracy_score(y_true, y_pred)
balanced_accuracy = balanced_accuracy_score(y_true, y_pred)
precision = precision_score(y_true, y_pred)
recall = recall_score(y_true, y_pred)
f1 = f1_score(y_true, y_pred)

Si deseas obtener métricas como precisión, recall y F1-score todas a la vez, sklearn proporciona la función classification_report():

12345678910111213
import pandas as pd import seaborn as sns from sklearn.metrics import classification_report from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import train_test_split df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b71ff7ac-3932-41d2-a4d8-060e24b00129/titanic.csv') X, y = df.drop('Survived', axis=1), df['Survived'] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1) random_forest = RandomForestClassifier().fit(X_train, y_train) y_pred = random_forest.predict(X_test) # Display a classification report print(classification_report(y_test, y_pred))
copy
Note
Nota

Soporte se refiere al número de ocurrencias reales de cada clase en el conjunto de prueba. Promedio macro calcula el promedio de cada métrica (precisión, recall, F1) entre todas las clases por igual, sin considerar el desbalance de clases. Promedio ponderado también promedia las métricas entre todas las clases, pero otorga mayor peso a las clases con más instancias (basado en su soporte).

question mark

¿Qué métrica de evaluación proporciona un equilibrio entre precisión y recall, ofreciendo un único valor que refleja ambos?

Select the correct answer

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 5. Capítulo 2
some-alt