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
Vamos a crear:
#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.
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.
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")
}
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.
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.
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.
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.
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%