Creación de modelos de predicción

A partir de la base de datos SEGURO1.csv, se crean los modelos siguiendo las instrucciones propuestas

set.seed(4220)

Fraccionamiento de la muestra

Para el fraccionamiento se utilizan dos funciones del paquete dplyr. La primera para generar un conjunto de datos con el 70% de los datos como muestra de entrenamiento y la segunda, que es una función de manejo de conjuntos para dejar solamente los datos restantes como muestra de validación. Se procede inicialmente al cargue de datos y de paquetes requeridos.

SEGURO1<-read.csv("Downloads/SEGURO1.csv", ";", h=T)
library("dplyr")
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
seg_entrenamiento<-sample_frac(SEGURO1, 0.7)
seg_prueba<-setdiff(SEGURO1, seg_entrenamiento)

Creación de los modelos

Ahora se realiza la creación de los modelos. Se construyen tres modelos buscando el modelo más predictivo y más parsimonioso. Para evaluar esta característica se valora el modelo evaluando el criterio de información de Akaike que es generado por la salida de R, siendo el mejor modelo el que obtenga el menor valor. Se presentan los datos ampliados con los valores del estadístico T y la significancia para cada variable. La variable independiente es la variable binaria Ins.

modelo1<-with(seg_entrenamiento, {glm(Ins~Age+Income+CRScore+HMVal)})
summary(modelo1)
## 
## Call:
## glm(formula = Ins ~ Age + Income + CRScore + HMVal)
## 
## Deviance Residuals: 
##     Min       1Q   Median       3Q      Max  
## -1.7399  -0.3470  -0.3204   0.6381   0.7389  
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  0.1478916  0.0696381   2.124   0.0337 *  
## Age          0.0007960  0.0003142   2.534   0.0113 *  
## Income      -0.0012215  0.0001791  -6.821 9.35e-12 ***
## CRScore     -0.0001575  0.0001078  -1.461   0.1441    
## HMVal        0.0028276  0.0002239  12.628  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for gaussian family taken to be 0.2237003)
## 
##     Null deviance: 3473.4  on 15364  degrees of freedom
## Residual deviance: 3436.0  on 15360  degrees of freedom
##   (3857 observations deleted due to missingness)
## AIC: 20603
## 
## Number of Fisher Scoring iterations: 2
modelo2<-with(seg_entrenamiento, {glm(Ins~Age+DepAmt+DDABal+SavBal)})
summary(modelo2)
## 
## Call:
## glm(formula = Ins ~ Age + DepAmt + DDABal + SavBal)
## 
## Deviance Residuals: 
##     Min       1Q   Median       3Q      Max  
## -4.2414  -0.3192  -0.3122   0.6334   0.8562  
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  3.146e-01  1.338e-02  23.509   <2e-16 ***
## Age         -6.807e-05  2.676e-04  -0.254    0.799    
## DepAmt      -4.748e-07  6.477e-07  -0.733    0.464    
## DDABal       6.578e-06  5.198e-07  12.657   <2e-16 ***
## SavBal       6.382e-06  2.789e-07  22.883   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for gaussian family taken to be 0.2157209)
## 
##     Null deviance: 3473.4  on 15364  degrees of freedom
## Residual deviance: 3313.5  on 15360  degrees of freedom
##   (3857 observations deleted due to missingness)
## AIC: 20045
## 
## Number of Fisher Scoring iterations: 2
modelo3<-with(seg_entrenamiento, {glm(Ins~Age+DepAmt+DDABal+SavBal+Age+Income+CRScore)})
summary(modelo3)
## 
## Call:
## glm(formula = Ins ~ Age + DepAmt + DDABal + SavBal + Age + Income + 
##     CRScore)
## 
## Deviance Residuals: 
##     Min       1Q   Median       3Q      Max  
## -4.2349  -0.3218  -0.3110   0.6316   0.8515  
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  4.131e-01  6.551e-02   6.307 2.93e-10 ***
## Age          1.977e-04  3.090e-04   0.640    0.522    
## DepAmt      -4.822e-07  6.477e-07  -0.745    0.457    
## DDABal       6.573e-06  5.199e-07  12.644  < 2e-16 ***
## SavBal       6.380e-06  2.791e-07  22.858  < 2e-16 ***
## Income       7.455e-05  1.339e-04   0.557    0.578    
## CRScore     -1.714e-04  1.059e-04  -1.620    0.105    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for gaussian family taken to be 0.2157074)
## 
##     Null deviance: 3473.4  on 15364  degrees of freedom
## Residual deviance: 3312.8  on 15358  degrees of freedom
##   (3857 observations deleted due to missingness)
## AIC: 20046
## 
## Number of Fisher Scoring iterations: 2

El modelo con el menor AIC fue el modelo 2, el cual se selecciona para continuar.

predicciones_entrena=as.factor(ifelse(test = modelo2$fitted.values > 0.35, yes = 1, no = 0))
observaciones_entrena=as.factor(seg_entrenamiento$Ins)

Construcción de la matriz de confusión

library("caret")
## Loading required package: lattice
## Loading required package: ggplot2

No se logra crear la matriz de confusión. Luego de cargar el paquete Caret y de utilizar la función ConfusionMatrix, se encuentra que los dos elementos no tienen la misma dimensión. Se genera una muestra de la base de entrenamiento y se construye de nuevo la variable para que tenga igual longitud

sub_seg_entrenamiento<-sample_n(seg_entrenamiento, 15365)
observaciones_entrena=as.factor(sub_seg_entrenamiento$Ins)
matriz<-confusionMatrix(observaciones_entrena, predicciones_entrena)

Se presenta el resultado del modelo

matriz
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction    0    1
##          0 8129 1927
##          1 4277 1032
##                                          
##                Accuracy : 0.5962         
##                  95% CI : (0.5884, 0.604)
##     No Information Rate : 0.8074         
##     P-Value [Acc > NIR] : 1              
##                                          
##                   Kappa : 0.0031         
##                                          
##  Mcnemar's Test P-Value : <2e-16         
##                                          
##             Sensitivity : 0.6552         
##             Specificity : 0.3488         
##          Pos Pred Value : 0.8084         
##          Neg Pred Value : 0.1944         
##              Prevalence : 0.8074         
##          Detection Rate : 0.5291         
##    Detection Prevalence : 0.6545         
##       Balanced Accuracy : 0.5020         
##                                          
##        'Positive' Class : 0              
##