La precisión está muerta: calibración, discriminación y otras métricas que realmente necesita

Nosotros, los científicos de datos, citamos más, pero también los más engañosos.

Hace mucho tiempo que descubrimos que los modelos se desarrollan por mucho más que solo hacer predicciones. Creamos modelos para tomar decisiones, y eso requiere confianza. Y confiar en la precisión simplemente no es suficiente.

En esta publicación, veremos por qué y verificaremos otras alternativas, más avanzadas y adaptadas a nuestras necesidades. Como siempre, lo haremos siguiendo un enfoque práctico, con el objetivo final de bucear profundo en la evaluación más allá de las métricas estándar.

Aquí está la tabla de contenido para la lectura de hoy:

  1. Configuración de los modelos
  2. Clasificación: más allá de la precisión
  3. Regresión: evaluación avanzada
  4. Conclusión

Configuración de los modelos

La precisión tiene más sentido para los algoritmos de clasificación en lugar de tareas de regresión … por lo tanto, no todos los problemas se miden por igual.

Esa es la razón por la que he decidido abordar ambos escenarios, la regresión y los de clasificación, por separado creando dos modelos diferentes.

Y serán muy simples, porque su rendimiento y aplicación no son lo que importa hoy:

  • Clasificación: ¿Se anotará un delantero en el próximo partido?
  • Regresión: ¿Cuántos goles anotarán un jugador?

Si eres un lector recurrente, estoy seguro de que el uso de ejemplos de fútbol no fue una sorpresa.

Nota: Aunque no usaremos precisión en nuestro problema de regresión y se cree que esta publicación está más enfocada en esa métrica, no quería dejar estos casos. Por eso también exploraremos las métricas de regresión.

Nuevamente, debido a que no nos importan los datos ni el rendimiento, permítame omitir toda la parte de preprocesamiento y ir directamente a los modelos mismos:

# Classification model
model = LogisticRegression()
model.fit(X_train_scaled, y_train)

# Gradient boosting regressor
model = GradientBoostingRegressor()
model.fit(X_train_scaled, y_train)

Como puede ver, nos mantenemos en modelos simples: regresión logística para la clasificación binaria y el aumento del gradiente para la regresión.

Vamos a ver las métricas que generalmente verificamos:

# Classification
y_pred = model.predict(X_test_scaled)
accuracy = accuracy_score(y_test, y_pred)

print(f"Test accuracy: {accuracy:.2%}")

La precisión impresa es del 92.43%, lo que honestamente es mucho mayor de lo que esperaba. ¿El modelo es realmente tan bueno?

# Regression
y_pred = model.predict(X_test_scaled)

rmse = np.sqrt(mean_squared_error(y_test, y_pred))

print(f"Test RMSE: {rmse:.4f}")

Obtuve un RMSE de 0.3059. No es tan bueno. ¿Pero es suficiente para descartar nuestro modelo de regresión?

Necesitamos hacerlo mejor.

Clasificación: más allá de la precisión

Demasiados proyectos de ciencia de datos se detienen con precisión, lo que a menudo es engañoso, especialmente con objetivos desequilibrados (por ejemplo, anotar un objetivo es raro).

Para evaluar si nuestro modelo en realidad predice “¿Realizará este jugador?”, Aquí hay otras métricas que deberíamos considerar:

  • ROC-AUC: Mide la capacidad de clasificar positivos por encima de los negativos. Insensible al umbral pero no le importa la calibración.
  • PR-AUC: La curva de precisión de recuperación es esencial para eventos raros (por ejemplo, probabilidad de puntuación). Se centra en la clase positiva, lo que importa cuando los positivos son escasos.
  • Pérdida de registro: Castiga las predicciones incorrectas excesivas. Ideal para comparar salidas probabilísticas calibradas.
  • Puntaje de brier: Medidas Error al cuadrado medio entre las probabilidades predichas y los resultados reales. Más bajo es mejor y es interpretable como calibración de probabilidad general.
  • Curvas de calibración: Diagnóstico visual para ver si las probabilidades predichas coinciden con las frecuencias observadas.

No los probaremos todos ahora, pero tocemos brevemente ROC-AUC y la pérdida de registro, probablemente la más utilizada después de la precisión.

ROC-AUC

Roc-auc, o Característica operativa del receptor: área debajo de la curvaes una métrica popular que consiste en medir el área bajo la curva ROC, que es una curva que traza la verdadera tasa positiva (TPR) contra la tasa de falsos positivos (FPR).

En pocas palabras, la puntuación ROC-AUC (que varía de 0 a 1) resume qué tan bien un modelo puede producir puntajes relativos para discriminar entre instancias positivas o negativas en todos los umbrales de clasificación.

Una puntuación de 0.5 indica adivinanzas aleatorias y un 1 es un rendimiento perfecto.

Calcularlo en Python es fácil:

from sklearn.metrics import roc_auc_score

roc_auc = roc_auc_score(y_test, y_proba)

Aquí, Y_true contiene las etiquetas reales y Y_PROBA contiene las prorbilidades predichas de nuestro modelo. En mi caso, el puntaje es 0.7585, que es relativamente bajo en comparación con la precisión. Pero, ¿cómo puede ser esto posible si obtuviéramos una precisión por encima del 90%?

Contexto: estamos tratando de predecir si un jugador anotará en un partido o no. El “problema” es que estos son datos altamente desequilibrados: la mayoría de los jugadores no obtendrán puntajes en un partido, por lo que nuestro modelo aprende que predecir un 0 es el más probable, sin realmente aprender nada sobre los datos en sí.

No puede capturar la clase minoritaria correctamente y la precisión simplemente no nos muestra eso.

Pérdida de registro

La pérdida logarítmica, la entropía cruzada o, simplemente, la pérdida de registro, se utiliza para evaluar el rendimiento con resultados de probabilidad. Mide la diferencia entre las probabilidades predichas y los valores reales (verdaderos), logarítmicamente.

Nuevamente, podemos hacer esto con una línea de una sola en Python:

from sklearn.metrics import log_loss

logloss = log_loss(y_test, y_proba)

Como probablemente haya adivinado, cuanto más bajo sea el valor, mejor. Un 0 sería el modelo perfecto. En mi caso, obtuve un 0.2345.

Este también se ve afectado por el desequilibrio de clases: la pérdida de registro penaliza las predicciones incorrectas seguras muy duramente y, dado que nuestro modelo predice un 0 la mayor parte del tiempo, aquellos casos en los que de hecho hubo un objetivo marcado afectan el puntaje final.

Regresión: evaluación avanzada

La precisión no tiene sentido en la regresión, pero tenemos un puñado de métricas interesantes para evaluar el problema de cuántos goles anotarán un jugador en un partido determinado.

Al predecir Resultados continuos (por ejemplo, minutos esperados, calificaciones de partidos, puntos de fantasía), Simple RMSE/MAE es un comienzo, pero podemos ir mucho más lejos.

Otras métricas y cheques:

  • : Representa la proporción de la varianza en la variable objetivo explicada por el modelo.
  • Rmsle: Penaliza subestima más y es útil si los valores varían exponencialmente (por ejemplo, puntos de fantasía).
  • Mape / Smape: Errores porcentuales, pero tenga cuidado con los problemas de divide por cero.
  • Pérdida de cuantil: Modelos de tren para predecir intervalos (por ejemplo, 10º, 50º, 90 ° resultados del percentil).
  • Residual vs. predicho (trama): Verifique la heterocedasticidad.

Nuevamente, centrémonos en un subgrupo de ellos.

Puntaje r²

También llamado coeficiente de determinación, compara el error de un modelo con el error de referencia. Un puntaje de 1 es el ajuste perfecto, un 0 significa que predice solo la media, y un valor por debajo de 0 significa que es peor que la predicción media.

from sklearn.metrics import r2_score

r2 = r2_score(y_test, y_pred)

Obtuve un valor de 0.0557, que está bastante cerca de 0 … no es bueno.

Rmsle

El Error logarítmico cuadrado de raíz, o RMSLE, mide la raíz cuadrada de la diferencia cuadrada promedio entre el lValores predichos y reales transformados y transformados. Esta métrica es útil cuando:

  • Queremos penalizar la subpedción con más suavemente.
  • Nuestras variables objetivo están sesgadas (reduce el impacto de grandes valores atípicos).
from sklearn.metrics import mean_squared_log_error

rmsle = np.sqrt(mean_squared_log_error(y_test, y_pred))

Obtuve un 0.19684, lo que significa que mi error de predicción promedio es de aproximadamente 0.2 goles. No es tan grande, pero, dado que nuestra variable objetivo es un valor entre 0 y 4 y muy sesgado hacia 0 …

Pérdida de cuantil

También llamado pérdida de pinball, se puede usar para modelos de regresión cuantil para evaluar qué tan bien funcionan nuestros cuantiles predichos. Si construimos un modelo de cuantil (gradiente -boostingRegresor con pérdida de cuantil), podemos probarlo de la siguiente manera:

from sklearn.metrics import mean_pinball_loss

alpha = 0.9
q_loss = mean_pinball_loss(y_test, y_pred_quantile, alpha=alpha)

Aquí, con Alpha 0.9 estamos tratando de predecir el percentil 90. Mi pérdida de cuantil es 0.0644, que es muy pequeña en términos relativos (~ 1.6% de mi rango de variable objetivo).

Sin embargo, la distribución es importante: la mayoría de nuestro y_test Los valores son 0, y necesitamos interpretarlo como “En promedio, el error de nuestro modelo al capturar la cola superior es muy bajo“.

Es especialmente impresionante dado el objetivo 0 pesado.

Pero, debido a que la mayoría de los resultados son 0, otras métricas como las que vimos y mencionamos anteriormente deben usarse para evaluar si nuestro modelo está funcionando bien o no.

Conclusión

La construcción de modelos predictivos va mucho más allá de simplemente lograr la “buena precisión”.

Para clasificación Tareas, debe pensar en datos desequilibrados, calibración de probabilidad y casos de uso del mundo real como precios o gestión de riesgos.

Para regresiónel objetivo no es solo minimizar el error sino comprender la incertidumbre, vital si sus predicciones informan la estrategia o las decisiones comerciales.

En última instancia, el verdadero valor radica en:

  • Características cuidadosamente curadas y temporalmente válidas.
  • Métricas de evaluación avanzadas adaptadas al problema.
  • Comparaciones transparentes y bien visualizadas.

Si lo hace bien, ya no está construyendo “solo otro modelo”. Estás entregando herramientas robustas y listas para decisiones. Y las métricas que exploramos aquí son solo el punto de entrada.