Aprendizaje Supervisado: Medidas de Evaluación

1EST17-Aprendizaje Estadístico 1

Enver Gerald Tarazona Vargas

Pontificia Universidad Católica del Perú (PUCP)

Evaluación de la predicción

¿Por qué evaluar la predicción?

En aprendizaje supervisado, el objetivo es construir un modelo capaz de producir predicciones útiles para nuevas observaciones.

Una vez entrenado el modelo, necesitamos cuantificar la calidad de esas predicciones y disponer de criterios que permitan comparar alternativas (Rainio et al., 2024).

\[ \text{Datos} \longrightarrow \text{Entrenamiento} \longrightarrow \text{Modelo} \longrightarrow \text{Predicciones} \longrightarrow \boxed{\text{Evaluación}} \]

La pregunta central es:

¿Cómo cuantificamos la calidad de las predicciones de un modelo?

Esta pregunta aparece tanto en problemas de regresión como de clasificación.

¿Qué significa que un modelo prediga bien?

El desempeño predictivo puede examinarse desde diferentes perspectivas (Flach, 2019; Rainio et al., 2024).

Por ejemplo:

  • qué tan alejadas están las predicciones de los valores observados;
  • con qué frecuencia ocurren determinados tipos de error;
  • si algunos errores deben recibir mayor importancia que otros;
  • qué tan bien el modelo distingue categorías o reproduce valores continuos;
  • si las predicciones resultan adecuadas para el propósito del problema.

Por tanto, predecir bien no se reduce a una única propiedad.

La métrica elegida determina qué aspecto del desempeño estamos cuantificando.

De la propiedad de interés a la métrica

La evaluación puede entenderse como un problema de medición (Flach, 2019).

Primero debe identificarse qué propiedad del desempeño interesa evaluar y, posteriormente, seleccionar una métrica que la represente adecuadamente.

\[ \boxed{\text{Objetivo del problema}} \longrightarrow \boxed{\text{Propiedad de interés}} \longrightarrow \boxed{\text{Métrica de evaluación}} \]

La elección no es indiferente: distintas métricas aplicadas a las mismas predicciones pueden conducir a comparaciones diferentes entre modelos (Opitz, 2024).

Por ello, una métrica no debería elegirse únicamente porque sea habitual o porque aparezca por defecto en el software.

Entrenamiento y evaluación cumplen funciones distintas

El entrenamiento es el procedimiento mediante el cual un algoritmo utiliza los datos para construir un modelo predictivo.

Dependiendo del método, este proceso puede involucrar estimación de parámetros, construcción de reglas, optimización de márgenes, particiones sucesivas u otros procedimientos propios del algoritmo.

La evaluación, en cambio, utiliza las predicciones producidas por el modelo para cuantificar su desempeño:

\[ \text{valores observados y predichos} \longrightarrow \text{métrica de evaluación} \longrightarrow \text{medida de desempeño} \]

Por tanto, modelos entrenados mediante procedimientos diferentes pueden evaluarse y compararse utilizando una misma métrica.

La métrica de evaluación no tiene que coincidir con el criterio utilizado durante el entrenamiento.

Dos preguntas diferentes

La evaluación del desempeño predictivo plantea dos preguntas relacionadas, pero distintas (Rainio et al., 2024; Raschka, 2018):

¿Qué medir?

Determinar qué propiedad del desempeño predictivo interesa cuantificar.

\[ \Downarrow \]

Seleccionar e interpretar una métrica adecuada.

Tema de esta presentación

¿Cómo estimarlo?

Determinar cómo obtener una estimación fiable del desempeño en nuevas observaciones.

\[ \Downarrow \]

Definir una estrategia adecuada de evaluación y remuestreo.

Tema de la siguiente presentación

En esta presentación estudiaremos las principales métricas utilizadas en:

\[ \boxed{\text{Regresión}} \qquad\text{y}\qquad \boxed{\text{Clasificación}} \]

Regresión

Evaluación predictiva en regresión

En regresión, el modelo produce una predicción cuantitativa de una variable respuesta:

\[ \hat{y}=f(\mathbf{x}) \]

Cuando el objetivo es predictivo, el interés principal no es únicamente describir adecuadamente los datos utilizados para ajustar el modelo, sino determinar qué tan bien predice valores de la respuesta para nuevas observaciones.

Un buen ajuste sobre los datos de entrenamiento no garantiza necesariamente un buen desempeño predictivo fuera de muestra (Shmueli, 2010).

Evaluar una regresión con fines predictivos implica comparar los valores observados con los valores predichos y determinar qué aspectos de esas diferencias son relevantes para el problema.

De un buen ajuste a una buena predicción

En el análisis de regresión tradicional pueden utilizarse medidas orientadas al ajuste del modelo sobre los datos disponibles.

En aprendizaje supervisado, la pregunta cambia:

¿Qué tan cerca estarán las predicciones de los valores que realmente observaremos en nuevos casos?

Esto introduce dos ideas importantes:

  • el desempeño debe evaluarse sobre predicciones que representen adecuadamente el comportamiento fuera de muestra;
  • distintas medidas pueden valorar de manera diferente el mismo conjunto de predicciones.

Por ello, evaluar una regresión requiere definir primero qué característica del error predictivo queremos resumir.

¿Qué puede ocultar una medida global?

Dos modelos pueden presentar valores similares de una métrica global y, sin embargo, tener comportamientos predictivos muy diferentes.

Una medida agregada puede ocultar, por ejemplo:

  • sesgo sistemático (el modelo tiende a sobreestimar o subestimar);
  • errores grandes poco frecuentes que afectan de manera importante algunas predicciones;
  • variabilidad desigual del error en distintas regiones de la respuesta;
  • diferencias en el desempeño para valores pequeños, intermedios o extremos;
  • distribuciones de errores muy distintas aun cuando su promedio sea parecido.

Por ello, las medidas numéricas deben interpretarse considerando qué resumen del error producen y, cuando sea necesario, complementarse con herramientas gráficas.

Error y residuo ordinario

En un modelo de regresión,

\[ Y_i=f(\mathbf X_i)+\varepsilon_i, \]

donde \(\varepsilon_i\) representa el error aleatorio:

\[ \varepsilon_i=Y_i-f(\mathbf X_i). \]

Como la función verdadera \(f(\mathbf X_i)\) es desconocida, el error aleatorio no es observable.

Una vez ajustado el modelo, la diferencia entre el valor observado y el valor predicho se denomina residuo ordinario:

\[ e_i=y_i-\hat{y}_i. \]

El residuo ordinario es una cantidad observable que expresa la discrepancia entre la respuesta observada y la predicción del modelo.

Interpretación del residuo ordinario

Con la convención

\[ e_i=y_i-\hat{y}_i \]

se tiene:

\[ e_i>0 \quad\Longrightarrow\quad \hat{y}_i<y_i \]

El modelo subestima el valor observado.

\[ e_i<0 \quad\Longrightarrow\quad \hat{y}_i>y_i \]

El modelo sobreestima el valor observado.

Sin embargo, si simplemente promediamos los residuos ordinarios,

\[ \frac{1}{n}\sum_{i=1}^{n}e_i, \]

valores positivos y negativos pueden compensarse.

Por ello, las principales medidas de desempeño transforman los residuos ordinarios antes de agregarlos.

Del residuo ordinario a una medida de desempeño

Una métrica de regresión puede entenderse como una regla que transforma y posteriormente resume los residuos ordinarios (Botchkarev, 2018).

Dos decisiones son especialmente importantes:

\[ e_i \quad\longrightarrow\quad g(e_i) \quad\longrightarrow\quad \text{agregación} \]

donde \(g(e_i)\) determina cómo se penaliza cada residuo ordinario.

Por ejemplo:

\[ g(e_i)=e_i^2 \qquad\text{o}\qquad g(e_i)=|e_i| \]

Estas transformaciones no son equivalentes: representan formas distintas de valorar las discrepancias entre los valores observados y predichos.

Error Cuadrático Medio (MSE)

El Error Cuadrático Medio se define como:

\[ MSE= \frac{1}{n} \sum_{i=1}^{n} (y_i-\hat{y}_i)^2 = \frac{1}{n} \sum_{i=1}^{n}e_i^2 \]

Características principales:

  • siempre es mayor o igual que cero;
  • el valor ideal es \(0\);
  • eleva los errores al cuadrado, por lo que los errores grandes reciben una penalización especialmente alta;
  • se expresa en unidades cuadradas de la variable respuesta.

El MSE es útil cuando los errores grandes son especialmente importantes, aunque su escala dificulta una interpretación directa en las unidades originales de \(Y\).

Raíz del Error Cuadrático Medio (RMSE)

El RMSE devuelve el error cuadrático a las unidades originales de la variable respuesta:

\[ RMSE= \sqrt{ \frac{1}{n} \sum_{i=1}^{n} (y_i-\hat{y}_i)^2 } \]

Características:

  • se expresa en las mismas unidades que \(Y\);
  • mantiene la mayor penalización de los errores grandes introducida por el cuadrado;
  • toma el valor \(0\) únicamente cuando todas las predicciones son exactas.

Como la raíz cuadrada es una transformación monótona, MSE y RMSE producen el mismo ordenamiento de modelos cuando se calculan sobre el mismo conjunto de observaciones.

La ventaja principal del RMSE frente al MSE es, por tanto, su interpretabilidad en la escala original.

Error Absoluto Medio (MAE)

El Error Absoluto Medio se define como:

\[ MAE= \frac{1}{n} \sum_{i=1}^{n} |y_i-\hat{y}_i| = \frac{1}{n} \sum_{i=1}^{n}|e_i| \]

Características:

  • se expresa en las mismas unidades que \(Y\);
  • representa directamente el promedio de las magnitudes absolutas de los errores;
  • penaliza los errores de manera lineal;
  • es menos sensible que RMSE a unos pocos errores extremadamente grandes.

El MAE resulta especialmente interpretable cuando interesa describir la magnitud promedio del error de predicción.

RMSE o MAE: ¿cuál es más apropiado?

RMSE y MAE representan funciones de pérdida distintas y, por tanto, valoran de manera diferente las discrepancias (Chai & Draxler, 2014; Hodson, 2022).

RMSE

Penalización cuadrática:

\[ e_i^2 \]

  • da mayor peso a errores grandes;
  • es más sensible a discrepancias extremas;
  • resulta apropiado cuando los errores grandes tienen consecuencias especialmente relevantes.

Ejemplos: predicción de picos de demanda eléctrica o de caudales extremos durante una inundación, donde una gran equivocación en los valores extremos es particularmente importante.

MAE

Penalización absoluta:

\[ |e_i| \]

  • todos los errores aumentan su contribución de manera proporcional;
  • es menos sensible a discrepancias extremas;
  • es útil cuando interesa representar el error típico en la escala original sin que pocos errores grandes dominen la medida.

Ejemplo: en predicción de temperatura, si interesa saber cuántos grados se desvía aproximadamente el modelo de los valores observados, el MAE proporciona una interpretación directa en °C.

Ninguna medida es universalmente mejor: la elección depende de cuánto queremos penalizar los errores grandes y del objetivo del problema.

¿Con qué tipo de predicción es coherente cada métrica?

La elección de la función de pérdida también está relacionada con qué valor de la distribución condicional constituye la predicción óptima.

Aquí, predicción óptima significa el valor puntual que minimiza el error esperado para una nueva observación de \(Y\), no la estimación óptima de un parámetro.

Bajo pérdida cuadrática,

\[ L(y,\hat y)=(y-\hat y)^2, \]

la predicción óptima corresponde a la media condicional:

\[ \hat y(\mathbf{x})=E(Y\mid \mathbf{X}=\mathbf{x}) \]

Bajo pérdida absoluta,

\[ L(y,\hat y)=|y-\hat y|, \]

la predicción óptima corresponde a la mediana condicional.

Por tanto, escoger una medida no solo modifica cómo resumimos los errores: también determina qué predicción puntual minimiza el error esperado bajo ese criterio.

Coeficiente de determinación \(R^2\)

El \(R^2\) proporciona una medida relativa del error cuadrático de las predicciones:

\[ R^2= 1- \frac{ \sum_{i=1}^{n}(y_i-\hat y_i)^2 }{ \sum_{i=1}^{n}(y_i-\bar y)^2 } \]

donde \(\bar y\) es la media de los valores observados sobre los que se calcula la medida.

El numerador representa el error cuadrático de las predicciones y el denominador proporciona una referencia basada en la variabilidad de \(Y\) alrededor de su media (Chicco, Warrens, et al., 2021).

Por tanto:

  • \(R^2=1\): las predicciones coinciden con los valores observados;
  • \(R^2=0\): el error cuadrático de las predicciones es igual a la variabilidad de \(Y\) alrededor de \(\bar y\);
  • \(R^2<0\): el error cuadrático de las predicciones es mayor que esa variabilidad.

A diferencia de MAE y RMSE, \(R^2\) es adimensional.

¿Qué aporta \(R^2\)?

MAE y RMSE expresan el tamaño de las discrepancias utilizando la escala de la variable respuesta.

El \(R^2\), en cambio, contextualiza el error cuadrático respecto de la variabilidad de los valores observados (Chicco, Warrens, et al., 2021).

Por ejemplo, un RMSE de 5 puede representar desempeños muy distintos si los valores de \(Y\):

  • se concentran en un intervalo muy estrecho, o
  • presentan una variabilidad considerable.

El \(R^2\) incorpora esa referencia y permite valorar el error de manera relativa.

MAE y RMSE informan sobre la magnitud de las discrepancias; \(R^2\) informa sobre su magnitud relativa a la variabilidad de la respuesta.

Comparación de las medidas principales

Medida Escala ¿Qué enfatiza? Principal consideración
MSE Unidades de \(Y^2\) Errores grandes Difícil interpretación directa
RMSE Unidades de \(Y\) Errores grandes Sensible a errores extremos
MAE Unidades de \(Y\) Magnitud absoluta del error Penaliza linealmente todos los errores
\(R^2\) Sin unidades Desempeño relativo a la variabilidad de \(Y\) Puede ser negativo fuera de muestra

No existe una medida que resuma por sí sola todos los aspectos relevantes del desempeño predictivo.

Medidas porcentuales: MAPE

Cuando interesa expresar el error en términos relativos, puede utilizarse el Mean Absolute Percentage Error:

\[ MAPE= \frac{100}{n} \sum_{i=1}^{n} \left| \frac{y_i-\hat y_i}{y_i} \right| \]

Su interpretación porcentual es atractiva, pero presenta problemas importantes (Hyndman & Koehler, 2006):

  • no está definido cuando \(y_i=0\);
  • puede tomar valores extremadamente grandes cuando \(y_i\) está cerca de cero;
  • puede introducir comportamientos asimétricos entre sobreestimación y subestimación.

Por ello, su uso requiere examinar cuidadosamente la escala y distribución de la variable respuesta.

SMAPE y RMSLE: otras formas de medir la discrepancia

SMAPE

Expresa el error de manera relativa, utilizando como referencia el tamaño tanto del valor observado como del predicho:

\[ \text{SMAPE} = \frac{100}{n} \sum_{i=1}^{n} \frac{2|y_i-\hat y_i|} {|y_i|+|\hat y_i|} \]

Su aporte es distinguir errores absolutos iguales que representan proporciones muy diferentes.

Por ejemplo, un error de 10 unidades no tiene la misma importancia relativa si:

\[ y=20 \qquad\text{o}\qquad y=1000. \]

Es adimensional, pero puede presentar problemas cuando \(y_i\) y \(\hat y_i\) son cercanos a cero (Hyndman & Koehler, 2006).

RMSLE

Mide las discrepancias después de transformar observados y predichos a escala logarítmica:

\[ \text{RMSLE} = \sqrt{ \frac{1}{n} \sum_{i=1}^{n} \left[ \log(1+y_i)-\log(1+\hat y_i) \right]^2 } \]

Se utiliza para respuestas no negativas cuando interesa más la diferencia relativa o multiplicativa que la diferencia absoluta.

Por ejemplo:

\[ 10\rightarrow20 \qquad\text{y}\qquad 100\rightarrow200 \]

representan aproximadamente el mismo cambio proporcional, aunque sus errores absolutos sean 10 y 100.

Es especialmente útil cuando \(Y\) presenta valores de órdenes de magnitud muy diferentes.

SMAPE expresa el error en términos relativos; RMSLE compara las predicciones en escala logarítmica y enfatiza diferencias multiplicativas.

Una alternativa robusta: Mediana del Error Absoluto

La Mediana del Error Absoluto se define como:

\[ MedAE= \operatorname{mediana} \left( |y_i-\hat y_i| \right) \]

A diferencia del MAE, utiliza la mediana de las magnitudes de error.

Esto la hace especialmente resistente a unos pocos errores extremos.

Sin embargo, esa misma robustez implica que puede ocultar un mal desempeño en las colas de la distribución.

MedAE puede ser útil como medida complementaria, pero no debería utilizarse para ignorar errores grandes cuando estos son relevantes para el problema.

Ejemplo: predicción de la concentración de PM2.5

Se desea predecir la concentración horaria de material particulado PM2.5 en una zona urbana utilizando como predictor el flujo vehicular observado durante la misma hora.

Definimos:

\[ Y=\text{concentración de PM2.5}\;(\mu g/m^3) \]

\[ X=\text{flujo vehicular, en centenas de vehículos por hora} \]

Para mantener los cálculos transparentes, se utilizará un modelo de regresión lineal simple:

\[ Y_i=\beta_0+\beta_1X_i+\varepsilon_i. \]

El objetivo del ejemplo es utilizar las predicciones obtenidas por este modelo para calcular e interpretar las distintas métricas de evaluación.

Ejemplo: datos para el entrenamiento

El modelo se entrena utilizando las siguientes seis observaciones:

\(X\) \(Y\)
0 3
2 9
4 18
6 26
8 33
10 43

Las medias son:

\[ \bar x=5 \qquad\text{y}\qquad \bar y=22. \]

Los coeficientes se estiman mediante mínimos cuadrados.

Ejemplo: modelo entrenado

La pendiente estimada es:

\[ \hat\beta_1 = \frac{\sum (x_i-\bar x)(y_i-\bar y)} {\sum (x_i-\bar x)^2} = \frac{280}{70} = 4. \]

El intercepto estimado es:

\[ \hat\beta_0 = \bar y-\hat\beta_1\bar x = 22-4(5) = 2. \]

Por tanto, el modelo entrenado es:

\[ \boxed{\hat Y=2+4X} \]

Por cada incremento de 100 vehículos por hora, el modelo predice un incremento de 4 \(\mu g/m^3\) en la concentración de PM2.5.

Ejemplo: predicciones del modelo

Se dispone de cinco observaciones sobre las cuales se desea evaluar el desempeño predictivo del modelo:

\(X\) \(y_i\) \(\hat y_i=2+4x_i\) \(e_i=y_i-\hat y_i\) \(|e_i|\) \(e_i^2\)
1 7 6 1 1 1
3 13 14 -1 1 1
5 23 22 1 1 1
7 29 30 -1 1 1
9 46 38 8 8 64

En las primeras cuatro observaciones, el modelo se desvía únicamente en 1 \(\mu g/m^3\).

En la última observación, en cambio, subestima la concentración en 8 \(\mu g/m^3\).

Esta discrepancia permitirá observar cómo reaccionan las distintas métricas ante un error considerablemente mayor que los demás.

Ejemplo: error cuadrático medio

El MSE se define como:

\[ MSE= \frac{1}{n} \sum_{i=1}^{n} (y_i-\hat y_i)^2. \]

Sustituyendo:

\[ MSE = \frac{ 1^2+(-1)^2+1^2+(-1)^2+8^2 }{5} = 13.6. \]

\[ \boxed{MSE=13.6\;(\mu g/m^3)^2} \]

El MSE no se interpreta directamente en la escala de la concentración de PM2.5. Su valor está fuertemente influido por la observación en la que el modelo subestima la concentración en 8 \(\mu g/m^3\).

Ejemplo: raíz del error cuadrático medio

El RMSE se define como:

\[ RMSE= \sqrt{ \frac{1}{n} \sum_{i=1}^{n} (y_i-\hat y_i)^2 }. \]

Sustituyendo:

\[ RMSE=\sqrt{13.6}=3.69. \]

\[ \boxed{RMSE=3.69\;\mu g/m^3} \]

El desempeño del modelo corresponde a un RMSE de 3.69 \(\mu g/m^3\) de PM2.5. Este valor refleja especialmente la subestimación de 8 \(\mu g/m^3\), debido a la penalización cuadrática de los errores grandes.

Ejemplo: error absoluto medio

El MAE se define como:

\[ MAE= \frac{1}{n} \sum_{i=1}^{n} |y_i-\hat y_i|. \]

Sustituyendo:

\[ MAE= \frac{1+1+1+1+8}{5} = 2.4. \]

\[ \boxed{MAE=2.4\;\mu g/m^3} \]

En estas observaciones, las concentraciones predichas por el modelo se apartan de las concentraciones reales de PM2.5 en 2.4 \(\mu g/m^3\) en promedio.

Ejemplo: mediana del error absoluto

El MedAE se define como:

\[ MedAE= \operatorname{Mediana} \left( |y_1-\hat y_1|, \dots, |y_n-\hat y_n| \right). \]

Los errores absolutos ordenados son:

\[ 1,\;1,\;1,\;1,\;8. \]

Por tanto:

\[ \boxed{MedAE=1\;\mu g/m^3} \]

La mitad de las predicciones presenta un error absoluto de 1 \(\mu g/m^3\) o menos. La observación con un error de 8 \(\mu g/m^3\) no altera esta medida.

Ejemplo: coeficiente de determinación \(R^2\)

El \(R^2\) se calcula mediante:

\[ R^2= 1- \frac{ \sum_{i=1}^{n}(y_i-\hat y_i)^2 }{ \sum_{i=1}^{n}(y_i-\bar y)^2 }. \]

Para estas observaciones:

\[ \bar y=23.6, \qquad \sum (y_i-\hat y_i)^2=68, \qquad \sum (y_i-\bar y)^2=919.2. \]

Entonces:

\[ R^2 = 1-\frac{68}{919.2} = 0.926. \]

\[ \boxed{R^2=0.926} \]

El modelo explica el 92.6 % de la variabilidad observada en la concentración de PM2.5 respecto de su media.

El 7.4 % restante corresponde a variabilidad que no es explicada por las predicciones del modelo.

Ejemplo: error porcentual absoluto medio

El MAPE se define como:

\[ MAPE= \frac{100}{n} \sum_{i=1}^{n} \left| \frac{y_i-\hat y_i}{y_i} \right|. \]

Sustituyendo:

\[ MAPE = \frac{100}{5} \left( \frac{1}{7} + \frac{1}{13} + \frac{1}{23} + \frac{1}{29} + \frac{8}{46} \right) = 9.43\%. \]

\[ \boxed{MAPE=9.43\%} \]

En promedio, el error absoluto de las predicciones equivale al 9.43 % de la concentración de PM2.5 observada.

Ejemplo: SMAPE

El SMAPE se define como:

\[ SMAPE= \frac{100}{n} \sum_{i=1}^{n} \frac{ 2|y_i-\hat y_i| }{ |y_i|+|\hat y_i|} . \]

Sustituyendo:

\[ SMAPE = \frac{100}{5} \left( \frac{2}{13} + \frac{2}{27} + \frac{2}{45} + \frac{2}{59} + \frac{16}{84} \right) = 9.93\%. \]

\[ \boxed{SMAPE=9.93\%} \]

La discrepancia entre las concentraciones observadas y predichas es de 9.93 % en promedio, al expresarla respecto del tamaño conjunto de ambos valores.

Ejemplo: RMSLE

El RMSLE se calcula como:

\[ RMSLE= \sqrt{ \frac{1}{n} \sum_{i=1}^{n} \left[ \log(1+y_i)-\log(1+\hat y_i) \right]^2 }. \]

Sustituyendo:

\[ RMSLE= \sqrt{ \frac{ (\log 8-\log 7)^2+ (\log 14-\log 15)^2+ \cdots+ (\log 47-\log 39)^2 }{5} } = 0.110. \]

\[ \boxed{RMSLE=0.110} \]

El valor resume la discrepancia entre las concentraciones observadas y predichas en escala logarítmica. No se interpreta directamente en \(\mu g/m^3\); sería especialmente útil si las concentraciones abarcaran órdenes de magnitud muy diferentes y el interés estuviera en errores relativos o multiplicativos.

Ejemplo: comparación de las métricas

Métrica Resultado Lectura en este ejemplo
RMSE 3.69 \(\mu g/m^3\) Mayor influencia del error de 8
MAE 2.40 \(\mu g/m^3\) Error absoluto promedio
MedAE 1.00 \(\mu g/m^3\) Error típico poco afectado por el valor extremo
\(R^2\) 0.926 El modelo explica el 92.6 % de la variabilidad observada en PM2.5
MAPE 9.43 % Error relativo al valor observado
SMAPE 9.93 % Error relativo a observado y predicho
RMSLE 0.110 Error en escala logarítmica

En este caso, la principal diferencia entre las métricas aparece por la observación en la que el modelo subestima el PM2.5 en 8 \(\mu g/m^3\): RMSE la enfatiza, MAE la incorpora proporcionalmente y MedAE prácticamente no se ve afectado.

Las métricas numéricas no cuentan toda la historia

Una métrica reduce muchos errores individuales a un único número.

Por ello, es conveniente complementar las medidas numéricas con herramientas gráficas.

Algunas representaciones particularmente útiles son:

Valores observados vs. predichos

  • permite comparar las predicciones con la línea ideal \(y=\hat y\);
  • revela sesgos, compresión hacia la media y regiones con peor desempeño.

Errores de predicción vs. valores predichos

  • permite identificar patrones sistemáticos;
  • muestra cambios en la variabilidad del error;
  • ayuda a detectar regiones donde el modelo funciona peor.

Distribución de los errores

  • permite examinar asimetría, dispersión y errores extremos.

El análisis gráfico puede revelar estructuras que una medida agregada no muestra (Li et al., 2024).

Curva REC

Bi y Bennett (2003) propusieron las Regression Error Characteristic curves (REC) como una extensión de la lógica de las curvas ROC al problema de regresión.

Para una tolerancia \(\delta\geq0\):

\[ REC(\delta)= \frac{1}{n} \sum_{i=1}^{n} I\left(|e_i|\leq\delta\right) \]

La curva representa:

  • Eje X: tolerancia máxima de error \(\delta\);
  • Eje Y: proporción de predicciones cuyo error absoluto no supera esa tolerancia.

Por ejemplo, un valor

\[ REC(2)=0.80 \]

indicaría que el 80 % de las predicciones presentan errores absolutos no mayores que 2 unidades.

Interpretación de una curva REC

Una curva REC permite observar directamente cómo cambia el porcentaje de predicciones aceptables al aumentar la tolerancia al error.

En general:

  • una curva más alta indica una mayor proporción de predicciones dentro de una tolerancia determinada;
  • si una curva domina a otra, el modelo presenta mejor comportamiento para un amplio rango de tolerancias;
  • si las curvas se cruzan, la preferencia entre modelos puede depender de cuál sea la tolerancia relevante para el problema.

La curva REC representa esencialmente la distribución acumulada del error absoluto y permite comparar modelos sin reducir inmediatamente todos los errores a una única medida (Bi & Bennett, 2003).

Esto resulta especialmente útil cuando el problema permite definir explícitamente qué magnitud de error es aceptable.

Curvas RROC: ¿qué representan?

RROC separa dos componentes del error de predicción (Hernández-Orallo, 2013):

\[ d_i=\hat y_i-y_i \]

  • \(d_i>0\): sobreestimación.
  • \(d_i<0\): subestimación.

Se acumulan por separado:

\[ OVER=\sum \max(d_i,0) \]

\[ UNDER=\sum \min(d_i,0) \]

La gráfica representa:

\[ \boxed{X=OVER} \qquad \boxed{Y=UNDER} \]

Cada modelo, con sus predicciones originales, corresponde inicialmente a un punto del plano RROC.

Curvas RROC: un punto del modelo

Supongamos que se predice la duración de cuatro proyectos y se obtienen:

\[ d_i=2,\;-2,\;-1,\;2 \]

Por tanto:

\[ OVER=2+2=4 \]

\[ UNDER=-2-1=-3 \]

El modelo se representa por:

\[ \boxed{(4,-3)} \]

Esto significa que, entre los cuatro proyectos, el modelo acumula:

  • 4 días de sobreestimación;
  • 3 días de subestimación.

Un mismo modelo puede sobreestimar algunos casos y subestimar otros.

Curvas RROC: ¿cómo aparece la curva?

Se desplazan todas las predicciones en una misma cantidad \(s\):

\[ \hat y_i^{(s)}=\hat y_i+s \]

No se eligen valores de \(s\) al azar.

Los puntos relevantes aparecen cuando algún error cambia de signo:

\[ d_i+s=0 \quad\Rightarrow\quad s=-d_i \]

Para

\[ d_i=2,\;-2,\;-1,\;2 \]

los desplazamientos relevantes son:

\[ s=-2,\;1,\;2 \]

También se considera \(s=0\), que representa las predicciones originales.

Curvas RROC: construcción

Para cada desplazamiento se recalculan \(OVER\) y \(UNDER\):

\(s\) \(OVER\) \(UNDER\)
-2 0 -7
0 4 -3
1 6 -1
2 9 0

Por tanto, se obtienen los puntos:

\[ (0,-7),\;(4,-3),\;(6,-1),\;(9,0) \]

Al unirlos se forma la curva RROC.

  • desplazar hacia arriba (\(s>0\)) reduce la subestimación, pero aumenta la sobreestimación;
  • desplazar hacia abajo (\(s<0\)) produce el efecto contrario.

Curvas RROC: ¿para qué sirven?

Supongamos que se predice la duración de proyectos.

  • Subestimar 10 días puede provocar retrasos, falta de recursos o incumplimientos.
  • Sobreestimar 10 días puede generar recursos ociosos.

Aunque ambos errores tienen la misma magnitud, sus consecuencias pueden ser diferentes.

La curva RROC permite observar cómo cambia el equilibrio entre ambos al desplazar las predicciones.

Es especialmente útil cuando sobreestimar y subestimar tienen costos diferentes.

REC y RROC responden preguntas diferentes

REC

Pregunta principal:

¿Qué proporción de predicciones queda dentro de una determinada tolerancia de error?

Se concentra en la magnitud absoluta del error.

RROC

Pregunta principal:

¿Cómo cambia el equilibrio entre sobreestimación y subestimación?

Se concentra en la dirección y el costo relativo de los errores.

Ambas representaciones complementan las medidas escalares tradicionales al mostrar aspectos de la distribución de errores que MAE, RMSE o \(R^2\) resumen en un único número.

Aplicación en R: predicción del rendimiento de combustible

Utilizaremos el conjunto Auto de ISLR2 (James et al., 2021), que contiene información de 392 automóviles.

Se desea predecir:

\[ Y=\text{rendimiento de combustible (mpg)} \]

a partir de:

\[ X_1=\text{horsepower},\qquad X_2=\text{weight},\qquad X_3=\text{year}. \]

Se utilizará un modelo de regresión lineal múltiple y su desempeño se evaluará sobre observaciones no utilizadas durante el entrenamiento.

Aplicación en R: entrenamiento y prueba

library(ISLR2)
library(dplyr)
library(modelskill)
library(DALEX)
library(auditor)

set.seed(666)

id <- sample(
  seq_len(nrow(Auto)),
  size = floor(0.75 * nrow(Auto))
)

train <- Auto[id, ]
test  <- Auto[-id, ]

c(
  entrenamiento = nrow(train),
  prueba = nrow(test)
)
entrenamiento        prueba 
          294            98 

El modelo se entrenará exclusivamente con train y todas las medidas y gráficas posteriores se obtendrán con test.

Aplicación en R: modelo de regresión

Se considera:

\[ mpg_i= \beta_0+ \beta_1 horsepower_i+ \beta_2 weight_i+ \beta_3 year_i+ \varepsilon_i. \]

modelo <- lm(
  mpg ~ horsepower + weight + year,
  data = train
)

coef(modelo)
  (Intercept)    horsepower        weight          year 
-13.014002906  -0.014115889  -0.005924352   0.731840514 

Los coeficientes mostrados corresponden al modelo estimado utilizando únicamente las observaciones de entrenamiento.

Aplicación en R: predicciones

Aplicamos el modelo entrenado a los automóviles del conjunto de prueba:

test <- test |>
  mutate(
    .pred = predict(modelo, newdata = test)
  )

test |>
  select(mpg, .pred) |>
  head() |>
  knitr::kable(
    col.names = c("Observado", "Predicho"),
    digits = 2
  )
Observado Predicho
2 15 14.01
12 14 14.58
18 21 21.69
24 26 23.38
27 10 9.47
31 28 24.26

A partir de estos pares de valores observados y predichos se realizará toda la evaluación.

Aplicación en R: medidas de desempeño

metricas <- modelskill::model_metrics(
  mods = list(Modelo = test$.pred),
  obs = test$mpg,
  extended = TRUE,
  digits = 3
)

metricas |>
  select(
    mse, rmse, mae, mdae,
    R2, mape, smape, rmsle
  ) |>
  knitr::kable(
    col.names = c(
      "MSE", "RMSE", "MAE", "MedAE",
      "R²", "MAPE", "SMAPE", "RMSLE"
    ),
    align = rep("c", 8)
  )
MSE RMSE MAE MedAE R² MAPE SMAPE RMSLE
Modelo 10.405 3.226 2.433 2.06 0.827 10.029 9.865 0.119

Aplicación en R: interpretación de los resultados

En los automóviles del conjunto de prueba:

  • el RMSE es 3.23 mpg;
  • el MAE es 2.43 mpg, por lo que las predicciones se apartan del rendimiento observado en aproximadamente esa cantidad, en promedio;
  • el MedAE es 2.06 mpg, por lo que la mitad de los errores absolutos no supera aproximadamente ese valor.

La diferencia entre RMSE, MAE y MedAE permite apreciar cuánto influyen las predicciones con errores relativamente grandes.

Aplicación en R: interpretación de los resultados

Además:

  • \(R^2=\) 0.827: el modelo explica aproximadamente el 82.7 % de la variabilidad observada en mpg en el conjunto de prueba;
  • MAPE = 10 %;
  • SMAPE = 9.9 %;
  • RMSLE = 0.119.

Así, las medidas porcentuales muestran el tamaño relativo de las discrepancias, mientras que RMSLE resume las diferencias entre observado y predicho en escala logarítmica.

Aplicación en R: preparación de la evaluación gráfica

Utilizaremos las mismas observaciones de prueba para construir todas las gráficas.

exp_modelo <- DALEX::explain(
  modelo,
  data = test |>
    select(horsepower, weight, year),
  y = test$mpg,
  label = "Regresion lineal",
  verbose = FALSE
)

res_modelo <- auditor::model_residual(
  exp_modelo
)

Aplicación en R: observado frente a predicho

Ver código en R
auditor::plot_prediction(
  res_modelo,
  abline = TRUE
)

La diagonal representa \(\hat y=y\). Sobre ella, el modelo sobreestima mpg; bajo ella, subestima. La distancia a la diagonal refleja la magnitud del error.

Aplicación en R: residuos frente a valores predichos

Ver código en R
auditor::plot_residual(
  res_modelo,
  variable = "_y_hat_",
  smooth = TRUE
)

Con \(e_i=y_i-\hat y_i\): residuos positivos indican subestimación y negativos, sobreestimación. Interesa observar si los errores se distribuyen alrededor de cero o muestran algún patrón.

Aplicación en R: distribución de los residuos

Ver código en R
auditor::plot_residual_density(
  res_modelo
)

La concentración alrededor de cero muestra el tamaño habitual de los errores. La asimetría y las colas permiten identificar predominio de sobreestimaciones, subestimaciones o errores grandes.

Aplicación en R: curva REC

Ver código en R
auditor::plot_rec(
  res_modelo
)

En los automóviles del conjunto de prueba, el 49 % de las predicciones presenta un error absoluto no mayor de 2 mpg. Asimismo, para incluir al 80 % de las predicciones, es necesario admitir una tolerancia de aproximadamente 3.76 mpg. Por tanto, la curva permite cuantificar directamente qué proporción de predicciones queda dentro de distintos márgenes de error.

Aplicación en R: curva RROC

Ver código en R
auditor::plot_rroc(res_modelo)

plot_rroc() construye automáticamente la curva aplicando los desplazamientos \(s\). El punto marcado corresponde al modelo original (\(s=0\)) y se ubica en
(125.1, -113.3).Esto significa que sus predicciones acumulan 125.1 mpg de sobreestimación y 113.3 mpg de subestimación. En consecuencia, en las predicciones del conjunto de prueba predomina la sobreestimación: el modelo acumula 11.8 mpg más de sobreestimación que de subestimación.

Más allá de una predicción puntual

Hasta ahora hemos supuesto que el modelo produce un único valor:

\[ \hat y=30. \]

Pero algunos métodos pueden proporcionar información adicional sobre la incertidumbre de la predicción.

Por ejemplo:

\[ \text{Predicción puntual: }30 \]

\[ \text{Cuantil 0.90: }45 \]

\[ \text{Intervalo predictivo del 80%: }[22,\,38] \]

Estas predicciones responden a preguntas diferentes.

Un RMSE o un MAE permiten evaluar la predicción puntual, pero no indican si un cuantil o un intervalo predictivo están bien construidos.

La medida de evaluación debe corresponder al tipo de predicción producida.

¿Cómo se evalúan cuantiles e intervalos?

Predicción de cuantiles

Si el modelo predice el cuantil \(\tau\), puede utilizarse la pérdida pinball (gneiting2011?):

\[ L_\tau(y,q)= \begin{cases} \tau(y-q), & y\geq q,\\ (1-\tau)(q-y), & y<q. \end{cases} \]

Por ejemplo, para \(\tau=0.90\), subestimar recibe mayor penalización que sobreestimar, porque se está intentando predecir un valor que deje aproximadamente al 90 % de las observaciones por debajo.

Intervalos predictivos

Un intervalo predictivo del 80 % busca contener aproximadamente al 80 % de los valores futuros de \(Y\).

Su evaluación debe considerar conjuntamente:

  • cobertura: qué proporción de valores observados cae dentro del intervalo;
  • amplitud: qué tan estrechos son los intervalos.

Un intervalo muy ancho puede alcanzar una cobertura elevada y, aun así, proporcionar poca información.

¿Cómo elegir una medida de regresión?

La elección debe comenzar por la pregunta que se desea responder.

Objetivo principal Herramienta apropiada
Penalizar especialmente errores grandes RMSE / MSE
Interpretar la magnitud promedio del error MAE
Reducir la influencia de errores extremos MAE / MedAE
Comparar el error con la variabilidad de la respuesta \(R^2\)
Evaluar diferencias relativas en respuestas positivas RMSLE
Expresar errores porcentualmente MAPE / SMAPE, con precaución
Evaluar tolerancias de error Curva REC
Diferenciar sobreestimación y subestimación Curva RROC
Evaluar predicciones de cuantiles Pinball loss
Evaluar intervalos predictivos Cobertura y amplitud

La mejor medida no es la más popular, sino la que representa adecuadamente qué significa una buena predicción en el problema estudiado.

Clasificación

Clasificación: ¿qué queremos predecir?

En un problema de clasificación, la variable respuesta \(Y\) representa una categoría entre un conjunto de clases posibles.

A partir de los predictores \(\mathbf{x}\), el modelo puede proporcionar información que permita:

  • asignar una observación a una clase;
  • ordenar observaciones según su propensión a pertenecer a una clase;
  • estimar probabilidades de pertenencia a las distintas clases.

Evaluar un clasificador requiere primero identificar qué salida produce el modelo y para qué será utilizada.

¿Qué puede producir un clasificador?

Un modelo de clasificación puede proporcionar distintos tipos de salida:

Salida ¿Qué representa?
Clase predicha La categoría finalmente asignada a la observación
Score continuo Una medida que permite ordenar observaciones según su propensión hacia una clase
Probabilidad estimada Una estimación de la probabilidad de pertenencia a una clase

Estas salidas no son equivalentes.

Por ejemplo, dos observaciones pueden recibir la misma clase aunque sus probabilidades estimadas sean:

\[ \hat p_1=0.51, \qquad \hat p_2=0.99. \]

La clasificación final es la misma, pero la información proporcionada por el modelo es muy diferente.

¿Qué salida necesitamos en cada problema?

No siempre necesitamos el mismo tipo de predicción. La salida útil depende de la decisión o del uso posterior del modelo.

Necesidad Salida más útil Ejemplo
Tomar una decisión inmediata Clase predicha Un filtro de correo debe decidir si un mensaje se clasifica como spam o no spam.
Priorizar observaciones Score continuo Una organización puede ordenar solicitudes o casos según su prioridad para decidir cuáles revisar primero, sin necesitar interpretar el score como una probabilidad.
Cuantificar el riesgo de un evento Probabilidad estimada Una compañía de seguros puede estimar la probabilidad de que un reclamo sea fraudulento y combinarla con el costo de investigarlo y la pérdida potencial.
Usar la predicción en cálculos posteriores Probabilidad estimada Para estimar el Customer Lifetime Value (CLV), la probabilidad de que un cliente realice una nueva compra puede formar parte de un cálculo económico más amplio.

La mejor salida no depende únicamente del algoritmo, sino de qué información necesita la aplicación para actuar.

De la predicción a la decisión

Cuando el modelo produce un score o una probabilidad, la clase predicha surge después de aplicar una regla de decisión.

Por ejemplo, en clasificación binaria:

\[ \hat Y= \begin{cases} 1, & \hat p \geq c,\\ 0, & \hat p<c, \end{cases} \]

donde \(c\) es el punto de corte.

Por tanto:

\[ \text{score o probabilidad} \;\longrightarrow\; \text{regla de decisión} \;\longrightarrow\; \text{clase predicha}. \]

El mismo modelo puede producir decisiones diferentes si cambia el punto de corte de acuerdo con las consecuencias de los falsos positivos y falsos negativos o con las necesidades de la aplicación.

Convertir una predicción continua en una clase implica perder información.

Un score no es necesariamente una probabilidad

Un score puede ser muy útil para ordenar observaciones sin tener una interpretación probabilística directa.

Incluso una salida restringida al intervalo \([0,1]\) no garantiza por sí sola que pueda interpretarse como una probabilidad confiable.

Por ejemplo, si un modelo asigna:

\[ \hat p=0.80, \]

interpretarlo como una probabilidad implica esperar que, entre observaciones comparables a las que se asigna aproximadamente 0.80, el evento ocurra aproximadamente en el 80 % de los casos.

Esta propiedad se denomina calibración.

Un modelo puede discriminar bien entre las clases y, al mismo tiempo, producir probabilidades mal calibradas.

¿Qué propiedad queremos evaluar?

La medida apropiada depende del tipo de predicción y de la pregunta de evaluación.

Pregunta Salida evaluada Herramientas
¿Las decisiones de clasificación son correctas? Clase predicha Matriz de confusión y métricas derivadas
¿El modelo ordena correctamente los casos? Score o probabilidad ROC, AUC y curva precisión–sensibilidad
¿Las probabilidades son globalmente buenas? Probabilidad Brier score y log loss
¿Las probabilidades corresponden con las frecuencias observadas? Probabilidad Gráficos y medidas de calibración

Clasificar correctamente, discriminar bien y producir buenas probabilidades son propiedades relacionadas, pero diferentes.

Evaluación de clases predichas: caso binario

En esta subsección evaluaremos la clase predicha por el modelo.

Por tanto, compararemos:

\[ \text{clase observada} \qquad \text{vs.} \qquad \text{clase predicha}. \]

Trabajaremos primero con el caso de clasificación binaria, donde una de las clases se define como la clase positiva (evento de interés) y la otra como la clase negativa.

La clase positiva representa el evento que hemos decidido estudiar; no implica necesariamente un resultado favorable.

Matriz de confusión: clasificación binaria

La matriz de confusión resume las cuatro combinaciones posibles entre la clase observada y la clase predicha.

Clase observada
Positiva Negativa
Clase predicha TP
Verdadero positivo
FP
Falso positivo
FN
Falso negativo
TN
Verdadero negativo
  • TP: el evento ocurrió y el modelo lo predijo.
  • TN: el evento no ocurrió y el modelo lo predijo correctamente.
  • FP: el evento no ocurrió, pero el modelo predijo que sí.
  • FN: el evento ocurrió, pero el modelo no lo detectó.

Accuracy: la medida más inmediata

La primera pregunta que podemos hacer es:

¿Qué proporción de observaciones clasificó correctamente el modelo?

La accuracy o exactitud es:

\[ \text{Accuracy} = \frac{TP+TN} {TP+FP+FN+TN}. \]

Su complemento es la tasa de error:

\[ \text{Error} = 1-\text{Accuracy} = \frac{FP+FN} {TP+FP+FN+TN}. \]

La accuracy constituye una primera descripción natural del desempeño: simplemente cuenta los aciertos respecto del total.

Accuracy: dos elementos necesarios para interpretarla

1. La regla de clasificación

Si la clase predicha se obtiene a partir de una probabilidad,

\[ \hat Y= \begin{cases} 1, & \hat p\geq c,\\ 0, & \hat p<c, \end{cases} \]

la matriz de confusión y la accuracy dependen del punto de corte \(c\).

Cambiar \(c\) puede modificar simultáneamente TP, FP, FN y TN.

2. Un valor de referencia

Un benchmark sencillo consiste en predecir siempre la clase mayoritaria.

Si \(\pi\) es la proporción observada de positivos:

\[ \text{Accuracy}_{ref} = \max(\pi,1-\pi). \]

Esta referencia suele denominarse no-information rate.

Una accuracy elevada puede aportar poco si apenas supera la obtenida prediciendo siempre la clase más frecuente.

Kappa de Cohen: complementando la accuracy

Superar el accuracy de un clasificador de referencia es informativo, pero todavía podemos preguntar:

¿Cuánto de la concordancia observada excede la que cabría esperar a partir de las distribuciones marginales de las clases?

El coeficiente Kappa de Cohen fue originalmente desarrollado como una medida de concordancia y se define como:

\[ \kappa= \frac{O-E}{1-E}, \]

donde:

  • \(O\) es la concordancia observada, es decir, la accuracy;
  • \(E\) es la concordancia esperada a partir de los totales marginales de la matriz de confusión.

Así, Kappa permite contextualizar la accuracy respecto de un nivel de concordancia esperado.

¿Cómo interpretar Kappa?

El estadístico toma valores entre \(-1\) y \(1\):

  • \(\kappa=1\): concordancia perfecta;
  • \(\kappa=0\): la concordancia observada coincide con la esperada según los marginales;
  • \(\kappa<0\): la concordancia es menor que la esperada.

En un problema predictivo, un Kappa claramente negativo es poco habitual y merece ser investigado: puede indicar un desempeño sistemáticamente contrario a las clases observadas o incluso problemas en la codificación o asignación de las etiquetas.

Se han propuesto escalas cualitativas para interpretar Kappa, por ejemplo:

\(\kappa\) Interpretación convencional
\(0.00\)–\(0.20\) Leve
\(0.21\)–\(0.40\) Regular
\(0.41\)–\(0.60\) Moderada
\(0.61\)–\(0.80\) Sustancial
\(0.81\)–\(1.00\) Casi perfecta

Estas categorías son solo orientativas: no son umbrales universales para decidir si un clasificador es bueno o malo.

Accuracy y Kappa deben interpretarse conjuntamente

Suponga:

\[ \text{Accuracy}=0.90, \qquad E=0.85. \]

Entonces:

\[ \kappa= \frac{0.90-0.85}{1-0.85} = 0.33. \]

Aunque el modelo acierta el 90 % de las observaciones, la concordancia por encima de la esperada según los marginales es bastante menor.

Modelo Accuracy \(\kappa\)
A 0.90 0.10
B 0.80 0.35
  • A tiene mayor proporción de aciertos.
  • B presenta mayor concordancia por encima de la esperada.

Conviene interpretar accuracy + Kappa + distribución de clases, no usar umbrales rígidos de Kappa para declarar que un modelo es “bueno” o “malo”.

Una misma accuracy puede ocultar desempeños distintos

Considere dos clasificadores evaluados sobre 100 observaciones: 50 positivas y 50 negativas.

TP FN FP TN Accuracy
Clasificador A 45 5 15 35 0.80
Clasificador B 35 15 5 45 0.80

Ambos clasificadores tienen:

\[ \text{Accuracy}=0.80. \]

Sin embargo:

  • A reconoce mejor los casos positivos, pero genera más falsos positivos;
  • B reconoce mejor los casos negativos, pero deja escapar más positivos.

La accuracy indica cuántas decisiones fueron correctas, pero no distingue qué tipo de aciertos y errores produjo el modelo.

El contexto determina qué error importa

Suponga que la clase positiva corresponde a spam.

  • FP: un correo legítimo es clasificado como spam.
  • FN: un correo spam llega a la bandeja de entrada.

Si perder un correo legítimo resulta mucho más grave que permitir que pase algún mensaje spam, puede preferirse el clasificador que produzca menos falsos positivos, aunque ambos tengan la misma accuracy.

En otro problema puede ocurrir exactamente lo contrario.

No siempre interesa acertar por igual en las dos clases: las consecuencias de FP y FN dependen del problema.

Una misma matriz, diferentes preguntas

A partir de la misma matriz de confusión se pueden responder preguntas distintas.

Pregunta Medida
De los casos realmente positivos, ¿cuántos detectó el modelo? Sensibilidad / Recall
De los casos realmente negativos, ¿cuántos identificó correctamente? Especificidad
De los casos predichos como positivos, ¿cuántos eran realmente positivos? Precisión / PPV
De los casos predichos como negativos, ¿cuántos eran realmente negativos? NPV

Por ello, estas medidas no son intercambiables: sus denominadores corresponden a preguntas diferentes.

Sensibilidad y especificidad

Sensibilidad

Mide la proporción de eventos correctamente identificados:

\[ \text{Sensibilidad} = \frac{TP}{TP+FN}. \]

También se denomina recall o tasa de verdaderos positivos.

De los casos realmente positivos, ¿qué proporción detectó el modelo?

Especificidad

Mide la proporción de no eventos correctamente identificados:

\[ \text{Especificidad} = \frac{TN}{FP+TN}. \]

También se denomina tasa de verdaderos negativos.

De los casos realmente negativos, ¿qué proporción identificó correctamente?

Falsa alarma

La falsa alarma o tasa de falsos positivos mide la proporción de casos realmente negativos que el modelo clasifica incorrectamente como positivos:

\[ \text{Falsa alarma} = 1-\text{Especificidad} = \frac{FP}{FP+TN}. \]

Por tanto:

  • una alta especificidad implica pocas falsas alarmas;
  • una baja especificidad implica muchas falsas alarmas.

Esta medida será especialmente importante más adelante, porque constituye uno de los ejes de la curva ROC.

Volvamos a los dos clasificadores

Accuracy Sensibilidad Especificidad
Clasificador A 0.80 0.90 0.70
Clasificador B 0.80 0.70 0.90

Ahora podemos observar lo que la accuracy ocultaba:

  • A detecta mejor los positivos;
  • B identifica mejor los negativos.

Ninguno es necesariamente mejor en términos generales.

La elección depende de cuál de los dos tipos de error resulta más importante en el problema estudiado.

Precisión y valor predictivo negativo

Ahora condicionamos sobre la clase predicha.

Precisión o valor predictivo positivo (PPV)

\[ \text{Precisión} = PPV = \frac{TP}{TP+FP} \]

De los casos predichos como positivos, ¿qué proporción era realmente positiva?

Valor predictivo negativo (NPV)

\[ NPV = \frac{TN}{TN+FN} \]

De los casos predichos como negativos, ¿qué proporción era realmente negativa?

Por tanto:

Perspectiva Condiciona sobre Medidas
Clase observada lo que realmente ocurrió Sensibilidad, especificidad
Clase predicha la decisión producida por el modelo Precisión, NPV

Precisión, NPV y prevalencia

Sensibilidad y especificidad condicionan sobre la clase observada.

En cambio, precisión y NPV dependen también de la prevalencia del evento:

\[ \pi = \frac{TP+FN} {TP+FN+FP+TN}. \]

Por ejemplo:

\[ PPV = \frac{\text{Sensibilidad}\,\pi} {\text{Sensibilidad}\,\pi+ (1-\text{Especificidad})(1-\pi)}. \]

Por ello, cuando el evento es poco frecuente, un modelo puede presentar sensibilidad y especificidad elevadas y, sin embargo, tener una precisión considerablemente menor.

La frecuencia del evento forma parte de la interpretación de las predicciones positivas y negativas.

Balanced accuracy

Una vez distinguidos sensibilidad y especificidad, podemos construir una medida global que otorgue el mismo peso a las dos clases observadas:

\[ \text{Balanced Accuracy} = \frac{\text{Sensibilidad}+\text{Especificidad}}{2}. \]

La diferencia con la accuracy ordinaria puede verse escribiendo:

\[ \text{Accuracy} = \pi\cdot\text{Sensibilidad} + (1-\pi)\cdot\text{Especificidad}. \]

Mientras que:

\[ \text{Balanced Accuracy} = \frac{1}{2}\text{Sensibilidad} + \frac{1}{2}\text{Especificidad}. \]

Por tanto:

  • Accuracy: pondera el desempeño de cada clase según su frecuencia.
  • Balanced accuracy: asigna el mismo peso a ambas clases observadas.

Balanced accuracy no es una versión universalmente “mejor” de accuracy: representa una elección diferente sobre cómo ponderar las clases.

¿Cuándo resulta útil la balanced accuracy?

La balanced accuracy es especialmente útil cuando:

  • las clases están desbalanceadas;
  • interesa que el desempeño sobre ambas clases tenga el mismo peso;
  • no se desea que la clase mayoritaria domine la medida global.

La accuracy sigue siendo interpretable cuando:

  • la distribución de clases evaluada representa la población de interés;
  • interesa la proporción total de clasificaciones correctas;
  • los errores individuales reciben una importancia comparable.

En el ejemplo anterior:

\[ BA_A=BA_B=0.80. \]

Por tanto, tampoco la balanced accuracy decide cuál de los dos clasificadores es preferible cuando las consecuencias de FP y FN son diferentes.

Medida F1

La medida F1 combina dos aspectos del desempeño sobre la clase positiva:

  • Precisión: de los positivos predichos, ¿cuántos son realmente positivos?
  • Sensibilidad (recall): de los positivos reales, ¿cuántos fueron detectados?

Utiliza la media armónica:

\[ F_1 = 2 \frac{\text{Precisión}\times\text{Sensibilidad}} {\text{Precisión}+\text{Sensibilidad}} = \frac{2TP}{2TP+FP+FN}. \]

Toma valores entre 0 y 1 y solo puede ser alta cuando precisión y sensibilidad son ambas altas.

F1 se concentra en la clase positiva y no incorpora directamente los verdaderos negativos.

Interpretación práctica de F1

La combinación de precisión y sensibilidad permite reconocer distintos comportamientos del clasificador:

  • Alta precisión + baja sensibilidad: el modelo es conservador al declarar positivos; produce pocos FP, pero deja escapar muchos positivos reales.

  • Alta sensibilidad + baja precisión: detecta gran parte de los positivos, pero genera más FP.

  • Si una de las dos medidas disminuye mucho, F1 también disminuye, aunque la otra sea elevada.

Esto ocurre porque la media armónica penaliza los desequilibrios entre ambas medidas.

Un mismo valor de accuracy puede ocultar comportamientos muy diferentes sobre la clase positiva.

¿Cuándo resulta informativa F1?

F1 resulta especialmente útil cuando:

  • existe una clase positiva claramente definida;
  • interesan simultáneamente precisión y sensibilidad;
  • los verdaderos negativos no constituyen el foco principal de la evaluación.

No debería utilizarse como resumen único cuando:

  • interesa también el desempeño sobre la clase negativa;
  • accuracy o balanced accuracy responden mejor al objetivo;
  • FP y FN tienen consecuencias explícitamente cuantificables.

F1 no es una solución general al desbalance de clases: responde a una pregunta específica sobre la clase positiva.

Ejemplo ilustrativo de F1

Considere la siguiente matriz de confusión:

Real positivo Real negativo
Predicho positivo 60 15
Predicho negativo 40 885

Entonces:

\[ \text{Precisión} = \frac{60}{60+15} = 0.80, \qquad \text{Sensibilidad} = \frac{60}{60+40} = 0.60. \]

Por tanto:

\[ F_1 = 2\frac{0.80(0.60)}{0.80+0.60} \approx 0.69. \]

El modelo tiene mayor precisión que sensibilidad: sus predicciones positivas son relativamente confiables, pero deja sin detectar una proporción importante de positivos reales.

Accuracy alta, pero desempeño pobre en la clase positiva

Considere 10 000 observaciones, de las cuales solo 200 son positivas:

Real positivo Real negativo
Predicho positivo 30 120
Predicho negativo 170 9680

Se obtiene:

\[ \text{Accuracy}=0.971, \qquad \text{Precisión}=0.20, \qquad \text{Sensibilidad}=0.15, \qquad F_1\approx0.17. \]

La accuracy es muy alta porque la gran mayoría de los negativos fue correctamente clasificada.

Sin embargo, el modelo:

  • detecta solo el 15 % de los positivos;
  • acierta solo el 20 % de sus predicciones positivas.

Accuracy y F1 no se contradicen: están resumiendo aspectos diferentes del desempeño.

Medida \(F_\beta\)

La familia \(F_\beta\) generaliza F1 y permite modificar la importancia relativa de precisión y sensibilidad:

\[ F_\beta = (1+\beta^2) \frac{\text{Precisión}\times\text{Sensibilidad}} {\beta^2\text{Precisión}+\text{Sensibilidad}}. \]

  • \(\beta=1\): igual ponderación relativa \(\rightarrow F_1\).
  • \(\beta>1\): mayor énfasis en sensibilidad.
  • \(\beta<1\): mayor énfasis en precisión.

Por tanto, \(\beta\) debe elegirse de acuerdo con qué aspecto del desempeño sobre la clase positiva se desea enfatizar.

\(\beta\) no representa directamente una razón de costos entre FP y FN.

Comparando \(F_\beta\)

En el ejemplo anterior:

\[ \text{Precisión}=0.20, \qquad \text{Sensibilidad}=0.15. \]

Entonces:

\[ F_{0.5}=0.1875, \qquad F_1\approx0.1714, \qquad F_2\approx0.1579. \]

Como la sensibilidad es menor que la precisión:

  • \(F_{0.5}\) es mayor porque concede más importancia relativa a la precisión;
  • \(F_2\) es menor porque concede más importancia a la sensibilidad, que es precisamente el componente más débil del modelo.

\(F_\beta\) no mejora el desempeño: cambia qué combinación de precisión y sensibilidad estamos resumiendo.

¿Cómo elegir \(\beta\)?

La elección debe partir de la pregunta de evaluación:

Interés principal Elección
Precisión y sensibilidad con igual importancia relativa \(\beta=1\)
Evitar perder positivos reales tiene mayor importancia \(\beta>1\)
Evitar predicciones positivas incorrectas tiene mayor importancia \(\beta<1\)

No existe un valor de \(\beta\) asociado universalmente a un dominio como salud, fraude o seguridad: dentro de un mismo dominio pueden existir decisiones con consecuencias muy diferentes.

Además, F1 y \(F_\beta\) dependen de la regla de clasificación utilizada: al cambiar el punto de corte cambian precisión, sensibilidad y, por tanto, estas medidas.

Si las consecuencias de FP y FN pueden expresarse mediante costos o utilidad, conviene evaluarlas directamente en lugar de intentar codificarlas mediante un valor de \(\beta\).

MCC: una medida basada en las cuatro celdas

El coeficiente de correlación de Matthews (MCC) utiliza las cuatro celdas de la matriz:

\[ MCC = \frac{TP\,TN-FP\,FN} {\sqrt{(TP+FP)(TP+FN)(TN+FP)(TN+FN)}}. \]

Puede interpretarse como la correlación entre las clases observadas y las clases predichas.

  • \(MCC=1\): clasificación perfecta.
  • \(MCC=0\): ausencia de asociación entre observación y predicción.
  • \(MCC=-1\): clasificación completamente opuesta.

A diferencia de F1, incorpora TP, TN, FP y FN.

MCC proporciona un resumen global útil, pero no sustituye la lectura de sensibilidad, especificidad, precisión ni las consecuencias de los errores.

Selección de Medidas

  • No existe una respuesta sencilla a la pregunta relacionada a que medida de evaluación usar.

  • En general, ningún clasificador es óptimo para todas las métricas de evaluación.

  • Cuando se evalúa un problema de clasificación en general, la exactitud es más que suficiente, junto con el análisis del coeficiente Kappa de Cohen.

  • Por supuesto, si existen problemas de categorías no balanceadas, uno debería tener en cuenta las medidas F para verificar si existe un buen balance entre la precisión y la sensibilidad.

  • En problemas específicos, hay que tener mucho cuidado con la selección de la medida.

  • Por ejemplo, cuando existe un alto costo relacionado a la clasificación de la clase negativa, una falsa alarma muy alta es problemática.

  • En algunos casos es recomendable usar múltiples medidas, y buscar un balance entre ellas.

Entonces, ¿qué medida utilizar?

No existe una única medida adecuada para todos los problemas.

Pregunta de evaluación Medida útil
¿Qué proporción total clasificamos correctamente? Accuracy
¿Queremos contextualizar la accuracy respecto del acuerdo esperado según los marginales? Kappa de Cohen
¿Queremos dar el mismo peso a las dos clases observadas? Balanced accuracy
¿Qué proporción de los positivos reales detectamos? Sensibilidad / Recall
¿Qué proporción de los negativos reales identificamos? Especificidad
De los positivos predichos, ¿cuántos son realmente positivos? Precisión / PPV
De los negativos predichos, ¿cuántos son realmente negativos? NPV
¿Interesa resumir conjuntamente precisión y recall para la clase positiva? F1 / \(F_\beta\)
¿Buscamos un resumen global de asociación entre clases observadas y predichas? MCC
¿Existen consecuencias diferentes para FP y FN? Evaluación explícita de costos o utilidad

La elección de la medida comienza por determinar qué aspecto de las decisiones de clasificación queremos evaluar.

Ejemplo: filtro de spam y matriz de confusión

Una organización utiliza un clasificador para identificar correos spam.

En una muestra de 100 correos:

  • 10 eran realmente spam;
  • 90 eran correos legítimos (no spam).

Consideraremos spam como la clase positiva.

El clasificador produjo:

Spam observado No spam observado Total
Predicho spam 6 5 11
Predicho no spam 4 85 89
Total 10 90 100

Por tanto:

\[ TP=6,\qquad FP=5,\qquad FN=4,\qquad TN=85. \]

En este contexto:

  • un FP significa que un correo legítimo es enviado a spam;
  • un FN significa que un correo spam llega a la bandeja de entrada.

Ejemplo: accuracy y ratio no informativo

La accuracy es:

\[ \text{Accuracy} = \frac{6+85}{100} = 0.91. \]

El clasificador acierta el 91 % de los correos.

Sin embargo, el 90 % de los correos son legítimos. Si siempre predijéramos no spam, obtendríamos:

\[ \text{NIR}=0.90. \]

Por tanto, el modelo mejora al clasificador trivial en solo:

\[ 0.91-0.90=0.01. \]

Aunque 91 % parece una accuracy elevada, está apenas 1 punto porcentual por encima de clasificar todos los mensajes como no spam.

Ejemplo: Kappa de Cohen y frecuencias esperadas

Para calcular Kappa necesitamos la concordancia esperada bajo independencia.

Como en una tabla de contingencia:

\[ E_{ij} = \frac{(\text{total fila})(\text{total columna})}{N}. \]

Las frecuencias esperadas son:

Spam observado No spam observado Total
Predicho spam \(\frac{11(10)}{100}=1.1\) \(\frac{11(90)}{100}=9.9\) 11
Predicho no spam \(\frac{89(10)}{100}=8.9\) \(\frac{89(90)}{100}=80.1\) 89
Total 10 90 100

La accuracy esperada es la proporción esperada sobre la diagonal:

\[ E = \frac{1.1+80.1}{100} = 0.812. \]

Ejemplo: interpretación del Kappa

Con:

\[ O=0.91, \qquad E=0.812, \]

obtenemos:

\[ \kappa = \frac{0.91-0.812}{1-0.812} = 0.521. \]

La lectura conjunta es:

  • Accuracy = 0.91: el 91 % de los correos fue clasificado correctamente.
  • NIR = 0.90: una regla trivial ya alcanzaría 90 % debido al desbalance.
  • Kappa = 0.521: existe una concordancia apreciable por encima de la esperada a partir de los marginales.

NIR y Kappa usan referencias diferentes:

  • NIR compara con predecir siempre la clase mayoritaria.
  • Kappa compara con la concordancia esperada según los marginales observados y predichos.

Kappa ayuda a contextualizar la accuracy, pero no sustituye el análisis de los tipos de error.

Ejemplo: sensibilidad, especificidad y falsa alarma

Para el spam:

\[ \text{Sensibilidad} = \frac{6}{6+4} = 0.60. \]

El filtro detecta el 60 % del spam, pero deja pasar a la bandeja de entrada el 40 % restante.

Para los correos legítimos:

\[ \text{Especificidad} = \frac{85}{85+5} = 0.944. \]

Por tanto, la falsa alarma es:

\[ FPR = 1-0.944 = 0.056. \]

El modelo protege mejor los correos legítimos que lo que detecta el spam: solo el 5.6 % de los correos legítimos es enviado erróneamente a spam, pero el 40 % del spam no es detectado.

Ejemplo: precisión y NPV

La precisión es:

\[ \text{Precisión} = \frac{6}{6+5} = 0.545. \]

De los correos que el filtro envía a spam, solo el 54.5 % realmente es spam.

El valor predictivo negativo es:

\[ NPV = \frac{85}{85+4} = 0.955. \]

De los correos que el filtro deja pasar a la bandeja de entrada, el 95.5 % realmente es legítimo.

El modelo es mucho más confiable cuando decide dejar pasar un correo que cuando decide enviarlo a spam.

Ejemplo: resumen de medidas

Las principales medidas obtenidas son:

Acc. \(\kappa\) Sens. Esp. PPV NPV BA \(F_1\) MCC
Valor .910 .521 .600 .944 .545 .955 .772 .571 .522

La lectura conjunta muestra un comportamiento claramente asimétrico:

  • la accuracy es alta, pero está muy próxima al NIR;
  • el desempeño sobre correos legítimos es elevado;
  • la detección de spam es bastante menor;
  • las predicciones positivas tienen una precisión moderada;
  • BA, F1, Kappa y MCC muestran un desempeño menos favorable que el sugerido por la accuracy aislada.

Ninguna de estas medidas contradice a las demás: cada una resume una característica distinta del clasificador.

Ejemplo: ¿qué significa cambiar \(\beta\)?

Para este modelo:

\[ \text{Precisión}=0.545, \qquad \text{Recall}=0.600. \]

En \(F_\beta\), el parámetro \(\beta\) controla la importancia relativa de ambas medidas.

  • \(\beta=1\): igual ponderación relativa.
  • \(\beta<1\): mayor peso a precisión.
  • \(\beta>1\): mayor peso a recall.

En particular:

\[ \beta=0.5 \]

hace que la precisión tenga aproximadamente cuatro veces el peso relativo del recall en la media armónica.

Por ello:

\[ F_{0.5}=0.556, \qquad F_1=0.571, \qquad F_2=0.588. \]

Ejemplo: ¿qué \(F_\beta\) tiene más sentido aquí?

Supongamos que la organización considera especialmente importante no enviar correos legítimos a la carpeta de spam.

Entonces interesa prestar mayor atención a:

  • la precisión de las predicciones de spam;
  • la especificidad / falsa alarma.

Si además se desea una única medida que combine precisión y recall, sería más coherente utilizar:

\[ F_{0.5}, \]

porque enfatiza más la precisión que el recall.

¿Por qué no \(F_{0.3}\)?

Porque \(\beta\) no se estima automáticamente a partir de los datos:

  • \(\beta=0.5\) implica una preferencia relativa de aproximadamente 4:1 por precisión frente a recall;
  • \(\beta=0.3\) implicaría una preferencia mucho más extrema, de aproximadamente 11:1.

La elección de \(\beta\) representa una decisión sobre qué queremos enfatizar; no constituye una traducción directa del costo de FP y FN.

Ejemplo: evaluación global del clasificador

El modelo presenta un desempeño desigual entre las dos clases.

Por un lado:

  • clasifica correctamente el 91 % de los correos;
  • identifica correctamente el 94.4 % de los correos legítimos;
  • solo el 5.6 % de los correos legítimos termina incorrectamente en spam.

Pero:

  • la accuracy apenas supera el NIR de 0.90;
  • solo detecta el 60 % del spam;
  • solo el 54.5 % de los correos enviados a spam realmente pertenece a esa clase.

Por tanto, el clasificador parece más eficaz para preservar correos legítimos que para detectar spam.

Si el objetivo principal es evitar que correos legítimos sean ocultados, el comportamiento puede ser razonable; si el objetivo es capturar la mayor cantidad posible de spam, todavía existe una debilidad importante.

Ejemplo: ¿cómo podría reportarse el resultado?

Una redacción posible en un informe o artículo sería:

El clasificador alcanzó una accuracy de 0.91, ligeramente superior al ratio no informativo de 0.90. El coeficiente Kappa fue 0.521 y el MCC 0.522. El desempeño fue asimétrico entre clases: la sensibilidad para detectar spam fue 0.60, mientras que la especificidad alcanzó 0.944. La precisión de las predicciones de spam fue 0.545 y el NPV 0.955. La balanced accuracy fue 0.772 y el F1 fue 0.571. En conjunto, el modelo mostró mayor capacidad para identificar correctamente correos legítimos que para detectar spam.

Reportar únicamente la accuracy habría ocultado una parte importante del comportamiento del clasificador.

Ejemplo: abandono laboral — contexto

Utilizaremos attrition, del paquete modeldata, un conjunto de datos desarrollado por IBM para ilustrar factores asociados con el abandono de trabajadores de una organización.

La variable respuesta es:

  • Attrition = "Yes": el trabajador dejó la organización;
  • Attrition = "No": el trabajador permaneció.

Consideraremos “Yes” como la clase positiva.

El objetivo será construir un clasificador que permita identificar trabajadores con mayor propensión al abandono a partir de características laborales y personales disponibles en la base.

La evaluación debe prestar especial atención a la clase Yes, que es considerablemente menos frecuente.

Ejemplo: preparación de los datos

Ver código en R
library(modeldata)
library(dplyr)
library(tidyr)
library(rsample)
library(yardstick)
library(gt)

data(attrition)

datos <- attrition |>
  select(
    Attrition,
    Age,
    BusinessTravel,
    DistanceFromHome,
    JobSatisfaction,
    MonthlyIncome,
    OverTime,
    StockOptionLevel,
    TotalWorkingYears,
    YearsAtCompany
  ) |>
  drop_na() |>
  mutate(
    Attrition = factor(Attrition, levels = c("No", "Yes"))
  )
Ver código en R
resumen_datos <- data.frame(
  Observaciones = nrow(datos),
  Predictores = ncol(datos) - 1,
  No = sum(datos$Attrition == "No"),
  Yes = sum(datos$Attrition == "Yes"),
  Porcentaje_Yes = mean(datos$Attrition == "Yes")
)

resumen_datos |>
  gt() |>
  cols_label(
    Observaciones = "n",
    Predictores = "Pred.",
    No = "No",
    Yes = "Yes",
    Porcentaje_Yes = "% Yes"
  ) |>
  fmt_percent(
    columns = Porcentaje_Yes,
    decimals = 1
  )
n Pred. No Yes % Yes
1470 9 1233 237 16.1%

La distribución de la respuesta muestra un desbalance importante: la mayoría de los trabajadores permanece en la organización.

Por ello, una accuracy elevada podría obtenerse simplemente clasificando bien a la clase mayoritaria.

Ejemplo: variables utilizadas

Para mantener el ejemplo manejable utilizaremos nueve predictores:

Variable Descripción
Age Edad
BusinessTravel Frecuencia de viajes laborales
DistanceFromHome Distancia al trabajo
JobSatisfaction Satisfacción laboral
MonthlyIncome Ingreso mensual
OverTime Realización de horas extra
StockOptionLevel Nivel de opciones sobre acciones
TotalWorkingYears Experiencia laboral total
YearsAtCompany Años en la organización

El propósito del ejemplo no es buscar el mejor modelo posible, sino mostrar cómo evaluar las clases predichas mediante las medidas estudiadas.

Ejemplo: partición entrenamiento–prueba

Reservaremos el 25 % de las observaciones para prueba.

La partición se realiza de manera estratificada para conservar aproximadamente la proporción de abandono en ambos conjuntos.

Ver código en R
set.seed(666)

particion <- initial_split(
  datos,
  prop = 0.75,
  strata = Attrition
)

entrenamiento <- training(particion)
prueba <- testing(particion)
Ver código en R
resumen_particion <- bind_rows(
  Entrenamiento = entrenamiento |>
    summarise(
      n = n(),
      Yes = sum(Attrition == "Yes"),
      Prop_Yes = mean(Attrition == "Yes")
    ),
  Prueba = prueba |>
    summarise(
      n = n(),
      Yes = sum(Attrition == "Yes"),
      Prop_Yes = mean(Attrition == "Yes")
    ),
  .id = "Conjunto"
)

resumen_particion |>
  gt() |>
  cols_label(
    Conjunto = "Conjunto",
    n = "n",
    Yes = "Abandono",
    Prop_Yes = "% abandono"
  ) |>
  fmt_percent(
    columns = Prop_Yes,
    decimals = 1
  )
Conjunto n Abandono % abandono
Entrenamiento 1101 177 16.1%
Prueba 369 60 16.3%

El conjunto de prueba no interviene en la estimación del modelo y se utiliza posteriormente para evaluar sus predicciones.

Ejemplo: entrenamiento del modelo logístico

Ajustaremos un modelo de regresión logística utilizando únicamente las observaciones de entrenamiento:

Ver código en R
modelo <- glm(
  Attrition ~ Age +
    BusinessTravel +
    DistanceFromHome +
    JobSatisfaction +
    MonthlyIncome +
    OverTime +
    StockOptionLevel +
    TotalWorkingYears +
    YearsAtCompany,
  data = entrenamiento,
  family = binomial
)

El modelo estima, para cada trabajador:

\[ \widehat P(\text{Attrition = Yes}\mid\mathbf{x}). \]

En esta presentación no nos interesa interpretar los coeficientes del modelo, sino utilizar sus predicciones para estudiar cómo evaluar un clasificador.

Ejemplo: predicciones sobre el conjunto de prueba

Obtenemos las probabilidades estimadas para las observaciones que no fueron utilizadas durante el entrenamiento:

Ver código en R
prueba <- prueba |>
  mutate(
    prob_yes = predict(
      modelo,
      newdata = prueba,
      type = "response"
    )
  )

Utilizando inicialmente un punto de corte de:

\[ c=0.50, \]

obtenemos la clase predicha:

Ver código en R
prueba <- prueba |>
  mutate(
    pred = factor(
      if_else(prob_yes >= 0.50, "Yes", "No"),
      levels = c("No", "Yes")
    )
  )

Por tanto:

\[ \widehat P(\text{Yes}\mid\mathbf{x}) \longrightarrow c=0.50 \longrightarrow \widehat Y. \]

Ejemplo: matriz de confusión en prueba

Calculamos la matriz utilizando yardstick:

Ver código en R
cm <- conf_mat(
  prueba,
  truth = Attrition,
  estimate = pred
)

tabla_cm <- as.data.frame.matrix(cm$table)

tabla_cm |>
  tibble::rownames_to_column("Predicción") |>
  gt() |>
  tab_header(
    title = "Matriz de confusión"
  ) |>
  cols_label(
    Predicción = "Predicho",
    No = "Observado: No",
    Yes = "Observado: Yes"
  )
Matriz de confusión
Predicho Observado: No Observado: Yes
No 297 46
Yes 12 14

En este contexto:

  • TP: se predice abandono y el trabajador efectivamente abandona;
  • FP: se predice abandono, pero el trabajador permanece;
  • FN: se predice permanencia, pero el trabajador abandona;
  • TN: se predice permanencia y el trabajador permanece.

Los FN son especialmente importantes si el objetivo es anticipar posibles abandonos.

Ejemplo: cálculo de las métricas con yardstick

yardstick también permite obtener directamente las medidas estudiadas.

Ver código en R
obs  <- prueba$Attrition
pred <- prueba$pred

acc <- accuracy_vec(obs, pred)

nir <- max(prop.table(table(obs))) |>
  as.numeric()

kappa <- kap_vec(obs, pred)

sensibilidad <- sens_vec(
  obs, pred,
  event_level = "second"
)

especificidad <- spec_vec(
  obs, pred,
  event_level = "second"
)

fpr <- 1 - especificidad

precision <- ppv_vec(
  obs, pred,
  event_level = "second"
)

npv <- npv_vec(
  obs, pred,
  event_level = "second"
)

ba <- bal_accuracy_vec(
  obs, pred,
  event_level = "second"
)

f1 <- f_meas_vec(
  obs, pred,
  beta = 1,
  event_level = "second"
)

mcc_val <- mcc_vec(obs, pred)

La clase positiva se especifica mediante:

event_level = "second"

porque Yes es el segundo nivel del factor Attrition.

Ejemplo: resumen global del desempeño

Ver código en R
metricas_globales <- data.frame(
  Acc. = acc,
  NIR = nir,
  Kappa = kappa,
  BA = ba,
  F1 = f1,
  MCC = mcc_val,
  check.names = FALSE
)

metricas_globales |>
  gt() |>
  fmt_number(
    columns = everything(),
    decimals = 3
  )
Acc. NIR Kappa BA F1 MCC
0.843 0.837 0.252 0.597 0.326 0.280

La accuracy fue 0.843, frente a un NIR de 0.837. Es decir, el modelo supera en 0.5 puntos porcentuales a la regla trivial de predecir que todos los trabajadores permanecerán.

Sin embargo, al dar el mismo peso a ambas clases, la balanced accuracy desciende a 0.597, lo que evidencia un desempeño desigual entre permanencia y abandono.

El Kappa = 0.252 y el MCC = 0.280 también muestran que el desempeño global es bastante menos favorable de lo que podría sugerir la accuracy por sí sola.

Para la clase de abandono, F1 = 0.326, por lo que el equilibrio entre detectar trabajadores que abandonan y evitar falsas alertas es todavía limitado.

En este problema, reportar únicamente la accuracy sobreestimaría la impresión del desempeño del clasificador. En un problema desbalanceado, una accuracy elevada no es suficiente para concluir que el modelo identifica adecuadamente los casos de abandono.

Ejemplo: desempeño sobre las clases

Ver código en R
metricas_clase <- data.frame(
  Sens. = sensibilidad,
  Esp. = especificidad,
  FPR = fpr,
  PPV = precision,
  NPV = npv,
  check.names = FALSE
)

metricas_clase |>
  gt() |>
  fmt_number(
    columns = everything(),
    decimals = 3
  )
Sens. Esp. FPR PPV NPV
0.233 0.961 0.039 0.538 0.866

El modelo detecta el 23.3 % de los trabajadores que efectivamente abandonan la organización; por tanto, aproximadamente el 76.7 % de los abandonos no es identificado.

En contraste, reconoce correctamente al 96.1 % de quienes permanecen. La tasa de falsas alertas es de 3.9 %.

Además, de los trabajadores señalados por el modelo como posibles abandonos, solo el 53.8 % efectivamente pertenece a esa clase; mientras que, entre quienes se predice que permanecerán, el 86.6 % realmente permanece.

El modelo es considerablemente más eficaz para reconocer trabajadores que permanecen que para identificar anticipadamente los casos de abandono.

Ejemplo: evaluación con caret

Una alternativa clásica en R es caret. Su función confusionMatrix() produce directamente la matriz de confusión y un amplio conjunto de medidas de evaluación.

Ver código en R
library(caret)

confusionMatrix(
  data = prueba$pred,
  reference = prueba$Attrition,
  positive = "Yes",
  mode = "everything"
)
Confusion Matrix and Statistics

          Reference
Prediction  No Yes
       No  297  46
       Yes  12  14
                                          
               Accuracy : 0.8428          
                 95% CI : (0.8016, 0.8784)
    No Information Rate : 0.8374          
    P-Value [Acc > NIR] : 0.4222          
                                          
                  Kappa : 0.252           
                                          
 Mcnemar's Test P-Value : 1.47e-05        
                                          
            Sensitivity : 0.23333         
            Specificity : 0.96117         
         Pos Pred Value : 0.53846         
         Neg Pred Value : 0.86589         
              Precision : 0.53846         
                 Recall : 0.23333         
                     F1 : 0.32558         
             Prevalence : 0.16260         
         Detection Rate : 0.03794         
   Detection Prevalence : 0.07046         
      Balanced Accuracy : 0.59725         
                                          
       'Positive' Class : Yes             
                                          

Ejemplo: yardstick y caret

Ambos paquetes permiten evaluar una clasificación, pero presentan los resultados de manera diferente.

yardstick caret
Métricas mediante funciones independientes confusionMatrix() reúne muchas métricas
Se integra con tidymodels Ecosistema clásico de modelamiento con caret
Incluye directamente MCC confusionMatrix() no reporta MCC
Facilita construir exactamente el resumen deseado Proporciona una salida diagnóstica muy completa
Se extenderá después a ROC, PR-AUC y métricas probabilísticas También dispone de herramientas para ROC y otras medidas

En este curso utilizaremos principalmente yardstick para construir resúmenes específicos, pero es importante reconocer caret::confusionMatrix() porque sigue siendo una forma muy práctica de inspeccionar rápidamente el desempeño de un clasificador.

Ejemplo: ¿cómo reportar el modelo?

Una redacción posible sería:

En el conjunto de prueba, el modelo alcanzó una accuracy de 0.843, frente a un ratio no informativo de 0.837. El coeficiente Kappa fue 0.252 y el MCC 0.280. Para la clase de abandono, la sensibilidad fue 0.233 y la precisión 0.538, mientras que la especificidad fue 0.961. La balanced accuracy alcanzó 0.597 y F1 fue 0.326.

La conclusión no debe basarse únicamente en cuál métrica tiene el valor numérico más alto.

El desempeño debe juzgarse considerando simultáneamente la capacidad global de clasificación y, especialmente, la capacidad para identificar la clase minoritaria de abandono.

Hasta aquí: clasificación binaria

Hasta ahora hemos evaluado problemas con dos clases, distinguiendo una clase positiva y una clase negativa.

En un problema con más de dos categorías aparecen nuevas preguntas:

  • ¿cómo se extiende la matriz de confusión?
  • ¿cómo evaluamos el desempeño sobre una clase particular?
  • ¿cómo resumimos el desempeño cuando existen varias clases?
  • ¿qué significa promediar métricas entre clases?

Antes de pasar a la evaluación de scores y probabilidades, extenderemos estas ideas al caso de clasificación multiclase.

Clasificación multiclase

En un problema multiclase, la variable respuesta puede tomar más de dos categorías:

\[ Y\in\{1,2,\ldots,C\}, \qquad C>2. \]

Seguimos evaluando:

\[ \text{clase observada} \qquad \text{vs.} \qquad \text{clase predicha}. \]

La diferencia es que ya no existe una única clase positiva y una única clase negativa.

En multiclase debemos distinguir entre desempeño global y desempeño específico de cada clase.

Matriz de confusión multiclase

Para \(C\) clases, la matriz de confusión tiene dimensión:

\[ C\times C. \]

Por ejemplo:

Observada A Observada B Observada C
Predicha A \(n_{AA}\) \(n_{AB}\) \(n_{AC}\)
Predicha B \(n_{BA}\) \(n_{BB}\) \(n_{BC}\)
Predicha C \(n_{CA}\) \(n_{CB}\) \(n_{CC}\)

La diagonal representa clasificaciones correctas y las celdas fuera de la diagonal indican qué categorías se están confundiendo entre sí.

La accuracy conserva su definición:

\[ \text{Accuracy} = \frac{\sum_{c=1}^{C}n_{cc}}{N}. \]

Dos clasificadores pueden tener la misma accuracy y cometer errores entre categorías completamente diferentes (Gorodkin, 2004; Opitz, 2024).

Evaluación de una clase: one-vs-rest

Para evaluar una clase particular \(c\), podemos considerarla como positiva y agrupar las demás como negativas:

\[ c \qquad \text{vs.} \qquad \text{resto}. \]

Así obtenemos para cada clase:

\[ TP_c,\qquad FP_c,\qquad FN_c,\qquad TN_c \]

y podemos calcular:

  • sensibilidad o recall;
  • precisión;
  • especificidad;
  • F1.

Por ejemplo:

Clase Recall Precisión F1
A 0.92 0.88 0.90
B 0.61 0.75 0.67
C 0.80 0.70 0.75

Una buena medida global puede ocultar que una categoría particular presenta un desempeño claramente inferior (Farhadpour et al., 2024; Opitz, 2024).

¿Cómo resumir el desempeño entre clases?

Cuando tenemos una medida \(M_c\) para cada clase podemos resumirla de diferentes maneras.

Macro promedio

\[ M_{\text{macro}} = \frac{1}{C}\sum_{c=1}^{C}M_c. \]

Cada clase recibe el mismo peso.

Promedio ponderado

\[ M_{\text{weighted}} = \sum_{c=1}^{C}\frac{n_c}{N}M_c. \]

Cada clase recibe un peso proporcional a su frecuencia.

La forma de promediar determina qué clases tienen mayor influencia sobre el resultado final (Farhadpour et al., 2024; Opitz, 2024).

Macro-F1

El macro-F1 se obtiene calculando primero F1 para cada clase:

\[ F1_1,\;F1_2,\ldots,F1_C \]

y luego tomando su promedio:

\[ F1_{\text{macro}} = \frac{1}{C}\sum_{c=1}^{C}F1_c. \]

Para el ejemplo anterior:

\[ F1_{\text{macro}} = \frac{0.90+0.67+0.75}{3} = 0.773. \]

Cada clase contribuye por igual, por lo que una clase poco frecuente con desempeño bajo no queda ocultada por las clases mayoritarias.

Macro-F1 significa promedio de los F1 por clase; no debe confundirse con calcular F1 a partir de la precisión y recall promedios (Opitz & Burst, 2019).

¿Qué ocurre con el promedio ponderado?

Suponga que la clase A representa el 80 % de las observaciones y las clases B y C son mucho menos frecuentes.

Un F1 ponderado:

\[ F1_{\text{weighted}} = \sum_{c=1}^{C}\frac{n_c}{N}F1_c \]

estará fuertemente influido por el desempeño de A.

Por tanto:

  • Macro-F1: todas las clases tienen el mismo peso.
  • Weighted-F1: las clases frecuentes tienen mayor peso.

Un weighted-F1 elevado puede coexistir con un desempeño pobre en una clase minoritaria (Farhadpour et al., 2024).

Si las clases minoritarias son relevantes, conviene examinar las métricas por clase y no depender únicamente del promedio ponderado.

Micro-F1: una simplificación importante

El promedio micro agrega primero los TP, FP y FN de todas las clases y después calcula la medida.

En clasificación multiclase single-label, cuando cada observación pertenece a una sola clase y todas las clases son incluidas:

\[ \text{Micro-Precision} = \text{Micro-Recall} = F1_{\text{micro}} = \text{Accuracy}. \]

Por ejemplo, si:

\[ \text{Accuracy}=0.82, \]

entonces:

\[ F1_{\text{micro}}=0.82. \]

En este contexto, micro-F1 no aporta información adicional a la accuracy (Farhadpour et al., 2024).

Balanced accuracy en multiclase

La balanced accuracy se obtiene promediando el recall de todas las clases:

\[ \text{Balanced Accuracy} = \frac{1}{C} \sum_{c=1}^{C} \text{Recall}_c. \]

Por tanto, en clasificación multiclase nominal:

\[ \boxed{ \text{Balanced Accuracy} = \text{Macro-Recall} } \]

A diferencia de la accuracy:

\[ \text{Accuracy} = \sum_{c=1}^{C} \frac{n_c}{N} \text{Recall}_c, \]

la balanced accuracy asigna el mismo peso a cada clase (Brodersen et al., 2010; Farhadpour et al., 2024).

Es especialmente informativa cuando no queremos que las clases más frecuentes dominen la evaluación.

Medidas globales multiclase

Además de la accuracy, pueden utilizarse medidas globales que consideran toda la matriz de confusión.

Medida Lectura
Accuracy Proporción total correctamente clasificada
Kappa Concordancia respecto de la esperada según los marginales
MCC multiclase Asociación global entre clases observadas y predichas

Kappa conserva las limitaciones ya discutidas respecto de su dependencia de los marginales (Byrt et al., 1993; Delgado & Tibau, 2019).

MCC puede extenderse al caso multiclase utilizando información de toda la matriz (Gorodkin, 2004; Jurman et al., 2012).

Kappa y MCC pueden complementar la evaluación, pero ninguno sustituye la matriz de confusión ni las medidas por clase.

¿Qué conviene reportar en multiclase?

Una evaluación básica debería mostrar:

Pregunta Información
¿Qué categorías se confunden? Matriz de confusión
¿Cuál es el desempeño global? Accuracy
¿Cómo funciona el modelo en cada categoría? Recall, precisión y F1 por clase
¿Todas las clases deben pesar igual? Macro-F1 / Balanced accuracy
¿Queremos reflejar la frecuencia observada? Promedio ponderado
¿Queremos un resumen global adicional? MCC o Kappa, cuando sea útil

Una única medida global puede ocultar errores importantes en categorías específicas (Farhadpour et al., 2024; Opitz, 2024).

Clasificación ordinal: no todos los errores son iguales

Si las categorías poseen un orden natural:

\[ \text{bajo}<\text{medio}<\text{alto}, \]

puede resultar razonable distinguir entre errores cercanos y errores extremos.

Por ejemplo:

\[ \text{bajo}\rightarrow\text{medio} \]

puede ser menos grave que:

\[ \text{bajo}\rightarrow\text{alto}. \]

Una posibilidad es utilizar Kappa ponderado, asignando diferentes pesos a los desacuerdos según la distancia entre las categorías (Cohen, 1968).

Los pesos deben justificarse: el hecho de que las categorías estén ordenadas no implica automáticamente que las distancias entre ellas sean iguales (Yılmaz & Demirhan, 2023).

De las clases predichas a la discriminación

Hasta aquí hemos evaluado clases predichas, tanto en clasificación binaria como multiclase.

Todas las medidas anteriores parten de una decisión de clasificación ya realizada y, por tanto, de una regla de decisión concreta.

Sin embargo, muchos clasificadores producen primero un score o una probabilidad, antes de asignar una clase.

Para estudiar esta nueva dimensión volveremos inicialmente al caso binario.

¿Qué tan bien ordena o discrimina el modelo entre casos positivos y negativos sin depender de un único punto de corte?

De las clases predichas a la discriminación

Hasta aquí hemos evaluado clases predichas, tanto en clasificación binaria como multiclase.

Todas las medidas anteriores parten de una decisión de clasificación ya realizada y, por tanto, de una regla de decisión concreta.

Sin embargo, muchos clasificadores producen primero un score o una probabilidad, antes de asignar una clase.

Para estudiar esta nueva dimensión volveremos inicialmente al caso binario.

¿Qué tan bien ordena o discrimina el modelo entre casos positivos y negativos sin depender de un único punto de corte?

Del punto de corte a la curva ROC

En clasificación binaria, un score o una probabilidad puede convertirse en una clase mediante un punto de corte \(c\):

\[ \hat Y= \begin{cases} 1, & s\geq c,\\ 0, & s<c. \end{cases} \]

Al modificar \(c\), cambia la matriz de confusión y, por tanto:

\[ \text{Sensibilidad}(c) \qquad\text{y}\qquad \text{FPR}(c)=1-\text{Especificidad}(c). \]

  • al disminuir el umbral, normalmente aumentan TPR y FPR;
  • al aumentarlo, normalmente disminuyen ambos.

La curva ROC describe el conjunto de decisiones que puede producir un mismo score al recorrer diferentes puntos de corte (Keilwagen et al., 2014).

Ejemplo: del score a diferentes decisiones

Supongamos seis observaciones ordenadas de mayor a menor score:

Caso Clase observada Score
1 Positiva 0.95
2 Negativa 0.80
3 Positiva 0.70
4 Negativa 0.55
5 Positiva 0.40
6 Negativa 0.20

Si fijamos un umbral \(c\), clasificamos como positiva toda observación que cumpla:

\[ s\geq c. \]

La misma ordenación puede producir diferentes matrices de confusión dependiendo del punto de corte.

Ejemplo: ¿qué ocurre al mover el umbral?

Umbral alto

\[ c=0.90 \]

Solo el caso 1 se clasifica como positivo.

  • pocos positivos predichos;
  • FPR muy bajo;
  • también pueden perderse positivos reales.

Umbral intermedio

\[ c=0.60 \]

Los casos 1, 2 y 3 se clasifican como positivos.

  • aumenta la sensibilidad;
  • aparece también un falso positivo.

Umbral bajo

\[ c=0.30 \]

Los casos 1 a 5 se clasifican como positivos.

  • sensibilidad elevada;
  • también aumenta la falsa alarma.

Reducir el umbral facilita detectar positivos, pero normalmente aumenta también el número de negativos clasificados como positivos.

Ejemplo: puntos de la curva ROC

Para cada posible umbral calculamos:

\[ TPR=\text{Sensibilidad}, \qquad FPR=1-\text{Especificidad}. \]

Umbral TP FP FN TN TPR FPR
\(>0.95\) 0 0 3 3 0.00 0.00
\(0.95\) 1 0 2 3 0.33 0.00
\(0.80\) 1 1 2 2 0.33 0.33
\(0.70\) 2 1 1 2 0.67 0.33
\(0.55\) 2 2 1 1 0.67 0.67
\(0.40\) 3 2 0 1 1.00 0.67
\(0.20\) 3 3 0 0 1.00 1.00

Cada fila genera un punto:

\[ (FPR,TPR). \]

Ejemplo: construcción de la curva ROC

Ver código en R
library(ggplot2)

roc_ej <- data.frame(
  FPR = c(0, 0, 1/3, 1/3, 2/3, 2/3, 1),
  TPR = c(0, 1/3, 1/3, 2/3, 2/3, 1, 1)
)

ggplot(roc_ej, aes(x = FPR, y = TPR)) +
  geom_step(direction = "vh", linewidth = 1) +
  geom_point(size = 3) +
  geom_abline(
    intercept = 0,
    slope = 1,
    linetype = "dashed"
  ) +
  coord_equal(
    xlim = c(0, 1),
    ylim = c(0, 1)
  ) +
  labs(
    x = "Tasa de falsos positivos (FPR)",
    y = "Sensibilidad (TPR)"
  ) +
  theme_minimal(base_size = 14)

Cada nuevo punto aparece cuando el umbral cruza el score de una observación.

La curva ROC resume todas estas decisiones posibles, no una sola clasificación.

Curva ROC

La curva ROC representa, para los distintos puntos de corte:

\[ \text{FPR} = 1-\text{Especificidad} \]

en el eje horizontal y:

\[ \text{TPR} = \text{Sensibilidad} \]

en el eje vertical.

Cada punto de la curva corresponde a una regla de clasificación diferente.

Un clasificador con buena capacidad de discriminación tiende a alcanzar una sensibilidad elevada manteniendo una tasa de falsos positivos relativamente baja.

ROC evalúa principalmente la capacidad del score para separar u ordenar positivos y negativos, no una clasificación obtenida con un único umbral.

Regiones de la curva ROC

Ver código en R
roc_ref <- data.frame(
  FPR = seq(0, 1, length.out = 200)
)

ggplot(roc_ref, aes(x = FPR)) +
  geom_line(
    aes(y = FPR),
    linetype = "dashed"
  ) +
  geom_point(
    data = data.frame(FPR = 0, TPR = 1),
    aes(x = FPR, y = TPR),
    size = 4
  ) +
  annotate(
    "text",
    x = 0.12, y = 0.95,
    label = "Discriminación ideal"
  ) +
  annotate(
    "text",
    x = 0.70, y = 0.62,
    label = "Sin discriminación"
  ) +
  coord_equal(
    xlim = c(0, 1),
    ylim = c(0, 1)
  ) +
  labs(
    x = "Tasa de falsos positivos (FPR)",
    y = "Sensibilidad (TPR)"
  ) +
  theme_minimal(base_size = 14)
  • \((0,0)\): ninguna observación es clasificada como positiva.
  • \((1,1)\): todas las observaciones son clasificadas como positivas.
  • \((0,1)\): separación perfecta.
  • la diagonal representa ausencia de capacidad discriminativa.

Regiones de la Curva ROC

El equilibrio entre sensibilidad y especificidad

Reducir el punto de corte permite clasificar más observaciones como positivas:

\[ \downarrow c \quad\Rightarrow\quad \uparrow\text{Sensibilidad} \quad\text{y normalmente}\quad \uparrow\text{FPR}. \]

Por el contrario:

\[ \uparrow c \quad\Rightarrow\quad \downarrow\text{Sensibilidad} \quad\text{y normalmente}\quad \downarrow\text{FPR}. \]

Por tanto, no existe un único punto de corte que maximice simultáneamente sensibilidad y especificidad.

El punto adecuado depende de qué errores se desean controlar y de las consecuencias de la decisión (Whitney et al., 2022).

Comparación de curvas ROC

Ver código en R
fpr <- seq(0, 1, length.out = 200)

curvas <- data.frame(
  FPR = rep(fpr, 3),
  TPR = c(
    fpr^0.25,
    fpr^0.50,
    fpr
  ),
  Modelo = rep(
    c("Modelo A", "Modelo B", "Sin discriminación"),
    each = length(fpr)
  )
)

ggplot(curvas, aes(x = FPR, y = TPR, linetype = Modelo)) +
  geom_line(linewidth = 1) +
  coord_equal(
    xlim = c(0, 1),
    ylim = c(0, 1)
  ) +
  labs(
    x = "Tasa de falsos positivos (FPR)",
    y = "Sensibilidad (TPR)",
    linetype = NULL
  ) +
  theme_minimal(base_size = 14) +
  theme(
    legend.position = "bottom"
  )

Cuando una curva domina a otra, el modelo consigue una sensibilidad mayor para una misma tasa de falsos positivos.

Si las curvas se cruzan, la elección puede depender de la región operativa relevante para el problema.

¿Es 0.5 el punto de corte natural?

No necesariamente.

El valor:

\[ c=0.5 \]

puede ser una regla inicial cuando la salida tiene una interpretación probabilística apropiada y las condiciones de decisión lo justifican.

Pero el umbral puede cambiar cuando:

  • FP y FN tienen consecuencias diferentes;
  • cambia la prevalencia de la población objetivo;
  • se exige una sensibilidad o especificidad mínima;
  • existe una capacidad limitada para actuar sobre las predicciones.

Un score ni siquiera necesita ser una probabilidad, por lo que un punto de corte de 0.5 puede carecer completamente de significado (Smits, 2010; Whitney et al., 2022).

Índice de Youden

Una forma clásica de resumir el equilibrio entre sensibilidad y especificidad es:

\[ J = \text{Sensibilidad} + \text{Especificidad} -1. \]

Equivalentemente:

\[ J = TPR-FPR. \]

El punto que maximiza \(J\) produce la mayor separación vertical respecto de la diagonal de referencia de la curva ROC.

Maximizar \(J\) puede ser apropiado cuando se desea dar el mismo peso a las tasas condicionales de error de ambas clases, pero no determina un umbral universalmente óptimo (Smits, 2010).

¿Existe un punto de corte óptimo?

No existe un punto de corte universalmente óptimo.

Criterios como:

  • maximizar el índice de Youden;
  • minimizar la distancia a \((0,1)\);
  • buscar visualmente el “codo” de la curva;

pueden producir puntos de corte diferentes (Zou et al., 2013).

En particular, el punto más cercano a \((0,1)\) optimiza un criterio geométrico específico, no necesariamente las consecuencias reales de FP y FN.

El umbral debería seleccionarse según el objetivo de decisión: costos, beneficios, prevalencia objetivo o restricciones operativas.

Área bajo la curva ROC: AUC

El ROC AUC resume la capacidad de discriminación del score a través de todos los puntos de corte.

Una interpretación particularmente útil es:

AUC es la probabilidad de que una observación positiva seleccionada al azar reciba un score mayor que una observación negativa seleccionada al azar.

Con empates, la interpretación habitual asigna medio crédito:

\[ AUC = P(S_+>S_-) + \frac{1}{2}P(S_+=S_-). \]

(Carrington et al., 2020; Richardson et al., 2024)

Por tanto:

  • \(AUC=1\): ordenamiento perfecto;
  • \(AUC=0.5\): discriminación equivalente al azar;
  • \(AUC<0.5\): el ordenamiento está predominantemente invertido.

¿Qué significa que AUC sea independiente del umbral?

AUC no requiere seleccionar un único punto de corte.

Sin embargo, la curva ROC se construye precisamente recorriendo los distintos puntos de corte.

Por ello, es más preciso afirmar:

AUC resume la discriminación a través de los umbrales, en lugar de evaluar el desempeño en un único umbral (Richardson et al., 2024).

Además, cualquier transformación estrictamente creciente del score conserva el orden de las observaciones y, por tanto, conserva ROC y AUC.

Esto muestra que AUC evalúa ranking, no la calidad numérica de las probabilidades.

Limitaciones de ROC AUC

Un único valor de AUC puede ocultar diferencias importantes.

Dos modelos pueden tener:

\[ AUC_A\approx AUC_B \]

y, sin embargo, presentar sensibilidades muy diferentes en la región de FPR que realmente interesa para una aplicación.

También pueden existir curvas ROC que se cruzan.

Por ello:

No conviene interpretar AUC mediante umbrales universales como “0.7 aceptable”, “0.8 bueno” o “0.9 excelente” sin considerar el problema y la región operativa relevante (Carrington et al., 2020).

El AUC debe acompañarse de la curva y, cuando exista una decisión concreta, del desempeño en el punto de corte utilizado.

ROC y desbalance de clases

Sensibilidad y FPR están condicionadas a la clase observada.

Por ello, si únicamente cambia la prevalencia de las clases mientras se mantienen las distribuciones condicionales de los scores:

\[ TPR,\quad FPR,\quad ROC,\quad AUC \]

no cambian (Richardson et al., 2024).

Pero esto no significa que el efecto operativo sea el mismo.

Con una clase positiva muy rara, incluso un FPR pequeño puede producir muchos falsos positivos en relación con los verdaderos positivos.

ROC AUC puede seguir midiendo correctamente discriminación y, al mismo tiempo, resultar insuficiente para describir el rendimiento de las alertas positivas.

Ejemplo: construcción de la curva Precision–Recall

Con el mismo ejemplo:

Umbral TP FP Recall Precisión
\(0.95\) 1 0 0.33 1.00
\(0.80\) 1 1 0.33 0.50
\(0.70\) 2 1 0.67 0.67
\(0.55\) 2 2 0.67 0.50
\(0.40\) 3 2 1.00 0.60
\(0.20\) 3 3 1.00 0.50

Cada punto representa:

\[ (\text{Recall},\text{Precisión}). \]

Utilizamos exactamente los mismos puntos de corte que generaron la curva ROC.

Ejemplo: curva Precision–Recall

Ver código en R
library(ggplot2)

pr_ej <- data.frame(
  Recall = c(1/3, 1/3, 2/3, 2/3, 1, 1),
  Precision = c(1, 0.5, 2/3, 0.5, 0.6, 0.5)
)

ggplot(pr_ej, aes(x = Recall, y = Precision)) +
  geom_step(direction = "vh", linewidth = 1) +
  geom_point(size = 3) +
  geom_hline(
    yintercept = 0.5,
    linetype = "dashed"
  ) +
  coord_cartesian(
    xlim = c(0, 1),
    ylim = c(0, 1)
  ) +
  labs(
    x = "Recall",
    y = "Precisión"
  ) +
  theme_minimal(base_size = 14)

En este ejemplo:

\[ \pi=\frac{3}{6}=0.50. \]

La línea horizontal punteada corresponde a la prevalencia de la clase positiva.

¿Cómo se interpreta una curva Precision–Recall?

Cada punto responde simultáneamente a dos preguntas:

Eje horizontal: Recall

\[ \text{Recall}=\frac{TP}{TP+FN} \]

¿Qué proporción de todos los positivos reales estamos detectando?

Eje vertical: Precisión

\[ \text{Precisión}=\frac{TP}{TP+FP} \]

De todos los casos que clasificamos como positivos, ¿qué proporción realmente es positiva?

Por tanto, buscamos simultáneamente:

\[ \text{Recall alto} \qquad\text{y}\qquad \text{Precisión alta}. \]

En una curva PR, una posición hacia la zona superior derecha representa una combinación más favorable de recall y precisión (Saito & Rehmsmeier, 2015).

¿Cómo comparar puntos de una curva PR?

Supongamos dos puntos posibles:

\[ A=(0.50,\;0.90) \]

\[ B=(0.80,\;0.60). \]

Punto A

Detectamos el 50 % de los positivos, pero el 90 % de las predicciones positivas son correctas.

Punto B

Detectamos el 80 % de los positivos, pero solo el 60 % de las predicciones positivas son correctas.

No existe una elección universalmente mejor:

  • \(A\) prioriza precisión;
  • \(B\) prioriza recall.

La curva muestra las diferentes combinaciones disponibles al modificar el punto de corte.

¿Qué ocurre cuando disminuye el umbral?

Al disminuir el umbral se clasifican más observaciones como positivas.

Por ello, generalmente:

\[ \downarrow c \quad\Rightarrow\quad \uparrow \text{Recall}. \]

Sin embargo, al incorporar más observaciones también pueden incorporarse falsos positivos.

Por eso la precisión:

\[ \text{Precisión}=\frac{TP}{TP+FP} \]

puede disminuir.

A diferencia del recall, la precisión no tiene por qué cambiar monótonamente al recorrer los umbrales.

La curva PR representa precisamente este compromiso entre:

\[ \text{detectar más positivos} \quad\text{vs.}\quad \text{mantener alta la calidad de las alertas positivas}. \]

(Keilwagen et al., 2014; Saito & Rehmsmeier, 2015)

¿Cómo comparar dos curvas PR?

Para un mismo nivel de recall, preferimos una mayor precisión.

Por ejemplo:

\[ \text{Recall}=0.80 \]

Si:

\[ P_A=0.85 \qquad\text{y}\qquad P_B=0.60, \]

el modelo A identifica la misma proporción de positivos reales, pero genera una proporción menor de falsos positivos entre sus alertas.

De forma equivalente, para una misma precisión, es preferible el modelo que consigue mayor recall.

Una curva que se mantiene por encima de otra ofrece mejores combinaciones precisión–recall en esas regiones.

La referencia de una curva PR

Aquí aparece una diferencia fundamental respecto de ROC.

Para un ranking sin información, la precisión esperada corresponde a la prevalencia de la clase positiva:

\[ \text{Baseline}_{PR} = \pi=P(Y=1). \]

Por ejemplo, si:

\[ \pi=0.05, \]

solo el 5 % de la población pertenece a la clase positiva.

Una selección sin capacidad discriminativa produciría entonces aproximadamente:

\[ \text{Precisión}=0.05. \]

La línea de referencia de PR no es siempre 0.5: depende de la prevalencia de la clase positiva (Richardson et al., 2024; Saito & Rehmsmeier, 2015).

¿Por qué importa esto cuando los positivos son poco frecuentes?

Supongamos:

\[ N=10\,000, \qquad \pi=0.01, \]

por lo que existen 100 positivos y 9 900 negativos.

Un clasificador alcanza:

\[ TPR=0.80, \qquad FPR=0.05. \]

¿Cuántos casos genera?

\[ TP=0.80(100)=80 \]

\[ FP=0.05(9\,900)=495 \]

¿Cuál es la precisión?

\[ \text{Precisión} = \frac{80}{80+495} = 0.139 \]

El modelo detecta el 80 % de los positivos, pero solo el 13.9 % de sus predicciones positivas son verdaderos positivos.

Cuando la clase positiva es muy rara, incluso una FPR pequeña puede generar muchos falsos positivos en relación con los verdaderos positivos (Ozenne et al., 2015; Saito & Rehmsmeier, 2015).

ROC y PR ante diferentes prevalencias

Supongamos que el modelo conserva exactamente la misma discriminación, pero se utiliza en dos poblaciones:

\[ \pi_1=0.50 \qquad\text{y}\qquad \pi_2=0.05. \]

Si las distribuciones del score condicionadas a cada clase permanecen iguales:

ROC

\[ TPR,\quad FPR,\quad ROC,\quad AUC \]

pueden permanecer iguales.

Precision–Recall

La precisión sí cambia porque:

\[ \text{Precisión} = \frac{\pi\,TPR} {\pi\,TPR+(1-\pi)FPR}. \]

Por tanto, la curva PR también cambia.

ROC caracteriza la discriminación entre las clases; PR incorpora además la frecuencia con la que aparece la clase positiva en la población (Richardson et al., 2024).

Entonces, ¿qué información añade PR?

La curva ROC responde principalmente:

Para cada FPR, ¿qué TPR puede alcanzar el modelo?

La curva PR responde:

Para cada nivel de recall, ¿qué precisión tienen las predicciones positivas?

Por ello, PR resulta especialmente informativa cuando interesa saber:

  • cuántos positivos podemos recuperar;
  • cuántas alertas tendremos que revisar;
  • qué proporción de esas alertas será realmente positiva.

ROC y PR son complementarias: no existe una regla general según la cual una deba sustituir siempre a la otra (Richardson et al., 2024; Saito & Rehmsmeier, 2015).

Resumir una curva Precision–Recall

Una vez que entendemos la curva, podemos preguntarnos:

¿Podemos resumir todas las combinaciones de precisión y recall mediante un solo valor?

Dos medidas frecuentes son:

  • PR-AUC o AUPRC: área bajo la curva Precision–Recall;
  • Average Precision (AP): resumen que pondera la precisión alcanzada por los incrementos de recall.

En ambos casos, valores mayores indican que el modelo consigue mantener una precisión elevada mientras recupera una mayor proporción de positivos.

A diferencia de ROC AUC, estas medidas incorporan la precisión y, por tanto, dependen de la prevalencia de la clase positiva (Richardson et al., 2024; Saito & Rehmsmeier, 2015).

PR-AUC y Average Precision

Aunque están estrechamente relacionadas, PR-AUC y AP no son necesariamente la misma medida.

PR-AUC / AUPRC

Resume el área bajo la curva PR. En datos empíricos, su valor depende de la regla utilizada para interpolar entre los puntos observados.

Average Precision

Utiliza la expresión:

\[ AP = \sum_i (R_i-R_{i-1})P_i, \]

donde \(R_i\) es recall y \(P_i\) es precisión.

AP pondera la precisión por los incrementos alcanzados en recall.

Distintas reglas de interpolación pueden producir valores diferentes para los mismos puntos PR. Por ello, AP y PR-AUC no deben tratarse automáticamente como sinónimos (Boyd et al., 2013; Keilwagen et al., 2014).

ROC AUC, PR-AUC y AP: ¿qué resume cada uno?

Medida Qué resume Interpretación principal
ROC AUC Curva ROC completa Capacidad del score para ordenar positivos por encima de negativos
PR-AUC / AUPRC Área bajo la curva Precision–Recall Calidad global del compromiso entre precisión y recall
AP Precisión ponderada por incrementos de recall Qué tan bien se mantiene la precisión a medida que recuperamos más positivos

Una diferencia importante es que:

  • ROC AUC no cambia ante un cambio puro de prevalencia;
  • PR-AUC y AP sí pueden cambiar, porque la precisión depende de la prevalencia positiva.

Por ello, PR-AUC y AP son especialmente informativas cuando interesa el desempeño de las predicciones positivas, pero no sustituyen automáticamente a ROC AUC (Richardson et al., 2024; Saito & Rehmsmeier, 2015).

Discriminación: ¿qué conviene reportar?

Pregunta Herramienta
¿Cómo cambia sensibilidad frente a FPR con el umbral? Curva ROC
¿Qué tan bien ordena positivos frente a negativos? ROC AUC
¿Cómo cambia precisión frente a recall? Curva PR
¿Cómo resumir globalmente la curva PR? PR-AUC / AUPRC
¿Cómo resumir la precisión a medida que aumenta el recall? Average Precision (AP)
¿Qué ocurre en la decisión finalmente utilizada? Matriz y métricas en el umbral seleccionado

ROC AUC, PR-AUC y AP evalúan discriminación/ranking desde perspectivas diferentes. Ninguna de estas medidas indica si las probabilidades predichas están correctamente calibradas.

Índice de Gini

En algunas áres de aplicación, por ejemplo en credit scoring, el índice de Gini se utiliza como una medida de discriminación del score y está directamente relacionado con ROC AUC (Kochański, 2022).

\[ Gini=2\,AUC-1. \]

La transformación cambia la escala:

\[ AUC=0.5 \Rightarrow Gini=0 \qquad AUC=1 \Rightarrow Gini=1. \]

Por ejemplo:

\[ AUC=0.80 \quad\Rightarrow\quad Gini=0.60. \]

Un Gini de 0.60 significa que el modelo ha recorrido el 60 % del camino entre ausencia de discriminación y discriminación perfecta.

Gini y AUC contienen la misma información de ordenamiento, expresada en escalas diferentes.

Estadística KS

KS mide la máxima separación entre las distribuciones del score de ambas clases (Fang & Chen, 2019).

\[ KS=\max_c\left[TPR(c)-FPR(c)\right]. \]

Por ejemplo:

\[ TPR=0.75, \qquad FPR=0.25 \quad\Rightarrow\quad KS=0.50. \]

El score alcanza una separación máxima de 50 puntos porcentuales entre ambas clases.

Además:

\[ KS=\max_c J(c), \]

por lo que coincide con el máximo índice de Youden (Rodríguez-Álvarez & Inácio, 2021).

Ejemplo: evaluación del score

Retomamos el modelo de rotación de personal y el mismo conjunto de prueba.

La clase positiva es Attrition = Yes. Ahora evaluamos directamente la probabilidad estimada:

\[ \widehat P(\text{Attrition}=\text{Yes}), \]

sin fijar inicialmente un único punto de corte.

Ver código en R
library(dplyr)
library(ggplot2)
library(yardstick)

prueba <- prueba |>
  mutate(
    prob_yes = predict(modelo, newdata = prueba, type = "response")
  )

roc_tbl <- roc_curve(
  prueba,
  truth = Attrition,
  prob_yes,
  event_level = "second"
) |>
  mutate(
    FPR = 1 - specificity,
    J = sensitivity - FPR
  )

auc <- roc_auc_vec(
  prueba$Attrition,
  prueba$prob_yes,
  event_level = "second"
)

gini <- 2 * auc - 1

# KS: máxima diferencia TPR - FPR
punto_ks <- roc_tbl  |>
  filter(is.finite(.threshold)) |>
  mutate(
    FPR = 1 - specificity,
    KS = sensitivity - FPR
  ) |>
  slice_max(KS, n = 1, with_ties = FALSE)

ks <- punto_ks$KS

# Precision-Recall
pr_obj <- pr_curve(
  prueba,
  truth = Attrition,
  prob_yes,
  event_level = "second"
)

pr_auc_val <- pr_auc_vec(
  prueba$Attrition,
  prueba$prob_yes,
  event_level = "second"
)

ap <- average_precision_vec(
  prueba$Attrition,
  prueba$prob_yes,
  event_level = "second"
)

prevalencia <- mean(prueba$Attrition == "Yes")

Evaluaremos la discriminación del score a través de los distintos puntos de corte.

Ejemplo: curva ROC

Ver código en R
ggplot(roc_tbl, aes(x = FPR, y = sensitivity)) +
  geom_path(linewidth = 1.1) +
  geom_abline(
    intercept = 0,
    slope = 1,
    linetype = "dashed"
  ) +
  geom_segment(
    data = punto_ks,
    aes(
      x = FPR,
      xend = FPR,
      y = FPR,
      yend = sensitivity
    ),
    linewidth = 1
  ) +
  geom_point(
    data = punto_ks,
    size = 3
  ) +
  coord_equal(
    xlim = c(0, 1),
    ylim = c(0, 1)
  ) +
  labs(
    x = "Tasa de falsos positivos (FPR)",
    y = "Sensibilidad (TPR)",
    subtitle = sprintf(
      "ROC AUC = %.3f   |   Gini = %.3f   |   KS = %.3f",
      auc, gini, ks
    )
  ) +
  theme_minimal(base_size = 16)

Ejemplo: curva ROC

Ver código en R
autoplot(roc_tbl)

Ejemplo: ¿qué nos dice la curva ROC?

El modelo obtiene:

\[ AUC=\text{0.744}, \qquad Gini=\text{0.489}, \qquad KS=\text{0.406}. \]

ROC AUC

Un AUC de 0.744 significa que, al seleccionar al azar un trabajador que abandona y otro que permanece, el modelo asigna un score de rotación mayor al primero en aproximadamente el 74.4 % de las comparaciones.

Gini

El Gini de 0.489 expresa esa misma discriminación en una escala donde 0 corresponde a ausencia de discriminación y 1 a discriminación perfecta.

El modelo ha recorrido aproximadamente el 48.9 % del trayecto entre ambos extremos.

KS

La máxima separación es 0.406, y ocurre alrededor del punto de corte:

\[ c=\text{0.199}. \]

En ese punto se detecta el 61.7 % de quienes realmente abandonan, mientras que se clasifica incorrectamente como posible abandono al 21.0 % de quienes permanecen.

El KS representa una diferencia máxima de 40.6 puntos porcentuales entre ambas tasas.

Ejemplo: curva Precision–Recall

Ver código en R
autoplot(pr_obj) +
  geom_hline(
    yintercept = prevalencia,
    linetype = "dashed"
  )

Ejemplo: ¿qué nos dice la curva Precision–Recall?

En el conjunto de prueba, la prevalencia de rotación es:

\[ \pi=\text{0.163} \qquad (\text{16.3 %}). \]

Esta es la referencia de precisión de un ranking sin capacidad discriminativa.

El modelo obtiene:

\[ PR\text{-}AUC=\text{0.449}, \qquad AP=\text{0.454}. \]

PR-AUC

El valor 0.449 resume el área del compromiso entre detectar trabajadores que abandonarán y mantener precisión entre aquellos identificados como posibles abandonos.

Average Precision

El valor 0.454 resume la precisión que mantiene el ranking a medida que aumenta la proporción de casos de rotación recuperados.

Ambas medidas deben compararse con la prevalencia de 16.3 %, no con una referencia universal como 0.5.

ROC AUC describe principalmente la separación entre quienes abandonan y quienes permanecen; PR-AUC y AP muestran el desempeño del ranking desde la perspectiva de los casos de rotación.

De la discriminación a la calidad de las probabilidades

Hasta ahora evaluamos qué tan bien el modelo ordena o separa positivos y negativos.

Pero una buena discriminación no garantiza que las probabilidades predichas sean numéricamente confiables.

Por ejemplo, dos modelos pueden ordenar los casos de la misma manera y obtener el mismo ROC AUC, pero asignar probabilidades muy diferentes.

La siguiente pregunta es distinta:

¿Las probabilidades predichas corresponden aproximadamente con las frecuencias observadas del evento?

(Dimitriadis et al., 2024; vancalster2019?)

¿Qué significa que una probabilidad esté calibrada?

Supongamos que un modelo asigna:

\[ \widehat P(Y=1)=0.70 \]

a un conjunto de observaciones con características similares.

Si las probabilidades están bien calibradas, esperamos que aproximadamente:

\[ 70\% \]

de esas observaciones presenten realmente el evento.

Así:

\[ \widehat p \approx 0.20 \quad\Rightarrow\quad \text{frecuencia observada}\approx 20\% \]

\[ \widehat p \approx 0.70 \quad\Rightarrow\quad \text{frecuencia observada}\approx 70\%. \]

La calibración compara el valor numérico pronosticado con la frecuencia con la que realmente ocurre el evento (vancalster2019?).

¿Cómo se lee una gráfica de calibración?

La gráfica compara:

\[ \text{Probabilidad predicha} \quad\text{vs.}\quad \text{Frecuencia observada}. \]

La referencia de calibración perfecta es:

\[ y=x. \]

Posición Interpretación
Cerca de la diagonal Probabilidad predicha \(\approx\) frecuencia observada
Sobre la diagonal El evento ocurre más de lo pronosticado: subestimación
Bajo la diagonal El evento ocurre menos de lo pronosticado: sobreestimación

La gráfica permite identificar en qué rangos de probabilidad aparecen problemas de calibración (dimitriadis2021?).

Discriminación y calibración no son lo mismo

Considere dos conjuntos de probabilidades:

\[ 0.10,\quad 0.20,\quad 0.70,\quad 0.90 \]

y

\[ 0.01,\quad 0.04,\quad 0.49,\quad 0.81. \]

El orden de las observaciones es exactamente el mismo.

Por tanto, pueden conservar:

\[ \text{ROC} \qquad\text{y}\qquad \text{AUC}, \]

pero sus valores probabilísticos son muy distintos.

Una transformación estrictamente creciente puede conservar completamente el ranking y, al mismo tiempo, modificar la calibración (Dimitriadis et al., 2024).

Brier score

El Brier score mide el error cuadrático de las probabilidades:

\[ BS= \frac{1}{N} \sum_{i=1}^{N} (\hat p_i-y_i)^2, \qquad y_i\in\{0,1\}. \]

Por ejemplo, si el evento ocurre \((y_i=1)\):

\[ \hat p_i=0.90 \quad\Rightarrow\quad (0.90-1)^2=0.01 \]

mientras que:

\[ \hat p_i=0.20 \quad\Rightarrow\quad (0.20-1)^2=0.64. \]

\[ \boxed{\text{Menor Brier} \Rightarrow \text{mejor desempeño probabilístico}} \]

Brier evalúa la calidad probabilística global; no es una medida exclusiva de calibración (Dimitriadis et al., 2024; kullflach2015?).

Log loss

La log loss para clasificación binaria es:

\[ \text{Log loss} = -\frac{1}{N} \sum_{i=1}^{N} \left[ y_i\log(\hat p_i) + (1-y_i)\log(1-\hat p_i) \right]. \]

Si el evento realmente ocurre \((y_i=1)\):

\(\hat p_i\) \(-\log(\hat p_i)\)
0.90 0.105
0.60 0.511
0.10 2.303
0.01 4.605

\[ \boxed{\text{Menor log loss} \Rightarrow \text{mejor desempeño probabilístico}} \]

Log loss penaliza especialmente las predicciones muy seguras que resultan incorrectas (kullflach2015?).

Brier y log loss

Característica Brier Log loss
Tipo de pérdida Cuadrática Logarítmica
Mejor valor 0 0
Usa la probabilidad completa Sí Sí
Errores muy confiados Penalización moderada Penalización muy fuerte
Regla estrictamente propia Sí Sí

Una regla de puntuación es estrictamente propia cuando, en promedio, la pérdida esperada se minimiza reportando la probabilidad verdadera del evento.

Brier y log loss favorecen probabilidades probabilísticamente honestas, pero ninguna de ellas permite localizar por sí sola dónde existe una mala calibración (kullflach2015?).

¿Con qué comparar Brier y log loss?

Un valor aislado de Brier o log loss puede ser difícil de interpretar.

Una referencia sencilla consiste en asignar a todos los casos una misma probabilidad:

\[ \hat p_i=\pi, \]

donde \(\pi\) representa la prevalencia del evento.

Este modelo:

  • no distingue entre observaciones;
  • asigna a todas el mismo riesgo;
  • sirve como referencia probabilística.

Un modelo útil debería compararse con una referencia evaluada sobre los mismos datos, en lugar de interpretar Brier o log loss mediante puntos de corte universales (Dimitriadis et al., 2024).

ECE: un resumen de calibración con cautela

El Expected Calibration Error (ECE) agrupa las probabilidades y compara, dentro de cada grupo:

\[ \text{probabilidad media} \quad\text{vs.}\quad \text{frecuencia observada}. \]

Una forma habitual es:

\[ ECE= \sum_{b=1}^{B} \frac{n_b}{N} \left| \text{obs}_b-\text{pred}_b \right|. \]

Valores menores indican menor discrepancia promedio.

Sin embargo, el resultado puede cambiar con:

  • el número y límites de los grupos;
  • el tamaño de la muestra;
  • la cantidad de observaciones en cada región de probabilidad.

ECE puede complementar la evaluación, pero no debería sustituir a la gráfica de calibración (roelofs2022?).

Ejemplo: calidad de las probabilidades

Retomamos el modelo de rotación de personal y las probabilidades prob_yes obtenidas anteriormente.

La referencia asignará a todos los trabajadores la prevalencia observada en el conjunto de entrenamiento.

Ver código en R
library(yardstick)
library(probably)
library(dplyr)
library(tibble)
library(gt)

# Prevalencias
prev_train <- mean(entrenamiento$Attrition == "Yes")
prev_test  <- mean(prueba$Attrition == "Yes")

# Probabilidad promedio pronosticada
prob_media <- mean(prueba$prob_yes)

# Modelo de referencia
prob_ref <- rep(prev_train, nrow(prueba))

# Brier
brier <- brier_class_vec(
  prueba$Attrition,
  prueba$prob_yes,
  event_level = "second"
)

brier_ref <- brier_class_vec(
  prueba$Attrition,
  prob_ref,
  event_level = "second"
)

# Log loss
logloss <- mn_log_loss_vec(
  prueba$Attrition,
  prueba$prob_yes,
  event_level = "second"
)

logloss_ref <- mn_log_loss_vec(
  prueba$Attrition,
  prob_ref,
  event_level = "second"
)

dif_cal <- 100 * (prob_media - prev_test)

mejora_brier <- 100 * (1 - brier / brier_ref)
mejora_logloss <- 100 * (1 - logloss / logloss_ref)

La referencia se define con el entrenamiento y se evalúa, igual que el modelo, sobre el conjunto de prueba.

Ejemplo: gráfica de calibración

Ver código en R
cal_plot_breaks(
  prueba,
  truth = Attrition,
  estimate = prob_yes,
  event_level = "second",
  num_breaks = 10
)

Ejemplo: ¿cómo están calibradas las probabilidades?

En el conjunto de prueba, la proporción observada de trabajadores que abandonan es:

16.3 %.

La probabilidad promedio de rotación pronosticada por el modelo es:

16.8 %.

La diferencia es:

0.5 puntos porcentuales.

En promedio, la probabilidad pronosticada es muy cercana a la rotación observada.

Esta comparación evalúa la calibración en promedio. La gráfica permite observar si existen desviaciones particulares en niveles bajos, medios o altos de riesgo.

Ejemplo: Brier y log loss

Ver código en R
tibble(
  Modelo = c(
    "Modelo de rotación",
    "Referencia: prevalencia"
  ),
  Brier = c(
    brier,
    brier_ref
  ),
  `Log loss` = c(
    logloss,
    logloss_ref
  )
) |>
  gt() |>
  fmt_number(
    columns = c(Brier, `Log loss`),
    decimals = 3
  )
Modelo Brier Log loss
Modelo de rotación 0.115 0.393
Referencia: prevalencia 0.136 0.444

El Brier del modelo es 0.115, frente a 0.136 para la referencia.

Esto representa una reducción del error probabilístico de aproximadamente 15.4 % respecto de asignar el mismo riesgo a todos los trabajadores.

La log loss disminuye de 0.444 a 0.393, una reducción aproximada de 11.6 %.

En este conjunto de prueba, las probabilidades del modelo aportan más información que utilizar únicamente la prevalencia de rotación como pronóstico para todos los trabajadores.

Buena calibración no implica buena discriminación

Dos situaciones diferentes pueden ocurrir:

Modelo Discriminación Calibración
A Alta Mala
B Baja Buena

Por ejemplo, un modelo que asigna a todos:

\[ \hat p_i=\pi \]

puede estar bien calibrado en promedio, pero no distingue entre individuos.

En cambio, otro modelo puede ordenar correctamente los casos y obtener un AUC alto, pero asignar probabilidades sistemáticamente demasiado extremas.

Discriminación y calibración son propiedades complementarias.

Referencias

Bi, J., & Bennett, K. P. (2003). Regression error characteristic curves. Proceedings of the Twentieth International Conference on Machine Learning, 43–50.
Bicego, M., & Mensi, A. (2023). Null/no information rate (NIR): A statistical test to assess if a classification accuracy is significant for a given problem. arXiv Preprint arXiv:2306.06140. https://doi.org/10.48550/arXiv.2306.06140
Botchkarev, A. (2018). Performance metrics (error measures) in machine learning regression, forecasting and prognostics: Properties and typology. arXiv Preprint arXiv:1809.03006. https://arxiv.org/abs/1809.03006
Boyd, K., Eng, K. H., & Page, C. D. (2013). Area under the precision-recall curve: Point estimates and confidence intervals. Machine Learning and Knowledge Discovery in Databases, 8190, 451–466. https://doi.org/10.1007/978-3-642-40994-3_29
Brodersen, K. H., Ong, C. S., Stephan, K. E., & Buhmann, J. M. (2010). The balanced accuracy and its posterior distribution. Proceedings of the 20th International Conference on Pattern Recognition, 3121–3124. https://doi.org/10.1109/ICPR.2010.764
Byrt, T., Bishop, J., & Carlin, J. B. (1993). Bias, prevalence and kappa. Journal of Clinical Epidemiology, 46(5), 423–429. https://doi.org/10.1016/0895-4356(93)90018-V
Carrington, A. M., Fieguth, P. W., Qazi, H., Holzinger, A., Chen, H. H., Mayr, F., & Manuel, D. G. (2020). A new concordant partial AUC and partial c statistic for imbalanced data in the evaluation of machine learning algorithms. BMC Medical Informatics and Decision Making, 20(1), 4. https://doi.org/10.1186/s12911-019-1014-6
Carrington, A. M., Manuel, D. G., Fieguth, P. W., Ramsay, T., Osmani, V., Wernly, B., Bennett, C., Hawken, S., Magwood, O., Sheikh, Y., McInnes, M., & Holzinger, A. (2023). Deep ROC analysis and AUC as balanced average accuracy, for improved classifier selection, audit and explanation. IEEE Transactions on Pattern Analysis and Machine Intelligence, 45(1), 329–341. https://doi.org/10.1109/TPAMI.2022.3145392
Chai, T., & Draxler, R. R. (2014). Root mean square error (RMSE) or mean absolute error (MAE)? Arguments against avoiding RMSE in the literature. Geoscientific Model Development, 7(3), 1247–1250. https://doi.org/10.5194/gmd-7-1247-2014
Chicco, D., & Jurman, G. (2020). The advantages of the matthews correlation coefficient (MCC) over F1 score and accuracy in binary classification evaluation. BMC Genomics, 21(1), 6. https://doi.org/10.1186/s12864-019-6413-7
Chicco, D., Tötsch, N., & Jurman, G. (2021). The matthews correlation coefficient (MCC) is more reliable than balanced accuracy, bookmaker informedness, and markedness in two-class confusion matrix evaluation. BioData Mining, 14, 13. https://doi.org/10.1186/s13040-021-00244-z
Chicco, D., Warrens, M. J., & Jurman, G. (2021). The coefficient of determination r-squared is more informative than SMAPE, MAE, MAPE, MSE and RMSE in regression analysis evaluation. PeerJ Computer Science, 7, e623. https://doi.org/10.7717/peerj-cs.623
Cohen, J. (1960). A coefficient of agreement for nominal scales. Educational and Psychological Measurement, 20(1), 37–46. https://doi.org/10.1177/001316446002000104
Cohen, J. (1968). Weighted kappa: Nominal scale agreement provision for scaled disagreement or partial credit. Psychological Bulletin, 70(4), 213–220. https://doi.org/10.1037/h0026256
Delgado, R., & Tibau, X.-A. (2019). Why cohen’s kappa should be avoided as performance measure in classification. PLOS ONE, 14(9), e0222916. https://doi.org/10.1371/journal.pone.0222916
Dimitriadis, T., Gneiting, T., Jordan, A. I., & Vogel, P. (2024). Evaluating probabilistic classifiers: The triptych. International Journal of Forecasting, 40(3), 1101–1122. https://doi.org/10.1016/j.ijforecast.2023.09.007
Fang, F., & Chen, Y. (2019). A new approach for credit scoring by directly maximizing the kolmogorov–smirnov statistic. Computational Statistics & Data Analysis, 133, 180–194. https://doi.org/10.1016/j.csda.2018.10.004
Farhadpour, S., Warner, T. A., & Maxwell, A. E. (2024). Selecting and interpreting multiclass loss and accuracy assessment metrics for classifications with class imbalance: Guidance and best practices. Remote Sensing, 16(3), 533. https://doi.org/10.3390/rs16030533
Ferrer, L. (2022). Analysis and comparison of classification metrics. arXiv Preprint arXiv:2209.05355. https://doi.org/10.48550/arXiv.2209.05355
Flach, P. (2019). Performance evaluation in machine learning: The good, the bad, the ugly, and the way forward. Proceedings of the AAAI Conference on Artificial Intelligence, 33(01), 9808–9814. https://doi.org/10.1609/aaai.v33i01.33019808
Foody, G. M. (2023). Challenges in the real world use of classification accuracy metrics: From recall and precision to the matthews correlation coefficient. PLOS ONE, 18(10), e0291908. https://doi.org/10.1371/journal.pone.0291908
Gneiting, T., & Raftery, A. E. (2007). Strictly proper scoring rules, prediction, and estimation. Journal of the American Statistical Association, 102(477), 359–378. https://doi.org/10.1198/016214506000001437
Gneiting, T., & Resin, J. (2023). Regression diagnostics meets forecast evaluation: Conditional calibration, reliability diagrams, and coefficient of determination. Electronic Journal of Statistics, 17(2), 3226–3286. https://doi.org/10.1214/23-EJS2180
Gorodkin, J. (2004). Comparing two k-category assignments by a k-category correlation coefficient. Computational Biology and Chemistry, 28(5-6), 367–374. https://doi.org/10.1016/j.compbiolchem.2004.09.006
Gösgens, M., Zhiyanov, A., Tikhonov, A., & Prokhorenkova, L. (2021). Good classification measures and how to find them. Advances in Neural Information Processing Systems, 34.
Guo, C., Pleiss, G., Sun, Y., & Weinberger, K. Q. (2017). On calibration of modern neural networks. Proceedings of the 34th International Conference on Machine Learning, 70, 1321–1330.
Hernández-Orallo, J. (2013). ROC curves for regression. Pattern Recognition, 46(12), 3395–3411. https://doi.org/10.1016/j.patcog.2013.06.014
Hodson, T. O. (2022). Root-mean-square error (RMSE) or mean absolute error (MAE): When to use them or not. Geoscientific Model Development, 15, 5481–5487. https://doi.org/10.5194/gmd-15-5481-2022
Hyndman, R. J., & Koehler, A. B. (2006). Another look at measures of forecast accuracy. International Journal of Forecasting, 22(4), 679–688. https://doi.org/10.1016/j.ijforecast.2006.03.001
James, G., Witten, D., Hastie, T., & Tibshirani, R. (2021). An introduction to statistical learning: With applications in r (2nd ed.). Springer. https://doi.org/10.1007/978-1-0716-1418-1
Jurman, G., Riccadonna, S., & Furlanello, C. (2012). A comparison of MCC and CEN error measures in multi-class prediction. PLOS ONE, 7(8), e41882. https://doi.org/10.1371/journal.pone.0041882
Keilwagen, J., Grosse, I., & Grau, J. (2014). Area under precision-recall curves for weighted and unweighted data. PLOS ONE, 9(3), e92209. https://doi.org/10.1371/journal.pone.0092209
Kochański, B. (2022). Which curve fits best: Fitting ROC curve models to empirical credit-scoring data. Risks, 10(10), 184. https://doi.org/10.3390/risks10100184
Kuhn, M., & Johnson, K. (2013). Applied predictive modeling. Springer. https://doi.org/10.1007/978-1-4614-6849-3
Kuhn, M., & Silge, J. (2022). Tidy modeling with r: A framework for modeling in the tidyverse. O’Reilly Media. https://www.tmwr.org/
Kull, M., & Flach, P. A. (2015). Novel decompositions of proper scoring rules for classification: Score adjustment as precursor to calibration. Machine Learning and Knowledge Discovery in Databases, 9284, 68–85. https://doi.org/10.1007/978-3-319-23528-8_5
Landis, J. R., & Koch, G. G. (1977). The measurement of observer agreement for categorical data. Biometrics, 33(1), 159–174. https://doi.org/10.2307/2529310
Li, W., Cook, D., Tanaka, E., & VanderPlas, S. (2024). A plot is worth a thousand tests: Assessing residual diagnostics with the lineup protocol. Journal of Computational and Graphical Statistics, 33(4), 1497–1511. https://doi.org/10.1080/10618600.2024.2344612
Luque, A., Carrasco, A., Martín, A., & Heras, A. de las. (2019). The impact of class imbalance in classification performance metrics based on the binary confusion matrix. Pattern Recognition, 91, 216–231. https://doi.org/10.1016/j.patcog.2019.02.023
Mortaz, E. (2020). Imbalance accuracy metric for model selection in multi-class imbalance classification problems. Knowledge-Based Systems, 210, 106490. https://doi.org/10.1016/j.knosys.2020.106490
Opitz, J. (2024). A closer look at classification evaluation metrics and a critical reflection of common evaluation practice. Transactions of the Association for Computational Linguistics, 12, 820–836. https://doi.org/10.1162/tacl_a_00675
Opitz, J., & Burst, S. (2019). Macro F1 and macro F1. arXiv Preprint arXiv:1911.03347. https://doi.org/10.48550/arXiv.1911.03347
Ozenne, B., Subtil, F., & Maucort-Boulch, D. (2015). The precision-recall curve overcame the optimism of the receiver operating characteristic curve in rare diseases. Journal of Clinical Epidemiology, 68(8), 855–859. https://doi.org/10.1016/j.jclinepi.2015.02.010
Rainio, O., Teuho, J., & Klén, R. (2024). Evaluation metrics and statistical tests for machine learning. Scientific Reports, 14, 6086. https://doi.org/10.1038/s41598-024-56706-x
Raschka, S. (2018). Model evaluation, model selection, and algorithm selection in machine learning. arXiv Preprint arXiv:1811.12808. https://arxiv.org/abs/1811.12808
Richardson, E., Trevizani, R., Greenbaum, J. A., Carter, H., Nielsen, M., & Peters, B. (2024). The receiver operating characteristic curve accurately assesses imbalanced datasets. Patterns, 5(6), 100994. https://doi.org/10.1016/j.patter.2024.100994
Rodríguez-Álvarez, M. X., & Inácio, V. (2021). ROCnReg: An r package for receiver operating characteristic curve inference with and without covariates. The R Journal, 13(1), 525–555. https://doi.org/10.32614/RJ-2021-066
Saito, T., & Rehmsmeier, M. (2015). The precision-recall plot is more informative than the ROC plot when evaluating binary classifiers on imbalanced datasets. PLOS ONE, 10(3), e0118432. https://doi.org/10.1371/journal.pone.0118432
Schneider, L., Dave, P., Arsiwala-Scheppach, L., Schwendicke, F., & Krois, J. (2021). Exploring bias in f-score computation methods of multi-class segmentation models. Proceedings of the 5th International Conference on Video and Image Processing. https://doi.org/10.1145/3511176.3511189
Shmueli, G. (2010). To explain or to predict? Statistical Science, 25(3), 289–310. https://doi.org/10.1214/10-STS330
Silva Filho, T., Song, H., Perello-Nieto, M., Santos-Rodriguez, R., Kull, M., & Flach, P. (2023). Classifier calibration: A survey on how to assess and improve predicted class probabilities. Machine Learning, 112(9), 3211–3260. https://doi.org/10.1007/s10994-023-06336-7
Smits, N. (2010). A note on youden’s j and its cost ratio. BMC Medical Research Methodology, 10, 89. https://doi.org/10.1186/1471-2288-10-89
Thölke, P., Mantilla-Ramos, Y.-J., Abdelhedi, H., et al. (2023). Class imbalance should not throw you off balance: Choosing the right classifiers and performance metrics for brain decoding with imbalanced data. NeuroImage, 277, 120253. https://doi.org/10.1016/j.neuroimage.2023.120253
Vach, W. (2005). The dependence of cohen’s kappa on the prevalence does not matter. Journal of Clinical Epidemiology, 58(7), 655–661. https://doi.org/10.1016/j.jclinepi.2004.02.021
Vaicenavicius, J., Widmann, D., Andersson, C., Lindsten, F., Roll, J., & Schön, T. (2019). Evaluating model calibration in classification. Proceedings of the Twenty-Second International Conference on Artificial Intelligence and Statistics, 89, 3459–3467.
Whitney, H. M., Drukker, K., & Giger, M. L. (2022). Performance metric curve analysis framework to assess impact of the decision variable threshold, disease prevalence, and dataset variability in two-class classification. Journal of Medical Imaging, 9(3), 035502. https://doi.org/10.1117/1.JMI.9.3.035502
Yılmaz, A. E., & Demirhan, H. (2023). Weighted kappa measures for ordinal multi-class classification performance. Applied Soft Computing, 134, 110020. https://doi.org/10.1016/j.asoc.2023.110020
Zou, K. H., Yu, C.-R., Liu, K., Carlsson, M. O., & Cabrera, J. (2013). Optimal thresholds by maximizing or minimizing various metrics via ROC-type analysis. Academic Radiology, 20(7), 807–815. https://doi.org/10.1016/j.acra.2013.02.004