Email: go_moreno@hotmail.com

mobile: +57 317-746-8325

LinkedIn Profile: www.linkedin.com/in/gonzalomoreno25

Aprobación de Crédito en Banco Japonés

Información Relevante: - Los ejemplos representan clientes que recibieron o no recibieron un crédito.

Archivos: crx.names - Descripción de las variables crx.data_00 - Dataset con 550 registros con distintas variables y calificación Aprobado(+) o Declinado(-)

Instrucciones - Revisar los tipos de variables (crx.names) - Realizar un análisis exploratorio de datos - Entrenar un modelo de clasificación con 80% de entrenamiento y 20% de prueba - Incluir validación cruzada - Visualizar la efectividad del modelo - Reportar todo el proceso - Usar R o Python para el desarrollo del modelo (cualquier paquete/librería) y entregar el reporte en .doc, .pdf o afín

Validación: - El modelo será validado con datos adicionales

Creación de Data Frames

Vamos a crear:

  1. Un vector con el nombre de las columnas o atributos
  2. Un data frame con los valores de drx.data_00 cuyos atributos son el vector 1)
#1) Un vector con el nombre de las columnas o atributos
filename.name<-"D:/personal/data science/prueba David Lopez Mexico/crx - copia.names"
con <-file(filename.name, "r")
crx.names<- readLines(con)
colnames<-crx.names[32:47]
colnames<-str_extract(colnames,"A[0-9]+")


## creamos el data frame con los datos
filename.data<-("D:/personal/data science/prueba David Lopez Mexico/crx.data_00")
con <-file(filename.data, "r")
crx.data<- readLines(con)
crx.data<-str_split(crx.data,",")

df<-data.frame(matrix(unlist(crx.data),ncol=16, byrow = T))
colnames(df)<-colnames
df$A16<-gsub("\\+","Aprobado",df$A16)
df$A16<-as.factor(gsub("\\-","Declinado",df$A16))
summary(df)
##  A1            A2            A3      A4       A5            A6     
##  ?:  8   ?      : 11   2.5    : 18   ?:  4   ? :  4   c      :104  
##  a:168   20.42  :  7   1.5    : 17   l:  2   g :414   q      : 67  
##  b:374   19.17  :  6   0      : 16   u:414   gg:  2   w      : 50  
##          20.67  :  6   3      : 16   y:130   p :130   i      : 49  
##          22.67  :  6   5      : 13                    ff     : 43  
##          24.50  :  6   0.5    : 12                    k      : 41  
##          (Other):508   (Other):458                    (Other):196  
##        A7            A8      A9      A10          A11      A12     A13    
##  v      :316   0      : 55   f:239   f:311   0      :311   f:304   g:494  
##  h      :107   0.25   : 25   t:311   t:239   01     : 54   t:246   p:  6  
##  bb     : 52   1      : 25                   02     : 38           s: 50  
##  ff     : 46   0.04   : 24                   03     : 25                  
##  j      :  7   0.125  : 22                   06     : 20                  
##  ?      :  6   0.5    : 22                   05     : 15                  
##  (Other): 16   (Other):377                   (Other): 87                  
##       A14           A15             A16     
##  00000  :102   0      :244   Aprobado :253  
##  00200  : 28   1      : 21   Declinado:297  
##  00120  : 27   500    :  9                  
##  00080  : 26   1000   :  8                  
##  00100  : 25   300    :  8                  
##  00160  : 24   6      :  7                  
##  (Other):318   (Other):253
close(con)

Vemos varias columnas: A1, A2, A4, A5,A7, cuyos valores deberían ser letras o números pero tienen el valor de “?”. Adicionalmente cuando se analiza la estructura interna del data frame, todo esta llevado a un objeto tipo factor, lo cual significa en conclusion que todos esos caracteres donde aparezca “?” deben ser imputados o eliminados. Me doy cuenta que hay variables numéricas que estan como factor y que hay que convertirlas a numéricas.

## Separamos las columnas que están como factor y que hay que convertir a numéricas 
df.NO.numeric<-df[,-c(2,3,8,11,14,15)] ## columnas que no son numéricas
df.numeric<-sapply(df[,c(2,3,8,11,14,15)],function(x) as.numeric(as.character(x)))
## Warning in FUN(X[[i]], ...): NAs introducidos por coerción

## Warning in FUN(X[[i]], ...): NAs introducidos por coerción
df<-cbind(df.numeric, df.NO.numeric)
sum.na<-sum(is.na(df))

Los NA se formaron porque R no reconoce el caracter “?” como número. La cantidad de NA es de 21 Como la cantidad es pequeña se hará imputación utilizando la técnica bagging Impute.

Creación de datos Training y Testing data

set.seed(0625)
inTrain<- createDataPartition(y= df$A16, p=0.8, list=FALSE)

training<-df[inTrain,]
testing<-df[-inTrain,]

Creamos la partición de los datos.

Análisis Exploratorio

 DF = as.matrix(as.data.frame(lapply(training, as.numeric)))


## Histogramas

par(mfrow=c(2,4))
for(i in 1:8) {
    hist(DF[,i], main=colnames(DF)[i],  xlab=colnames(DF)[i],col="purple")
}

par(mfrow=c(2,4))
for(i in 9:16) {
    hist(DF[,i], main=colnames(DF)[i],xlab=colnames(DF)[i], col="purple")
}

Correlaciones

corrplot.mixed(cor(DF), sig.level=0.01)

Se puede apreciar como el atributo A9 está correlacionado con la variable A16 al -0.68 , que es la que queremos predecir. Asimismo hay una alta correlación entre A4 y A5 que no son variables numéricas lo cual sugiere que el modelo podría llegar a tener problemas de autocorrelación y sobraría una de las dos. Esto también sugiere que debería incluirse un análisis de componentes principales PCA para las variables numéricas.

Análisis de Componentes Principales y preprocesamiento

A16<- training[,"A16"]
training2<-select(training, -one_of("A16")) ## quitamos la variable a predecir del proceso de preprocesamiento

## numeric_vector es un vector lógico que determina que es numérico y que no
numeric_vector <- as.vector(sapply(training2, is.numeric))
only_numeric<-names(training2[,numeric_vector==TRUE])
training_numeric<- training2[,c(only_numeric)]

pca<-suppressWarnings(PCA(training_numeric,scale.unit =  T,graph = F))
fviz_screeplot(pca, ncp=10)

El análisis de PCA muestra información muy valiosa. Por ejemplo los dos primeros componentes principales aportan el 50% de la información. O sea que las otras cuatro aportarán el otro 50%.

fviz_pca_var(pca, col.var="cos2") +
scale_color_gradient2(low="white", mid="blue", 
                    high="red", midpoint=0.5) + theme_minimal()

Analizando el segundo gráfico los atributos A3 y A11 están muy autocorrelacionados dado que apuntan hacia la misma dirección y el coseno de sus angulos tiende a ser pequeño.A2 no esta correlacionado ni con A3 ni con A11. Parece haber autocorrelación entre A2 y A8. Asi mismo se puede Apreciar como A15 tiene muy poca correlación con A11, A3, A8 y especialmente A2 porque el angulo tiende a ser cercano a los 90° lo cual significa que la correlación tiende a 0 porque el coseno tambien tiende a 0. Finalmente A14 tiene una correlación negativa muy moderada con respecto a A2, A3, A8 y A11. La conclusión es que se puede mejorar el modelo predictivo creando un predictor que combine A3 y A11.

Haremos la transformación pca a los datos

preproc <- preProcess(training_numeric, method=c("center", "scale","bagImpute", "pca"))
train.pca<-predict(preproc, training_numeric) ## los nuevos predictores son creados

## Variables numéricas originales serán reemplazadas por los nuevos predictores train.pca


training<-cbind(select(training2, -one_of(only_numeric)),train.pca,A16)

El análisis PCA es efectuado y sugiere crear 6 nuevas variables para reemplazar las 6 variables númericas originales.

Análisis de Validación cruzada

rf.cv <- rfcv(select(training, -one_of("A16")), training$A16, cv.fold=10)
with(rf.cv, plot(n.var, error.cv, type="b", col="blue"))

La gráfica en la que se compara el error contra el número de variables escogidas sugiere trabajar con todas las variables del data frame de training y además le media del error error.cv es de 0.18 lo cual es muy bajo y muy bueno. En conclusión usaré GBM como modelo escogido.

Aplicación del modelo GBM

fitControl <- trainControl(method='cv', number=10)

set.seed(12345)

modfit<-suppressMessages(suppressWarnings(train(A16 ~ ., data = training,method = "gbm", preProc = c("center", "scale","bagImpute"),trControl = fitControl)
))
## Iter   TrainDeviance   ValidDeviance   StepSize   Improve
##      1        1.2947             nan     0.1000    0.0441
##      2        1.2256             nan     0.1000    0.0366
##      3        1.1630             nan     0.1000    0.0312
##      4        1.1136             nan     0.1000    0.0253
##      5        1.0713             nan     0.1000    0.0218
##      6        1.0377             nan     0.1000    0.0182
##      7        1.0088             nan     0.1000    0.0153
##      8        0.9880             nan     0.1000    0.0086
##      9        0.9646             nan     0.1000    0.0126
##     10        0.9480             nan     0.1000    0.0078
##     20        0.8329             nan     0.1000    0.0002
##     40        0.7540             nan     0.1000   -0.0013
##     60        0.7096             nan     0.1000   -0.0012
##     80        0.6757             nan     0.1000   -0.0035
##    100        0.6513             nan     0.1000   -0.0008
##    120        0.6272             nan     0.1000    0.0004
##    140        0.6082             nan     0.1000   -0.0016
##    150        0.6009             nan     0.1000   -0.0016
## 
## Iter   TrainDeviance   ValidDeviance   StepSize   Improve
##      1        1.2815             nan     0.1000    0.0506
##      2        1.1960             nan     0.1000    0.0398
##      3        1.1305             nan     0.1000    0.0305
##      4        1.0714             nan     0.1000    0.0281
##      5        1.0235             nan     0.1000    0.0229
##      6        0.9865             nan     0.1000    0.0186
##      7        0.9509             nan     0.1000    0.0166
##      8        0.9257             nan     0.1000    0.0111
##      9        0.8975             nan     0.1000    0.0113
##     10        0.8842             nan     0.1000    0.0060
##     20        0.7605             nan     0.1000    0.0017
##     40        0.6686             nan     0.1000    0.0010
##     60        0.6016             nan     0.1000   -0.0003
##     80        0.5607             nan     0.1000   -0.0017
##    100        0.5073             nan     0.1000   -0.0041
##    120        0.4690             nan     0.1000   -0.0002
##    140        0.4374             nan     0.1000   -0.0015
##    150        0.4178             nan     0.1000   -0.0011
## 
## Iter   TrainDeviance   ValidDeviance   StepSize   Improve
##      1        1.2740             nan     0.1000    0.0510
##      2        1.1925             nan     0.1000    0.0371
##      3        1.1227             nan     0.1000    0.0310
##      4        1.0610             nan     0.1000    0.0290
##      5        1.0130             nan     0.1000    0.0226
##      6        0.9722             nan     0.1000    0.0174
##      7        0.9311             nan     0.1000    0.0167
##      8        0.8981             nan     0.1000    0.0143
##      9        0.8715             nan     0.1000    0.0116
##     10        0.8503             nan     0.1000    0.0081
##     20        0.7129             nan     0.1000    0.0007
##     40        0.5938             nan     0.1000   -0.0010
##     60        0.5201             nan     0.1000   -0.0046
##     80        0.4620             nan     0.1000   -0.0033
##    100        0.4103             nan     0.1000   -0.0023
##    120        0.3657             nan     0.1000   -0.0044
##    140        0.3275             nan     0.1000   -0.0026
##    150        0.3149             nan     0.1000   -0.0010
## 
## Iter   TrainDeviance   ValidDeviance   StepSize   Improve
##      1        1.2896             nan     0.1000    0.0462
##      2        1.2171             nan     0.1000    0.0367
##      3        1.1522             nan     0.1000    0.0305
##      4        1.1025             nan     0.1000    0.0250
##      5        1.0585             nan     0.1000    0.0199
##      6        1.0212             nan     0.1000    0.0172
##      7        0.9980             nan     0.1000    0.0081
##      8        0.9673             nan     0.1000    0.0124
##      9        0.9491             nan     0.1000    0.0071
##     10        0.9350             nan     0.1000    0.0036
##     20        0.8251             nan     0.1000   -0.0001
##     40        0.7521             nan     0.1000    0.0004
##     60        0.7097             nan     0.1000   -0.0018
##     80        0.6780             nan     0.1000   -0.0009
##    100        0.6548             nan     0.1000   -0.0010
##    120        0.6336             nan     0.1000   -0.0022
##    140        0.6186             nan     0.1000   -0.0017
##    150        0.6122             nan     0.1000   -0.0022
## 
## Iter   TrainDeviance   ValidDeviance   StepSize   Improve
##      1        1.2813             nan     0.1000    0.0478
##      2        1.1970             nan     0.1000    0.0390
##      3        1.1259             nan     0.1000    0.0318
##      4        1.0719             nan     0.1000    0.0281
##      5        1.0229             nan     0.1000    0.0224
##      6        0.9847             nan     0.1000    0.0173
##      7        0.9499             nan     0.1000    0.0142
##      8        0.9263             nan     0.1000    0.0101
##      9        0.9060             nan     0.1000    0.0051
##     10        0.8822             nan     0.1000    0.0096
##     20        0.7634             nan     0.1000   -0.0015
##     40        0.6751             nan     0.1000   -0.0017
##     60        0.6107             nan     0.1000   -0.0009
##     80        0.5712             nan     0.1000   -0.0015
##    100        0.5330             nan     0.1000   -0.0020
##    120        0.4936             nan     0.1000   -0.0008
##    140        0.4652             nan     0.1000   -0.0008
##    150        0.4513             nan     0.1000   -0.0003
## 
## Iter   TrainDeviance   ValidDeviance   StepSize   Improve
##      1        1.2876             nan     0.1000    0.0433
##      2        1.1957             nan     0.1000    0.0407
##      3        1.1255             nan     0.1000    0.0324
##      4        1.0716             nan     0.1000    0.0259
##      5        1.0216             nan     0.1000    0.0220
##      6        0.9716             nan     0.1000    0.0219
##      7        0.9378             nan     0.1000    0.0158
##      8        0.9039             nan     0.1000    0.0142
##      9        0.8776             nan     0.1000    0.0110
##     10        0.8501             nan     0.1000    0.0066
##     20        0.7183             nan     0.1000    0.0008
##     40        0.5971             nan     0.1000   -0.0020
##     60        0.5211             nan     0.1000   -0.0022
##     80        0.4640             nan     0.1000   -0.0014
##    100        0.4159             nan     0.1000   -0.0022
##    120        0.3741             nan     0.1000   -0.0023
##    140        0.3364             nan     0.1000   -0.0017
##    150        0.3182             nan     0.1000   -0.0012
## 
## Iter   TrainDeviance   ValidDeviance   StepSize   Improve
##      1        1.2899             nan     0.1000    0.0478
##      2        1.2150             nan     0.1000    0.0395
##      3        1.1492             nan     0.1000    0.0333
##      4        1.0907             nan     0.1000    0.0267
##      5        1.0484             nan     0.1000    0.0220
##      6        1.0078             nan     0.1000    0.0183
##      7        0.9745             nan     0.1000    0.0157
##      8        0.9505             nan     0.1000    0.0130
##      9        0.9306             nan     0.1000    0.0112
##     10        0.9142             nan     0.1000    0.0062
##     20        0.8048             nan     0.1000    0.0012
##     40        0.7277             nan     0.1000   -0.0027
##     60        0.6806             nan     0.1000   -0.0004
##     80        0.6517             nan     0.1000   -0.0008
##    100        0.6335             nan     0.1000   -0.0016
##    120        0.6139             nan     0.1000   -0.0012
##    140        0.5978             nan     0.1000   -0.0019
##    150        0.5869             nan     0.1000   -0.0005
## 
## Iter   TrainDeviance   ValidDeviance   StepSize   Improve
##      1        1.2887             nan     0.1000    0.0506
##      2        1.2050             nan     0.1000    0.0442
##      3        1.1284             nan     0.1000    0.0326
##      4        1.0698             nan     0.1000    0.0259
##      5        1.0200             nan     0.1000    0.0249
##      6        0.9721             nan     0.1000    0.0214
##      7        0.9382             nan     0.1000    0.0152
##      8        0.9060             nan     0.1000    0.0138
##      9        0.8802             nan     0.1000    0.0119
##     10        0.8539             nan     0.1000    0.0098
##     20        0.7454             nan     0.1000   -0.0001
##     40        0.6498             nan     0.1000   -0.0021
##     60        0.5931             nan     0.1000   -0.0024
##     80        0.5572             nan     0.1000   -0.0019
##    100        0.5135             nan     0.1000   -0.0021
##    120        0.4839             nan     0.1000   -0.0024
##    140        0.4576             nan     0.1000   -0.0024
##    150        0.4437             nan     0.1000   -0.0021
## 
## Iter   TrainDeviance   ValidDeviance   StepSize   Improve
##      1        1.2751             nan     0.1000    0.0485
##      2        1.1892             nan     0.1000    0.0420
##      3        1.1197             nan     0.1000    0.0328
##      4        1.0607             nan     0.1000    0.0260
##      5        1.0052             nan     0.1000    0.0240
##      6        0.9603             nan     0.1000    0.0181
##      7        0.9183             nan     0.1000    0.0177
##      8        0.8842             nan     0.1000    0.0145
##      9        0.8585             nan     0.1000    0.0119
##     10        0.8333             nan     0.1000    0.0108
##     20        0.6943             nan     0.1000   -0.0000
##     40        0.5739             nan     0.1000   -0.0006
##     60        0.4981             nan     0.1000   -0.0031
##     80        0.4379             nan     0.1000   -0.0004
##    100        0.3941             nan     0.1000   -0.0028
##    120        0.3510             nan     0.1000   -0.0015
##    140        0.3153             nan     0.1000   -0.0020
##    150        0.3047             nan     0.1000   -0.0013
## 
## Iter   TrainDeviance   ValidDeviance   StepSize   Improve
##      1        1.2932             nan     0.1000    0.0456
##      2        1.2143             nan     0.1000    0.0367
##      3        1.1532             nan     0.1000    0.0300
##      4        1.1029             nan     0.1000    0.0251
##      5        1.0617             nan     0.1000    0.0203
##      6        1.0283             nan     0.1000    0.0169
##      7        1.0000             nan     0.1000    0.0150
##      8        0.9733             nan     0.1000    0.0126
##      9        0.9507             nan     0.1000    0.0107
##     10        0.9318             nan     0.1000    0.0079
##     20        0.8132             nan     0.1000    0.0004
##     40        0.7387             nan     0.1000   -0.0008
##     60        0.7034             nan     0.1000   -0.0018
##     80        0.6740             nan     0.1000   -0.0010
##    100        0.6554             nan     0.1000   -0.0018
##    120        0.6354             nan     0.1000   -0.0009
##    140        0.6168             nan     0.1000   -0.0010
##    150        0.6095             nan     0.1000   -0.0015
## 
## Iter   TrainDeviance   ValidDeviance   StepSize   Improve
##      1        1.2811             nan     0.1000    0.0483
##      2        1.1919             nan     0.1000    0.0384
##      3        1.1294             nan     0.1000    0.0302
##      4        1.0747             nan     0.1000    0.0254
##      5        1.0262             nan     0.1000    0.0261
##      6        0.9799             nan     0.1000    0.0202
##      7        0.9447             nan     0.1000    0.0133
##      8        0.9147             nan     0.1000    0.0122
##      9        0.8899             nan     0.1000    0.0125
##     10        0.8667             nan     0.1000    0.0100
##     20        0.7527             nan     0.1000    0.0002
##     40        0.6643             nan     0.1000   -0.0018
##     60        0.6002             nan     0.1000   -0.0048
##     80        0.5562             nan     0.1000   -0.0013
##    100        0.5146             nan     0.1000   -0.0018
##    120        0.4859             nan     0.1000   -0.0026
##    140        0.4529             nan     0.1000   -0.0018
##    150        0.4392             nan     0.1000   -0.0015
## 
## Iter   TrainDeviance   ValidDeviance   StepSize   Improve
##      1        1.2787             nan     0.1000    0.0442
##      2        1.2029             nan     0.1000    0.0380
##      3        1.1309             nan     0.1000    0.0306
##      4        1.0765             nan     0.1000    0.0255
##      5        1.0227             nan     0.1000    0.0246
##      6        0.9805             nan     0.1000    0.0156
##      7        0.9468             nan     0.1000    0.0135
##      8        0.9127             nan     0.1000    0.0156
##      9        0.8848             nan     0.1000    0.0111
##     10        0.8575             nan     0.1000    0.0113
##     20        0.7122             nan     0.1000   -0.0007
##     40        0.5884             nan     0.1000    0.0007
##     60        0.5084             nan     0.1000   -0.0011
##     80        0.4503             nan     0.1000   -0.0006
##    100        0.4059             nan     0.1000   -0.0013
##    120        0.3615             nan     0.1000   -0.0012
##    140        0.3247             nan     0.1000   -0.0015
##    150        0.3084             nan     0.1000   -0.0012
## 
## Iter   TrainDeviance   ValidDeviance   StepSize   Improve
##      1        1.2967             nan     0.1000    0.0434
##      2        1.2253             nan     0.1000    0.0355
##      3        1.1633             nan     0.1000    0.0281
##      4        1.1172             nan     0.1000    0.0239
##      5        1.0814             nan     0.1000    0.0197
##      6        1.0428             nan     0.1000    0.0171
##      7        1.0132             nan     0.1000    0.0138
##      8        0.9893             nan     0.1000    0.0056
##      9        0.9749             nan     0.1000    0.0052
##     10        0.9577             nan     0.1000    0.0087
##     20        0.8509             nan     0.1000   -0.0012
##     40        0.7831             nan     0.1000   -0.0009
##     60        0.7388             nan     0.1000   -0.0010
##     80        0.7118             nan     0.1000   -0.0002
##    100        0.6892             nan     0.1000   -0.0006
##    120        0.6717             nan     0.1000   -0.0015
##    140        0.6560             nan     0.1000   -0.0007
##    150        0.6462             nan     0.1000   -0.0012
## 
## Iter   TrainDeviance   ValidDeviance   StepSize   Improve
##      1        1.2798             nan     0.1000    0.0483
##      2        1.2019             nan     0.1000    0.0387
##      3        1.1395             nan     0.1000    0.0301
##      4        1.0879             nan     0.1000    0.0257
##      5        1.0462             nan     0.1000    0.0226
##      6        1.0048             nan     0.1000    0.0173
##      7        0.9751             nan     0.1000    0.0153
##      8        0.9481             nan     0.1000    0.0111
##      9        0.9223             nan     0.1000    0.0091
##     10        0.8999             nan     0.1000    0.0084
##     20        0.7859             nan     0.1000   -0.0005
##     40        0.6892             nan     0.1000   -0.0044
##     60        0.6301             nan     0.1000   -0.0023
##     80        0.5827             nan     0.1000   -0.0003
##    100        0.5345             nan     0.1000   -0.0015
##    120        0.5055             nan     0.1000   -0.0029
##    140        0.4741             nan     0.1000   -0.0021
##    150        0.4675             nan     0.1000   -0.0023
## 
## Iter   TrainDeviance   ValidDeviance   StepSize   Improve
##      1        1.2814             nan     0.1000    0.0495
##      2        1.1987             nan     0.1000    0.0395
##      3        1.1350             nan     0.1000    0.0325
##      4        1.0779             nan     0.1000    0.0245
##      5        1.0277             nan     0.1000    0.0221
##      6        0.9849             nan     0.1000    0.0198
##      7        0.9481             nan     0.1000    0.0164
##      8        0.9165             nan     0.1000    0.0150
##      9        0.8933             nan     0.1000    0.0075
##     10        0.8705             nan     0.1000    0.0080
##     20        0.7262             nan     0.1000    0.0003
##     40        0.6129             nan     0.1000   -0.0033
##     60        0.5321             nan     0.1000   -0.0012
##     80        0.4747             nan     0.1000   -0.0013
##    100        0.4202             nan     0.1000   -0.0030
##    120        0.3811             nan     0.1000   -0.0030
##    140        0.3426             nan     0.1000   -0.0018
##    150        0.3257             nan     0.1000   -0.0027
## 
## Iter   TrainDeviance   ValidDeviance   StepSize   Improve
##      1        1.2934             nan     0.1000    0.0415
##      2        1.2229             nan     0.1000    0.0360
##      3        1.1654             nan     0.1000    0.0286
##      4        1.1157             nan     0.1000    0.0255
##      5        1.0707             nan     0.1000    0.0207
##      6        1.0450             nan     0.1000    0.0088
##      7        1.0124             nan     0.1000    0.0156
##      8        0.9857             nan     0.1000    0.0131
##      9        0.9641             nan     0.1000    0.0112
##     10        0.9453             nan     0.1000    0.0090
##     20        0.8550             nan     0.1000    0.0014
##     40        0.7843             nan     0.1000    0.0008
##     60        0.7422             nan     0.1000    0.0009
##     80        0.7118             nan     0.1000   -0.0003
##    100        0.6855             nan     0.1000   -0.0031
##    120        0.6638             nan     0.1000    0.0000
##    140        0.6455             nan     0.1000   -0.0024
##    150        0.6397             nan     0.1000   -0.0015
## 
## Iter   TrainDeviance   ValidDeviance   StepSize   Improve
##      1        1.2877             nan     0.1000    0.0450
##      2        1.2142             nan     0.1000    0.0369
##      3        1.1408             nan     0.1000    0.0336
##      4        1.0824             nan     0.1000    0.0271
##      5        1.0431             nan     0.1000    0.0211
##      6        1.0044             nan     0.1000    0.0167
##      7        0.9729             nan     0.1000    0.0156
##      8        0.9474             nan     0.1000    0.0118
##      9        0.9210             nan     0.1000    0.0132
##     10        0.8990             nan     0.1000    0.0087
##     20        0.7888             nan     0.1000    0.0001
##     40        0.6894             nan     0.1000    0.0013
##     60        0.6385             nan     0.1000   -0.0023
##     80        0.5905             nan     0.1000   -0.0017
##    100        0.5545             nan     0.1000   -0.0041
##    120        0.5218             nan     0.1000   -0.0018
##    140        0.4924             nan     0.1000   -0.0017
##    150        0.4767             nan     0.1000   -0.0027
## 
## Iter   TrainDeviance   ValidDeviance   StepSize   Improve
##      1        1.2835             nan     0.1000    0.0484
##      2        1.1952             nan     0.1000    0.0373
##      3        1.1275             nan     0.1000    0.0318
##      4        1.0722             nan     0.1000    0.0219
##      5        1.0227             nan     0.1000    0.0221
##      6        0.9824             nan     0.1000    0.0159
##      7        0.9413             nan     0.1000    0.0150
##      8        0.9173             nan     0.1000    0.0097
##      9        0.8930             nan     0.1000    0.0096
##     10        0.8710             nan     0.1000    0.0075
##     20        0.7430             nan     0.1000    0.0023
##     40        0.6325             nan     0.1000    0.0005
##     60        0.5566             nan     0.1000   -0.0017
##     80        0.5024             nan     0.1000   -0.0041
##    100        0.4504             nan     0.1000   -0.0010
##    120        0.4023             nan     0.1000   -0.0019
##    140        0.3621             nan     0.1000   -0.0016
##    150        0.3441             nan     0.1000   -0.0006
## 
## Iter   TrainDeviance   ValidDeviance   StepSize   Improve
##      1        1.2995             nan     0.1000    0.0425
##      2        1.2321             nan     0.1000    0.0347
##      3        1.1784             nan     0.1000    0.0286
##      4        1.1290             nan     0.1000    0.0234
##      5        1.0865             nan     0.1000    0.0196
##      6        1.0531             nan     0.1000    0.0162
##      7        1.0248             nan     0.1000    0.0132
##      8        1.0028             nan     0.1000    0.0114
##      9        0.9820             nan     0.1000    0.0093
##     10        0.9628             nan     0.1000    0.0070
##     20        0.8666             nan     0.1000    0.0036
##     40        0.7884             nan     0.1000    0.0007
##     60        0.7383             nan     0.1000   -0.0001
##     80        0.7062             nan     0.1000   -0.0003
##    100        0.6804             nan     0.1000   -0.0015
##    120        0.6581             nan     0.1000   -0.0007
##    140        0.6432             nan     0.1000   -0.0015
##    150        0.6340             nan     0.1000   -0.0020
## 
## Iter   TrainDeviance   ValidDeviance   StepSize   Improve
##      1        1.2871             nan     0.1000    0.0468
##      2        1.2124             nan     0.1000    0.0366
##      3        1.1506             nan     0.1000    0.0308
##      4        1.0947             nan     0.1000    0.0261
##      5        1.0554             nan     0.1000    0.0193
##      6        1.0122             nan     0.1000    0.0190
##      7        0.9790             nan     0.1000    0.0155
##      8        0.9480             nan     0.1000    0.0130
##      9        0.9347             nan     0.1000    0.0036
##     10        0.9129             nan     0.1000    0.0082
##     20        0.7953             nan     0.1000   -0.0003
##     40        0.6985             nan     0.1000   -0.0023
##     60        0.6337             nan     0.1000   -0.0013
##     80        0.5870             nan     0.1000   -0.0017
##    100        0.5463             nan     0.1000   -0.0021
##    120        0.5047             nan     0.1000   -0.0021
##    140        0.4701             nan     0.1000   -0.0016
##    150        0.4588             nan     0.1000   -0.0044
## 
## Iter   TrainDeviance   ValidDeviance   StepSize   Improve
##      1        1.2892             nan     0.1000    0.0410
##      2        1.2119             nan     0.1000    0.0366
##      3        1.1432             nan     0.1000    0.0289
##      4        1.0830             nan     0.1000    0.0292
##      5        1.0324             nan     0.1000    0.0226
##      6        0.9877             nan     0.1000    0.0188
##      7        0.9530             nan     0.1000    0.0127
##      8        0.9275             nan     0.1000    0.0109
##      9        0.9012             nan     0.1000    0.0102
##     10        0.8774             nan     0.1000    0.0099
##     20        0.7434             nan     0.1000    0.0035
##     40        0.6165             nan     0.1000   -0.0004
##     60        0.5491             nan     0.1000   -0.0046
##     80        0.4811             nan     0.1000   -0.0016
##    100        0.4335             nan     0.1000   -0.0033
##    120        0.3889             nan     0.1000   -0.0002
##    140        0.3500             nan     0.1000   -0.0008
##    150        0.3327             nan     0.1000   -0.0014
## 
## Iter   TrainDeviance   ValidDeviance   StepSize   Improve
##      1        1.2927             nan     0.1000    0.0449
##      2        1.2153             nan     0.1000    0.0362
##      3        1.1587             nan     0.1000    0.0300
##      4        1.1106             nan     0.1000    0.0252
##      5        1.0678             nan     0.1000    0.0207
##      6        1.0444             nan     0.1000    0.0090
##      7        1.0102             nan     0.1000    0.0168
##      8        0.9835             nan     0.1000    0.0137
##      9        0.9573             nan     0.1000    0.0108
##     10        0.9431             nan     0.1000    0.0053
##     20        0.8329             nan     0.1000   -0.0018
##     40        0.7586             nan     0.1000   -0.0007
##     60        0.7151             nan     0.1000    0.0007
##     80        0.6862             nan     0.1000   -0.0004
##    100        0.6664             nan     0.1000   -0.0003
##    120        0.6458             nan     0.1000   -0.0012
##    140        0.6315             nan     0.1000   -0.0024
##    150        0.6236             nan     0.1000   -0.0012
## 
## Iter   TrainDeviance   ValidDeviance   StepSize   Improve
##      1        1.2821             nan     0.1000    0.0490
##      2        1.1988             nan     0.1000    0.0396
##      3        1.1394             nan     0.1000    0.0311
##      4        1.0846             nan     0.1000    0.0257
##      5        1.0394             nan     0.1000    0.0223
##      6        0.9987             nan     0.1000    0.0197
##      7        0.9574             nan     0.1000    0.0146
##      8        0.9316             nan     0.1000    0.0111
##      9        0.9044             nan     0.1000    0.0101
##     10        0.8893             nan     0.1000    0.0050
##     20        0.7687             nan     0.1000    0.0016
##     40        0.6772             nan     0.1000    0.0004
##     60        0.6228             nan     0.1000   -0.0010
##     80        0.5776             nan     0.1000   -0.0019
##    100        0.5391             nan     0.1000    0.0017
##    120        0.4946             nan     0.1000   -0.0032
##    140        0.4607             nan     0.1000   -0.0010
##    150        0.4492             nan     0.1000   -0.0018
## 
## Iter   TrainDeviance   ValidDeviance   StepSize   Improve
##      1        1.2819             nan     0.1000    0.0479
##      2        1.1942             nan     0.1000    0.0372
##      3        1.1194             nan     0.1000    0.0292
##      4        1.0619             nan     0.1000    0.0254
##      5        1.0151             nan     0.1000    0.0200
##      6        0.9704             nan     0.1000    0.0204
##      7        0.9355             nan     0.1000    0.0129
##      8        0.9018             nan     0.1000    0.0124
##      9        0.8734             nan     0.1000    0.0111
##     10        0.8515             nan     0.1000    0.0087
##     20        0.7181             nan     0.1000   -0.0003
##     40        0.5960             nan     0.1000    0.0002
##     60        0.5280             nan     0.1000   -0.0014
##     80        0.4659             nan     0.1000   -0.0010
##    100        0.4202             nan     0.1000   -0.0005
##    120        0.3818             nan     0.1000   -0.0010
##    140        0.3487             nan     0.1000   -0.0015
##    150        0.3308             nan     0.1000   -0.0016
## 
## Iter   TrainDeviance   ValidDeviance   StepSize   Improve
##      1        1.2931             nan     0.1000    0.0440
##      2        1.2211             nan     0.1000    0.0366
##      3        1.1621             nan     0.1000    0.0300
##      4        1.1144             nan     0.1000    0.0249
##      5        1.0741             nan     0.1000    0.0214
##      6        1.0516             nan     0.1000    0.0085
##      7        1.0146             nan     0.1000    0.0162
##      8        0.9861             nan     0.1000    0.0142
##      9        0.9612             nan     0.1000    0.0116
##     10        0.9430             nan     0.1000    0.0098
##     20        0.8449             nan     0.1000    0.0000
##     40        0.7626             nan     0.1000    0.0004
##     60        0.7193             nan     0.1000   -0.0002
##     80        0.6856             nan     0.1000   -0.0001
##    100        0.6629             nan     0.1000   -0.0015
##    120        0.6435             nan     0.1000   -0.0014
##    140        0.6207             nan     0.1000   -0.0010
##    150        0.6133             nan     0.1000   -0.0003
## 
## Iter   TrainDeviance   ValidDeviance   StepSize   Improve
##      1        1.2773             nan     0.1000    0.0486
##      2        1.2022             nan     0.1000    0.0365
##      3        1.1336             nan     0.1000    0.0309
##      4        1.0826             nan     0.1000    0.0256
##      5        1.0310             nan     0.1000    0.0239
##      6        0.9951             nan     0.1000    0.0157
##      7        0.9622             nan     0.1000    0.0148
##      8        0.9363             nan     0.1000    0.0103
##      9        0.9152             nan     0.1000    0.0101
##     10        0.8928             nan     0.1000    0.0100
##     20        0.7695             nan     0.1000    0.0002
##     40        0.6761             nan     0.1000   -0.0001
##     60        0.6104             nan     0.1000   -0.0008
##     80        0.5616             nan     0.1000   -0.0017
##    100        0.5147             nan     0.1000   -0.0014
##    120        0.4820             nan     0.1000   -0.0004
##    140        0.4504             nan     0.1000   -0.0008
##    150        0.4375             nan     0.1000   -0.0023
## 
## Iter   TrainDeviance   ValidDeviance   StepSize   Improve
##      1        1.2773             nan     0.1000    0.0480
##      2        1.1963             nan     0.1000    0.0350
##      3        1.1316             nan     0.1000    0.0339
##      4        1.0760             nan     0.1000    0.0238
##      5        1.0305             nan     0.1000    0.0222
##      6        0.9903             nan     0.1000    0.0160
##      7        0.9568             nan     0.1000    0.0132
##      8        0.9210             nan     0.1000    0.0164
##      9        0.8911             nan     0.1000    0.0100
##     10        0.8685             nan     0.1000    0.0087
##     20        0.7296             nan     0.1000    0.0009
##     40        0.5960             nan     0.1000   -0.0016
##     60        0.5154             nan     0.1000   -0.0018
##     80        0.4565             nan     0.1000   -0.0001
##    100        0.4114             nan     0.1000   -0.0005
##    120        0.3612             nan     0.1000   -0.0015
##    140        0.3287             nan     0.1000   -0.0005
##    150        0.3136             nan     0.1000   -0.0015
## 
## Iter   TrainDeviance   ValidDeviance   StepSize   Improve
##      1        1.2869             nan     0.1000    0.0440
##      2        1.2139             nan     0.1000    0.0359
##      3        1.1566             nan     0.1000    0.0294
##      4        1.0983             nan     0.1000    0.0232
##      5        1.0602             nan     0.1000    0.0195
##      6        1.0246             nan     0.1000    0.0166
##      7        0.9924             nan     0.1000    0.0138
##      8        0.9690             nan     0.1000    0.0118
##      9        0.9505             nan     0.1000    0.0088
##     10        0.9311             nan     0.1000    0.0084
##     20        0.8317             nan     0.1000    0.0008
##     40        0.7656             nan     0.1000    0.0002
##     60        0.7235             nan     0.1000   -0.0011
##     80        0.6933             nan     0.1000   -0.0006
##    100        0.6719             nan     0.1000   -0.0017
##    120        0.6519             nan     0.1000   -0.0010
##    140        0.6385             nan     0.1000   -0.0021
##    150        0.6290             nan     0.1000   -0.0010
## 
## Iter   TrainDeviance   ValidDeviance   StepSize   Improve
##      1        1.2802             nan     0.1000    0.0477
##      2        1.1949             nan     0.1000    0.0411
##      3        1.1288             nan     0.1000    0.0290
##      4        1.0804             nan     0.1000    0.0238
##      5        1.0263             nan     0.1000    0.0210
##      6        0.9848             nan     0.1000    0.0198
##      7        0.9536             nan     0.1000    0.0153
##      8        0.9208             nan     0.1000    0.0128
##      9        0.8998             nan     0.1000    0.0111
##     10        0.8781             nan     0.1000    0.0101
##     20        0.7757             nan     0.1000    0.0003
##     40        0.6850             nan     0.1000    0.0013
##     60        0.6181             nan     0.1000   -0.0016
##     80        0.5718             nan     0.1000   -0.0021
##    100        0.5364             nan     0.1000   -0.0015
##    120        0.4948             nan     0.1000   -0.0036
##    140        0.4654             nan     0.1000   -0.0023
##    150        0.4552             nan     0.1000   -0.0025
## 
## Iter   TrainDeviance   ValidDeviance   StepSize   Improve
##      1        1.2810             nan     0.1000    0.0502
##      2        1.1873             nan     0.1000    0.0376
##      3        1.1211             nan     0.1000    0.0301
##      4        1.0746             nan     0.1000    0.0229
##      5        1.0214             nan     0.1000    0.0261
##      6        0.9769             nan     0.1000    0.0202
##      7        0.9404             nan     0.1000    0.0177
##      8        0.9179             nan     0.1000    0.0089
##      9        0.8912             nan     0.1000    0.0101
##     10        0.8640             nan     0.1000    0.0085
##     20        0.7263             nan     0.1000    0.0020
##     40        0.6129             nan     0.1000   -0.0019
##     60        0.5314             nan     0.1000   -0.0037
##     80        0.4757             nan     0.1000   -0.0014
##    100        0.4316             nan     0.1000   -0.0012
##    120        0.3922             nan     0.1000   -0.0034
##    140        0.3505             nan     0.1000   -0.0015
##    150        0.3312             nan     0.1000   -0.0030
## 
## Iter   TrainDeviance   ValidDeviance   StepSize   Improve
##      1        1.2926             nan     0.1000    0.0445
##      2        1.2224             nan     0.1000    0.0369
##      3        1.1643             nan     0.1000    0.0300
##      4        1.1138             nan     0.1000    0.0246
##      5        1.0717             nan     0.1000    0.0208
##      6        1.0365             nan     0.1000    0.0181
##      7        1.0090             nan     0.1000    0.0150
##      8        0.9842             nan     0.1000    0.0126
##      9        0.9656             nan     0.1000    0.0080
##     10        0.9423             nan     0.1000    0.0093
##     20        0.8384             nan     0.1000    0.0028
##     40        0.7699             nan     0.1000   -0.0008
##     60        0.7278             nan     0.1000   -0.0013
##     80        0.6975             nan     0.1000   -0.0012
##    100        0.6712             nan     0.1000    0.0000
pred.training=predict(modfit,training)
confussion.training<-confusionMatrix(pred.training, training$A16)
confussion.training
## Confusion Matrix and Statistics
## 
##            Reference
## Prediction  Aprobado Declinado
##   Aprobado       189        42
##   Declinado       14       196
##                                           
##                Accuracy : 0.873           
##                  95% CI : (0.8383, 0.9026)
##     No Information Rate : 0.5397          
##     P-Value [Acc > NIR] : < 2.2e-16       
##                                           
##                   Kappa : 0.747           
##  Mcnemar's Test P-Value : 0.0003085       
##                                           
##             Sensitivity : 0.9310          
##             Specificity : 0.8235          
##          Pos Pred Value : 0.8182          
##          Neg Pred Value : 0.9333          
##              Prevalence : 0.4603          
##          Detection Rate : 0.4286          
##    Detection Prevalence : 0.5238          
##       Balanced Accuracy : 0.8773          
##                                           
##        'Positive' Class : Aprobado        
## 

La precisión es del 87% con los datos de entrenamiento del modelo. Esta precisión es poco confiable porque se está haciendo sobre los mismos datos de entrenamiento o training. Para hacer algo más real aplicaré el mismo modelo predictivo y la matriz de confusión sobre el data frame testing y evitar errores de overfitting o sobre ajuste.

Predicción y Matriz de Confusión aplicada sobre el grupo de testing

Matriz de confusión y precisión del modelo aplicado sobre el data frame testing

Usaré testing para comparar la predicción del modelo escogido y la precisión real del mismo. Lo primero es aplicar sobre los datos de testing los mismos procesos de depuración de la data y de obtención de variables pca.

A16<- testing[,"A16"]
testing2<-select(testing, -one_of("A16")) ## quitamos la variable a predecir del proceso de preprocesamiento
testing_numeric<- testing2[,c(only_numeric)]

test.pca<-predict(preproc, testing_numeric) ## los nuevos predictores son creados

## Variables numéricas originales serán reemplazadas por los nuevos predictores test.pca
## y se usa el mismo preprocesamiento que se uso con los datos de entrenamiento

testing<-cbind(select(testing2, -one_of(only_numeric)),test.pca,A16)

set.seed(12345)
test.pred=predict(modfit,testing)
## Loading required package: gbm
## Loading required package: survival
## 
## Attaching package: 'survival'
## The following object is masked from 'package:caret':
## 
##     cluster
## Loading required package: splines
## Loading required package: parallel
## Loaded gbm 2.1.1
confussion.testing<-confusionMatrix(test.pred, testing$A16)
confussion.testing
## Confusion Matrix and Statistics
## 
##            Reference
## Prediction  Aprobado Declinado
##   Aprobado        45         5
##   Declinado        5        54
##                                           
##                Accuracy : 0.9083          
##                  95% CI : (0.8377, 0.9551)
##     No Information Rate : 0.5413          
##     P-Value [Acc > NIR] : <2e-16          
##                                           
##                   Kappa : 0.8153          
##  Mcnemar's Test P-Value : 1               
##                                           
##             Sensitivity : 0.9000          
##             Specificity : 0.9153          
##          Pos Pred Value : 0.9000          
##          Neg Pred Value : 0.9153          
##              Prevalence : 0.4587          
##          Detection Rate : 0.4128          
##    Detection Prevalence : 0.4587          
##       Balanced Accuracy : 0.9076          
##                                           
##        'Positive' Class : Aprobado        
## 

La precisión con los datos de testing es del 91 %. El nivel de sensibilidad es del 91% y el de especifidad 90%, lo cual es muy bueno asumiendo que sean créditos de bajo monto. De acuerdo al intervalo de confianza y el tipo de datos a predecir la precisión del modelo podría llegar a oscilar entre el 84% y el 95%