9  Juzgar La Eficacia Del Modelo

Una vez que tenemos un modelo, necesitamos saber qué tan bien funciona. Un enfoque cuantitativo para estimar la efectividad nos permite comprender el modelo, comparar diferentes modelos o modificar el modelo para mejorar el rendimiento. Nuestro enfoque en tidymodels está en la validación empírica; Esto generalmente significa usar datos que no se usaron para crear el modelo como sustrato para medir la efectividad.

El mejor enfoque para la validación empírica implica el uso de métodos de resampling que se presentarán en el Capítulo 10. En este capítulo, motivaremos la necesidad de una validación empírica mediante el uso del conjunto de pruebas. Tenga en cuenta que el conjunto de prueba solo se puede utilizar una vez, como se explica en Sección 5.1.

Al juzgar la eficacia del modelo, su decisión sobre qué métricas examinar puede ser fundamental. En capítulos posteriores, se optimizarán empíricamente ciertos parámetros del modelo y se utilizará una métrica de rendimiento primaria para elegir el mejor submodelo. Elegir la métrica incorrecta puede fácilmente tener consecuencias no deseadas. Por ejemplo, dos métricas comunes para los modelos de regresión son la raíz del error cuadrático medio (RMSE) y el coeficiente de determinación (también conocido como \(R^2\)). El primero mide la precisión mientras que el segundo mide la correlación. Estos no son necesariamente lo mismo. Figura 9.1 demuestra la diferencia entre los dos.

Gráficos de dispersión de valores numéricos observados versus valores predichos para modelos optimizados utilizando el RMSE y el coeficiente de determinación. El primero produce resultados cercanos a la línea de identidad de 45 grados, mientras que el segundo muestra resultados con una estrecha correlación lineal pero se aleja mucho de la línea de identidad.
Figura 9.1: Valores observados versus valores predichos para modelos optimizados utilizando el RMSE en comparación con el coeficiente de determinación

Un modelo optimizado para RMSE tiene más variabilidad pero tiene una precisión relativamente uniforme en todo el rango del resultado. El panel derecho muestra que existe una correlación más estrecha entre los valores observados y predichos, pero este modelo funciona mal en las colas.

Este capítulo demostrará el paquete yardstick, un paquete central de tidymodels cuyo objetivo es medir el rendimiento del modelo. Antes de ilustrar la sintaxis, exploremos si vale la pena la validación empírica mediante métricas de rendimiento cuando un modelo se centra en la inferencia en lugar de la predicción.

9.1 Métricas De Rendimiento E Inferencia

La eficacia de cualquier modelo depende de cómo se utilizará. Un modelo inferencial se utiliza principalmente para comprender las relaciones y normalmente enfatiza la elección (y validez) de distribuciones probabilísticas y otras cualidades generativas que definen el modelo. Por el contrario, para un modelo utilizado principalmente para la predicción, la fuerza predictiva es de primordial importancia y otras preocupaciones sobre las cualidades estadísticas subyacentes pueden ser menos importantes. La fuerza predictiva generalmente está determinada por qué tan cerca están nuestras predicciones de los datos observados, es decir, la fidelidad de las predicciones del modelo a los resultados reales. Este capítulo se centra en funciones que se pueden utilizar para medir la fuerza predictiva. Sin embargo, nuestro consejo para quienes desarrollan modelos inferenciales es utilizar estas técnicas incluso cuando el modelo no se utilizará con el objetivo principal de predicción.

Un problema de larga data con la práctica de la estadística inferencial es que, centrándose exclusivamente en la inferencia, es difícil evaluar la credibilidad de un modelo. Por ejemplo, considere los datos sobre la enfermedad de Alzheimer de Craig–Schapiro et al. (2011) cuando se estudiaron pacientes con 333 para determinar los factores que influyen en el deterioro cognitivo. Un análisis podría tomar los factores de riesgo conocidos y construir un modelo de regresión logística donde el resultado sea binario (deteriorado/no deteriorado). Consideremos los predictores de edad, sexo y genotipo de apolipoproteína E. Esta última es una variable categórica con las seis combinaciones posibles de las tres variantes principales de este gen. Se sabe que la apolipoproteína E tiene una asociación con la demencia (Jungsu, Basak, y Holtzman 2009).

Un enfoque superficial, pero no infrecuente, para este análisis sería ajustar un modelo grande con efectos e interacciones principales y luego utilizar pruebas estadísticas para encontrar el conjunto mínimo de términos del modelo que sean estadísticamente significativos en algún nivel predefinido. Si se utilizara un modelo completo con los tres factores y sus interacciones de dos y tres vías, una fase inicial sería probar las interacciones utilizando pruebas de índice de probabilidad secuencial (Hosmer y Lemeshow 2000). Analicemos este tipo de enfoque para el ejemplo de datos sobre la enfermedad de Alzheimer:

  • Al comparar el modelo con todas las interacciones de dos vías con uno con la interacción de tres vías adicional, las pruebas de razón de verosimilitud producen un valor p de 0.888. Esto implica que no hay evidencia de que los términos del modelo adicionales four asociados con la interacción de tres vías expliquen suficiente variación en los datos para mantenerlos en el modelo.

  • A continuación, las interacciones bidireccionales se evalúan de manera similar con respecto al modelo sin interacciones. El valor p aquí es 0.0382. Esto es algo dudoso, pero, dado el pequeño tamaño de la muestra, sería prudente concluir que hay evidencia de que algunas de las posibles interacciones bidireccionales 10 son importantes para la modelo.

  • A partir de aquí, construiríamos alguna explicación de los resultados. Sería particularmente importante discutir las interacciones, ya que pueden generar hipótesis fisiológicas o neurológicas interesantes que se explorarán más a fondo.

Si bien superficial, esta estrategia de análisis es común tanto en la práctica como en la literatura. Esto es especialmente cierto si el profesional tiene una formación formal limitada en análisis de datos.

Un dato que falta en este enfoque es qué tan cerca se ajusta este modelo a los datos reales. Usando métodos de remuestreo, discutidos en el Capítulo 10, podemos estimar que la precisión de este modelo es aproximadamente 73.4%. La precisión es a menudo una mala medida del rendimiento del modelo; Lo usamos aquí porque se entiende comúnmente. Si el modelo tiene 73.4% de fidelidad a los datos, ¿deberíamos confiar en las conclusiones que produce? Podríamos pensar así hasta que nos demos cuenta de que la tasa inicial de pacientes no deteriorados en los datos es 72.7%. Esto significa que, a pesar de nuestro análisis estadístico, el modelo de dos factores parece ser sólo 0.8% mejor que una simple heurística que siempre predice que los pacientes no sufrirán daños, independientemente de los datos observados.

El objetivo de este análisis es demostrar la idea de que la optimización de las características estadísticas del modelo no implica que el modelo se ajuste bien a los datos. Incluso para modelos puramente inferenciales, alguna medida de fidelidad a los datos debería acompañar a los resultados inferenciales. Con esto, los consumidores de los análisis pueden calibrar sus expectativas sobre los resultados.

En el resto de este capítulo, discutiremos enfoques generales para evaluar modelos mediante validación empírica. Estos enfoques se agrupan según la naturaleza de los datos de resultados: puramente numéricos, clases binarias y tres o más niveles de clase.

9.2 Métricas De Regresión

Recuerde de Sección 6.3 que las funciones de predicción de tidymodels producen tibbles con columnas para los valores predichos. Estas columnas tienen nombres consistentes y las funciones en el paquete yardstick que producen métricas de rendimiento tienen interfaces consistentes. Las funciones están basadas en marcos de datos, a diferencia de vectores, con la sintaxis general de:

function(data, truth, ...)

donde data es un marco de datos o tibble y truth es la columna con los valores de resultados observados. Las elipses u otros argumentos se utilizan para especificar las columnas que contienen las predicciones.

Para ilustrar, tomemos el modelo de Sección 8.8. Este modelo lm_wflow_fit combina un modelo de regresión lineal con un conjunto de predictores complementado con una interacción y funciones spline para longitud y latitud. Fue creado a partir de un conjunto de entrenamiento (llamado ames_train). Aunque no recomendamos utilizar el conjunto de pruebas en este punto del proceso de modelado, se utilizará aquí para ilustrar la funcionalidad y la sintaxis. El marco de datos ames_test consta de las propiedades 588. Para empezar, hagamos predicciones:

ames_test_res <- predict(lm_fit, new_data = ames_test %>% select(-Sale_Price))
ames_test_res
## # A tibble: 588 × 1
##   .pred
##   <dbl>
## 1  5.07
## 2  5.31
## 3  5.28
## 4  5.33
## 5  5.30
## 6  5.24
## # ℹ 582 more rows

El resultado numérico previsto por el modelo de regresión se denomina .pred. Hagamos coincidir los valores predichos con sus correspondientes valores de resultado observados:

ames_test_res <- bind_cols(ames_test_res, ames_test %>% select(Sale_Price))
ames_test_res
## # A tibble: 588 × 2
##   .pred Sale_Price
##   <dbl>      <dbl>
## 1  5.07       5.02
## 2  5.31       5.39
## 3  5.28       5.28
## 4  5.33       5.28
## 5  5.30       5.28
## 6  5.24       5.26
## # ℹ 582 more rows

Vemos que estos valores en su mayoría parecen cercanos, pero aún no tenemos una comprensión cuantitativa de cómo funciona el modelo porque no hemos calculado ninguna métrica de rendimiento. Tenga en cuenta que tanto los resultados previstos como los observados están en unidades log-10. Es una buena práctica analizar las predicciones en la escala transformada (si se usara una), incluso si las predicciones se informan utilizando las unidades originales.

Trazamos los datos en Figura 9.2 antes de calcular las métricas:

ggplot(ames_test_res, aes(x = Sale_Price, y = .pred)) + 
  # Crear una línea diagonal:
  geom_abline(lty = 2) + 
  geom_point(alpha = 0.5) + 
  labs(y = "Precio de Venta Predecido (log10)", x = "Precio de Venta (log10)") +
  # Escale y dimensione los ejes x e y de manera uniforme:
  coord_obs_pred()
Gráficos de dispersión de valores numéricos observados versus valores predichos para un modelo de regresión de Ames. Ambos ejes utilizan unidades log-10. El modelo muestra una buena concordancia con algunos puntos que no se ajustan bien a precios altos y bajos.
Figura 9.2: Valores observados versus valores predichos para un modelo de regresión de Ames, con unidades log-10 en ambos ejes

Hay una propiedad de bajo precio que está sustancialmente sobreestimada, es decir, bastante por encima de la línea discontinua.

Calculemos la raíz del error cuadrático medio para este modelo usando la función rmse():

rmse(ames_test_res, truth = Sale_Price, estimate = .pred)
## # A tibble: 1 × 3
##   .metric .estimator .estimate
##   <chr>   <chr>          <dbl>
## 1 rmse    standard      0.0736

Esto nos muestra el formato estándar de salida de las funciones yardstick. Las métricas para resultados numéricos suelen tener un valor “estándar” para la columna .estimator. En las siguientes secciones se muestran ejemplos con diferentes valores para esta columna.

Para calcular varias métricas a la vez, podemos crear un conjunto de métricas. Sumemos \(R^2\) y el error absoluto medio:

ames_metrics <- metric_set(rmse, rsq, mae)
ames_metrics(ames_test_res, truth = Sale_Price, estimate = .pred)
## # A tibble: 3 × 3
##   .metric .estimator .estimate
##   <chr>   <chr>          <dbl>
## 1 rmse    standard      0.0736
## 2 rsq     standard      0.836 
## 3 mae     standard      0.0549

Este formato de datos ordenado apila las métricas verticalmente. Las métricas del error cuadrático medio y del error absoluto medio están en la escala del resultado (por lo tanto, log10(Sale_Price) para nuestro ejemplo) y miden la diferencia entre los valores previstos y observados. El valor de \(R^2\) mide la correlación al cuadrado entre los valores previstos y observados, por lo que los valores más cercanos a uno son mejores.

El paquete yardstick no contiene una función para \(R^2\) ajustado. Esta modificación del coeficiente de determinación se utiliza comúnmente cuando los mismos datos utilizados para ajustar el modelo se utilizan para evaluar el modelo. Esta métrica no es totalmente compatible con tidymodels porque siempre es un mejor enfoque para calcular el rendimiento en un conjunto de datos separado que el utilizado para ajustar el modelo.

9.3 Métricas De Clasificación Binaria

Para ilustrar otras formas de medir el rendimiento del modelo, cambiaremos a un ejemplo diferente. El paquete modeldata (otro de los paquetes tidymodels) contiene predicciones de ejemplo de un conjunto de datos de prueba con dos clases (“Class1” y “Class2”):

data(two_class_example)
tibble(two_class_example)
## # A tibble: 500 × 4
##   truth   Class1   Class2 predicted
##   <fct>    <dbl>    <dbl> <fct>    
## 1 Class2 0.00359 0.996    Class2   
## 2 Class1 0.679   0.321    Class1   
## 3 Class2 0.111   0.889    Class2   
## 4 Class1 0.735   0.265    Class1   
## 5 Class2 0.0162  0.984    Class2   
## 6 Class1 0.999   0.000725 Class1   
## # ℹ 494 more rows

La segunda y tercera columnas son las probabilidades de clase predichas para el conjunto de prueba, mientras que predicted son las predicciones discretas.

Para las predicciones de clases difíciles, una variedad de funciones yardstick son útiles:

# Una matriz de confusión:
conf_mat(two_class_example, truth = truth, estimate = predicted)
##           Truth
## Prediction Class1 Class2
##     Class1    227     50
##     Class2     31    192

# Exactitud:
accuracy(two_class_example, truth, predicted)
## # A tibble: 1 × 3
##   .metric  .estimator .estimate
##   <chr>    <chr>          <dbl>
## 1 accuracy binary         0.838

# Coeficiente de correlación de Matthews:
mcc(two_class_example, truth, predicted)
## # A tibble: 1 × 3
##   .metric .estimator .estimate
##   <chr>   <chr>          <dbl>
## 1 mcc     binary         0.677

# Métrica F1:
f_meas(two_class_example, truth, predicted)
## # A tibble: 1 × 3
##   .metric .estimator .estimate
##   <chr>   <chr>          <dbl>
## 1 f_meas  binary         0.849

# Combinando estas tres métricas de clasificación juntas
classification_metrics <- metric_set(accuracy, mcc, f_meas)
classification_metrics(two_class_example, truth = truth, estimate = predicted)
## # A tibble: 3 × 3
##   .metric  .estimator .estimate
##   <chr>    <chr>          <dbl>
## 1 accuracy binary         0.838
## 2 mcc      binary         0.677
## 3 f_meas   binary         0.849

El coeficiente de correlación de Matthews y la puntuación F1 resumen la matriz de confusión, pero en comparación con mcc(), que mide la calidad de ejemplos tanto positivos como negativos, la métrica f_meas() enfatiza la clase positiva, es decir, el evento de interés. Para conjuntos de datos de clasificación binaria como este ejemplo, las funciones yardstick tienen un argumento estándar llamado event_level para distinguir los niveles positivos y negativos. El valor predeterminado (que utilizamos en este código) es que el primer nivel del factor de resultado es el evento de interés.

Existe cierta heterogeneidad en las funciones R a este respecto; algunos utilizan el primer nivel y otros el segundo para denotar el evento de interés. Consideramos más intuitivo que el primer nivel es el más importante. La lógica de segundo nivel surge de codificar el resultado como 0/1 (en cuyo caso el segundo valor es el evento) y desafortunadamente permanece en algunos paquetes. Sin embargo, tidymodels (junto con muchos otros paquetes de R) requieren que se codifique un resultado categórico como factor y, por esta razón, la justificación heredada para el segundo nivel como evento se vuelve irrelevante.

Como ejemplo donde el segundo nivel es el evento:

f_meas(two_class_example, truth, predicted, event_level = "second")
## # A tibble: 1 × 3
##   .metric .estimator .estimate
##   <chr>   <chr>          <dbl>
## 1 f_meas  binary         0.826

En este resultado, el valor .estimator de “binario” indica que se utilizará la fórmula estándar para clases binarias.

Existen numerosas métricas de clasificación que utilizan las probabilidades predichas como entradas en lugar de las predicciones de clase estrictas. Por ejemplo, la curva de características operativas del receptor (ROC) calcula la sensibilidad y la especificidad sobre un continuo de diferentes umbrales de eventos. La columna de clase prevista no se utiliza. Hay dos funciones yardstick para este método: roc_curve() calcula los puntos de datos que forman la curva ROC y roc_auc() calcula el área bajo la curva.

Las interfaces para estos tipos de funciones métricas utilizan el marcador de posición del argumento ... para pasar la columna de probabilidad de clase apropiada. Para problemas de dos clases, la columna de probabilidad del evento de interés se pasa a la función:

two_class_curve <- roc_curve(two_class_example, truth, Class1)
two_class_curve
## # A tibble: 502 × 3
##   .threshold specificity sensitivity
##        <dbl>       <dbl>       <dbl>
## 1 -Inf           0                 1
## 2    1.79e-7     0                 1
## 3    4.50e-6     0.00413           1
## 4    5.81e-6     0.00826           1
## 5    5.92e-6     0.0124            1
## 6    1.22e-5     0.0165            1
## # ℹ 496 more rows

roc_auc(two_class_example, truth, Class1)
## # A tibble: 1 × 3
##   .metric .estimator .estimate
##   <chr>   <chr>          <dbl>
## 1 roc_auc binary         0.939

El objeto two_class_curve se puede usar en una llamada ggplot para visualizar la curva, como se muestra en Figura 9.3. Existe un método autoplot() que se encargará de los detalles:

autoplot(two_class_curve)
Un ejemplo de curva ROC. El eje x es uno menos la especificidad y el eje y es la sensibilidad. La curva se inclina hacia el lado superior izquierdo del área de la gráfica.
Figura 9.3: Ejemplo de curva ROC

Si la curva estuviera cerca de la línea diagonal, entonces las predicciones del modelo no serían mejores que las conjeturas aleatorias. Dado que la curva está arriba en la esquina superior izquierda, vemos que nuestro modelo funciona bien en diferentes umbrales.

Hay otras funciones que utilizan estimaciones de probabilidad, incluidas gain_curve(), lift_curve() y pr_curve().

9.4 Métricas De Clasificación Multiclase

¿Qué pasa con los datos con tres o más clases? Para demostrarlo, exploremos un conjunto de datos de ejemplo diferente que tiene cuatro clases:

data(hpc_cv)
tibble(hpc_cv)
## # A tibble: 3,467 × 7
##   obs   pred     VF      F       M          L Resample
##   <fct> <fct> <dbl>  <dbl>   <dbl>      <dbl> <chr>   
## 1 VF    VF    0.914 0.0779 0.00848 0.0000199  Fold01  
## 2 VF    VF    0.938 0.0571 0.00482 0.0000101  Fold01  
## 3 VF    VF    0.947 0.0495 0.00316 0.00000500 Fold01  
## 4 VF    VF    0.929 0.0653 0.00579 0.0000156  Fold01  
## 5 VF    VF    0.942 0.0543 0.00381 0.00000729 Fold01  
## 6 VF    VF    0.951 0.0462 0.00272 0.00000384 Fold01  
## # ℹ 3,461 more rows

Como antes, hay factores para los resultados observados y previstos junto con otras cuatro columnas de probabilidades previstas para cada clase. (Estos datos también incluyen una columna Resample. Estos resultados hpc_cv son para predicciones fuera de muestra asociadas con una validación cruzada de 10 veces. Por el momento, esta columna se ignorará y discutiremos el remuestreo en profundidad en Capítulo 10.)

Las funciones para las métricas que utilizan predicciones de clases discretas son idénticas a sus contrapartes binarias:

accuracy(hpc_cv, obs, pred)
## # A tibble: 1 × 3
##   .metric  .estimator .estimate
##   <chr>    <chr>          <dbl>
## 1 accuracy multiclass     0.709

mcc(hpc_cv, obs, pred)
## # A tibble: 1 × 3
##   .metric .estimator .estimate
##   <chr>   <chr>          <dbl>
## 1 mcc     multiclass     0.515

Tenga en cuenta que, en estos resultados, aparece un .estimator “multiclase”. Al igual que “binario”, esto indica que se utilizó la fórmula para resultados con tres o más niveles de clase. El coeficiente de correlación de Matthews se diseñó originalmente para dos clases, pero se ha extendido a casos con más niveles de clase.

Existen métodos para tomar métricas diseñadas para manejar resultados con solo dos clases y extenderlas para resultados con más de dos clases. Por ejemplo, una métrica como la sensibilidad mide la tasa de verdaderos positivos que, por definición, es específica de dos clases (es decir, “evento” y “no evento”). ¿Cómo se puede utilizar esta métrica en nuestros datos de ejemplo?

Existen métodos contenedores que se pueden utilizar para aplicar sensibilidad a nuestro resultado de cuatro clases. Estas opciones son promedio macro, promedio macroponderado y micropromedio:

  • El promedio macro calcula un conjunto de métricas de uno contra todos utilizando las estadísticas estándar de dos clases. Estos están promediados.

  • El promedio macroponderado hace lo mismo, pero el promedio se pondera según el número de muestras de cada clase.

  • El micropromedio calcula la contribución de cada clase, las agrega y luego calcula una única métrica a partir de los agregados.

Consulte Wu y Zhou (2017) y Opitz y Burst (2019) para obtener más información sobre cómo ampliar las métricas de clasificación a resultados con más de dos clases.

Usando la sensibilidad como ejemplo, el cálculo habitual de dos clases es la relación entre el número de eventos predichos correctamente dividido por el número de eventos verdaderos. Los cálculos manuales para estos métodos de promediación son:

class_totals <- 
  count(hpc_cv, obs, name = "totals") %>% 
  mutate(class_wts = totals / sum(totals))
class_totals
##   obs totals class_wts
## 1  VF   1769   0.51024
## 2   F   1078   0.31093
## 3   M    412   0.11883
## 4   L    208   0.05999

cell_counts <- 
  hpc_cv %>% 
  group_by(obs, pred) %>% 
  count() %>% 
  ungroup()

# Calcule las cuatro sensibilidades usando 1 contra todos
one_versus_all <- 
  cell_counts %>% 
  filter(obs == pred) %>% 
  full_join(class_totals, by = "obs") %>% 
  mutate(sens = n / totals)
one_versus_all
## # A tibble: 4 × 6
##   obs   pred      n totals class_wts  sens
##   <fct> <fct> <int>  <int>     <dbl> <dbl>
## 1 VF    VF     1620   1769    0.510  0.916
## 2 F     F       647   1078    0.311  0.600
## 3 M     M        79    412    0.119  0.192
## 4 L     L       111    208    0.0600 0.534

# Tres estimaciones diferentes:
one_versus_all %>% 
  summarize(
    macro = mean(sens), 
    macro_wts = weighted.mean(sens, class_wts),
    micro = sum(n) / sum(totals)
  )
## # A tibble: 1 × 3
##   macro macro_wts micro
##   <dbl>     <dbl> <dbl>
## 1 0.560     0.709 0.709

Afortunadamente, no es necesario implementar manualmente estos métodos de promedio. En cambio, las funciones yardstick pueden aplicar automáticamente estos métodos a través del argumento estimator:

sensitivity(hpc_cv, obs, pred, estimator = "macro")
## # A tibble: 1 × 3
##   .metric     .estimator .estimate
##   <chr>       <chr>          <dbl>
## 1 sensitivity macro          0.560
sensitivity(hpc_cv, obs, pred, estimator = "macro_weighted")
## # A tibble: 1 × 3
##   .metric     .estimator     .estimate
##   <chr>       <chr>              <dbl>
## 1 sensitivity macro_weighted     0.709
sensitivity(hpc_cv, obs, pred, estimator = "micro")
## # A tibble: 1 × 3
##   .metric     .estimator .estimate
##   <chr>       <chr>          <dbl>
## 1 sensitivity micro          0.709

Cuando se trata de estimaciones de probabilidad, existen algunas métricas con análogos multiclase. Por ejemplo, Hand y Till (2001) determinó una técnica multiclase para curvas ROC. En este caso, todas las columnas de probabilidad de clase deben asignarse a la función:

roc_auc(hpc_cv, obs, VF, F, M, L)
## # A tibble: 1 × 3
##   .metric .estimator .estimate
##   <chr>   <chr>          <dbl>
## 1 roc_auc hand_till      0.829

El promedio macroponderado también está disponible como opción para aplicar esta métrica a un resultado multiclase:

roc_auc(hpc_cv, obs, VF, F, M, L, estimator = "macro_weighted")
## # A tibble: 1 × 3
##   .metric .estimator     .estimate
##   <chr>   <chr>              <dbl>
## 1 roc_auc macro_weighted     0.868

Finalmente, todas estas métricas de rendimiento se pueden calcular utilizando agrupaciones dplyr. Recuerde que estos datos tienen una columna para los grupos de remuestreo. Aún no hemos analizado el remuestreo en detalle, pero observe cómo podemos pasar un marco de datos agrupados a la función métrica para calcular las métricas para cada grupo:

hpc_cv %>% 
  group_by(Resample) %>% 
  accuracy(obs, pred)
## # A tibble: 10 × 4
##   Resample .metric  .estimator .estimate
##   <chr>    <chr>    <chr>          <dbl>
## 1 Fold01   accuracy multiclass     0.726
## 2 Fold02   accuracy multiclass     0.712
## 3 Fold03   accuracy multiclass     0.758
## 4 Fold04   accuracy multiclass     0.712
## 5 Fold05   accuracy multiclass     0.712
## 6 Fold06   accuracy multiclass     0.697
## # ℹ 4 more rows

Las agrupaciones también se traducen a los métodos autoplot(), y los resultados se muestran en Figura 9.4.

# Cuatro curvas ROC 1 contra todos para cada pliegue
hpc_cv %>% 
  group_by(Resample) %>% 
  roc_curve(obs, VF, F, M, L) %>% 
  autoplot()
Curvas ROC remuestreadas para cada una de las cuatro clases de resultados. Hay cuatro paneles para las clases VF, F, M y L. Cada panel contiene diez curvas ROC para cada uno de los conjuntos de datos remuestreados.
Figura 9.4: Curvas ROC remuestreadas para cada una de las cuatro clases de resultados.

Esta visualización nos muestra que todos los diferentes grupos se desempeñan más o menos igual, pero que la clase VF se predice mejor que las clases F o M, ya que las curvas ROC VF están más en la esquina superior izquierda. . Este ejemplo utiliza remuestreos como grupos, pero se puede utilizar cualquier agrupación de sus datos. Este método autoplot() puede ser un método de visualización rápida para la efectividad del modelo en todas las clases y/o grupos de resultados.

9.5 Resumen Del Capítulo

Diferentes métricas miden diferentes aspectos del ajuste de un modelo, por ejemplo, RMSE mide la precisión mientras que \(R^2\) mide la correlación. Medir el rendimiento del modelo es importante incluso cuando un modelo determinado no se utilizará principalmente para predicción; el poder predictivo también es importante para los modelos inferenciales o descriptivos. Las funciones del paquete yardstick miden la efectividad de un modelo utilizando datos. La interfaz principal de tidymodels utiliza principios de tidyverse y marcos de datos (en lugar de tener argumentos vectoriales). Diferentes métricas son apropiadas para las métricas de regresión y clasificación y, dentro de ellas, a veces hay diferentes formas de estimar las estadísticas, como para resultados multiclase.