Cargamos las librerias a utilizar
#############################################library(dplyr) # for data manipulation
library(caret) # for model-building
library(DMwR) # for smote implementation
library(purrr) # for functional programming (map)
library(pROC)
library(knitr)
library(qgraph)
library(nortest)
library(magrittr)
library(dplyr)
library(tidyr)
library(e1071)
library(OneR)
library(tidyverse) # data manipulation and visualization
library(ggplot2) # plot arrangement
library(gridExtra) # plot arrangement
library(caret)
library(ggplot2)
library(FactoMineR)
library(factoextra)
library(modes) # MODA VER EL COMPORTAMIENTO GENERAL DE LA INF
library(randomForest)
#CARGAS DATOS PARA TRABAJAR MODELO PREDICTIVO
############################################
#ruta <- 'C:/Users/Jhampier/Google Drive/Maestria/TESIS DE MAESTRIA/Proyecto'
#setwd('C:/Users/Jhampier/Google Drive/Maestria/TESIS DE MAESTRIA/Proyecto')
#ruta <- 'C:/Users/jtapiasu/Google Drive/Maestria/TESIS DE MAESTRIA/Proyecto'
#setwd('C:/Users/jtapiasu/Google Drive/Maestria/TESIS DE MAESTRIA/Proyecto')
#C:\Users\Administrador\Desktop
#ruta <- 'C:/Users/Administrador/Desktop'
#setwd('C:/Users/Administrador/Desktop')
#Leer el conjunto de datos del archivo CSV
DataSetUprivada <- read.table("C:/Users/Administrador/Desktop/DataSetUprivadaBinarizadaSinRuidoFuturo.csv",header=TRUE,sep=";",stringsAsFactors = FALSE) ## dec="." es separador decimal
##########################################################
########## 2 COMPRESION DE DATOS Y 3 PREPARACIÓN DE DATOS#####
##########################################################
str(DataSetUprivada)
'data.frame': 35693 obs. of 28 variables:
$ CodAlumno : chr "20000062092012-1" "20000062092012-2" "20000062092013-1" "20000062092013-2" ...
$ SemestresEstudiadosAcum : int 1 2 3 4 1 2 3 4 1 2 ...
$ CantCursosLlevadosAcum : int 7 15 22 29 6 13 20 28 6 11 ...
$ CursosLlevadosFueraCarreraAcum: int 1 2 3 4 1 2 3 4 1 2 ...
$ AvgSinAplzAcum : chr "10,52" "11,47" "11,41" "11,34" ...
$ AvgConAplzAcum : chr "10,76" "11,59" "11,44" "11,46" ...
$ CantCursosAplzAcum : int 1 1 2 3 2 3 4 6 1 1 ...
$ SumCredTeoAcum : int 15 30 44 58 14 27 40 56 12 21 ...
$ SumCredPraAcum : int 7 14 21 28 6 13 20 27 6 11 ...
$ edad : int 20 20 21 21 20 20 21 21 34 35 ...
$ SEXO : chr "M" "M" "M" "M" ...
$ AvgVezMatriAcum : chr "1,14" "1,13" "1,09" "1,07" ...
$ CarreraProfesional : chr "INGENIERIA AGRONOMICA" "INGENIERIA AGRONOMICA" "INGENIERIA AGRONOMICA" "INGENIERIA AGRONOMICA" ...
$ MODALIDAD_INGRESO : chr "Primeros Puestos" "Primeros Puestos" "Primeros Puestos" "Primeros Puestos" ...
$ ANIO_INGRESO : int 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 ...
$ UBIG_NACIMIENTO : chr "JOSE LUIS BUSTAMANTE Y RIVERO" "JOSE LUIS BUSTAMANTE Y RIVERO" "JOSE LUIS BUSTAMANTE Y RIVERO" "JOSE LUIS BUSTAMANTE Y RIVERO" ...
$ UBIG_RESIDENCIA : chr "JOSE LUIS BUSTAMANTE Y RIVERO" "JOSE LUIS BUSTAMANTE Y RIVERO" "JOSE LUIS BUSTAMANTE Y RIVERO" "JOSE LUIS BUSTAMANTE Y RIVERO" ...
$ TIPO_VIVIENDA : chr "CASA" "CASA" "CASA" "CASA" ...
$ GradoInstruccionPapa : chr "SUPERIOR UNIV. INCOMPLETA" "SUPERIOR UNIV. INCOMPLETA" "SUPERIOR UNIV. INCOMPLETA" "SUPERIOR UNIV. INCOMPLETA" ...
$ ProfesionPapa : chr "OTROS" "OTROS" "OTROS" "OTROS" ...
$ OcupacionPapa : chr "EMPRESARIO" "EMPRESARIO" "EMPRESARIO" "EMPRESARIO" ...
$ GradoInstruccionMama : chr "SUPERIOR TECNICA INCOMPLETA" "SUPERIOR TECNICA INCOMPLETA" "SUPERIOR TECNICA INCOMPLETA" "SUPERIOR TECNICA INCOMPLETA" ...
$ ProfesionMama : chr "OTROS" "OTROS" "OTROS" "OTROS" ...
$ OcupacionMama : chr "EMPLEADO" "EMPLEADO" "EMPLEADO" "EMPLEADO" ...
$ CantCursosAnulados : int 1 1 1 1 0 0 0 0 0 0 ...
$ categoria : chr "CONTINUA" "CONTINUA" "CONTINUA" "EGRESADO" ...
$ categoriaBinarizada : int 0 0 0 0 0 0 0 1 0 0 ...
$ ProbabDesercion : chr "14,24" "10,24" "6,61" "5,87" ...
View(DataSetUprivada)
########################################################
## DIMENSIONES - CANTIDAD DE FILAS Y VARIABLES(COLUMNAS)
nrow(DataSetUprivada)#[1] 35693
[1] 35693
ncol(DataSetUprivada)#[1] 27 -1 de categoria(var categorica)
[1] 28
colnames(DataSetUprivada)#Nombres de Variables
[1] "CodAlumno" "SemestresEstudiadosAcum"
[3] "CantCursosLlevadosAcum" "CursosLlevadosFueraCarreraAcum"
[5] "AvgSinAplzAcum" "AvgConAplzAcum"
[7] "CantCursosAplzAcum" "SumCredTeoAcum"
[9] "SumCredPraAcum" "edad"
[11] "SEXO" "AvgVezMatriAcum"
[13] "CarreraProfesional" "MODALIDAD_INGRESO"
[15] "ANIO_INGRESO" "UBIG_NACIMIENTO"
[17] "UBIG_RESIDENCIA" "TIPO_VIVIENDA"
[19] "GradoInstruccionPapa" "ProfesionPapa"
[21] "OcupacionPapa" "GradoInstruccionMama"
[23] "ProfesionMama" "OcupacionMama"
[25] "CantCursosAnulados" "categoria"
[27] "categoriaBinarizada" "ProbabDesercion"
##NOMBRES Y TIPOS DE DATOS DE LAS COLUMNAS
sapply(DataSetUprivada, mode)
CodAlumno SemestresEstudiadosAcum
"character" "numeric"
CantCursosLlevadosAcum CursosLlevadosFueraCarreraAcum
"numeric" "numeric"
AvgSinAplzAcum AvgConAplzAcum
"character" "character"
CantCursosAplzAcum SumCredTeoAcum
"numeric" "numeric"
SumCredPraAcum edad
"numeric" "numeric"
SEXO AvgVezMatriAcum
"character" "character"
CarreraProfesional MODALIDAD_INGRESO
"character" "character"
ANIO_INGRESO UBIG_NACIMIENTO
"numeric" "character"
UBIG_RESIDENCIA TIPO_VIVIENDA
"character" "character"
GradoInstruccionPapa ProfesionPapa
"character" "character"
OcupacionPapa GradoInstruccionMama
"character" "character"
ProfesionMama OcupacionMama
"character" "character"
CantCursosAnulados categoria
"numeric" "character"
categoriaBinarizada ProbabDesercion
"numeric" "character"
summary(DataSetUprivada)#PODEMOS OBSERVAR EN EL POWER
CodAlumno SemestresEstudiadosAcum CantCursosLlevadosAcum
Length:35693 Min. : 1.000 Min. : 1.00
Class :character 1st Qu.: 2.000 1st Qu.:11.00
Mode :character Median : 4.000 Median :20.00
Mean : 4.187 Mean :23.17
3rd Qu.: 6.000 3rd Qu.:33.00
Max. :12.000 Max. :81.00
CursosLlevadosFueraCarreraAcum AvgSinAplzAcum AvgConAplzAcum
Min. : 1.000 Length:35693 Length:35693
1st Qu.: 2.000 Class :character Class :character
Median : 4.000 Mode :character Mode :character
Mean : 4.306
3rd Qu.: 6.000
Max. :18.000
CantCursosAplzAcum SumCredTeoAcum SumCredPraAcum edad
Min. : 0.000 Min. : 1.0 Min. : 0.00 Min. : 14.00
1st Qu.: 1.000 1st Qu.: 27.0 1st Qu.: 7.00 1st Qu.: 18.00
Median : 3.000 Median : 50.0 Median :15.00 Median : 20.00
Mean : 5.247 Mean : 59.4 Mean :17.78 Mean : 20.55
3rd Qu.: 8.000 3rd Qu.: 85.0 3rd Qu.:25.00 3rd Qu.: 22.00
Max. :48.000 Max. :200.0 Max. :80.00 Max. :113.00
SEXO AvgVezMatriAcum CarreraProfesional
Length:35693 Length:35693 Length:35693
Class :character Class :character Class :character
Mode :character Mode :character Mode :character
MODALIDAD_INGRESO ANIO_INGRESO UBIG_NACIMIENTO UBIG_RESIDENCIA
Length:35693 Min. :2009 Length:35693 Length:35693
Class :character 1st Qu.:2011 Class :character Class :character
Mode :character Median :2012 Mode :character Mode :character
Mean :2012
3rd Qu.:2014
Max. :2017
TIPO_VIVIENDA GradoInstruccionPapa ProfesionPapa
Length:35693 Length:35693 Length:35693
Class :character Class :character Class :character
Mode :character Mode :character Mode :character
OcupacionPapa GradoInstruccionMama ProfesionMama
Length:35693 Length:35693 Length:35693
Class :character Class :character Class :character
Mode :character Mode :character Mode :character
OcupacionMama CantCursosAnulados categoria
Length:35693 Min. : 0.0000 Length:35693
Class :character 1st Qu.: 0.0000 Class :character
Mode :character Median : 0.0000 Mode :character
Mean : 0.2907
3rd Qu.: 0.0000
Max. :16.0000
categoriaBinarizada ProbabDesercion
Min. :0.0000 Length:35693
1st Qu.:0.0000 Class :character
Median :0.0000 Mode :character
Mean :0.0773
3rd Qu.:0.0000
Max. :1.0000
summary(DataSetUprivada$CarreraProfesional)#PODEMOS OBSERVAR EN EL POWER
Length Class Mode
35693 character character
########################################################
########### PREPARACIÓN DE DATA POR VARIABLES ########
########################################################
###Converision para tipo de dato correcto
DataSetUPRIVADAFRMTO <-transform(DataSetUprivada,
SEXO = as.factor(as.character(SEXO)),
CarreraProfesional = as.factor(as.character(CarreraProfesional)),
MODALIDAD_INGRESO = as.factor(as.character(MODALIDAD_INGRESO)),
UBIG_NACIMIENTO = as.factor(as.character(UBIG_NACIMIENTO)),
UBIG_RESIDENCIA = as.factor(as.character(UBIG_RESIDENCIA)),
TIPO_VIVIENDA = as.factor(as.character(TIPO_VIVIENDA)),
GradoInstruccionPapa = as.factor(as.character(GradoInstruccionPapa)),
ProfesionPapa = as.factor(as.character(ProfesionPapa)),
OcupacionPapa = as.factor(as.character(OcupacionPapa)),
GradoInstruccionMama = as.factor(as.character(GradoInstruccionMama)),
ProfesionMama = as.factor(as.character(ProfesionMama)),
OcupacionMama = as.factor(as.character(OcupacionMama))
,categoriaBinarizada = as.factor(as.character(categoriaBinarizada))
)
DataSetUPRIVADAFRMTO[,'AvgSinAplzAcum'] <- as.numeric(sub(",", ".", DataSetUPRIVADAFRMTO[,'AvgSinAplzAcum']
, fixed = TRUE))
DataSetUPRIVADAFRMTO[,'AvgConAplzAcum'] <- as.numeric(sub(",", ".", DataSetUPRIVADAFRMTO[,'AvgConAplzAcum']
, fixed = TRUE))
DataSetUPRIVADAFRMTO[,'AvgVezMatriAcum'] <- as.numeric(sub(",", ".", DataSetUPRIVADAFRMTO[,'AvgVezMatriAcum']
, fixed = TRUE))
DataSetUPRIVADAFRMTO[,'ProbabDesercion'] <- as.numeric(sub(",", ".", DataSetUPRIVADAFRMTO[,'ProbabDesercion']
, fixed = TRUE))
##sapply(DataSetUPRIVADAFRMTO, mode)
ListVar.Categ <- c('SEXO','CarreraProfesional','MODALIDAD_INGRESO'
,'UBIG_NACIMIENTO','UBIG_RESIDENCIA','TIPO_VIVIENDA'
,'GradoInstruccionPapa','ProfesionPapa','OcupacionPapa'
,'GradoInstruccionMama','ProfesionMama','OcupacionMama') # 12
Var.Objetivo <- c('categoriaBinarizada') #c('categoria') # 1
ListVar.Continuas <- c('SemestresEstudiadosAcum'
,'CantCursosLlevadosAcum'
,'CursosLlevadosFueraCarreraAcum'
,'AvgSinAplzAcum','AvgConAplzAcum'
,'CantCursosAplzAcum'
,'SumCredTeoAcum'
,'SumCredPraAcum'
,'edad'
#T#,'AvgVezMatriAcum'
,'ANIO_INGRESO'
#T#,'CantCursosAnulados' # 12
,'ProbabDesercion'
)
Var.Identificacion <- c('CodAlumno') # 1
Var.TodasUprivada <- c(ListVar.Categ ,ListVar.Continuas , Var.Objetivo)
##############################################################################
# ###ORDENAMOS EL DATASET CRONOLOGICAMENTE
############################################################################
### ANTES
View(DataSetUPRIVADAFRMTO)
TotalFilas <- nrow(DataSetUPRIVADAFRMTO) #35687
SortUltimaFila=vector(mode='numeric', length=TotalFilas)
SortUltimaFila2=vector(mode='numeric', length=TotalFilas)
##Obtendremos las variables dle codigod el alumno para ordenar el dataset
NuevoDataSetUPRIVADAFRMTO = data.frame(DataSetUPRIVADAFRMTO, SortUltimaFila,SortUltimaFila2)
View(NuevoDataSetUPRIVADAFRMTO)
summary(NuevoDataSetUPRIVADAFRMTO)
CodAlumno SemestresEstudiadosAcum CantCursosLlevadosAcum
Length:35693 Min. : 1.000 Min. : 1.00
Class :character 1st Qu.: 2.000 1st Qu.:11.00
Mode :character Median : 4.000 Median :20.00
Mean : 4.187 Mean :23.17
3rd Qu.: 6.000 3rd Qu.:33.00
Max. :12.000 Max. :81.00
CursosLlevadosFueraCarreraAcum AvgSinAplzAcum AvgConAplzAcum
Min. : 1.000 Min. : 0.00 Min. : 0.00
1st Qu.: 2.000 1st Qu.: 8.91 1st Qu.: 9.36
Median : 4.000 Median :10.63 Median :11.06
Mean : 4.306 Mean :10.54 Mean :10.84
3rd Qu.: 6.000 3rd Qu.:12.32 3rd Qu.:12.52
Max. :18.000 Max. :19.66 Max. :19.66
CantCursosAplzAcum SumCredTeoAcum SumCredPraAcum edad
Min. : 0.000 Min. : 1.0 Min. : 0.00 Min. : 14.00
1st Qu.: 1.000 1st Qu.: 27.0 1st Qu.: 7.00 1st Qu.: 18.00
Median : 3.000 Median : 50.0 Median :15.00 Median : 20.00
Mean : 5.247 Mean : 59.4 Mean :17.78 Mean : 20.55
3rd Qu.: 8.000 3rd Qu.: 85.0 3rd Qu.:25.00 3rd Qu.: 22.00
Max. :48.000 Max. :200.0 Max. :80.00 Max. :113.00
SEXO AvgVezMatriAcum
F: 9994 Min. :1.000
M:25699 1st Qu.:1.000
Median :1.000
Mean :1.138
3rd Qu.:1.170
Max. :4.000
CarreraProfesional
INGENIERIA INDUSTRIAL :8791
INGENIERIA MECANICA, MECANICA-ELECTRICA Y MECATRONICA:8528
INGENIERIA DE SISTEMAS :4537
INGENIERIA ELECTRONICA :3699
MEDICINA VETERINARIA Y ZOOTECNIA :3124
INGENIERIA DE MINAS :3119
(Other) :3895
MODALIDAD_INGRESO ANIO_INGRESO UBIG_NACIMIENTO
Tercer Examen General :8524 Min. :2009 AREQUIPA :21072
Segundo Examen General :6259 1st Qu.:2011 PAUCARPATA: 1444
Primer Examen General :5818 Median :2012 JULIACA : 869
Centro Preuniversitario III:3417 Mean :2012 YANAHUARA : 707
Centro Preuniversitario I :2962 3rd Qu.:2014 ILO : 701
Centro Preuniversitario II :2962 Max. :2017 MOLLENDO : 655
(Other) :5751 (Other) :10245
UBIG_RESIDENCIA TIPO_VIVIENDA
JOSE LUIS BUSTAMANTE Y RIVERO: 5274 CASA :29859
CERRO COLORADO : 3949 DEPARTAMENTO: 5484
AREQUIPA : 3931 VECINDAD : 350
PAUCARPATA : 3272
CAYMA : 2701
YANAHUARA : 2381
(Other) :14185
GradoInstruccionPapa ProfesionPapa
SECUNDARIA COMPLETA :7703 OTROS :13173
SUPERIOR UNIV. COMPLETA :6279 PROFESION ... : 6469
SUPERIOR TECNICA COMPLETA:5469 CONTADOR : 2238
GRADUADO UNIVERSITARIO :4493 ADMINISTRADOR DE EMPRESAS: 1550
SUPERIOR UNIV. INCOMPLETA:4372 PROFESOR : 1479
NIVEL EDUCATIVO ... :1770 ABOGADO : 1313
(Other) :5607 (Other) : 9471
OcupacionPapa GradoInstruccionMama
EMPLEADO :10711 SECUNDARIA COMPLETA :8926
OTRO : 5305 SUPERIOR UNIV. COMPLETA :6048
OCUPACION ... : 3028 SUPERIOR TECNICA COMPLETA :5695
MICROEMPRESARIO : 2396 GRADUADO UNIVERSITARIO :4726
FF. POLICIALES : 2185 SUPERIOR UNIV. INCOMPLETA :3464
CONDUCTOR DE VEHICULO: 2182 EST. SUP. NO UNIVERSITARIOS:1674
(Other) : 9886 (Other) :5160
ProfesionMama OcupacionMama
OTROS :13518 AMA DE CASA :14746
PROFESION ... : 5909 EMPLEADO : 8825
ENFERMERA : 2976 OTRO : 3767
PROFESOR : 2966 COMERCIANTE MINORISTA: 2208
CONTADOR : 2400 OCUPACION ... : 1576
ADMINISTRADOR DE EMPRESAS: 871 MICROEMPRESARIO : 1558
(Other) : 7053 (Other) : 3013
CantCursosAnulados categoria categoriaBinarizada
Min. : 0.0000 Length:35693 0:32934
1st Qu.: 0.0000 Class :character 1: 2759
Median : 0.0000 Mode :character
Mean : 0.2907
3rd Qu.: 0.0000
Max. :16.0000
ProbabDesercion SortUltimaFila SortUltimaFila2
Min. : 0.000 Min. :0 Min. :0
1st Qu.: 5.190 1st Qu.:0 1st Qu.:0
Median : 5.870 Median :0 Median :0
Mean : 7.729 Mean :0 Mean :0
3rd Qu.:10.240 3rd Qu.:0 3rd Qu.:0
Max. :14.240 Max. :0 Max. :0
NuevoDataSetUPRIVADAFRMTO$SortUltimaFila=as.numeric( substr(NuevoDataSetUPRIVADAFRMTO$CodAlumno, 11, 14))
NuevoDataSetUPRIVADAFRMTO$SortUltimaFila2=as.numeric( substr(NuevoDataSetUPRIVADAFRMTO$CodAlumno, 16, 17))
###ORDENAMOS EL DATA SET
SortNuevoDataSetUPRIVADAFRMTO <- NuevoDataSetUPRIVADAFRMTO[order(NuevoDataSetUPRIVADAFRMTO$SortUltimaFila,NuevoDataSetUPRIVADAFRMTO$SortUltimaFila2),]
View(SortNuevoDataSetUPRIVADAFRMTO)
SortNuevoDataSetUPRIVADAFRMTO$SortUltimaFila <- NULL ##ELIMINARNOS LAS FILAS DE ORDENAMIENTO
SortNuevoDataSetUPRIVADAFRMTO$SortUltimaFila2 <- NULL ##ELIMINARNOS LAS FILAS DE ORDENAMIENTO
##Reemplamos en el dataset que se trabajarn los modelos
DataSetUPRIVADAFRMTO<-SortNuevoDataSetUPRIVADAFRMTO
Observamos el DATASET ordenado cronologicamente
# Resultado DESPUES
View(DataSetUPRIVADAFRMTO) #### EL NUEVO DATA SET SE ENCUENTRA ORDENADO CRONOLOGICAMENTE
ncol(DataSetUPRIVADAFRMTO)
[1] 28
Configuración para el modelo de entrenamiento
summary(DataSetUPRIVADAFRMTO$CarreraProfesional)
INGENIERIA AGRONOMICA
952
INGENIERIA AGRONOMICA Y AGRICOLA
551
INGENIERIA DE INDUSTRIA ALIMENTARIA
2392
INGENIERIA DE MINAS
3119
INGENIERIA DE SISTEMAS
4537
INGENIERIA ELECTRONICA
3699
INGENIERIA INDUSTRIAL
8791
INGENIERIA MECANICA, MECANICA-ELECTRICA Y MECATRONICA
8528
MEDICINA VETERINARIA Y ZOOTECNIA
3124
DataSetUPRIVADAFRMTO.RF <-DataSetUPRIVADAFRMTO[,Var.TodasUprivada] %>% filter(gsub("^\\s+|\\s+$", "",CarreraProfesional) =="INGENIERIA DE INDUSTRIA ALIMENTARIA" ) %>% droplevels
#Para que las variables se visualicen correctamente
for (variable in ListVar.Categ) { levels(DataSetUPRIVADAFRMTO.RF[,variable]) }
nrow(DataSetUPRIVADAFRMTO.RF)
[1] 2392
summary(DataSetUPRIVADAFRMTO.RF$CarreraProfesional)
INGENIERIA DE INDUSTRIA ALIMENTARIA
2392
DataSetUPRIVADAFRMTO.RF$CarreraProfesional <- NULL
# configurar función de control para Training
ctrl <- trainControl(method = "repeatedcv", number = 10, repeats = 10, summaryFunction = twoClassSummary, classProbs = TRUE)
DataSetUPRIVADAFRMTO.RF$categoriaBinarizada <- as.character(DataSetUPRIVADAFRMTO.RF$categoriaBinarizada)
DataSetUPRIVADAFRMTO.RF$categoriaBinarizada[DataSetUPRIVADAFRMTO.RF$categoriaBinarizada == "0"] <- "C0"### LOS QUE CONTINUAN
DataSetUPRIVADAFRMTO.RF$categoriaBinarizada[DataSetUPRIVADAFRMTO.RF$categoriaBinarizada == "1"] <- "C1"### LOS DESERTORES
DataSetUPRIVADAFRMTO.RF$categoriaBinarizada <- factor(DataSetUPRIVADAFRMTO.RF$categoriaBinarizada)
LUEGO DE ORDENAR PROCEDEMOS A ENTRENAR EL MODELO
####################################################
####PODEMOS OBSERVAR EL DESBALANCEO DE LAS CLASES
100*prop.table(table(DataSetUPRIVADAFRMTO.RF$categoriaBinarizada))
C0 C1
92.22408 7.77592
summary(DataSetUPRIVADAFRMTO.RF$categoriaBinarizada)
C0 C1
2206 186
##calculamos las filas para el entrenamiento
TotalFilas <- nrow(DataSetUPRIVADAFRMTO.RF)
#####Se tomara el 50% de las de la data para entremiento y el otro 50% sera para TEST
TrainFilas <- round(TotalFilas*0.5)
##VEMOS EL DATASET QUE SE UTILIZARA PARA ENTRENAR
View(DataSetUPRIVADAFRMTO.RF)
AQUI SE APLICAN LOS MODELOS Y SE MUESTRA SUS MATRICES DE CONFUSIÓN COMO REFERENCIA
##DENIFIMOS LOS NODOS DE ENTRENAMIENTP
x_trainRF <- DataSetUPRIVADAFRMTO.RF[ (1:TrainFilas),]
y_trainRF <- DataSetUPRIVADAFRMTO.RF[ (1:TrainFilas),'categoriaBinarizada']
##### DATOS PARA ENTRENAMIENTO
View(x_trainRF)
x_testRF <- DataSetUPRIVADAFRMTO.RF[ ((TrainFilas+1):TotalFilas),]
y_testRF <- DataSetUPRIVADAFRMTO.RF[ ((TrainFilas+1):TotalFilas),'categoriaBinarizada']
## configurarmos un paramtro de RamdomForest para tunear el modelo.
##### DATOS PARA TESTING
View(x_testRF)
tunegrid <- expand.grid(.mtry = c(sqrt(ncol(DataSetUPRIVADAFRMTO.RF))))
orig_fit <- caret::train(categoriaBinarizada ~ ., data = x_trainRF,verbose = FALSE
, method = "rf", metric = "ROC", tuneGrid = tunegrid
, trControl = ctrl)
summary(y_testRF)
C0 C1
1103 93
mc_PredictOrigTuneGrid<- table(predict(orig_fit,x_testRF),y_testRF)
mc_PredictOrigTuneGrid
y_testRF
C0 C1
C0 1103 92
C1 0 1
cm_originalRF1 <- confusionMatrix(predict(orig_fit,x_testRF), y_testRF)
cm_originalRF1$byClass
Sensitivity Specificity Pos Pred Value
1.00000000 0.01075269 0.92301255
Neg Pred Value Precision Recall
1.00000000 0.92301255 1.00000000
F1 Prevalence Detection Rate
0.95996519 0.92224080 0.92224080
Detection Prevalence Balanced Accuracy
0.99916388 0.50537634
#########################################################
#########################################################
# Create model weights (they sum to one)
model_weights <- ifelse(x_trainRF$categoriaBinarizada == "C0",
(1/table(x_trainRF$categoriaBinarizada)[1]) * 0.5,
(1/table(x_trainRF$categoriaBinarizada)[2]) * 0.5)
summary(model_weights)
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.0004533 0.0004533 0.0004533 0.0008361 0.0004533 0.0053763
# Use the same seed to ensure same cross-validation splits
ctrl$seeds <- orig_fit$control$seeds
# Build weighted model
weighted_fit <- train(categoriaBinarizada ~ .,
data = x_trainRF,
method = "rf",
verbose = FALSE,
weights = model_weights,
metric = "ROC",
tuneGrid = tunegrid,
trControl = ctrl)
summary(y_testRF)
C0 C1
1103 93
mc_PredictWeightTuneGrid<- table(predict(weighted_fit,x_testRF),y_testRF)
mc_PredictWeightTuneGrid
y_testRF
C0 C1
C0 1103 92
C1 0 1
cm_WeightRF1 <- confusionMatrix(predict(weighted_fit,x_testRF), y_testRF)
cm_WeightRF1$byClass
Sensitivity Specificity Pos Pred Value
1.00000000 0.01075269 0.92301255
Neg Pred Value Precision Recall
1.00000000 0.92301255 1.00000000
F1 Prevalence Detection Rate
0.95996519 0.92224080 0.92224080
Detection Prevalence Balanced Accuracy
0.99916388 0.50537634
# Build down-sampled model
ctrl$sampling <- "down"
down_fit <- train(categoriaBinarizada ~ .,
data = x_trainRF,
method = "rf",
verbose = FALSE,
tuneGrid = tunegrid,
metric = "ROC",
trControl = ctrl)
summary(y_testRF)
C0 C1
1103 93
mc_PredictDownTuneGrid<- table(predict(down_fit,x_testRF),y_testRF)
mc_PredictDownTuneGrid
y_testRF
C0 C1
C0 881 47
C1 222 46
cm_DownRF1 <- confusionMatrix(predict(down_fit,x_testRF), y_testRF)
cm_DownRF1$byClass
Sensitivity Specificity Pos Pred Value
0.7987307 0.4946237 0.9493534
Neg Pred Value Precision Recall
0.1716418 0.9493534 0.7987307
F1 Prevalence Detection Rate
0.8675529 0.9222408 0.7366221
Detection Prevalence Balanced Accuracy
0.7759197 0.6466772
# Build up-sampled model
ctrl$sampling <- "up"
up_fit <- train(categoriaBinarizada ~ .,
data = x_trainRF,
method = "rf",
verbose = FALSE,
metric = "ROC",
tuneGrid = tunegrid,
trControl = ctrl)
summary(y_testRF)
C0 C1
1103 93
mc_PredictUpTuneGrid<- table(predict(up_fit,x_testRF),y_testRF)
mc_PredictUpTuneGrid
y_testRF
C0 C1
C0 1023 62
C1 80 31
cm_UpRF1 <- confusionMatrix(predict(up_fit,x_testRF), y_testRF)
cm_UpRF1$byClass
Sensitivity Specificity Pos Pred Value
0.9283772 0.3333333 0.9429098
Neg Pred Value Precision Recall
0.2818182 0.9429098 0.9283772
F1 Prevalence Detection Rate
0.9355870 0.9222408 0.8561873
Detection Prevalence Balanced Accuracy
0.9080268 0.6308552
# Build smote model
ctrl$sampling <- "smote"
smote_fit <- train(categoriaBinarizada ~ .,
data = x_trainRF,
method = "rf",
verbose = FALSE,
metric = "ROC",
tuneGrid = tunegrid,
trControl = ctrl)
summary(y_testRF)
C0 C1
1103 93
mc_PredictSmoteTuneGrid<- table(predict(smote_fit,x_testRF),y_testRF)
mc_PredictSmoteTuneGrid
y_testRF
C0 C1
C0 1098 84
C1 5 9
cm_SmoteRF1 <- confusionMatrix(predict(smote_fit,x_testRF), y_testRF)
cm_SmoteRF1$byClass
Sensitivity Specificity Pos Pred Value
0.99546691 0.09677419 0.92893401
Neg Pred Value Precision Recall
0.64285714 0.92893401 0.99546691
F1 Prevalence Detection Rate
0.96105033 0.92224080 0.91806020
Detection Prevalence Balanced Accuracy
0.98829431 0.54612055
#################### #################### ####################
#################### NUEVOS
ctrl <- trainControl(method = "repeatedcv", number = 10, repeats = 10, verboseIter = FALSE)
# summary( DataSetUPRIVADAFRMTO.RF$categoriaBinarizada)
# summary(x_trainRF$categoriaBinarizada)
# summary(x_testRF$categoriaBinarizada)
set.seed(5627)
model_rf <- caret::train(categoriaBinarizada ~ ., data = x_trainRF,
method = "rf", preProcess = c("scale", "center"),
trControl = ctrl)
mc_original<- table(predict(model_rf,x_testRF), y_testRF)
mc_original
y_testRF
C0 C1
C0 1103 93
C1 0 0
cm_original <- confusionMatrix(predict(model_rf,x_testRF), y_testRF)
cm_original
Confusion Matrix and Statistics
Reference
Prediction C0 C1
C0 1103 93
C1 0 0
Accuracy : 0.9222
95% CI : (0.9056, 0.9368)
No Information Rate : 0.9222
P-Value [Acc > NIR] : 0.5276
Kappa : 0
Mcnemar's Test P-Value : <2e-16
Sensitivity : 1.0000
Specificity : 0.0000
Pos Pred Value : 0.9222
Neg Pred Value : NaN
Prevalence : 0.9222
Detection Rate : 0.9222
Detection Prevalence : 1.0000
Balanced Accuracy : 0.5000
'Positive' Class : C0
ctrl$sampling <- "down"
set.seed(5627)
model_rf_under <- caret::train(categoriaBinarizada ~ ., data = x_trainRF,
method = "rf", preProcess = c("scale", "center"),
trControl = ctrl)
mc_originalUnder<- table(predict(model_rf_under,x_testRF), y_testRF)
mc_originalUnder
y_testRF
C0 C1
C0 823 34
C1 280 59
cm_originalUnder <- confusionMatrix(predict(model_rf_under,x_testRF), y_testRF)
cm_originalUnder
Confusion Matrix and Statistics
Reference
Prediction C0 C1
C0 825 34
C1 278 59
Accuracy : 0.7391
95% CI : (0.7133, 0.7638)
No Information Rate : 0.9222
P-Value [Acc > NIR] : 1
Kappa : 0.1737
Mcnemar's Test P-Value : <2e-16
Sensitivity : 0.7480
Specificity : 0.6344
Pos Pred Value : 0.9604
Neg Pred Value : 0.1751
Prevalence : 0.9222
Detection Rate : 0.6898
Detection Prevalence : 0.7182
Balanced Accuracy : 0.6912
'Positive' Class : C0
ctrl$sampling <- "up"
set.seed(5627)
model_rf_over <- caret::train(categoriaBinarizada ~ ., data = x_trainRF,
method = "rf", preProcess = c("scale", "center"),
trControl = ctrl)
mc_originalOver<- table(predict(model_rf_over,x_testRF), y_testRF)
mc_originalOver
y_testRF
C0 C1
C0 1085 79
C1 18 14
cm_originalOver <- confusionMatrix(predict(model_rf_over,x_testRF), y_testRF)
cm_originalOver
Confusion Matrix and Statistics
Reference
Prediction C0 C1
C0 1084 79
C1 19 14
Accuracy : 0.9181
95% CI : (0.901, 0.933)
No Information Rate : 0.9222
P-Value [Acc > NIR] : 0.727
Kappa : 0.1892
Mcnemar's Test P-Value : 2.524e-09
Sensitivity : 0.9828
Specificity : 0.1505
Pos Pred Value : 0.9321
Neg Pred Value : 0.4242
Prevalence : 0.9222
Detection Rate : 0.9064
Detection Prevalence : 0.9724
Balanced Accuracy : 0.5667
'Positive' Class : C0
ctrl$sampling <- "smote"
set.seed(5627)
model_rf_smote <- caret::train(categoriaBinarizada ~ ., data = x_trainRF,
method = "rf", preProcess = c("scale", "center"),
trControl = ctrl)
mc_originalSmote<- table(predict(model_rf_smote,x_testRF), y_testRF)
mc_originalSmote
y_testRF
C0 C1
C0 1102 93
C1 1 0
cm_originalSmote <- confusionMatrix(predict(model_rf_smote,x_testRF), y_testRF)
cm_originalSmote
Confusion Matrix and Statistics
Reference
Prediction C0 C1
C0 1102 93
C1 1 0
Accuracy : 0.9214
95% CI : (0.9047, 0.936)
No Information Rate : 0.9222
P-Value [Acc > NIR] : 0.5701
Kappa : -0.0017
Mcnemar's Test P-Value : <2e-16
Sensitivity : 0.9991
Specificity : 0.0000
Pos Pred Value : 0.9222
Neg Pred Value : 0.0000
Prevalence : 0.9222
Detection Rate : 0.9214
Detection Prevalence : 0.9992
Balanced Accuracy : 0.4995
'Positive' Class : C0
###PRUEBA
ccmodelBayes <- caret::train(categoriaBinarizada ~ ., data=x_trainRF,'nb')
mc_ccmodelBayesCaret<- table(predict(ccmodelBayes,x_testRF), y_testRF)
mc_ccmodelBayesCaret
y_testRF
C0 C1
C0 1103 93
C1 0 0
cm_ccmodelBayesCaret <- confusionMatrix(predict(ccmodelBayes,x_testRF), y_testRF)
cm_ccmodelBayesCaret$byClass
Sensitivity Specificity Pos Pred Value
1.0000000 0.0000000 0.9222408
Neg Pred Value Precision Recall
NaN 0.9222408 1.0000000
F1 Prevalence Detection Rate
0.9595476 0.9222408 0.9222408
Detection Prevalence Balanced Accuracy
1.0000000 0.5000000
##### NAIVE BAYES ########
x_trainRF$categoriaBinarizada <- NULL
x_testRF$categoriaBinarizada <- NULL
###CON CARET
library(e1071)
modelBayes <- caret::train(x_trainRF,y_trainRF,'nb')
mc_modelBayesCaret<- table(predict(modelBayes,x_testRF), y_testRF)
mc_modelBayesCaret
y_testRF
C0 C1
C0 915 65
C1 188 28
cm_modelBayesCaret <- confusionMatrix(predict(modelBayes,x_testRF), y_testRF)
cm_modelBayesCaret$byClass
Sensitivity Specificity Pos Pred Value
0.8295558 0.3010753 0.9336735
Neg Pred Value Precision Recall
0.1296296 0.9336735 0.8295558
F1 Prevalence Detection Rate
0.8785406 0.9222408 0.7650502
Detection Prevalence Balanced Accuracy
0.8193980 0.5653155
classificadorBayesiano <- naiveBayes(x_trainRF,y_trainRF)
mc_originalBayesiano<- table(predict(classificadorBayesiano,x_testRF), y_testRF)
mc_originalBayesiano
y_testRF
C0 C1
C0 955 62
C1 148 31
cm_originalBayesiano <- confusionMatrix(predict(classificadorBayesiano,x_testRF), y_testRF)
cm_originalBayesiano
Confusion Matrix and Statistics
Reference
Prediction C0 C1
C0 955 62
C1 148 31
Accuracy : 0.8244
95% CI : (0.8016, 0.8456)
No Information Rate : 0.9222
P-Value [Acc > NIR] : 1
Kappa : 0.1399
Mcnemar's Test P-Value : 4.476e-09
Sensitivity : 0.8658
Specificity : 0.3333
Pos Pred Value : 0.9390
Neg Pred Value : 0.1732
Prevalence : 0.9222
Detection Rate : 0.7985
Detection Prevalence : 0.8503
Balanced Accuracy : 0.5996
'Positive' Class : C0
View(x_trainRF)
#################################################################################################################
################################### RESUMEN DE RESULTADOS #######################################################
# #################################################################################################################
# View(x_trainRF)
# View(y_trainRF)
# View(x_testRF)
# View(y_testRF)
# summary(x_testRF)
# summary(y_testRF)
# mc_originalBayesiano
models <- list( originalRF1 = orig_fit,
WeightRF1 = weighted_fit,
DownRF1 = down_fit,
UpRF1 = up_fit,
SmoteRF1 = smote_fit,
original = model_rf,
originalUnder = model_rf_under,
originalOver = model_rf_over,
originalSmote = model_rf_smote,
ccmodelBayesCaret = ccmodelBayes,
modelBayesCaret = modelBayes,
originalBayesiano = classificadorBayesiano
)
# resampling <- resamples(models)
# bwplot(resampling)
library(dplyr)
comparison <- data.frame(model = names(models), Sensitivity = rep(NA, length(models)),
Specificity = rep(NA, length(models)), Precision = rep(NA, length(models)),
Recall = rep(NA, length(models)), F1 = rep(NA, length(models)))
for (name in names(models)) {
switch(name,
originalRF1={rowModel<- 1},
WeightRF1 ={rowModel<- 2},
DownRF1 ={rowModel<- 3},
UpRF1 ={rowModel<- 4}, #smote
SmoteRF1 ={rowModel<- 5}, #Bayesiano
original ={rowModel<- 6},
originalUnder ={rowModel<- 7},
originalOver ={rowModel<- 8},
originalSmote = {rowModel<- 9},
ccmodelBayesCaret = {rowModel<- 10},
modelBayesCaret = {rowModel<- 11},
originalBayesiano = {rowModel<- 12}
)
model <- get(paste0("cm_", name))
comparison[rowModel,'Precision' ] <-model$byClass["Precision"]
comparison[rowModel,'Sensitivity' ] <-model$byClass["Sensitivity"]
comparison[rowModel,'Specificity' ] <-model$byClass["Specificity"] ## IMPORTANTE
comparison[rowModel,'Recall' ] <-model$byClass["Recall"]
comparison[rowModel,'F1' ] <-model$byClass["F1"]
}
comparison