entrenamiento prueba
294 98
1EST17-Aprendizaje Estadístico 1
Pontificia Universidad Católica del Perú (PUCP)
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.
El desempeño predictivo puede examinarse desde diferentes perspectivas (Flach, 2019; Rainio et al., 2024).
Por ejemplo:
Por tanto, predecir bien no se reduce a una única propiedad.
La métrica elegida determina qué aspecto del desempeño estamos cuantificando.
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.
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.
La evaluación del desempeño predictivo plantea dos preguntas relacionadas, pero distintas (Rainio et al., 2024; Raschka, 2018):
Determinar qué propiedad del desempeño predictivo interesa cuantificar.
\[ \Downarrow \]
Seleccionar e interpretar una métrica adecuada.
Tema de esta presentación
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}} \]
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.
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:
Por ello, evaluar una regresión requiere definir primero qué característica del error predictivo queremos resumir.
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:
Por ello, las medidas numéricas deben interpretarse considerando qué resumen del error producen y, cuando sea necesario, complementarse con herramientas gráficas.
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.
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.
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.
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:
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\).
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:
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.
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:
El MAE resulta especialmente interpretable cuando interesa describir la magnitud promedio del error de predicción.
RMSE y MAE representan funciones de pérdida distintas y, por tanto, valoran de manera diferente las discrepancias (Chai & Draxler, 2014; Hodson, 2022).
Penalización cuadrática:
\[ e_i^2 \]
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.
Penalización absoluta:
\[ |e_i| \]
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.
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.
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:
A diferencia de MAE y RMSE, \(R^2\) es adimensional.
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\):
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.
| 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.
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):
Por ello, su uso requiere examinar cuidadosamente la escala y distribución de la variable respuesta.
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).
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.
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.
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.
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.
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.
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.
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\).
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.
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.
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.
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.
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.
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.
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.
| 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.
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
Errores de predicción vs. valores predichos
Distribución de los errores
El análisis gráfico puede revelar estructuras que una medida agregada no muestra (Li et al., 2024).
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:
Por ejemplo, un valor
\[ REC(2)=0.80 \]
indicaría que el 80 % de las predicciones presentan errores absolutos no mayores que 2 unidades.
Una curva REC permite observar directamente cómo cambia el porcentaje de predicciones aceptables al aumentar la tolerancia al error.
En general:
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.
RROC separa dos componentes del error de predicción (Hernández-Orallo, 2013):
\[ d_i=\hat y_i-y_i \]
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.
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:
Un mismo modelo puede sobreestimar algunos casos y subestimar otros.
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.
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.
Supongamos que se predice la duración de proyectos.
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.
Pregunta principal:
¿Qué proporción de predicciones queda dentro de una determinada tolerancia de error?
Se concentra en la magnitud absoluta del error.
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.
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.
entrenamiento prueba
294 98
El modelo se entrenará exclusivamente con train y todas las medidas y gráficas posteriores se obtendrán con test.
Se considera:
\[ mpg_i= \beta_0+ \beta_1 horsepower_i+ \beta_2 weight_i+ \beta_3 year_i+ \varepsilon_i. \]
(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.
Aplicamos el modelo entrenado a los automóviles del conjunto de prueba:
| 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.
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 |
En los automóviles del conjunto de prueba:
La diferencia entre RMSE, MAE y MedAE permite apreciar cuánto influyen las predicciones con errores relativamente grandes.
Además:
mpg en el conjunto de prueba;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.
Utilizaremos las mismas observaciones de prueba para construir todas las gráficas.
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.
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.
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.
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.
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.
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.
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.
Un intervalo predictivo del 80 % busca contener aproximadamente al 80 % de los valores futuros de \(Y\).
Su evaluación debe considerar conjuntamente:
Un intervalo muy ancho puede alcanzar una cobertura elevada y, aun así, proporcionar poca informació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.
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:
Evaluar un clasificador requiere primero identificar qué salida produce el modelo y para qué será utilizada.
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.
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.
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 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.
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.
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.
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 |
|
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.
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.
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.
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:
Así, Kappa permite contextualizar la accuracy respecto de un nivel de concordancia esperado.
El estadístico toma valores entre \(-1\) y \(1\):
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.
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 |
Conviene interpretar accuracy + Kappa + distribución de clases, no usar umbrales rígidos de Kappa para declarar que un modelo es “bueno” o “malo”.
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:
La accuracy indica cuántas decisiones fueron correctas, pero no distingue qué tipo de aciertos y errores produjo el modelo.
Suponga que la clase positiva corresponde a spam.
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.
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.
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?
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?
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:
Esta medida será especialmente importante más adelante, porque constituye uno de los ejes de la curva ROC.
| 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:
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.
Ahora condicionamos sobre la clase predicha.
\[ \text{Precisión} = PPV = \frac{TP}{TP+FP} \]
De los casos predichos como positivos, ¿qué proporción era realmente positiva?
\[ 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 |
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.
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:
Balanced accuracy no es una versión universalmente “mejor” de accuracy: representa una elección diferente sobre cómo ponderar las clases.
La balanced accuracy es especialmente útil cuando:
La accuracy sigue siendo interpretable cuando:
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.
La medida F1 combina dos aspectos del desempeño sobre la clase positiva:
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.
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.
F1 resulta especialmente útil cuando:
No debería utilizarse como resumen único cuando:
F1 no es una solución general al desbalance de clases: responde a una pregunta específica sobre la clase positiva.
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.
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:
Accuracy y F1 no se contradicen: están resumiendo aspectos diferentes del desempeño.
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}}. \]
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.
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_\beta\) no mejora el desempeño: cambia qué combinación de precisión y sensibilidad estamos resumiendo.
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\).
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.
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.
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.
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.
Una organización utiliza un clasificador para identificar correos spam.
En una muestra de 100 correos:
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:
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.
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. \]
Con:
\[ O=0.91, \qquad E=0.812, \]
obtenemos:
\[ \kappa = \frac{0.91-0.812}{1-0.812} = 0.521. \]
La lectura conjunta es:
NIR y Kappa usan referencias diferentes:
Kappa ayuda a contextualizar la accuracy, pero no sustituye el análisis de los tipos de error.
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.
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.
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:
Ninguna de estas medidas contradice a las demás: cada una resume una característica distinta del clasificador.
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.
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. \]
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:
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:
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.
El modelo presenta un desempeño desigual entre las dos clases.
Por un lado:
Pero:
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.
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.
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.
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"))
)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.
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.
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.
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.
Ajustaremos un modelo de regresión logística utilizando únicamente las observaciones de entrenamiento:
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.
Obtenemos las probabilidades estimadas para las observaciones que no fueron utilizadas durante el entrenamiento:
Utilizando inicialmente un punto de corte de:
\[ c=0.50, \]
obtenemos la clase predicha:
Por tanto:
\[ \widehat P(\text{Yes}\mid\mathbf{x}) \longrightarrow c=0.50 \longrightarrow \widehat Y. \]
Calculamos la matriz utilizando yardstick:
| Matriz de confusión | ||
| Predicho | Observado: No | Observado: Yes |
|---|---|---|
| No | 297 | 46 |
| Yes | 12 | 14 |
En este contexto:
Los FN son especialmente importantes si el objetivo es anticipar posibles abandonos.
yardstickyardstick también permite obtener directamente las medidas estudiadas.
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:
porque Yes es el segundo nivel del factor Attrition.
| 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.
| 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.
caretUna 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.
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
yardstick y caretAmbos 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
yardstickpara construir resúmenes específicos, pero es importante reconocercaret::confusionMatrix()porque sigue siendo una forma muy práctica de inspeccionar rápidamente el desempeño de un clasificador.
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 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:
Antes de pasar a la evaluación de scores y probabilidades, extenderemos estas ideas al caso de 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.
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).
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:
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).
Cuando tenemos una medida \(M_c\) para cada clase podemos resumirla de diferentes maneras.
\[ M_{\text{macro}} = \frac{1}{C}\sum_{c=1}^{C}M_c. \]
Cada clase recibe el mismo peso.
\[ 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).
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).
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:
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.
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).
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.
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.
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).
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).
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?
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?
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). \]
La curva ROC describe el conjunto de decisiones que puede producir un mismo score al recorrer diferentes puntos de corte (Keilwagen et al., 2014).
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.
\[ c=0.90 \]
Solo el caso 1 se clasifica como positivo.
\[ c=0.60 \]
Los casos 1, 2 y 3 se clasifican como positivos.
\[ c=0.30 \]
Los casos 1 a 5 se clasifican como positivos.
Reducir el umbral facilita detectar positivos, pero normalmente aumenta también el número de negativos clasificados como positivos.
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). \]
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.
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.
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)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).
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.
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:
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).
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).
No existe un punto de corte universalmente óptimo.
Criterios como:
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.
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 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.
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.
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.
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.
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.
Cada punto responde simultáneamente a dos preguntas:
\[ \text{Recall}=\frac{TP}{TP+FN} \]
¿Qué proporción de todos los positivos reales estamos detectando?
\[ \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).
Supongamos dos puntos posibles:
\[ A=(0.50,\;0.90) \]
\[ B=(0.80,\;0.60). \]
Detectamos el 50 % de los positivos, pero el 90 % de las predicciones positivas son correctas.
Detectamos el 80 % de los positivos, pero solo el 60 % de las predicciones positivas son correctas.
No existe una elección universalmente mejor:
La curva muestra las diferentes combinaciones disponibles al modificar el punto de corte.
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}. \]
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.
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).
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. \]
\[ TP=0.80(100)=80 \]
\[ FP=0.05(9\,900)=495 \]
\[ \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).
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:
\[ TPR,\quad FPR,\quad ROC,\quad AUC \]
pueden permanecer iguales.
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).
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:
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).
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:
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).
Aunque están estrechamente relacionadas, PR-AUC y AP no son necesariamente la misma medida.
Resume el área bajo la curva PR. En datos empíricos, su valor depende de la regla utilizada para interpolar entre los puntos observados.
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).
| 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:
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).
| 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.
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.
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).
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.
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.
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)El modelo obtiene:
\[ AUC=\text{0.744}, \qquad Gini=\text{0.489}, \qquad KS=\text{0.406}. \]
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.
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.
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.
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}. \]
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.
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.
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?
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?).
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?).
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).
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?).
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?).
| 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?).
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:
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).
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:
ECE puede complementar la evaluación, pero no debería sustituir a la gráfica de calibración (roelofs2022?).
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.
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.
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.
| 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.
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.