La regresión logística predice todo 1, y no 0

10

Estoy realizando un análisis sobre la probabilidad de incumplimiento de préstamo utilizando regresión logística y bosques aleatorios.

Cuando uso la regresión logística, la predicción siempre es '1' (lo que significa un buen préstamo). Nunca he visto esto antes, y no sé por dónde empezar en términos de tratar de resolver el problema. Hay 22 columnas con 600K filas. Cuando disminuyo el número de columnas obtengo el mismo resultado con la regresión logística.

¿Por qué podría la regresión logística estar tan equivocada?

**Actual from the data**

0 :   41932

1 :   573426

**Logistic regression output** 

prediction for 1 when actually 0: 41932
prediction for 1 when actually 1:573426

A**s you can see, it always predicts a 1**


**Random forests does better:**

actual 0, pred 0 : 38800 
actual 1, pred 0 : 27 
actual 0, pred 1 : 3132
actual 1, pred 1 : 573399
ivan7707
fuente
44
Esto no tiene sentido. Logit no predecirá exactamente 0. Puede predecir un valor bajo que interpretó como 0. Entonces, el problema podría deberse al umbral, no solo al modelo en sí mismo
Aksakal
@ Aksakal, estoy usando el método scikit learn .predict. predecir etiquetas de clase para muestras en X
ivan7707
¿Conoces las curvas ROC? Puede extraer las probabilidades pronosticadas, luego jugar con el umbral para clasificar los datos usted mismo. El umbral es su palanca de compensación entre identificar valores predeterminados o no predeterminados.
Aksakal
1
Vea mi respuesta a continuación, pero también puede usar ROC para encontrar el punto óptimo en su configuración de clasificador para logit entre sensibilidad y especificidad
Aksakal
44
No use predicten sklearn en un modelo de probabilidad, es inútil. SIEMPRE use predict_proba.
Matthew Drury

Respuestas:

5

Bueno, tiene sentido que su modelo prediga siempre 1. Eche un vistazo a su conjunto de datos: está gravemente desequilibrado a favor de su clase positiva. La clase negativa representa solo ~ 7% de sus datos. Intente reequilibrar su conjunto de entrenamiento o use un algoritmo sensible al costo.

JimBoy
fuente
Gracias por el aporte. ¿Existe una regla general para lo que es aceptable para los datos desequilibrados, o buenas fuentes sobre cómo reequilibrar que podría sugerir?
ivan7707
Desafortunadamente, no hay una regla sobre cómo elegir un algoritmo, sino el "teorema de no almuerzo gratis". En su caso particular, primero iría con el paquete C5.0 de Ross Quinlan. Luego, podría experimentar con diferentes costos y técnicas de muestreo como muestreo ascendente y descendente, SMOTE, etc. Además, el sitio de Max Kuhn ofrece un buen resumen de los algoritmos establecidos.
JimBoy
77
(+1) En ausencia de una función de costo, parece que no hay razón para usar la regresión logística como clasificador : tiene las probabilidades pronosticadas y puede usar una regla de puntuación adecuada para evaluar el rendimiento de su modelo. Ver, por ejemplo, ¿Cuál es la medida para evaluar la precisión de la clasificación binaria para datos desequilibrados? . El desequilibrio no es un problema per se: ver ¿El muestreo descendente cambia los coeficientes de regresión logística? .
Scortchi - Restablece a Monica
@Scortchi, gracias por los enlaces y la idea de usar modelos con costos. Pude encontrar este enlace de papel que me lleva en la dirección correcta.
ivan7707
1
No, no tiene sentido que su modelo predice siempre 1s, porque el 7% es una tasa de incumplimiento bastante alta y el logit se usa ampliamente en los impagos de préstamos. Considere los préstamos con calificación AAA que tienen un incumplimiento del 0.1% anual. Los suyos son básicamente préstamos basura.
Aksakal
13

La respuesta corta es que la regresión logística es para estimar probabilidades , ni más ni menos. Puede estimar probabilidades sin importar cuán desequilibradoYes. Las curvas ROC y algunas de las otras medidas dadas en la discusión no ayudan. Si necesita tomar una decisión o tomar una acción, aplique la función de pérdida / utilidad / costo al riesgo previsto y elija la acción que optimice la utilidad esperada. Parece que muchos usuarios de aprendizaje automático no comprenden realmente los riesgos y las decisiones óptimas.

Frank Harrell
fuente
2
(+1) Sí, la pregunta es "¿está resolviendo un problema de clasificación o está resolviendo un problema de apoyo a la decisión?".
GeoMatt22
1
No estoy seguro de eso. La estimación de probabilidades es un gran resultado final. Y tenga en cuenta que la mayoría de los problemas de "clasificación" se abordan mejor utilizando decisiones óptimas de Bayes. Además del reconocimiento de patrones visuales y de audio, la mayoría de los problemas donde se aplican los métodos de clasificación se abordarían mejor con la estimación de probabilidad directa.
Frank Harrell
@FrankHarrell ¿Es correcto que interpretar la salida como probabilidades requiera un diseño que permita tal interpretación (cohorte). Y si no tenemos ese diseño, entonces tenemos que tomar una decisión basada en los "puntajes de riesgo". Además, aunque hay literatura que discute esto en el entorno no calibrado, esto no es tan común en la práctica. ¿Es esto correcto?
julio
1
Describa cómo el muestreo utilizado para ensamblar el conjunto de datos utilizado para el desarrollo del modelo difiere de los clientes a los que aplicará las predicciones.
Frank Harrell
Por ejemplo, el muestreo de casos y controles para el que se desconoce la prevalencia objetivo. O muestras de conveniencia de tamaño moderado.
julio
1

Cuando clasificas usando logit, esto es lo que sucede.

El logit predice la probabilidad de incumplimiento (PD) de un préstamo, que es un número entre 0 y 1. A continuación, establece un umbral D, de modo que marca un préstamo como predeterminado si PD> D, y lo marca como no predeterminado si PD

Naturalmente, en una población de préstamos típica PD << 1. Por lo tanto, en su caso, el 7% es una probabilidad bastante alta de datos de un año (las PD normalmente se informan anualmente). Si se trata de datos de varios años, entonces estamos hablando de la llamada PD acumulativa, en este caso cumPD = 7% no es un número alto para 10 años de datos, por ejemplo. Por lo tanto, según cualquier estándar, no diría que su conjunto de datos es problemático. Lo describiría al menos como típico para los datos de incumplimiento de préstamo, si no es excelente (en el sentido de que tiene un número relativamente alto de incumplimientos).

Ahora, suponga que su modelo predice los siguientes tres niveles de EP:

  • 0,1 (563,426)
  • 0.5 (20,000)
  • 0.9 (31,932)

Supongamos también que los valores predeterminados reales para estos grupos fueron:

  • 0 0
  • 10,000
  • 31,932

Ahora puede establecer D en diferentes valores y ver cómo cambia la matriz. Usemos D = 0.4 primero:

  • Predeterminado real, predecir no predeterminado: 0
  • Valor predeterminado real, valor predeterminado de predicción: 41,932
  • Real no predeterminado, predecir no predeterminado: 563,426
  • Real no predeterminado, predecir predeterminado: 10,000

Si configura D = 0.6:

  • Predeterminado real, predecir no predeterminado: 31,932
  • Valor predeterminado real, predecir valor predeterminado: 10,000
  • Real no predeterminado, predecir no predeterminado: 573,426
  • Real no predeterminado, predecir predeterminado: 0

Si configura D = 0.99:

  • Predeterminado real, predecir no predeterminado: 41,932
  • Valor predeterminado real, predecir valor predeterminado: 0
  • Real no predeterminado, predecir no predeterminado: 573,426
  • Real no predeterminado, predecir predeterminado: 0

El último caso es lo que ve en los resultados de su modelo. En este caso, enfatizo el umbral D para un clasificador. Un cambio simple en D puede mejorar ciertas características de su pronóstico. Tenga en cuenta que en los tres casos la PD prevista se mantuvo igual, solo el umbral D ha cambiado.

También es posible que su regresión logit sea mala, por supuesto. Entonces, en este caso tiene al menos dos variables: la especificación logit y el umbral. Ambos impactan su poder de pronóstico.

Aksakal
fuente
Te das cuenta de que estás proponiendo una técnica para tratar con datos desequilibrados, ¿verdad? Por lo tanto, está admitiendo el efecto de la clase más pequeña en la precisión de la predicción. Además, está proponiendo una técnica que el modelo original no está utilizando en absoluto. No puede simplemente cambiar las circunstancias a su gusto y luego inventar una declaración a medida que avanza.
JimBoy
En el análisis / pronóstico de incumplimiento de préstamo, los datos siempre están "desequilibrados" en este sentido. Es el estado normal de las cosas.
Aksakal
Esto puede ser como es. No obstante, debe echar un vistazo a lo que Max Kuhn describe como la "tasa de no información", que no es más que la clase más grande en el conjunto de datos. Entonces, eche un vistazo a la mesa que Ivan proporcionó nuevamente. Los resultados tienen mucho sentido para el modelo que utilizó. Que realmente puede optimizar esos resultados con diferentes técnicas es otra cuestión y completamente posible.
JimBoy
@JimBoy, vi su mesa y vi muchas más así. La suya es bastante simple, usualmente tratamos con datos de morosidad de préstamos, donde los estados van desde Actual hasta 30 días vencidos, 60, 90 ... hasta Incumplimiento y Cerrado. En una buena cartera, puede tener 95% de préstamos en estado Actual (limpio) y solo 1% en Incumplimiento. La gente usa logit mulltinomial para este tipo de cosas todo el tiempo en la industria.
Aksakal
@ Aksakal, tendré que leer más sobre cómo cambiar el umbral, ya que he leído mucho sobre cómo es matemáticamente incorrecto cambiarlo para la regresión logística. En otra nota, ¿qué quisiste decir con 'es posible que tu regresión logit en sí misma sea mala'?
ivan7707
1

Si el problema es el desequilibrio entre las clases, simplemente comenzaría equilibrando los pesos de las clases:

log_reg = LogisticRegression(class_weight = 'balanced')

Esta configuración de parámetros significa que las penalizaciones por predicciones falsas en la función de pérdida se ponderarán con proporciones inversas a las frecuencias de las clases. Esto puede resolver el problema que describe.

Tal Yifat
fuente
No me queda claro que hayas identificado el problema. Creo que Matthew Drury dio con el problema que tenía que ver con el uso de sklearn.
Michael R. Chernick
0

Bueno, sin más información es difícil de decir, pero por la definición de regresión logística estás saturando con base en los datos ajustados. Entonces, en la ecuación, el término e ^ -t va a 0. Entonces, el primer lugar para mirar sería ver cuáles son los coeficientes reales.

Esto también podría deberse a variables escasamente escaladas. Puede haber un problema en el que una de las columnas tiene un gran valor numérico en comparación con otras que está causando problemas.

Tim Felty
fuente
@ Tim Felty, gracias por la respuesta. ¿Puede ampliar lo que estaría buscando con respecto a los coeficientes y cómo se relaciona esto con la saturación (o señalarme un recurso para leer)? Además, tenía la impresión de que las variables mal escaladas no tendrían un efecto negativo en la regresión logística. [link (] stats.stackexchange.com/questions/18916/… )
ivan7707
0

Puede usar SMOTE para equilibrar el conjunto de datos no balanceado. Un buen artículo de referencia es:

Lifeng Zhou, Hong Wang, Predicción de préstamo predeterminado en grandes datos desequilibrados utilizando bosques aleatorios, TELKOMNIKA Indonesian Journal of Electrical Engineering, Vol.10, No.6, octubre de 2012, págs. 1519 ~ 1525, enlace .

Tushar Gadkari
fuente
¿Podría agregar una cita / referencia completa (incluyendo autor, fecha, editor, etc.) como lo haría en un artículo académico? Esto facilitaría a los futuros lectores rastrearlo si el enlace deja de funcionar
Silverfish