R Sessions for Business

ft. Manuel Lecuanda

Vol. 1, Ed. 2023

Sesión 5: Logistic Regression

13 de noviembre de 2023

Resultados binarios

La regresión logística es una técnica estadística utilizada en análisis de datos y machine learning para modelar la relación entre una variable dependiente binaria (que solo puede tener dos valores posibles, como 0 o 1, sí o no, verdadero o falso) y una o más variables independientes.

Se utiliza comunmente en problemas de clasificación, donde el objetivo es predecir la probabilidad de que una observación pertenezca a una de las dos categorías mutuamente excluyentes.

A diferencia de la regresión lineal, que se utiliza para predecir valores numéricos continuos, la regresión logística se utiliza para problemas de clasificación. La función de regresión logística transforma la suma ponderada de las variables independientes en un valor entre 0 y 1, que puede interpretarse como la probabilidad de que la observación pertenezca a la categoría 1.

La función utilizada comúnmente para esto es la función logística o sigmoide, que tiene la siguiente forma:

Regresión logística en los negocios

La regresión logística tiene una amplia gama de aplicaciones en el mundo de los negocios. A continuación, se presentan algunos de los usos comunes de la regresión logística en el ámbito empresarial:

  1. Predicción de la probabilidad de compra: Las empresas pueden utilizar la regresión logística para predecir la probabilidad de que un cliente realice una compra. Esto es valioso para personalizar las ofertas y estrategias de marketing dirigidas a clientes específicos, lo que puede aumentar las tasas de conversión y la retención de clientes.

  2. Valuación de riesgo crediticio: Las instituciones financieras utilizan la regresión logística para evaluar el riesgo crediticio de los solicitantes de préstamos. El modelo puede predecir la probabilidad de que un cliente incumpla con los pagos, lo que ayuda a tomar decisiones informadas sobre la aprobación o denegación de créditos.

  3. Detección de fraude: La regresión logística se utiliza en la detección de fraudes, como fraudes con tarjetas de crédito. Ayuda a identificar patrones inusuales de transacciones que podrían indicar actividades fraudulentas, lo que permite tomar medidas preventivas a tiempo.

  4. Segmentación de clientes: Las empresas pueden utilizar la regresión logística para segmentar a sus clientes en grupos o segmentos basados en características similares. Esto ayuda en la personalización de estrategias de marketing y en la oferta de productos o servicios específicos para cada segmento.

  5. Evaluación de satisfacción del cliente: Se puede utilizar la regresión logística para predecir la satisfacción del cliente en función de variables como el tiempo de respuesta al servicio al cliente, la calidad del producto y otros factores. Esto permite a las empresas identificar áreas de mejora.

  6. Predicción de rotación de empleados: Las organizaciones pueden utilizar la regresión logística para predecir la probabilidad de que un empleado deje la empresa. Esto es útil para la gestión de recursos humanos y la retención de talento.

  7. Optimización de precios: La regresión logística puede ayudar a las empresas a determinar cómo los cambios en los precios afectarán la demanda de sus productos o servicios. Esto puede ser útil para maximizar los ingresos y las ganancias.

  8. Análisis de mercado y pronóstico de ventas: La regresión logística se utiliza para analizar el comportamiento del mercado y predecir las ventas futuras en función de diversas variables, como la publicidad, las tendencias económicas y la competencia.

  9. Evaluación de riesgo de cumplimiento normativo: En industrias altamente reguladas, como la farmacéutica o la financiera, la regresión logística se utiliza para evaluar el cumplimiento normativo y predecir posibles infracciones.

Objetivo

El objetivo de estimar una regresión logística es encontrar las relaciones entre varios factores de datos y crear un modelo predictivo que calcule la probabilidad de éxito o fracaso de un evento.

La regresión logística busca estimar una función logística diseñada para mapear la relación entre una variable independiente y la probabilidad de éxito o fracaso. Esta función logística toma en cuenta los valores de los predictores y produce una probabilidad entre 0 y 1. El modelo luego clasifica un resultado como “éxito” o “fracaso” en función de si esta probabilidad está por encima o por debajo de un cierto umbral definido.

La regresión logística es una herramienta poderosa para predecir resultados binarios, ya que se puede aplicar tanto a conjuntos de datos lineales como no lineales. Además, es relativamente fácil interpretar sus resultados.

Función logística

A diferencia de la regresión lineal, que se utiliza para predecir valores numéricos continuos, la regresión logística se utiliza para problemas de clasificación. La función de regresión logística transforma la suma ponderada de las variables independientes en un valor entre 0 y 1, que puede interpretarse como la probabilidad de que la observación pertenezca a la categoría 1.

La función utilizada comúnmente para esto es la función logística o sigmoide, que tiene la siguiente forma:

\[Prob(Y=1)=\frac{1}{1-e^{\beta_0 + \beta_1X_1 + \beta_2X_2 + \cdots}}\] donde

  • \(P(Y=1)\) es la probabilidad de que la variable dependiente sea igual a 1.
  • \(X_1, X_2, X_3, \cdots\) son las variables independientes y que determinan la probabilidad de la ocurrencia de la variable dependiente.
  • \(\beta_0, \beta_1, \beta_2, \cdots\) son los coeficientes de regresión que ponderan las variables independientes.

El objetivo en la regresión logística es encontrar los estimadores de esta función que maximizan la probabilidad de ocurrencia de los datos observados.

Una vez que se ha ajustado el modelo de regresión logística a los datos de entrenamiento, se puede utilizar para predecir la probabilidad de que nuevas observaciones caigan en la categoría 1 o 0, y se puede aplicar un umbral para tomar decisiones de clasificación.

Ejemplo aplicado

Las instituciones financieras, como los bancos utilizan este modelo para determinar si sus usuarios son capaces de pagar la deuda que han contraído.

Pero hay otros objetivos principales al hacerlo, que son los siguientes:

  • Maximizar las ganancias por usuario (a través de la tasa de interés del crédito)
  • Mejorar la gestión de la deuda
  • Scoring de fraude y atrición
  • Aumentar la efectividad de las campañas de marketing

El propósito principal de este ejemplo es mostrar cómo se utiliza la ciencia de datos para crear un modelo de scoring crediticio simple utilizando la Regresión Logística.

Implementación en R

Empezamos por activar las librerías que vamos a utilizar. Recuerde que primero debe instalar los paquetes con el comando install.packages(“paquete”):

install.packages("dplyr")
install.packages("AER")

luego activamos las librerías

library(dplyr)
library(AER)

Empezamos por leer los datos:

data(HMDA)

Este conjunto de datos contiene información sobre hipotecas, factores demográficos, datos crediticios, historial de pagos y estados de un poco más de 2000 individuos. La descripción de las 25 variables (en inglés) puede verse con el comando:

?HMDA

y podemos obtener su descripción general con las siguiente instrucción:

head(HMDA)
##   deny pirat hirat     lvrat chist mhist phist unemp selfemp insurance condomin
## 1   no 0.221 0.221 0.8000000     5     2    no   3.9      no        no       no
## 2   no 0.265 0.265 0.9218750     2     2    no   3.2      no        no       no
## 3   no 0.372 0.248 0.9203980     1     2    no   3.2      no        no       no
## 4   no 0.320 0.250 0.8604651     1     2    no   4.3      no        no       no
## 5   no 0.360 0.350 0.6000000     1     1    no   3.2      no        no       no
## 6   no 0.240 0.170 0.5105263     1     1    no   3.9      no        no       no
##   afam single hschool
## 1   no     no     yes
## 2   no    yes     yes
## 3   no     no     yes
## 4   no     no     yes
## 5   no     no     yes
## 6   no     no     yes
summary(HMDA)
##   deny          pirat            hirat            lvrat        chist   
##  no :2095   Min.   :0.0000   Min.   :0.0000   Min.   :0.0200   1:1353  
##  yes: 285   1st Qu.:0.2800   1st Qu.:0.2140   1st Qu.:0.6527   2: 441  
##             Median :0.3300   Median :0.2600   Median :0.7795   3: 126  
##             Mean   :0.3308   Mean   :0.2553   Mean   :0.7378   4:  77  
##             3rd Qu.:0.3700   3rd Qu.:0.2988   3rd Qu.:0.8685   5: 182  
##             Max.   :3.0000   Max.   :3.0000   Max.   :1.9500   6: 201  
##  mhist    phist          unemp        selfemp    insurance  condomin  
##  1: 747   no :2205   Min.   : 1.800   no :2103   no :2332   no :1694  
##  2:1571   yes: 175   1st Qu.: 3.100   yes: 277   yes:  48   yes: 686  
##  3:  41              Median : 3.200                                   
##  4:  21              Mean   : 3.774                                   
##                      3rd Qu.: 3.900                                   
##                      Max.   :10.600                                   
##   afam      single     hschool   
##  no :2041   no :1444   no :  39  
##  yes: 339   yes: 936   yes:2341  
##                                  
##                                  
##                                  
## 

Necesitamos transformar primero unas variables, por ejemplo:

HMDA$deny <- as.numeric(HMDA$deny) - 1
colnames(HMDA)[colnames(HMDA) == "afam"] <- "black"
summary(HMDA)
##       deny            pirat            hirat            lvrat        chist   
##  Min.   :0.0000   Min.   :0.0000   Min.   :0.0000   Min.   :0.0200   1:1353  
##  1st Qu.:0.0000   1st Qu.:0.2800   1st Qu.:0.2140   1st Qu.:0.6527   2: 441  
##  Median :0.0000   Median :0.3300   Median :0.2600   Median :0.7795   3: 126  
##  Mean   :0.1197   Mean   :0.3308   Mean   :0.2553   Mean   :0.7378   4:  77  
##  3rd Qu.:0.0000   3rd Qu.:0.3700   3rd Qu.:0.2988   3rd Qu.:0.8685   5: 182  
##  Max.   :1.0000   Max.   :3.0000   Max.   :3.0000   Max.   :1.9500   6: 201  
##  mhist    phist          unemp        selfemp    insurance  condomin  
##  1: 747   no :2205   Min.   : 1.800   no :2103   no :2332   no :1694  
##  2:1571   yes: 175   1st Qu.: 3.100   yes: 277   yes:  48   yes: 686  
##  3:  41              Median : 3.200                                   
##  4:  21              Mean   : 3.774                                   
##                      3rd Qu.: 3.900                                   
##                      Max.   :10.600                                   
##  black      single     hschool   
##  no :2041   no :1444   no :  39  
##  yes: 339   yes: 936   yes:2341  
##                                  
##                                  
##                                  
## 

Si estimáramos el modelo lineal:

denymod1 <- lm(deny ~ pirat, data = HMDA)
summary(denymod1)
## 
## Call:
## lm(formula = deny ~ pirat, data = HMDA)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.73070 -0.13736 -0.11322 -0.07097  1.05577 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -0.07991    0.02116  -3.777 0.000163 ***
## pirat        0.60353    0.06084   9.920  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.3183 on 2378 degrees of freedom
## Multiple R-squared:  0.03974,    Adjusted R-squared:  0.03933 
## F-statistic: 98.41 on 1 and 2378 DF,  p-value: < 2.2e-16

Gráficamente:

plot(x = HMDA$pirat, 
     y = HMDA$deny,
     main = "Gráfica 1. Modelo Lineal",
     xlab = "Relación pagos e ingresos",
     ylab = "Denegada",
     pch = 20,
     ylim = c(-0.4, 1.4),
     cex.main = 0.8)
abline(h = 1, lty = 2, col = "steelblue")
abline(h = 0, lty = 2, col = "steelblue")
text(2.5, 0.9, cex = 0.8, "No aprobados")
text(2.5, -0.1, cex= 0.8, "Aprobados")
abline(denymod1, lwd = 1.8, col = "darkred")

En estos casos, el modelo lineal no permite obtener buenas estimaciones para la probabilidad de una variable binaria, por ello preferimos la regresión logística. Para ello utilizamos la función glm:

denylogit <- glm(deny ~ pirat, 
                 family = binomial(link = "logit"), 
                 data = HMDA)
summary(denylogit)
## 
## Call:
## glm(formula = deny ~ pirat, family = binomial(link = "logit"), 
##     data = HMDA)
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept)  -4.0284     0.2686 -14.999  < 2e-16 ***
## pirat         5.8845     0.7336   8.021 1.05e-15 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1744.2  on 2379  degrees of freedom
## Residual deviance: 1660.2  on 2378  degrees of freedom
## AIC: 1664.2
## 
## Number of Fisher Scoring iterations: 5

Gráficamente podemos ver que se trata de un modelo más adecuado:

plot(x = HMDA$pirat, 
     y = HMDA$deny,
     main = "Gráfica 2. Modelo logístico",
     xlab = "Relación de pagos e ingresos",
     ylab = "Denegado",
     pch = 20,
     ylim = c(-0.4, 1.4),
     cex.main = 0.9)
abline(h = 1, lty = 2, col = "steelblue")
abline(h = 0, lty = 2, col = "steelblue")
text(2.5, 0.9, cex = 0.8, "No aprobado")
text(2.5, -0.1, cex= 0.8, "Aprobado")
x <- seq(0, 3, 0.01)
y_logit <- predict(denylogit, list(pirat = x), type = "response")
lines(x, y_logit, lwd = 1.5, col = "darkred")

Con este modelo podemos predecir la probabilidad de que un cierto individuo se le apruebe o no su crédito hipotecario. Por ejemplo:

prediccion<- predict(denylogit, 
                       newdata = data.frame("pirat" = c(0.3, 0.4,0.5,0.6)),
                       type = "response")
prediccion
##          1          2          3          4 
## 0.09422692 0.15780744 0.25233766 0.37807344

Finalmente, para estimar la bondad de ajuste de nuestro modelo, podemos calcular el número de aciertos del total de observaciones bien clasificados. Para ello, primero calculamos los valores predichos:

fitted.prob <- plogis(predict(denylogit, type = "link"))
table <- data.frame(Real = HMDA$deny, 
                    Predicción = fitted.prob, 
                    Error = HMDA$deny - fitted.prob)
head(table)
##   Real Predicción       Error
## 1    0 0.06134363 -0.06134363
## 2    0 0.07805727 -0.07805727
## 3    0 0.13712239 -0.13712239
## 4    0 0.10476252 -0.10476252
## 5    0 0.12897939 -0.12897939
## 6    0 0.06810606 -0.06810606

Ahora podemos clasificar nuestras estimaciones:

table2<-data.frame(Real = HMDA$deny, 
           Predicción= round(fitted.prob), 
           Correcto = ifelse(HMDA$deny == round(fitted.prob), 
                             "Correcto", "Incorrecto"))
summary(table2)
##       Real          Predicción         Correcto        
##  Min.   :0.0000   Min.   :0.000000   Length:2380       
##  1st Qu.:0.0000   1st Qu.:0.000000   Class :character  
##  Median :0.0000   Median :0.000000   Mode  :character  
##  Mean   :0.1197   Mean   :0.007143                     
##  3rd Qu.:0.0000   3rd Qu.:0.000000                     
##  Max.   :1.0000   Max.   :1.000000

o bien, en porcentaje:

table(table2$Correcto)
## 
##   Correcto Incorrecto 
##       2100        280
100*prop.table(table(table2$Correcto))
## 
##   Correcto Incorrecto 
##   88.23529   11.76471

El modelo puede mejorarse al incluir nuevas variables como determinantes de la ocurrencia de nuestra variable binaria.

Conclusión

El modelo logístico es la elección preferida sobre el modelo de regresión lineal al abordar problemas de estimación en modelos de respuesta binaria. Mientras que la regresión lineal asume una relación lineal continua entre las variables predictoras y la variable de respuesta, el modelo logístico se adapta de manera más efectiva a la naturaleza dicotómica de los resultados binarios. Su capacidad para proporcionar estimaciones de probabilidad y asignar valores entre cero y uno, junto con la función sigmoide que limita la salida a este rango, lo convierten en un enfoque más apropiado para eventos binarios. Además, el modelo logístico es robusto ante la presencia de valores atípicos y exhibe una mayor capacidad para modelar relaciones no lineales, lo que lo posiciona como una herramienta más precisa y versátil en la estimación de fenómenos que involucran respuestas binarias.

Referencias

  • Cameron, A. C. and P.K. Trivedi, “Microeconometrics: Methods and Applications”. New York, N.Y.: Cambridge University, 2005.
  • Cramer, J.S. “Logit Models from Economics and Other Fields”, 2nd edition, Cambridge University Press, 2003.