A partir de la base de datos SEGURO1.csv, se crean los modelos siguiendo las instrucciones propuestas
set.seed(4220)
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)
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
##