Identificar mediante modelo de regresión logística la probabilidad de pago o no Pago de un cliente En el ejemplo se modela la probabilidad de fraude por impago (default) en función del balance de la cuenta bancaria (balance). # Las librerías

library(tidyverse)
## Warning: package 'tidyverse' was built under R version 3.6.3
## -- Attaching packages -------------------------------------------------------- tidyverse 1.3.0 --
## v ggplot2 3.2.1     v purrr   0.3.3
## v tibble  2.1.3     v dplyr   0.8.4
## v tidyr   1.0.2     v stringr 1.4.0
## v readr   1.3.1     v forcats 0.5.0
## Warning: package 'forcats' was built under R version 3.6.3
## -- Conflicts ----------------------------------------------------------- tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
library(ISLR)
## Warning: package 'ISLR' was built under R version 3.6.3
library(dplyr)
library(ggplot2)

Los datos

Default es un connunto de datos ya existente que viene con las librerías cargadas

datos <- Default
head(datos)
##   default student   balance    income
## 1      No      No  729.5265 44361.625
## 2      No     Yes  817.1804 12106.135
## 3      No      No 1073.5492 31767.139
## 4      No      No  529.2506 35704.494
## 5      No      No  785.6559 38463.496
## 6      No     Yes  919.5885  7491.559
tail(datos)
##       default student   balance   income
## 9995       No     Yes  172.4130 14955.94
## 9996       No      No  711.5550 52992.38
## 9997       No      No  757.9629 19660.72
## 9998       No      No  845.4120 58636.16
## 9999       No      No 1569.0091 36669.11
## 10000      No     Yes  200.9222 16862.95

Recodificar valores

datos <- datos %>%
  select(default, balance) %>%
  mutate(default = recode(default,
                          "No"  = 0,
                          "Yes" = 1))

head(datos)
##   default   balance
## 1       0  729.5265
## 2       0  817.1804
## 3       0 1073.5492
## 4       0  529.2506
## 5       0  785.6559
## 6       0  919.5885
tail(datos)
##       default   balance
## 9995        0  172.4130
## 9996        0  711.5550
## 9997        0  757.9629
## 9998        0  845.4120
## 9999        0 1569.0091
## 10000       0  200.9222

Modelo de regresión lineal lm()

No es recomedable para este conjunto de datos Representación gráfica del modelo. Al tratarse de una recta, si por ejemplo, se predice la probabilidad de default para alguien que tiene un balance de 10000, el valor obtenido es mayor que 1. No es del todo recomedable y eficiente. 1.2235

modelo <- lm(default ~ balance, data = datos)


ggplot(data = datos, aes(x = balance, y = default)) +
  geom_point(aes(color = as.factor(default)), shape = 1) + 
  geom_smooth(method = "lm", color = "gray20", se = FALSE) +
  theme_bw()  +
  labs(title = "Regresión lineal por mínimos cuadrados",
       y = "Probabilidad default") +
  theme(legend.position = "none")

head(datos)
##   default   balance
## 1       0  729.5265
## 2       0  817.1804
## 3       0 1073.5492
## 4       0  529.2506
## 5       0  785.6559
## 6       0  919.5885

Regresión logística

La regresión logística transforma el valor devuelto por la regresión lineal (β0+β1X) empleando una función cuyo resultado está siempre comprendido entre 0 y 1 Determina la probabilidad de que sea de un grupo o de otro El coeficiente estimado asociado con un predictor representa el cambio en la función de enlace por cada cambio de unidad en el predictor. balance = 5.499e-03 ¿qué representa?. La probabiidad aumenta un % por cada unidad de Balance Probabilidad_logit = 1.065e+01 + 5.499e-03 * Balance El coeficiente es positivo y es significativo lo cual se puede afirmar que a mayor balance mayor es la probabilidad de Pago de un cliente

modelo <- glm(default ~ balance, data = datos, family = "binomial")

summary(modelo)
## 
## Call:
## glm(formula = default ~ balance, family = "binomial", data = datos)
## 
## Deviance Residuals: 
##     Min       1Q   Median       3Q      Max  
## -2.2697  -0.1465  -0.0589  -0.0221   3.7589  
## 
## Coefficients:
##               Estimate Std. Error z value Pr(>|z|)    
## (Intercept) -1.065e+01  3.612e-01  -29.49   <2e-16 ***
## balance      5.499e-03  2.204e-04   24.95   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 2920.6  on 9999  degrees of freedom
## Residual deviance: 1596.5  on 9998  degrees of freedom
## AIC: 1600.5
## 
## Number of Fisher Scoring iterations: 8

Representación gráfica del modelo probabilidad

ggplot(data = datos, aes(x = balance, y = default)) +
  geom_point(aes(color = as.factor(default)), shape = 1) + 
  geom_smooth(method = "glm",
              method.args = list(family = "binomial"),
              color = "gray20",
              se = FALSE) +
  theme_bw() +
  theme(legend.position = "none")

# Determinarndo una probabilidad Cliente con balance = 1500 y 2000 en Balance

# Para el caso de un cliente de 1000, 1500, 2000 y 2500 en Balance


prediccion <- predict(object = modelo, newdata = data.frame(balance = c(1000,1500,2000,2500)), se.fit = TRUE)
prediccion
## $fit
##          1          2          3          4 
## -5.1524137 -2.4029552  0.3465032  3.0959617 
## 
## $se.fit
##          1          2          3          4 
## 0.15051722 0.07202836 0.10955473 0.20760034 
## 
## $residual.scale
## [1] 1
predicciones.prob <- exp(prediccion$fit) / (1 + exp(prediccion$fit))


predicciones.prob
##           1           2           3           4 
## 0.005752145 0.082947624 0.585769370 0.956725862

Interpretacion personal

Se puede apreciar que la hipotesis indicada de entre mayor saldo pendiente, mas posibilidades existen de hacerse el pago con los resultados de la prediccion se aprecia que un balance de 2500 tiene un 95% de probabilidad que se realice, mientras que un balance de 2000 solo el 58%, balance de 15000 tiene 08% y 1000 de unicamente 0.5%