Precisión de medición de un modelo basado en regresión logística


26

Tengo un modelo de regresión logística entrenado que estoy aplicando a un conjunto de datos de prueba. La variable dependiente es binaria (booleana). Para cada muestra en el conjunto de datos de prueba, aplico el modelo de regresión logística para generar un% de probabilidad de que la variable dependiente sea verdadera. Luego registro si el valor acutal era verdadero o falso. Estoy tratando de calcular una figura o ajustada como en un modelo de regresión lineal.R2R2

Esto me da un registro para cada muestra en el conjunto de pruebas como:

prob_value_is_true         acutal_value
   .34                          0
   .45                          1
   .11                          0
   .84                          0
    ....                        ....          

Me pregunto cómo probar la precisión del modelo. Mi primer intento fue usar una tabla de contingencia y decir "si prob_value_is_true> 0,80, supongo que el valor real es verdadero" y luego medir la proporción de clasificaciones correctas a incorrectas. Pero no me gusta eso, porque parece que solo estoy evaluando el 0.80 como límite, no la precisión del modelo en su conjunto y en todos los prob_value_is_truevalores.

Luego traté de mirar cada valor discreto prob_value_is_true, como ejemplo, mirando todas las muestras donde prob_value_is_true= 0.34 y midiendo el% de esas muestras donde el valor acutal es verdadero (en este caso, la precisión perfecta sería si el% de muestras eso era cierto = 34%). Podría crear un puntaje de precisión del modelo sumando la diferencia en cada valor discreto de prob_value_is_true. Pero los tamaños de muestra son una gran preocupación aquí, especialmente para los extremos (cerca del 0% o 100%), de modo que los promedios de los valores agudos no son precisos, por lo que usarlos para medir la precisión del modelo no parece correcto.

Incluso intenté crear rangos enormes para asegurar tamaños de muestra suficientes (0-.25, .25-.50, .50-.75, .75-1.0), pero la forma de medir la "bondad" de ese% del valor real me desconcierta . Digamos que todas las muestras prob_value_is_trueentre 0.25 y 0.50 tienen un promedio acutal_valuede 0.45. ¿Eso es bueno ya que está en el rango? ¿Malo ya que no está cerca del 37.5% (el centro del rango)?

Así que estoy atascado en lo que parece ser una pregunta fácil, y espero que alguien pueda señalarme un recurso o método para calcular una precisión estática para un modelo de regresión logística.


Creo que el ejemplo de rangos: (0-.25, .25-.50, .50-.75, .75-1.0) tiene sentido. ¿Sería útil reducir los rangos? Tales como: 0-.03, .03-.06, .06-.09, ..... es decir, cada .03. Esto podría ser útil para regiones con muchos puntos de datos.
mac

Respuestas:


18

Una medida que a menudo se usa para validar la regresión logística, es el AUC de la curva ROC (gráfico de sensibilidad frente a especificidad 1, solo google para los términos si es necesario). Esto, en esencia, evalúa todo el rango de valores umbral.

En el lado negativo: evaluar todo el rango de valores de umbral puede no ser lo que busca, ya que esto (típicamente) incluye umbrales que resultan en un gran número de falsos negativos o falsos positivos. Hay versiones de las AUC que explican esto (AUC parcial), por lo que si eso es un problema para usted, puede investigarlo.


1
Dejando de lado a AUC por un momento, ¿estoy en lo cierto al suponer que la construcción de la curva ROC es algo así? Para cada valor discreto de prob_value_is_true, cree una tabla de contingencia utilizando el valor discreto como umbral. Luego registre la tasa positiva verdadera y la tasa positiva falsa de cada tabla de contingencia. Trace las tasas para todas las tablas de contingnency en un diagrama de dispersión y debería ver la curva ROC? ¿Eso suena bien?
John Reed

Puse un código para hacer esto, simplemente alimentando valores aleatorios como la probabilidad y el valor real, y era una línea recta. ¿Asumo que AUC está midiendo la desviación de la "curva" de un modelo ajustado contra la "línea" o aleatoriedad?
John Reed

Con respecto a ROC: sí, eso es correcto. Hay algunas variantes (más o menos suavizadas; teniendo en cuenta las probabilidades predichas para su elección de umbrales o no). Tenga en cuenta que (dependiendo del software / idioma que elija) hay una gran cantidad de herramientas que ya ofrecen esto. Wrt AUC: no es más o menos que el área real bajo la curva ROC. No con un predictor aleatorio perfecto, la curva ROC sería una línea recta de (0,0) a (1,1), lo que da como resultado un AUC de 0,5. Sin embargo, las AUC tienen algunas buenas interpretaciones (ver Google o Wikipedia incluso :-))
Nick Sabbe

8

Tiene razón al preocuparse por la proporción clasificada correcta como que refleja principalmente el efecto de un límite arbitrario. Recomiendo dos medidas. Uno es el área index o ROC como otros han descrito. Esto tiene una interpretación que es más simple que pensar en una curva ROC, y es una medida de discriminación predictiva pura. En segundo lugar, estimar una curva de calibración continua sin ningún agrupamiento de datos. Si las predicciones se evalúan en un conjunto de datos independiente, puede usarlo con la detección de valores atípicos desactivada para estimar la relación entre Prob predicho y real [Y = 1]. La función en el paquete R hará ambas cosas. Otras funciones endolowessval.probrmsrms hará lo mismo para la validación interna, usando remuestreo para eliminar los efectos del sobreajuste.


6

Si sus datos están agrupados por valores de , puede calcular el valor predicho del modelo y su intervalo de confianza asociado, y ver si el porcentaje observado se encuentra dentro de ese rango. Por ejemplo, si tuviera 10 observaciones en x = 10 , 10 obs en x = 20 , 10 obs en x = 30 , etc., a continuación , , etc., produciría porcentajes que se pueden comparar con las predicciones. Tenga en cuenta que, incluso si el modelo es perfecto, algunos porcentajes observados rebotarán fuera del IC del 95%, al igual que en la regresión OLS. Si sus datos no están agrupados, puede formar sus propios grupos agrupando los datos según los rangos de la xXX=10X=20X=30mean(y[x==10]==1)mean(y[x==20]==1)Xvariable, como sugieres. Esto no es completamente válido, ya que dependerá de la elección de los contenedores, puede ser útil como una forma de explorar su modelo.

En general, la tarea que te has encomendado aquí es difícil. Eso es porque, con la regresión logística, se trata de dos tipos diferentes de cosas. Las predicciones del modelo son una variable latente, mientras que su variable de respuesta observada (aunque probablemente generada por una variable latente) no lo es. Por supuesto, las personas a menudo querrán saber cuál es la respuesta prevista, y eso es totalmente razonable; Este es solo uno de esos casos en los que la vida no es justa.

y=1y^.5y=1y^pags(y=1)y^=.31y1<.5

(0 0,1)R2R2do


¡Gran respuesta! Entonces, en el ejemplo de que el 30% de todos los casos son 1, la probabilidad pronosticada de 0,31 de un caso particular es como una "clasificación" de este caso en relación con otros casos sobre qué tan cerca está de 1 (cuanto más grande es el más cercano). ¿Y no debería verse como la probabilidad pronosticada de que este caso particular sea 1?
mac

1
y^yo=.311.31.31.25

3

Creo que podría establecer un umbral (digamos 0.5), de modo que cuando su probabilidad sea igual o mayor que ese umbral, su clase pronosticada sería 1 y 0 en caso contrario. Entonces, podría obtener una medida de su precisión de esta manera:

confusion_matrix <- ftable(actual_value, predicted_value)
accuracy <- sum(diag(confusion_matrix))/number of events*100

Dado que su probabilidad es la probabilidad de dar sus datos (x) y usar su modelo su valor de clase (y) es igual a 1, no entiendo por qué siempre obtiene valores de probabilidad inferiores a 0.5. ¿Cuál es la frecuencia de tus clases reales (valor_real)?


2

Es posible que desee ver mi paquete softclassval(en softclassval.r-forge.r-project.org también encontrará dos presentaciones orales que di sobre las ideas detrás del paquete).

Lo escribí para un problema ligeramente diferente, a saber, si la referencia (por ejemplo, el patólogo) "se niega" a dar una clase clara. Sin embargo, puede usarlo con clases duras "normales" y evita la definición de un umbral para endurecer la predicción originalmente continua , por lo que no evalúa el 0.8.

Sin embargo, recomiendo usarlo junto con, por ejemplo, un ROC o un diagrama de especificidad-sensibilidad: los resultados a menudo se verán bastante malos ya que "mis" métodos penalizarán las desviaciones ya leves (por ejemplo, 0.9 en lugar de 1 da una diferencia de 0.1 para mis medidas , pero todos los umbrales por debajo de 0.9 ignorarán esto). En realidad, creo que es más bien una ventaja: la falta de esta sensibilidad contra pequeñas desviaciones es uno de los principales puntos de crítica con esas medidas "endurecidas" como la precisión, la sensibilidad, el recuerdo, etc.

Además, al comparar el error absoluto medio (MAE) y el error cuadrático medio de raíz RMSE, puede averiguar si tiene muchas desviaciones pequeñas o menos muestras muy mal juzgadas.


1

PAGSryo=yonortevlosolyot(una+siXyo)

y.rmipags[yo]simirnorteotullyo(pags[yo])

Luego, ejecute esta simulación, digamos, 100 veces. Tendrá una matriz con n filas (n es el número de sujetos) yk columnas (en este caso, k = 100, el número de simulaciones). En el código r:

for (j  in 1:100)
  mat.y.rep[,j] <- Bernoulli ( p) # p is a vector with a probability for each subject

Ahora calcula la diferencia entre lo predicho en cada simulación y lo observado. Después de calcular esta diferencia, solo calcule el número medio de verdadero positivo y falso positivo para cada fila (cada sujeto) y trace el histograma. O calcule ambos para cada columna (simulación) e trace el histograma (prefiero esto).

Espero eso ayude...


1

Hay muchas maneras de estimar la precisión de tales predicciones y la elección óptima realmente depende de para qué se implementará la estimación.

Por ejemplo, si planea seleccionar algunos resultados de puntaje alto para un estudio de seguimiento costoso, es posible que desee maximizar la precisión en puntajes altos. Por otro lado, si el estudio de seguimiento es barato, es posible que desee maximizar el recuerdo (sensibilidad) con puntajes más bajos. El ROC AUC puede ser adecuado si está comparando un método diferente, etc.

En el aspecto práctico, Rel ROCRpaquete contiene 2 funciones útiles.

pred.obj <- prediction(predictions, labels,...)
performance(pred.obj, measure, ...)

Juntas, estas funciones pueden calcular una amplia gama de medidas de precisión, incluidos valores escalares globales (como "auc" ) y vectores dependientes de la puntuación para trazar curvas de precisión de recuperación y ROC ( "prec" , "rec" , "tpr" y "fpr" , etc.)


1

Debe definir lo que quiere decir con "precisión". Lo que le gustaría saber, disculpe por poner palabras en su boca, es qué tan bien su modelo se ajusta a los datos de entrenamiento y, lo que es más importante, qué tan bien "generaliza" este modelo a las muestras que no están en sus datos de entrenamiento. Aunque las curvas ROC pueden ser útiles para analizar el equilibrio entre precisión y recuperación para varios valores del umbral, sugiero agregar un error de cuadrado medio o la puntuación de Brier a su caja de herramientas. Es fácil de calcular e inmediatamente puede tener una idea de si los cambios en las características afectan el ajuste del modelo, cuando se aplican a los datos de entrenamiento. Dado que el sobreajuste es posible en este caso, su trabajo no se hace aquí. Para evaluar el rendimiento de la generalización, o qué tan bien le va en los datos que no ha visto, no es Lo suficiente como para observar su desempeño en las muestras de entrenamiento Por supuesto, su modelo es bueno en eso, porque son los valores que utilizó para determinar los coeficientes de su logística. Debe reservar algunas muestras para los datos de prueba. Su rendimiento de MSE en este conjunto debe establecer sus expectativas de generalización de acuerdo con la desigualdad de Hoeffding. Su error de generalización máxima dependerá de la cantidad de características en su modelo, así como de la cantidad de muestras utilizadas para calcular la estadística de prueba. Tenga en cuenta que necesitará robar algunas de sus muestras de entrenamiento para muestras de prueba. Recomiendo la validación cruzada 10 veces, donde baraja, elige el 90% para el entrenamiento, el 10% para las pruebas y luego mide, repite y luego promedia todas las mediciones. porque son los valores que usó para determinar los coeficientes de su logística. Debe reservar algunas muestras para los datos de prueba. Su rendimiento de MSE en este conjunto debe establecer sus expectativas de generalización de acuerdo con la desigualdad de Hoeffding. Su error de generalización máxima dependerá de la cantidad de características en su modelo, así como de la cantidad de muestras utilizadas para calcular la estadística de prueba. Tenga en cuenta que necesitará robar algunas de sus muestras de entrenamiento para muestras de prueba. Recomiendo la validación cruzada 10 veces, donde baraja, elige el 90% para el entrenamiento, el 10% para las pruebas y luego mide, repite y luego promedia todas las mediciones. porque son los valores que usó para determinar los coeficientes de su logística. Debe reservar algunas muestras para los datos de prueba. Su rendimiento de MSE en este conjunto debe establecer sus expectativas de generalización de acuerdo con la desigualdad de Hoeffding. Su error de generalización máxima dependerá de la cantidad de características en su modelo, así como de la cantidad de muestras utilizadas para calcular la estadística de prueba. Tenga en cuenta que necesitará robar algunas de sus muestras de entrenamiento para muestras de prueba. Recomiendo la validación cruzada 10 veces, donde baraja, elige el 90% para el entrenamiento, el 10% para las pruebas y luego mide, repite y luego promedia todas las mediciones. Su rendimiento de MSE en este conjunto debe establecer sus expectativas de generalización de acuerdo con la desigualdad de Hoeffding. Su error de generalización máxima dependerá de la cantidad de características en su modelo, así como de la cantidad de muestras utilizadas para calcular la estadística de prueba. Tenga en cuenta que necesitará robar algunas de sus muestras de entrenamiento para muestras de prueba. Recomiendo la validación cruzada 10 veces, donde baraja, elige el 90% para el entrenamiento, el 10% para las pruebas y luego mide, repite y luego promedia todas las mediciones. Su rendimiento de MSE en este conjunto debe establecer sus expectativas de generalización de acuerdo con la desigualdad de Hoeffding. Su error de generalización máxima dependerá de la cantidad de características en su modelo, así como de la cantidad de muestras utilizadas para calcular la estadística de prueba. Tenga en cuenta que necesitará robar algunas de sus muestras de entrenamiento para muestras de prueba. Recomiendo la validación cruzada 10 veces, donde baraja, elige el 90% para el entrenamiento, el 10% para las pruebas y luego mide, repite y luego promedia todas las mediciones.


1

0 0-Iniciar sesión(1-pags^)0 01-Iniciar sesión(pags^)1

Esto no sufre de umbrales arbitrarios. Cuanto más pequeña sea la medida, mejor.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.