El presente modelo de aprendizaje permita predecir de manera predictiva aquellos alumnos universitarios desertantes; se han desarrollado modelos anteriores que los pueden encontrar en => https://rpubs.com/jhampier
* De requerir utilizar el dataset lo pueden descargar de la ruta Universidad Pública=> https://docs.google.com/spreadsheets/d/e/2PACX-1vSIntwA0sI2ClKu43ZWmfvsERzl_zm4OByOJwvwyMkuHhThDqWOxebHvWZQGUaISbu92ZMz9RiMXlFQ/pub?gid=791157846&single=true&output=csv
* De requerir utilizar el dataset lo pueden descargar de la ruta Universidad Privada=> https://docs.google.com/spreadsheets/d/e/2PACX-1vTtwC1ng4pLS5K8ZxzvMDcEdBRTv0_B8xwGOBZczl_RCzsQZeI3cL0Omdhi1rz-kt6ywTcf65jh7Q1R/pub?gid=1141535866&single=true&output=csv
#############################################Librerias de Carga
library(caret) # for model-building
library(DMwR) # for smote implementation
library(purrr) # for functional programming (map)
library(pROC)
library(knitr)
library(ggraph)
library(nortest)
library(magrittr)
library(dplyr)
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:'
setwd('C:')
DataSetUpublica <- read.table(paste(ruta, "/DataSetUnsaBinarizadaSinRuidoFuturo.csv",sep=""),header=TRUE,sep=";",stringsAsFactors = FALSE)
str(DataSetUpublica)
'data.frame': 17509 obs. of 20 variables:
$ ESCUELA : chr " INGENIERIA INDUSTRIAL " " INGENIERIA INDUSTRIAL " " INGENIERIA INDUSTRIAL " " INGENIERIA INDUSTRIAL " ...
$ Anio_Ingreso : int 1989 1989 1989 1989 1989 1993 1993 1993 1993 1993 ...
$ CUI : int 19890258 19890258 19890258 19890258 19890258 19930161 19930161 19930161 19930161 19930161 ...
$ APELLI_NOMBRES : chr "ARMA/DEL CARPIO, JAIME RAFAEL" "ARMA/DEL CARPIO, JAIME RAFAEL" "ARMA/DEL CARPIO, JAIME RAFAEL" "ARMA/DEL CARPIO, JAIME RAFAEL" ...
$ periodo_matricula : int 2010 2011 2012 2013 2014 2010 2011 2012 2013 2014 ...
$ SEXO : chr "M" "M" "M" "M" ...
$ Edad : int 38 39 40 41 42 33 34 35 36 37 ...
$ LUGAR_NACIMIENTO : chr "Arequipa-Arequipa" "Arequipa-Arequipa" "Arequipa-Arequipa" "Arequipa-Arequipa" ...
$ PRDO_HASTA_MATRICULA: chr "7,8221" "8,4346" "9,0696" "9,864" ...
$ CREDS__APROBADOS : int 78 102 131 173 222 65 73 78 98 124 ...
$ ASIGS__APROBADAS : int 19 25 32 42 54 16 18 19 24 31 ...
$ ASIGS__DESAPROBADAS : int 0 0 0 0 0 0 0 0 0 0 ...
$ LUGAR_RESIDENCIA : chr "Arequipa-Arequipa-Yura" "Arequipa-Arequipa-Yura" "Arequipa-Arequipa-Yura" "Arequipa-Arequipa-Yura" ...
$ ANO_EGRESO_COLEGIO : int 23 24 25 26 27 18 19 20 21 22 ...
$ TIPO_COLEGIO : chr "Nacional" "Nacional" "Nacional" "Nacional" ...
$ LUGAR_COLEGIO : chr "Arequipa-Arequipa-Jacobo Hunter" "Arequipa-Arequipa-Jacobo Hunter" "Arequipa-Arequipa-Jacobo Hunter" "Arequipa-Arequipa-Jacobo Hunter" ...
$ MODALIDAD_INGRESO : chr "Ordinario" "Ordinario" "Ordinario" "Ordinario" ...
$ categoria : chr "CONTINUA" "CONTINUA" "CONTINUA" "CONTINUA" ...
$ categoriaBinarizada : int 0 0 0 0 0 0 0 0 0 0 ...
$ ProbabDesercion : num 4.98 6.67 6.27 7.6 6.86 4.98 6.67 6.27 7.6 6.86 ...
#View(DataSetUpublica)
DataSetUpublica
Se mostrara la cantidad de datos que se tiene para aplicar modelos de ML. * Se validara y reemplara cada variable por su respecivo tipo de dato. * Se ordenará cronológimante el dataset debido a que la data es histórica.
########################################################
########### PREPARACIÓN DE DATA POR VARIABLES ########
########################################################
##Cantidad de Registros
nrow(DataSetUpublica)#[1] 35693
[1] 17509
#Cantidad de Variables
ncol(DataSetUpublica)#[1] 27 -1 de categoria(var categorica)
[1] 20
#Nombres de Variables
colnames(DataSetUpublica)
[1] "ESCUELA" "Anio_Ingreso" "CUI"
[4] "APELLI_NOMBRES" "periodo_matricula" "SEXO"
[7] "Edad" "LUGAR_NACIMIENTO" "PRDO_HASTA_MATRICULA"
[10] "CREDS__APROBADOS" "ASIGS__APROBADAS" "ASIGS__DESAPROBADAS"
[13] "LUGAR_RESIDENCIA" "ANO_EGRESO_COLEGIO" "TIPO_COLEGIO"
[16] "LUGAR_COLEGIO" "MODALIDAD_INGRESO" "categoria"
[19] "categoriaBinarizada" "ProbabDesercion"
###Conversion para tipo de dato correcto
DataSetUpublicaFRMTO <-transform(DataSetUpublica,
ESCUELA = as.factor(ESCUELA),
CUI = as.character(CUI),
APELLI_NOMBRES = as.character(APELLI_NOMBRES),
SEXO = as.factor(SEXO),
LUGAR_NACIMIENTO = as.factor(LUGAR_NACIMIENTO),
LUGAR_RESIDENCIA = as.factor(LUGAR_RESIDENCIA),
TIPO_COLEGIO = as.factor(TIPO_COLEGIO),
LUGAR_COLEGIO = as.factor(LUGAR_COLEGIO),
MODALIDAD_INGRESO = as.factor(MODALIDAD_INGRESO),
categoriaBinarizada = as.factor(as.character(categoriaBinarizada))
)
#Retiramos el campo Categoría
DataSetUpublicaFRMTO$categoria <- NULL
#Convertimos a Factor a la varaible Objetivo
levels(DataSetUpublicaFRMTO$categoriaBinarizada) <- c("NO","SI")
#Por útlimo remobramos el nombre de la Variable objetivo
colnames(DataSetUpublicaFRMTO)[18] <- "DESERTOR"
DataSetUpublicaFRMTO[,'PRDO_HASTA_MATRICULA'] <- round(as.double(sub(",", "."
, DataSetUpublicaFRMTO[,'PRDO_HASTA_MATRICULA']
, fixed = TRUE)),2)
DataSetUpublicaFRMTO[,'ProbabDesercion'] <- round(as.double(sub(",", "."
, DataSetUpublicaFRMTO[,'ProbabDesercion']
, fixed = TRUE)),2)
DataSetUpublicaFRMTO[,'Anio_Ingreso'] <- as.integer(DataSetUpublicaFRMTO[,'Anio_Ingreso'])
####################################################################################
#Organizamos las variables en Categóricas(Cualitativas) y Cuantitativas(Contínuas)
#Lista de variables categóricas 12 Variables en Total
ListVar.Categ <- c( 'ESCUELA',
'SEXO',
'LUGAR_NACIMIENTO',
'LUGAR_RESIDENCIA',
'TIPO_COLEGIO',
'LUGAR_COLEGIO',
'MODALIDAD_INGRESO'
) # 8
#Lista de variables Continuas 13 Variables en Total
ListVar.Continuas <- c('Anio_Ingreso',
'periodo_matricula',
'Edad',
'CREDS__APROBADOS',
'ASIGS__APROBADAS',
'ASIGS__DESAPROBADAS',
'ANO_EGRESO_COLEGIO',
'PRDO_HASTA_MATRICULA',
'ProbabDesercion'
)
#Variable Objetivo(Target)
Var.Objetivo <- c('DESERTOR') #c('categoria') # 1
#Variable de Idenfitifación
Var.Identificacion <- c('CUI','APELLI_NOMBRES')
#Listado de todas las variables que influenciaran en el modelo
Var.TodasUprivada <- c(ListVar.Continuas,ListVar.Categ , Var.Objetivo)
##############################################################################
# ###ORDENAMOS EL DATASET CRONOLOGICAMENTE
############################################################################
# Se utilizará el campo del Codigo de Alumno para poder ordenar el dataframe
TotalFilas <- nrow(DataSetUpublicaFRMTO) #17509
SortUltimaFila=vector(mode='numeric', length=TotalFilas)
NuevoDataSetUpublicaFRMTO = data.frame(DataSetUpublicaFRMTO, SortUltimaFila)
NuevoDataSetUpublicaFRMTO$SortUltimaFila=as.numeric(NuevoDataSetUpublicaFRMTO$CUI)
###ORDENAMOS EL DATA SET
SortNuevoDataSetUpublicaFRMTO <- NuevoDataSetUpublicaFRMTO[order(NuevoDataSetUpublicaFRMTO$periodo_matricula,NuevoDataSetUpublicaFRMTO$SortUltimaFila),]
SortNuevoDataSetUpublicaFRMTO$SortUltimaFila <- NULL ##ELIMINARNOS LAS FILAS DE ORDENAMIENTO
##Reemplamos en el dataset que se trabajarn los modelos
DataSetUpublicaFRMTO<-SortNuevoDataSetUpublicaFRMTO
####################################################
##ANALISIS DE CANTIDAD DE REGISTROS POR SEMESTRE
####################################################
#Solo se trabaja con datos hasta el primer semestre del 2017
##SE toma la decisón del filtrar los registro del año 2017 que son 491 debido a que no se tienen los registro completos
DataSetUpublicaFRMTO.tmp <- DataSetUpublicaFRMTO[DataSetUpublicaFRMTO$periodo_matricula!=2017
,c( "CUI",Var.TodasUprivada)] %>% droplevels
Tabla_FrecAcumuladas <-table(DataSetUpublicaFRMTO.tmp$periodo_matricula) %>% as.data.frame()
colnames(Tabla_FrecAcumuladas) <- c("AnioMatricula","Cant")
Tabla_FrecAcumuladas$ACUMULADO<- cumsum(Tabla_FrecAcumuladas$Cant)
Tabla_FrecAcumuladas$PorcetAcum = round(100 *Tabla_FrecAcumuladas$ACUMULADO / sum(Tabla_FrecAcumuladas$Cant))
#Tabla de Frecuencias absolutas y relativas acumuladas por Semestre
Tabla_FrecAcumuladas ### SE TOMA LA DECISIÓN DE PARTICINAR para el entrenamiento del 68% de la data es decir hasta el año 2014 registro 11511
DataSetUpublicaFRMTO <- DataSetUpublicaFRMTO.tmp
DataSetUpublicaFRMTO.tmp <- NULL
##############################################
str(DataSetUpublicaFRMTO)
'data.frame': 17018 obs. of 18 variables:
$ CUI : chr "19890258" "19930161" "19932057" "19940844" ...
$ Anio_Ingreso : int 1989 1993 1993 1994 1995 1995 1996 1996 1996 1997 ...
$ periodo_matricula : int 2010 2010 2010 2010 2010 2010 2010 2010 2010 2010 ...
$ Edad : int 38 33 35 36 33 37 31 31 30 30 ...
$ CREDS__APROBADOS : int 78 65 216 103 156 208 162 72 78 208 ...
$ ASIGS__APROBADAS : int 19 16 55 25 38 51 41 18 21 47 ...
$ ASIGS__DESAPROBADAS : int 0 0 0 0 0 0 0 0 0 0 ...
$ ANO_EGRESO_COLEGIO : int 23 18 19 11 15 21 15 10 11 15 ...
$ PRDO_HASTA_MATRICULA: num 7.82 9.54 10.98 11.03 11.92 ...
$ ProbabDesercion : num 4.98 4.98 4.98 4.98 4.98 4.98 4.98 4.98 4.98 4.98 ...
$ ESCUELA : Factor w/ 7 levels " CIENCIA DE LA COMPUTACION ",..: 6 7 7 6 6 6 7 6 4 2 ...
$ SEXO : Factor w/ 2 levels "F","M": 2 2 2 2 2 2 2 1 2 2 ...
$ LUGAR_NACIMIENTO : Factor w/ 65 levels "Áncash-Huaraz",..: 10 10 10 10 10 10 10 42 10 10 ...
$ LUGAR_RESIDENCIA : Factor w/ 27 levels "Arequipa-Arequipa-Alto Selva Alegre",..: 26 14 3 8 2 10 7 1 25 10 ...
$ TIPO_COLEGIO : Factor w/ 3 levels "Nacional","Parroquial",..: 1 2 1 1 3 1 1 1 1 1 ...
$ LUGAR_COLEGIO : Factor w/ 143 levels "Amazonas-Bagua-Aramango",..: 16 33 10 11 11 18 16 11 32 17 ...
$ MODALIDAD_INGRESO : Factor w/ 8 levels "Convenios y Otros",..: 4 4 4 6 4 8 4 6 6 4 ...
$ DESERTOR : Factor w/ 2 levels "NO","SI": 1 1 2 1 1 1 1 1 1 2 ...
Con 17018 registros
#knitr::kable(head(DataSetUpublicaFRMTO), caption = "Table with kable",)
##S
DataSetUpublicaFRMTO
Una vez obtenido el dataframe(dataset) con sus respectivos tipos de datos ahora analizaremos los datos para poder comprenderlos aplicando estadistica descriptiva
##
## NO SI
## 93.45 6.55
Actualmente el dataframe no tiene datos perdidos debido a que ya fue preparado en un proceso anterior de ETL.
#####################################
#### ANALISIS DE DATOS PERDIDOS ####
#####################################
# Verificación de datos perdidos
library(DataExplorer)
plot_missing(DataSetUpublicaFRMTO)#,ylab="Variables/Características")
Una vez observada nuestra variable objetivo y su distribución analizaremos las variables CUANTITATIVAS
##Resumen con summary del dataframe
summary(DataSetUpublicaFRMTO)
CUI Anio_Ingreso periodo_matricula Edad
Length:17018 Min. :1989 Min. :2010 Min. :15.0
Class :character 1st Qu.:2009 1st Qu.:2012 1st Qu.:18.0
Mode :character Median :2010 Median :2013 Median :20.0
Mean :2010 Mean :2013 Mean :20.5
3rd Qu.:2013 3rd Qu.:2015 3rd Qu.:22.0
Max. :2016 Max. :2016 Max. :45.0
CREDS__APROBADOS ASIGS__APROBADAS ASIGS__DESAPROBADAS ANO_EGRESO_COLEGIO
Min. : 0.0 Min. : 0.00 Min. : 0.0000 Min. : 0.000
1st Qu.: 43.0 1st Qu.:12.00 1st Qu.: 0.0000 1st Qu.: 3.000
Median : 86.0 Median :23.00 Median : 0.0000 Median : 5.000
Mean :100.4 Mean :26.38 Mean : 0.1231 Mean : 5.213
3rd Qu.:154.0 3rd Qu.:40.00 3rd Qu.: 0.0000 3rd Qu.: 7.000
Max. :241.0 Max. :78.00 Max. :49.0000 Max. :29.000
PRDO_HASTA_MATRICULA ProbabDesercion ESCUELA
Min. : 0.000 Min. :4.980 CIENCIA DE LA COMPUTACION : 810
1st Qu.: 9.252 1st Qu.:6.120 INGENIERIA DE SISTEMAS :2431
Median :11.070 Median :6.670 INGENIERIA ELECTRICA :2537
Mean :10.583 Mean :6.798 INGENIERIA ELECTRONICA :2976
3rd Qu.:12.560 3rd Qu.:7.600 INGENIERIA EN TELECOMUNICACIONES : 802
Max. :18.660 Max. :8.500 INGENIERIA INDUSTRIAL :4163
INGENIERIA MECANICA :3299
SEXO LUGAR_NACIMIENTO
F: 3553 Arequipa-Arequipa :13347
M:13465 Arequipa-Camaná : 399
Arequipa-Islay : 359
Lambayeque-Chiclayo: 347
Piura-Piura : 254
Piura-Talara : 234
(Other) : 2078
LUGAR_RESIDENCIA TIPO_COLEGIO
Arequipa-Arequipa-Mariano Melgar :2558 Nacional :10586
Arequipa-Arequipa-Cayma :2009 Parroquial: 1336
Arequipa-Arequipa-Yura :1622 Particular: 5096
Arequipa-Arequipa-Alto Selva Alegre :1591
Arequipa-Arequipa-José Luis Bustamante y Rivero:1448
Arequipa-Arequipa-Jacobo Hunter :1227
(Other) :6563
LUGAR_COLEGIO
Arequipa-Arequipa-Arequipa :5347
Arequipa-Arequipa-Alto Selva Alegre :1462
Arequipa-Arequipa-Mariano Melgar :1318
Arequipa-Arequipa-José Luis Bustamante y Rivero: 995
Arequipa-Arequipa-Cayma : 984
Arequipa-Arequipa-Yanahuara : 898
(Other) :6014
MODALIDAD_INGRESO DESERTOR
Ordinario :9155 NO:15903
CPU :4961 SI: 1115
Primeros Puestos :2390
Traslados Internos : 218
Profesionales : 91
Traslados Externos Nacionales: 90
(Other) : 113
par(mfrow = c(2,2))
hist(DataSetUpublicaFRMTO$Anio_Ingreso,col="orange"
,xlab="Anio de Ingreso"
,ylab="Frecuencia Absoluta",main="Anio de Ingreso"
,breaks =12)
hist(DataSetUpublicaFRMTO$Anio_Ingreso,col="orange"
,xlab="Anio de Ingreso"
,ylab="Frecuencia Relativa",main="Anio de Ingreso %"
,breaks =12,probability =TRUE)
lines(density(DataSetUpublicaFRMTO$Anio_Ingreso),col="red", lwd=3)
abline(v = mean(DataSetUpublicaFRMTO$Anio_Ingreso), col = "red",lwd=3)
abline(v = median(DataSetUpublicaFRMTO$Anio_Ingreso), col = "blue",lwd=3)
hist(DataSetUpublicaFRMTO$periodo_matricula,col="orange"
,xlab="Periodo de Matricula"
,ylab="Frecuencia Absoluta",main="Periodo de Matricula"
,breaks =7)
hist(DataSetUpublicaFRMTO$periodo_matricula,col="orange"
,xlab="Periodo de Matriculas"
,ylab="Frecuencia Relativa",main="Periodo de Matricula %"
,breaks =7,probability =TRUE)
lines (density(DataSetUpublicaFRMTO$periodo_matricula) , col = "red" ,lwd=3)
abline(v = mean(DataSetUpublicaFRMTO$periodo_matricula), col = "red" ,lwd=3)
abline(v=median(DataSetUpublicaFRMTO$periodo_matricula), col = "blue" ,lwd=3)
#par(mfrow = c(2,2))
hist(DataSetUpublicaFRMTO$Edad,col="orange"
,xlab="Edad"
,ylab="Frecuencia Absoluta",main="Edad"
,breaks =7)
hist(DataSetUpublicaFRMTO$Edad,col="orange"
,xlab="Edad"
,ylab="Frecuencia Relativa",main="Edad %"
,breaks =7,probability =TRUE)
lines(density(DataSetUpublicaFRMTO$Edad),col="red", lwd=3)
abline(v = mean(DataSetUpublicaFRMTO$Edad), col = "red",lwd=3)
abline(v=median(DataSetUpublicaFRMTO$Edad), col = "blue",lwd=3)
hist(DataSetUpublicaFRMTO$CREDS__APROBADOS,col="orange"
,xlab="Cant Creditos Acumulados"
,ylab="Frecuencia Absoluta",main="Cant Creditos Acumulados"
,breaks =10)
hist(DataSetUpublicaFRMTO$CREDS__APROBADOS,col="orange"
,xlab="Cant Creditos Acumulados"
,ylab="Frecuencia Relativa",main="Cant Creditos Acumulados %"
,breaks =10,probability =TRUE)
lines(density(DataSetUpublicaFRMTO$CREDS__APROBADOS),col="red", lwd=3)
abline(v = mean(DataSetUpublicaFRMTO$CREDS__APROBADOS), col = "red",lwd=3)
abline(v=median(DataSetUpublicaFRMTO$CREDS__APROBADOS), col = "blue",lwd=3)
par(mfrow = c(2,2))
hist(DataSetUpublicaFRMTO$ASIGS__APROBADAS,col="orange"
,xlab="Cant Asignaturas Acum"
,ylab="Frecuencia Absoluta",main="Cant Asignaturas Acum"
,breaks =10)
hist(DataSetUpublicaFRMTO$ASIGS__APROBADAS,col="orange"
,xlab="Cant Asignaturas Acum"
,ylab="Frecuencia Relativa",main="Cant Asignaturas Acum %"
,breaks =10,probability =TRUE)
lines(density(DataSetUpublicaFRMTO$ASIGS__APROBADAS),col="red", lwd=3)
abline(v = mean(DataSetUpublicaFRMTO$ASIGS__APROBADAS), col = "red",lwd=3)
abline(v=median(DataSetUpublicaFRMTO$ASIGS__APROBADAS), col = "blue",lwd=3)
hist(DataSetUpublicaFRMTO$ASIGS__DESAPROBADAS,col="orange"
,xlab="Cant Asignaturas Desaprob."
,ylab="Frecuencia Absoluta",main="Cant Asignaturas Desaprob."
,breaks =7)
hist(DataSetUpublicaFRMTO$ASIGS__DESAPROBADAS,col="orange"
,xlab="Cant Asignaturas Desaprob."
,ylab="Frecuencia Relativa",main="Cant Asignaturas Desaprob.s %"
,breaks =7,probability =TRUE)
lines(density(DataSetUpublicaFRMTO$ASIGS__DESAPROBADAS),col="red", lwd=3)
abline(v = mean(DataSetUpublicaFRMTO$ASIGS__DESAPROBADAS), col = "red",lwd=3)
abline(v=median(DataSetUpublicaFRMTO$ASIGS__DESAPROBADAS), col = "blue",lwd=3)
par(mfrow = c(2,2))
hist(DataSetUpublicaFRMTO$ANO_EGRESO_COLEGIO,col="orange"
,xlab="Cant Anios egreso Coleg"
,ylab="Frecuencia Absoluta",main="Cant Anios egreso Coleg"
,breaks =10)
hist(DataSetUpublicaFRMTO$ANO_EGRESO_COLEGIO,col="orange"
,xlab="Cant Anios egreso Coleg "
,ylab="Frecuencia Relativa",main="Cant Anios egreso Coleg %"
,breaks =10,probability =TRUE)
lines(density(DataSetUpublicaFRMTO$ANO_EGRESO_COLEGIO),col="red", lwd=3)
abline(v = mean(DataSetUpublicaFRMTO$ANO_EGRESO_COLEGIO), col = "red",lwd=3)
abline(v=median(DataSetUpublicaFRMTO$ANO_EGRESO_COLEGIO), col = "blue",lwd=3)
hist(DataSetUpublicaFRMTO$PRDO_HASTA_MATRICULA,col="orange"
,xlab="Ponderado a Matricula"
,ylab="Frecuencia Absoluta",main="Ponderado a Matricula"
,breaks =10)
hist(DataSetUpublicaFRMTO$PRDO_HASTA_MATRICULA,col="orange"
,xlab="Ponderado a Matricula"
,ylab="Frecuencia Relativa",main="Ponderado a Matricula %"
,breaks =10,probability =TRUE)
lines(density(DataSetUpublicaFRMTO$PRDO_HASTA_MATRICULA),col="red", lwd=3)
abline(v = mean(DataSetUpublicaFRMTO$PRDO_HASTA_MATRICULA), col = "red",lwd=3)
abline(v=median(DataSetUpublicaFRMTO$PRDO_HASTA_MATRICULA), col = "blue",lwd=3)
par(mfrow = c(1,2))
hist(DataSetUpublicaFRMTO$ProbabDesercion,col="orange"
,xlab="Probabilidad Deserción Ref Año Anterior",main="Probabilidad de Deserción"
,breaks =7)
hist(DataSetUpublicaFRMTO$ProbabDesercion,col="orange"
,xlab="Probabilidad Deserción Ref Año Anterior"
,ylab="Frecuencia Relativa",main="Probabilidad de Deserción %"
,breaks =7,probability =TRUE)
lines(density(DataSetUpublicaFRMTO$ProbabDesercion),col="red", lwd=3)
abline(v = mean(DataSetUpublicaFRMTO$ProbabDesercion), col = "red",lwd=3)
abline(v=median(DataSetUpublicaFRMTO$ProbabDesercion), col = "blue",lwd=3)
### Análisis Exploratorio
####$ Distribución y diagrama de CAja y Bigotes
Seguimos analizando las variables cuantitativas y hacemos tomamos el logaritmo para aquellas que no se pueden visualizar correctamente.
##########################################################################################
##### ANALISIS EXPLORATORIA DE DATOS (EDA) => VISUALIZACION SIMPLIFICADA DE DATOS ## DEMOSTRACIÓN EN EL POWER BI
##################################
par(mfrow = c(1,1))
DataSetUpublicaFRMTO %>%
dplyr::select(ListVar.Continuas) %>%
gather(metric, value) %>%
ggplot(aes(value, fill = metric)) +
geom_density(show.legend = FALSE) +
facet_wrap(~ metric, scales = "free")
##Se tomo la desición de quitar las variables #CantCursosAnulados y AvgVezMatriAcum
##Ojo no se considera la varaible #CantCursosAnulados y AvgVezMatriAcum
#######################################
##### DIAGRAMA DE CAJA Y BIGOTES
#################################
p1 <- DataSetUpublicaFRMTO %>%ggplot(aes(x=DESERTOR,y=Anio_Ingreso))+geom_boxplot(aes(fill=DESERTOR))+labs(tittle='Anio_Ingreso')
p2 <- DataSetUpublicaFRMTO %>%ggplot(aes(x=DESERTOR,y=periodo_matricula))+geom_boxplot(aes(fill=DESERTOR))+labs(tittle='periodo_matricula')
p3 <- DataSetUpublicaFRMTO %>%ggplot(aes(x=DESERTOR,y=Edad))+geom_boxplot(aes(fill=DESERTOR))+labs(tittle='Edad')
p4 <- DataSetUpublicaFRMTO %>%ggplot(aes(x=DESERTOR,y=CREDS__APROBADOS))+geom_boxplot(aes(fill=DESERTOR))+labs(tittle='CREDS__APROBADOS')
p5 <- DataSetUpublicaFRMTO %>%ggplot(aes(x=DESERTOR,y=ASIGS__APROBADAS))+geom_boxplot(aes(fill=DESERTOR))+labs(tittle='ASIGS__APROBADAS')
p6 <- DataSetUpublicaFRMTO %>%ggplot(aes(x=DESERTOR,y=ASIGS__DESAPROBADAS))+geom_boxplot(aes(fill=DESERTOR))+labs(tittle='ASIGS__DESAPROBADAS')
p7 <- DataSetUpublicaFRMTO %>%ggplot(aes(x=DESERTOR,y=ANO_EGRESO_COLEGIO))+geom_boxplot(aes(fill=DESERTOR))+labs(tittle='ANO_EGRESO_COLEGIO')
p8 <- DataSetUpublicaFRMTO %>%ggplot(aes(x=DESERTOR,y=PRDO_HASTA_MATRICULA))+geom_boxplot(aes(fill=DESERTOR))+labs(tittle='PRDO_HASTA_MATRICULA')
p9 <- DataSetUpublicaFRMTO %>%ggplot(aes(x=DESERTOR,y=ProbabDesercion))+geom_boxplot(aes(fill=DESERTOR))+labs(tittle='ProbabDesercion')
grid.arrange(p1,p2,p3,p4,p5,p6,ncol=2) # CursosLlevadosFueraCarreraAcum CursosLlevadosFueraCarreraAcum
grid.arrange(p7,p8,p9,ncol=2) # SumCredTeoAcum
######################################################
#Aplicamos logaritmos a las variables EDAD, AvgVezMatriAcum y CantCursosAnulados para poder visualizarlas mejor
########################################################
p6 <- DataSetUpublicaFRMTO %>%ggplot(aes(x=DESERTOR,y=ASIGS__DESAPROBADAS))+geom_boxplot(aes(fill=DESERTOR))+labs(tittle='ASIGS_DESAPROBADAS')+scale_y_log10()
p3 <- DataSetUpublicaFRMTO %>% ggplot(aes(x=DESERTOR,y=Edad)) +geom_boxplot(aes(fill=DESERTOR)) +labs(tittle='Edad') +scale_y_log10()
grid.arrange(p1,p2,p3,p4,p5,p6,ncol=2)
### Análsis de variables categóricas
###################################
# Ahora Visualizaremos las variables CATEGÓRICAS
DataSetUpublicaFRMTO %>%
dplyr::select(ListVar.Categ) %>%
gather(metric, value) %>%
ggplot(aes(value, fill = metric)) +
geom_density(show.legend = FALSE) +
facet_wrap(~ metric, scales = "free")
# GRAFICO DE BARRAS ABSOLUTAS y RELATIVAS
# ListVar.Categ
par(mfrow = c(2,2))
barplot(table(DataSetUpublicaFRMTO$ESCUELA),main = "DISTRIBUCIÓN",xlab = "ESCUELA",ylab = "FRECUENCIA ABSOLUTA")
barplot((table(DataSetUpublicaFRMTO$ESCUELA)/length(DataSetUpublicaFRMTO$ESCUELA))*100,main = "DISTRIBUCIÓN",xlab = "ESCUELA",ylab = "%")
barplot(table(DataSetUpublicaFRMTO$SEXO),main = "DISTRIBUCIÓN",xlab = "SEXO",ylab = "FRECUENCIA ABSOLUTA")
barplot((table(DataSetUpublicaFRMTO$SEXO)/length(DataSetUpublicaFRMTO$SEXO))*100,main = "DISTRIBUCIÓN",xlab = "SEXO",ylab = "%")
par(mfrow = c(2,2))
barplot(table(DataSetUpublicaFRMTO$LUGAR_NACIMIENTO),main = "DISTRIBUCIÓN",xlab = "LUGAR_NACIMIENTO",ylab = "FRECUENCIA ABSOLUTA")
barplot((table(DataSetUpublicaFRMTO$LUGAR_NACIMIENTO)/length(DataSetUpublicaFRMTO$MODALIDAD_INGRE))*100,main = "DISTRIBUCIÓN",xlab = "LUGAR_NACIMIENTO",ylab = "%")
barplot(table(DataSetUpublicaFRMTO$LUGAR_RESIDENCIA),main = "DISTRIBUCIÓN",xlab = "LUGAR_RESIDENCIA",ylab = "FRECUENCIA ABSOLUTA")
barplot((table(DataSetUpublicaFRMTO$LUGAR_RESIDENCIA)/length(DataSetUpublicaFRMTO$LUGAR_RESIDENCIA))*100,main = "DISTRIBUCIÓN",xlab = "LUGAR_RESIDENCIA",ylab = "%")
par(mfrow = c(2,2))
barplot(table(DataSetUpublicaFRMTO$TIPO_COLEGIO),main = "DISTRIBUCIÓN",xlab = "TIPO_COLEGIO",ylab = "FRECUENCIA ABSOLUTA")
barplot((table(DataSetUpublicaFRMTO$TIPO_COLEGIO)/length(DataSetUpublicaFRMTO$TIPO_COLEGIO))*100,main = "DISTRIBUCIÓN",xlab = "TIPO_COLEGIO",ylab = "%")
barplot(table(DataSetUpublicaFRMTO$LUGAR_COLEGIO),main = "DISTRIBUCIÓN",xlab = "LUGAR_COLEGIO",ylab = "FRECUENCIA ABSOLUTA")
barplot((table(DataSetUpublicaFRMTO$LUGAR_COLEGIO)/length(DataSetUpublicaFRMTO$LUGAR_COLEGIO))*100,main = "DISTRIBUCIÓN",xlab = "LUGAR_COLEGIO",ylab = "%")
par(mfrow = c(1,2))
barplot(table(DataSetUpublicaFRMTO$MODALIDAD_INGRESO),main = "DISTRIBUCIÓN",xlab = "MODALIDAD_INGRESO",ylab = "FRECUENCIA ABSOLUTA")
barplot((table(DataSetUpublicaFRMTO$MODALIDAD_INGRESO)/length(DataSetUpublicaFRMTO$MODALIDAD_INGRESO))*100,main = "DISTRIBUCIÓN",xlab = "MODALIDAD_INGRESO",ylab = "%")
Comparación del ANTES y DESPUES de retirar outlayers; actualmente se esta retirando todos aquellos datos que sean menor al percentil 5 y mayores al percentil 95 con el objetivo de reducir el sesgo.
########################I################################################I
######################## IMPUTAR o RETIRANDO OUTLAYERS
########################################################################
#Función para imputar outlayers con la media los por debajo del 5% y con la mediana los por encima del 95%
impute_outliers <- function(x, removeNA = TRUE){
quantiles <- quantile(x, c(0.05, 0.95), na.rm = removeNA)
x[x<quantiles[1]] <- mean(x, na.rm = removeNA)
x[x>quantiles[2]] <- median(x, na.rm = removeNA)
x
}
#Si se desea ver especificamente cuales son los outlayers pero con referencia a categoria Desertor
#boxplot(edad ~ DESERTOR, data = DataSetUpublicaFRMTO, main = "Edad por Desertor")$out
######################### Anio_Ingreso ##########################
#Retiramos las medidas de outlayer
T_SinOut_Anio_Ingreso <- impute_outliers(DataSetUpublicaFRMTO$Anio_Ingreso)
#Observamos el antes y despues del tratamiento de datos(Imputar los outlayers)
par(mfrow = c(2,2))
hist(DataSetUpublicaFRMTO$Anio_Ingreso, main = "Con outliers")
hist(T_SinOut_Anio_Ingreso, main = "Sin outliers")
boxplot(DataSetUpublicaFRMTO$Anio_Ingreso, main = "Con outliers")
boxplot(T_SinOut_Anio_Ingreso, main = "Sin outliers")
par(mfrow = c(1,1))
######################### periodo_matricula ##########################
#Retiramos las medidas de outlayer
T_SinOut_periodo_matricula <- impute_outliers(DataSetUpublicaFRMTO$periodo_matricula)
#Observamos el antes y despues del tratamiento de datos(Imputar los outlayers)
par(mfrow = c(2,2))
hist(DataSetUpublicaFRMTO$periodo_matricula, main = "Con outliers")
hist(T_SinOut_periodo_matricula, main = "Sin outliers")
boxplot(DataSetUpublicaFRMTO$periodo_matricula, main = "Con outliers")
boxplot(T_SinOut_periodo_matricula, main = "Sin outliers")
par(mfrow = c(1,1))
######################### Edad ##########################
#Retiramos las medidas de outlayer
T_SinOut_Edad <- impute_outliers(DataSetUpublicaFRMTO$Edad)
#Observamos el antes y despues del tratamiento de datos(Imputar los outlayers)
par(mfrow = c(2,2))
hist(DataSetUpublicaFRMTO$Edad, main = "Con outliers")
hist(T_SinOut_Edad, main = "Sin outliers")
boxplot(DataSetUpublicaFRMTO$Edad, main = "Con outliers")
boxplot(T_SinOut_Edad, main = "Sin outliers")
par(mfrow = c(1,1))
######################### CREDS__APROBADOS ##########################
#Retiramos las medidas de outlayer
T_SinOut_CREDS__APROBADOS <- impute_outliers(DataSetUpublicaFRMTO$CREDS__APROBADOS)
#Observamos el antes y despues del tratamiento de datos(Imputar los outlayers)
par(mfrow = c(2,2))
hist(DataSetUpublicaFRMTO$CREDS__APROBADOS, main = "Con outliers")
hist(T_SinOut_CREDS__APROBADOS, main = "Sin outliers")
boxplot(DataSetUpublicaFRMTO$CREDS__APROBADOS, main = "Con outliers")
boxplot(T_SinOut_CREDS__APROBADOS, main = "Sin outliers")
par(mfrow = c(1,1))
######################### ASIGS__APROBADAS ##########################
#Retiramos las medidas de outlayer
T_SinOut_ASIGS__APROBADAS <- impute_outliers(DataSetUpublicaFRMTO$ASIGS__APROBADAS)
#Observamos el antes y despues del tratamiento de datos(Imputar los outlayers)
par(mfrow = c(2,2))
hist(DataSetUpublicaFRMTO$ASIGS__APROBADAS, main = "Con outliers")
hist(T_SinOut_ASIGS__APROBADAS, main = "Sin outliers")
boxplot(DataSetUpublicaFRMTO$ASIGS__APROBADAS, main = "Con outliers")
boxplot(T_SinOut_ASIGS__APROBADAS, main = "Sin outliers")
par(mfrow = c(1,1))
######################### ASIGS__DESAPROBADAS ##########################
#Retiramos las medidas de outlayer
T_SinOut_ASIGS__DESAPROBADAS <- impute_outliers(DataSetUpublicaFRMTO$ASIGS__DESAPROBADAS)
#Observamos el antes y despues del tratamiento de datos(Imputar los outlayers)
par(mfrow = c(2,2))
hist(DataSetUpublicaFRMTO$ASIGS__DESAPROBADAS, main = "Con outliers")
hist(T_SinOut_ASIGS__DESAPROBADAS, main = "Sin outliers")
boxplot(DataSetUpublicaFRMTO$ASIGS__DESAPROBADAS, main = "Con outliers")
boxplot(T_SinOut_ASIGS__DESAPROBADAS, main = "Sin outliers")
par(mfrow = c(1,1))
T_SinOut_ASIGS__DESAPROBADAS <- DataSetUpublicaFRMTO$ASIGS__DESAPROBADAS # Para esta caso no retiraremos los outlayers debido a que son las diferencias
######################### ANO_EGRESO_COLEGIO ##########################
#Retiramos las medidas de outlayer
T_SinOut_ANO_EGRESO_COLEGIO <- impute_outliers(DataSetUpublicaFRMTO$ANO_EGRESO_COLEGIO)
#Observamos el antes y despues del tratamiento de datos(Imputar los outlayers)
par(mfrow = c(2,2))
hist(DataSetUpublicaFRMTO$ANO_EGRESO_COLEGIO, main = "Con outliers")
hist(T_SinOut_ANO_EGRESO_COLEGIO, main = "Sin outliers")
boxplot(DataSetUpublicaFRMTO$ANO_EGRESO_COLEGIO, main = "Con outliers")
boxplot(T_SinOut_ANO_EGRESO_COLEGIO, main = "Sin outliers")
par(mfrow = c(1,1))
######################### PRDO_HASTA_MATRICULA ##########################
#Retiramos las medidas de outlayer
T_SinOut_PRDO_HASTA_MATRICULA <- impute_outliers(DataSetUpublicaFRMTO$PRDO_HASTA_MATRICULA)
#Observamos el antes y despues del tratamiento de datos(Imputar los outlayers)
par(mfrow = c(2,2))
hist(DataSetUpublicaFRMTO$PRDO_HASTA_MATRICULA, main = "Con outliers")
hist(T_SinOut_PRDO_HASTA_MATRICULA, main = "Sin outliers")
boxplot(DataSetUpublicaFRMTO$PRDO_HASTA_MATRICULA, main = "Con outliers")
boxplot(T_SinOut_PRDO_HASTA_MATRICULA, main = "Sin outliers")
par(mfrow = c(1,1))
######################### ProbabDesercion ##########################
#Retiramos las medidas de outlayer
T_SinOut_ProbabDesercion <- impute_outliers(DataSetUpublicaFRMTO$ProbabDesercion)
#Observamos el antes y despues del tratamiento de datos(Imputar los outlayers)
par(mfrow = c(2,2))
hist(DataSetUpublicaFRMTO$ProbabDesercion, main = "Con outliers")
hist(T_SinOut_ProbabDesercion, main = "Sin outliers")
boxplot(DataSetUpublicaFRMTO$ProbabDesercion, main = "Con outliers")
boxplot(T_SinOut_ProbabDesercion, main = "Sin outliers")
par(mfrow = c(1,1))
Se estan transformando las variables Cuantitavas en base a su distribución. Se estan utilizando transformaciónes de Normalización y Estandarización asi como transformaciones logaritmicas para distribuciones exponenciales…
###############################################
#### TRANSFORMACION DE VARIABLES CONTINUAS ####
###############################################
# Normalización de variables entre [0, 1] utilizaos la la función scales::rescale(
#Z = (X - min(x)) / (max(x) - min(x))
#Estandarización de variables
#Z = X - mean(x) / sd(x) utilizamos scale( VARIABLE , center = TRUE, scale = TRUE)
library("scales")
TT_SinOut_Anio_Ingreso <- scale(T_SinOut_Anio_Ingreso, center = TRUE, scale = TRUE) %>% as.data.frame()
TT_SinOut_periodo_matricula <- scale(T_SinOut_periodo_matricula, center = TRUE, scale = TRUE) %>% as.data.frame()
TT_SinOut_Edad <- scale(T_SinOut_Edad, center = TRUE, scale = TRUE) %>% as.data.frame()
TT_SinOut_CREDS__APROBADOS <- scale(T_SinOut_CREDS__APROBADOS, center = TRUE, scale = TRUE) %>% as.data.frame()
TT_SinOut_ASIGS__APROBADAS <- scale(T_SinOut_ASIGS__APROBADAS, center = TRUE, scale = TRUE) %>% as.data.frame()
TT_SinOut_ASIGS__DESAPROBADAS <- scales::rescale(T_SinOut_ASIGS__DESAPROBADAS) %>% as.data.frame() ## Se Normaliza, Debido a que tiene muchos 0
TT_SinOut_ANO_EGRESO_COLEGIO <- scale(T_SinOut_ANO_EGRESO_COLEGIO, center = TRUE, scale = TRUE) %>% as.data.frame()
TT_SinOut_PRDO_HASTA_MATRICULA <- scale(T_SinOut_PRDO_HASTA_MATRICULA, center = TRUE, scale = TRUE) %>% as.data.frame()
TT_SinOut_ProbabDesercion <- scale(T_SinOut_ProbabDesercion, center = TRUE, scale = TRUE) %>% as.data.frame()
#TT_SinOut_CantCursosAplzAcum <- scales::rescale(T_SinOut_CantCursosAplzAcum) %>% as.data.frame() ## Se Normaliza, Debido a que tiene muchos 0
#TT_SinOut_ASIGSsdDAS <- log(T_SinOut_ASIGS__APROBADAS) %>% as.data.frame() # se tiene una distribución exponencial
##########################################################################################
##Renombrar lo nombres de las variables para identificarlas que son variables transformadas
colnames(TT_SinOut_Anio_Ingreso) <-c("TT_SinOut_Anio_Ingreso")
colnames(TT_SinOut_periodo_matricula) <-c("TT_SinOut_periodo_matricula")
colnames(TT_SinOut_Edad) <-c("TT_SinOut_Edad")
colnames(TT_SinOut_CREDS__APROBADOS) <-c("TT_SinOut_CREDS__APROBADOS")
colnames(TT_SinOut_ASIGS__APROBADAS) <-c("TT_SinOut_ASIGS__APROBADAS")
colnames(TT_SinOut_ASIGS__DESAPROBADAS) <-c("TT_SinOut_ASIGS__DESAPROBADAS")
colnames(TT_SinOut_ANO_EGRESO_COLEGIO) <-c("TT_SinOut_ANO_EGRESO_COLEGIO")
colnames(TT_SinOut_PRDO_HASTA_MATRICULA) <-c("TT_SinOut_PRDO_HASTA_MATRICULA")
colnames(TT_SinOut_ProbabDesercion) <-c("TT_SinOut_ProbabDesercion")
library(stats)
chisq.test(table(DataSetUpublicaFRMTO$ESCUELA,DataSetUpublicaFRMTO$DESERTOR))
Pearson's Chi-squared test
data: table(DataSetUpublicaFRMTO$ESCUELA, DataSetUpublicaFRMTO$DESERTOR)
X-squared = 247.24, df = 6, p-value < 2.2e-16
chisq.test(table(DataSetUpublicaFRMTO$SEXO,DataSetUpublicaFRMTO$DESERTOR))
Pearson's Chi-squared test with Yates' continuity correction
data: table(DataSetUpublicaFRMTO$SEXO, DataSetUpublicaFRMTO$DESERTOR)
X-squared = 37.452, df = 1, p-value = 9.368e-10
chisq.test(table(DataSetUpublicaFRMTO$LUGAR_NACIMIENTO,DataSetUpublicaFRMTO$DESERTOR))
Pearson's Chi-squared test
data: table(DataSetUpublicaFRMTO$LUGAR_NACIMIENTO, DataSetUpublicaFRMTO$DESERTOR)
X-squared = 89.785, df = 64, p-value = 0.01846
chisq.test(table(DataSetUpublicaFRMTO$LUGAR_RESIDENCIA,DataSetUpublicaFRMTO$DESERTOR))
Pearson's Chi-squared test
data: table(DataSetUpublicaFRMTO$LUGAR_RESIDENCIA, DataSetUpublicaFRMTO$DESERTOR)
X-squared = 41.829, df = 26, p-value = 0.02556
chisq.test(table(DataSetUpublicaFRMTO$TIPO_COLEGIO,DataSetUpublicaFRMTO$DESERTOR))
Pearson's Chi-squared test
data: table(DataSetUpublicaFRMTO$TIPO_COLEGIO, DataSetUpublicaFRMTO$DESERTOR)
X-squared = 47.112, df = 2, p-value = 5.885e-11
chisq.test(table(DataSetUpublicaFRMTO$LUGAR_COLEGIO,DataSetUpublicaFRMTO$DESERTOR))
Pearson's Chi-squared test
data: table(DataSetUpublicaFRMTO$LUGAR_COLEGIO, DataSetUpublicaFRMTO$DESERTOR)
X-squared = 366.31, df = 142, p-value < 2.2e-16
chisq.test(table(DataSetUpublicaFRMTO$MODALIDAD_INGRESO,DataSetUpublicaFRMTO$DESERTOR))
Pearson's Chi-squared test
data: table(DataSetUpublicaFRMTO$MODALIDAD_INGRESO, DataSetUpublicaFRMTO$DESERTOR)
X-squared = 83.709, df = 7, p-value = 2.408e-15
#### Ninguna de las variables categóricas sobrepasa el 5% en el Pvalue es por ello que no se retira ninguno
El objetivo de este analisis es encontrar la relación de los elementos de cada categórica con la variable objetivo. Se analiza tambien un ratio de porcentajes con respecto de la categoria que nos interesa en la variable objetivo-Alumnos que (“SI”) desertan (Se eligen aquellas categórias que su ratio se aleje de 1.0 sea inferior o superior)
library(gmodels)
X <-table(DataSetUpublicaFRMTO$ESCUELA,DataSetUpublicaFRMTO$DESERTOR)
Y = round((100 * apply(X, 2, function(z) z / sum(z))),1);
colnames(Y) <- c("NO%","SI%")
cbind(X,Y, Ratio_SI_NO = round((Y[,'SI%'] / Y[,'NO%']),3))
NO SI NO% SI% Ratio_SI_NO
CIENCIA DE LA COMPUTACION 682 128 4.3 11.5 2.674
INGENIERIA DE SISTEMAS 2227 204 14.0 18.3 1.307
INGENIERIA ELECTRICA 2369 168 14.9 15.1 1.013
INGENIERIA ELECTRONICA 2747 229 17.3 20.5 1.185
INGENIERIA EN TELECOMUNICACIONES 726 76 4.6 6.8 1.478
INGENIERIA INDUSTRIAL 4051 112 25.5 10.0 0.392
INGENIERIA MECANICA 3101 198 19.5 17.8 0.913
## Basicamente se seleccionarán las variables que tengas como ratio lo mas lejano a 1
# Para el caso retiramos solo Ing Eléctrica por que el ratio estar cerca a 1
## Tablas CRuzadas con variable Objetivo
X <-table(DataSetUpublicaFRMTO$SEXO,DataSetUpublicaFRMTO$DESERTOR)
Y = round((100 * apply(X, 2, function(z) z / sum(z))),1);
colnames(Y) <- c("NO%","SI%")
cbind(X,Y, Ratio_SI_NO = round((Y[,'SI%'] / Y[,'NO%']),3))
NO SI NO% SI% Ratio_SI_NO
F 3401 152 21.4 13.6 0.636
M 12502 963 78.6 86.4 1.099
CrossTable(DataSetUpublicaFRMTO$SEXO,DataSetUpublicaFRMTO$DESERTOR, prop.t=FALSE, prop.r=FALSE, prop.c=TRUE, prop.chisq=FALSE)
Cell Contents
|-------------------------|
| N |
| N / Col Total |
|-------------------------|
Total Observations in Table: 17018
| DataSetUpublicaFRMTO$DESERTOR
DataSetUpublicaFRMTO$SEXO | NO | SI | Row Total |
--------------------------|-----------|-----------|-----------|
F | 3401 | 152 | 3553 |
| 0.214 | 0.136 | |
--------------------------|-----------|-----------|-----------|
M | 12502 | 963 | 13465 |
| 0.786 | 0.864 | |
--------------------------|-----------|-----------|-----------|
Column Total | 15903 | 1115 | 17018 |
| 0.934 | 0.066 | |
--------------------------|-----------|-----------|-----------|
### Para el caso se selecciona F
X <-table(DataSetUpublicaFRMTO$LUGAR_NACIMIENTO,DataSetUpublicaFRMTO$DESERTOR)
Y = round((100 * apply(X, 2, function(z) z / sum(z))),1);
colnames(Y) <- c("NO%","SI%")
cbind(X,Y, Ratio_SI_NO = round((Y[,'SI%'] / Y[,'NO%']),3))
NO SI NO% SI% Ratio_SI_NO
Áncash-Huaraz 7 2 0.0 0.2 Inf
Áncash-Huari 3 0 0.0 0.0 NaN
Áncash-Mariscal Luzuriaga 12 0 0.1 0.0 0.000
Apurímac-Abancay 18 1 0.1 0.1 1.000
Apurímac-Andahuaylas 12 0 0.1 0.0 0.000
Apurímac-Antabamba 5 0 0.0 0.0 NaN
Apurímac-Aymaraes 6 0 0.0 0.0 NaN
Apurímac-Chincheros 14 1 0.1 0.1 1.000
Apurímac-Cotabambas 21 4 0.1 0.4 4.000
Arequipa-Arequipa 12512 835 78.7 74.9 0.952
Arequipa-Camaná 364 35 2.3 3.1 1.348
Arequipa-Caravelí 182 13 1.1 1.2 1.091
Arequipa-Castilla 86 7 0.5 0.6 1.200
Arequipa-Caylloma 202 20 1.3 1.8 1.385
Arequipa-Condesuyos 148 12 0.9 1.1 1.222
Arequipa-Islay 336 23 2.1 2.1 1.000
Arequipa-La Unión 81 10 0.5 0.9 1.800
Ayacucho-Huamanga 9 1 0.1 0.1 1.000
Ayacucho-La Mar 1 0 0.0 0.0 NaN
Ayacucho-Lucanas 7 1 0.0 0.1 Inf
Ayacucho-Parinacochas 4 0 0.0 0.0 NaN
Cajamarca-Cajamarca 6 1 0.0 0.1 Inf
Cajamarca-Jaén 1 1 0.0 0.1 Inf
Cajamarca-San Miguel 6 0 0.0 0.0 NaN
Cajamarca-Santa Cruz 7 0 0.0 0.0 NaN
Callao-Callao 98 8 0.6 0.7 1.167
Cusco-Anta 7 0 0.0 0.0 NaN
Cusco-Chumbivilcas 1 0 0.0 0.0 NaN
Huancavelica-Huaytará 7 0 0.0 0.0 NaN
Huánuco-Ambo 0 1 0.0 0.1 Inf
Huánuco-Dos de Mayo 11 2 0.1 0.2 2.000
Huánuco-Huánuco 9 2 0.1 0.2 2.000
Ica-Chincha 7 0 0.0 0.0 NaN
Ica-Ica 8 2 0.1 0.2 2.000
Ica-Pisco 13 0 0.1 0.0 0.000
Junín-Huancayo 23 0 0.1 0.0 0.000
Junín-Junín 1 1 0.0 0.1 Inf
Junín-Satipo 10 1 0.1 0.1 1.000
Junín-Tarma 3 1 0.0 0.1 Inf
Junín-Yauli 3 0 0.0 0.0 NaN
La Libertad-Trujillo 3 0 0.0 0.0 NaN
Lambayeque-Chiclayo 318 29 2.0 2.6 1.300
Lima-Lima 8 0 0.1 0.0 0.000
Loreto-Alto Amazonas 1 0 0.0 0.0 NaN
Loreto-Loreto 2 0 0.0 0.0 NaN
Loreto-Maynas 26 0 0.2 0.0 0.000
Madre de Dios-Manu 63 3 0.4 0.3 0.750
Madre de Dios-Tahuamanu 178 10 1.1 0.9 0.818
Madre de Dios-Tambopata 131 11 0.8 1.0 1.250
Pasco-Daniel Alcides Carrión 2 0 0.0 0.0 NaN
Pasco-Pasco 3 0 0.0 0.0 NaN
Piura-Ayabaca 146 14 0.9 1.3 1.444
Piura-Huancabamba 32 3 0.2 0.3 1.500
Piura-Morropón 14 3 0.1 0.3 3.000
Piura-Paita 37 3 0.2 0.3 1.500
Piura-Piura 238 16 1.5 1.4 0.933
Piura-Sechura 33 1 0.2 0.1 0.500
Piura-Sullana 31 2 0.2 0.2 1.000
Piura-Talara 221 13 1.4 1.2 0.857
Puno-El Collao 2 1 0.0 0.1 Inf
Puno-Melgar 1 0 0.0 0.0 NaN
San Martín-El Dorado 42 4 0.3 0.4 1.333
San Martín-Moyobamba 104 14 0.7 1.3 1.857
Tumbes-Tumbes 14 2 0.1 0.2 2.000
Ucayali-Coronel Portillo 2 1 0.0 0.1 Inf
#### Áncash-Huaraz Inf #### Áncash-Mariscal Luzuriaga 0.000
#### Apurímac-Andahuaylas 0.000 #### Apurímac-Cotabambas 4.000
#### Arequipa-Arequipa 0.952 #### Arequipa-Camaná 1.348
##### Arequipa-Caravelí 1.091 #### Arequipa-Castilla 1.200
#### Arequipa-Caylloma 1.385 #### Arequipa-Condesuyos 1.222
#### Arequipa-La Unión 1.800 #### Ayacucho-Lucanas Inf
#### Cajamarca-Cajamarca Inf #### Cajamarca-Jaén Inf
#### Callao-Callao 1.167 #### Huánuco-Ambo Inf
#### Huánuco-Dos de Mayo 2.000 #### Huánuco-Huánuco 2.000
#### Ica-Ica 2.000 #### Ica-Pisco 0.000
#### Junín-Huancayo 0.000 #### Junín-Junín Inf
#### Junín-Tarma Inf #### Lambayeque-Chiclayo 1.300
#### Lima-Lima 0.000 #### Loreto-Maynas 0.000
#### Madre de Dios-Manu 0.750 #### Madre de Dios-Tahuamanu 0.818
#### Madre de Dios-Tambopata 1.250 #### Piura-Ayabaca 1.444
#### Piura-Huancabamba 1.500 #### Piura-Morropón 3.000
#### Piura-Paita 1.500 ##### Piura-Piura 0.933
#### Piura-Sechura 0.500 #### Piura-Talara 0.857
#### Puno-El Collao Inf #### San Martín-El Dorado 1.333
#### San Martín-Moyobamba 1.857 #### Tumbes-Tumbes 2.000
#### Ucayali-Coronel Portillo Inf
## Tablas CRuzadas con variable Objetivo
X <-table(DataSetUpublicaFRMTO$LUGAR_RESIDENCIA,DataSetUpublicaFRMTO$DESERTOR)
Y = round((100 * apply(X, 2, function(z) z / sum(z))),1);
colnames(Y) <- c("NO%","SI%")
cbind(X,Y, Ratio_SI_NO = round((Y[,'SI%'] / Y[,'NO%']),3))
NO SI NO% SI% Ratio_SI_NO
Arequipa-Arequipa-Alto Selva Alegre 1492 99 9.4 8.9 0.947
Arequipa-Arequipa-Arequipa 1106 91 7.0 8.2 1.171
Arequipa-Arequipa-Cayma 1858 151 11.7 13.5 1.154
Arequipa-Arequipa-Cerro Colorado 282 22 1.8 2.0 1.111
Arequipa-Arequipa-Characato 30 2 0.2 0.2 1.000
Arequipa-Arequipa-Chiguata 175 11 1.1 1.0 0.909
Arequipa-Arequipa-Jacobo Hunter 1149 78 7.2 7.0 0.972
Arequipa-Arequipa-José Luis Bustamante y Rivero 1366 82 8.6 7.4 0.860
Arequipa-Arequipa-La Joya 129 7 0.8 0.6 0.750
Arequipa-Arequipa-Mariano Melgar 2367 191 14.9 17.1 1.148
Arequipa-Arequipa-Miraflores 268 4 1.7 0.4 0.235
Arequipa-Arequipa-Pocsi 30 1 0.2 0.1 0.500
Arequipa-Arequipa-Polobaya 236 21 1.5 1.9 1.267
Arequipa-Arequipa-Quequeña 26 0 0.2 0.0 0.000
Arequipa-Arequipa-Sabandia 1 0 0.0 0.0 NaN
Arequipa-Arequipa-San Juan de Siguas 5 0 0.0 0.0 NaN
Arequipa-Arequipa-San Juan de Tarucani 1134 71 7.1 6.4 0.901
Arequipa-Arequipa-Santa Isabel de Siguas 358 16 2.3 1.4 0.609
Arequipa-Arequipa-Santa Rita de Siguas 160 7 1.0 0.6 0.600
Arequipa-Arequipa-Socabaya 19 0 0.1 0.0 0.000
Arequipa-Arequipa-Tiabaya 195 17 1.2 1.5 1.250
Arequipa-Arequipa-Uchumayo 12 0 0.1 0.0 0.000
Arequipa-Arequipa-Vítor 196 17 1.2 1.5 1.250
Arequipa-Arequipa-Yanahuara 914 50 5.7 4.5 0.789
Arequipa-Arequipa-Yarabamba 882 64 5.5 5.7 1.036
Arequipa-Arequipa-Yura 1510 112 9.5 10.0 1.053
Arequipa-Islay-Mollendo 3 1 0.0 0.1 Inf
#CrossTable(DataSetUpublicaFRMTO$UBIG_NACIMIENTO,DataSetUpublicaFRMTO$DESERTOR, prop.t=FALSE, prop.r=FALSE, prop.c=TRUE, prop.chisq=FALSE)
## Nos quedamos con las siguientes variables
## Arequipa-Arequipa-Alto Selva Alegre 0.947
## Arequipa-Arequipa-Arequipa 1.171
## Arequipa-Arequipa-Cayma 1.154
## Arequipa-Arequipa-Cerro Colorado 1.111
## Arequipa-Arequipa-Chiguata 0.909
## Arequipa-Arequipa-José Luis Bustamante y Rivero 0.860
## Arequipa-Arequipa-La Joya 0.750
## Arequipa-Arequipa-Mariano Melgar 1.148
## Arequipa-Arequipa-Miraflores 0.235
## Arequipa-Arequipa-Pocsi 0.500
## Arequipa-Arequipa-Polobaya 1.267
## Arequipa-Arequipa-Quequeña 0.000
## Arequipa-Arequipa-Sabandia NaN
## Arequipa-Arequipa-San Juan de Siguas NaN
## Arequipa-Arequipa-San Juan de Tarucani 0.901
## Arequipa-Arequipa-Santa Isabel de Siguas 0.609
## Arequipa-Arequipa-Santa Rita de Siguas 0.600
## Arequipa-Arequipa-Socabaya 0.000
## Arequipa-Arequipa-Tiabaya 1.250
## Arequipa-Arequipa-Uchumayo 0.000
## Arequipa-Arequipa-Vítor 1.250
## Arequipa-Arequipa-Yanahuara 0.789
## Arequipa-Islay-Mollendo Inf
## Tablas CRuzadas con variable Objetivo
X <-table(DataSetUpublicaFRMTO$TIPO_COLEGIO,DataSetUpublicaFRMTO$DESERTOR)
Y = round((100 * apply(X, 2, function(z) z / sum(z))),1);
colnames(Y) <- c("NO%","SI%")
cbind(X,Y, Ratio_SI_NO = round((Y[,'SI%'] / Y[,'NO%']),3))
NO SI NO% SI% Ratio_SI_NO
Nacional 9959 627 62.6 56.2 0.898
Parroquial 1278 58 8.0 5.2 0.650
Particular 4666 430 29.3 38.6 1.317
### Para el caso se seleccionan todas la variables TIPO_COLEGIO
#CrossTable(DataSetUpublicaFRMTO$LUGAR_COLEGIO,DataSetUpublicaFRMTO$DESERTOR, prop.t=FALSE, prop.r=FALSE, prop.c=TRUE, prop.chisq=FALSE)
## Tablas CRuzadas con variable Objetivo
X <-table(DataSetUpublicaFRMTO$LUGAR_COLEGIO,DataSetUpublicaFRMTO$DESERTOR)
Y = round((100 * apply(X, 2, function(z) z / sum(z))),1);
colnames(Y) <- c("NO%","SI%")
cbind(X,Y, Ratio_SI_NO = round((Y[,'SI%'] / Y[,'NO%']),3))
NO SI NO% SI% Ratio_SI_NO
Amazonas-Bagua-Aramango 3 0 0.0 0.0 NaN
Áncash-Huaraz-Cochabamba 1 1 0.0 0.1 Inf
Áncash-Huaraz-Huaraz 1 1 0.0 0.1 Inf
Apurímac-Abancay-Abancay 14 0 0.1 0.0 0.000
Apurímac-Andahuaylas-San Miguel de Chaccrampa 5 0 0.0 0.0 NaN
Apurímac-Antabamba-Antabamba 7 1 0.0 0.1 Inf
Apurímac-Aymaraes-Chalhuanca 5 0 0.0 0.0 NaN
Apurímac-Chincheros-Ongoy 1 0 0.0 0.0 NaN
Apurímac-Cotabambas-Haquira 6 5 0.0 0.4 Inf
Arequipa-Arequipa-Alto Selva Alegre 1368 94 8.6 8.4 0.977
Arequipa-Arequipa-Arequipa 5000 347 31.4 31.1 0.990
Arequipa-Arequipa-Cayma 926 58 5.8 5.2 0.897
Arequipa-Arequipa-Cerro Colorado 24 1 0.2 0.1 0.500
Arequipa-Arequipa-Characato 2 0 0.0 0.0 NaN
Arequipa-Arequipa-Chiguata 190 12 1.2 1.1 0.917
Arequipa-Arequipa-Jacobo Hunter 450 30 2.8 2.7 0.964
Arequipa-Arequipa-José Luis Bustamante y Rivero 941 54 5.9 4.8 0.814
Arequipa-Arequipa-Mariano Melgar 1218 100 7.7 9.0 1.169
Arequipa-Arequipa-Pocsi 9 1 0.1 0.1 1.000
Arequipa-Arequipa-Polobaya 85 11 0.5 1.0 2.000
Arequipa-Arequipa-Quequeña 10 0 0.1 0.0 0.000
Arequipa-Arequipa-Sabandia 7 0 0.0 0.0 NaN
Arequipa-Arequipa-Sachaca 0 1 0.0 0.1 Inf
Arequipa-Arequipa-San Juan de Siguas 17 0 0.1 0.0 0.000
Arequipa-Arequipa-San Juan de Tarucani 482 35 3.0 3.1 1.033
Arequipa-Arequipa-Santa Isabel de Siguas 151 8 0.9 0.7 0.778
Arequipa-Arequipa-Santa Rita de Siguas 36 1 0.2 0.1 0.500
Arequipa-Arequipa-Tiabaya 604 36 3.8 3.2 0.842
Arequipa-Arequipa-Uchumayo 6 1 0.0 0.1 Inf
Arequipa-Arequipa-Vítor 122 15 0.8 1.3 1.625
Arequipa-Arequipa-Yanahuara 860 38 5.4 3.4 0.630
Arequipa-Arequipa-Yarabamba 563 38 3.5 3.4 0.971
Arequipa-Arequipa-Yura 697 43 4.4 3.9 0.886
Arequipa-Camaná-Camaná 78 11 0.5 1.0 2.000
Arequipa-Camaná-José María Quimper 9 1 0.1 0.1 1.000
Arequipa-Camaná-Mariano Nicolás Valcárcel 15 0 0.1 0.0 0.000
Arequipa-Camaná-Mariscal Cáceres 12 0 0.1 0.0 0.000
Arequipa-Camaná-Nicolás de Piérola 5 0 0.0 0.0 NaN
Arequipa-Camaná-Ocoña 14 2 0.1 0.2 2.000
Arequipa-Camaná-Quilca 7 0 0.0 0.0 NaN
Arequipa-Caravelí-Acarí 7 0 0.0 0.0 NaN
Arequipa-Caravelí-Bella Unión 8 1 0.1 0.1 1.000
Arequipa-Caravelí-Cahuacho 17 2 0.1 0.2 2.000
Arequipa-Caravelí-Caravelí 161 12 1.0 1.1 1.100
Arequipa-Caravelí-Cháparra 38 4 0.2 0.4 2.000
Arequipa-Castilla-Andagua 24 1 0.2 0.1 0.500
Arequipa-Castilla-Aplao 25 2 0.2 0.2 1.000
Arequipa-Castilla-Ayo 18 3 0.1 0.3 3.000
Arequipa-Castilla-Huancarqui 12 1 0.1 0.1 1.000
Arequipa-Castilla-Machaguay 23 3 0.1 0.3 3.000
Arequipa-Castilla-Orcopampa 2 2 0.0 0.2 Inf
Arequipa-Castilla-Pampacolca 3 1 0.0 0.1 Inf
Arequipa-Castilla-Tipán 6 0 0.0 0.0 NaN
Arequipa-Castilla-Uñón 4 1 0.0 0.1 Inf
Arequipa-Castilla-Uraca 1 1 0.0 0.1 Inf
Arequipa-Caylloma-Achoma 4 1 0.0 0.1 Inf
Arequipa-Caylloma-Callalli 0 1 0.0 0.1 Inf
Arequipa-Caylloma-Caylloma 1 0 0.0 0.0 NaN
Arequipa-Caylloma-Chivay 85 6 0.5 0.5 1.000
Arequipa-Caylloma-Huambo 1 0 0.0 0.0 NaN
Arequipa-Caylloma-Huanca 2 1 0.0 0.1 Inf
Arequipa-Caylloma-Ichupampa 82 12 0.5 1.1 2.200
Arequipa-Caylloma-Lari 9 1 0.1 0.1 1.000
Arequipa-Caylloma-Lluta 1 1 0.0 0.1 Inf
Arequipa-Caylloma-Maca 22 1 0.1 0.1 1.000
Arequipa-Caylloma-San Antonio de Chuca 1 2 0.0 0.2 Inf
Arequipa-Condesuyos-Andaray 1 0 0.0 0.0 NaN
Arequipa-Condesuyos-Chuquibamba 24 6 0.2 0.5 2.500
Arequipa-Condesuyos-Salamanca 27 3 0.2 0.3 1.500
Arequipa-Condesuyos-Yanaquihua 55 2 0.3 0.2 0.667
Arequipa-Islay-Cocachacra 28 2 0.2 0.2 1.000
Arequipa-Islay-Deán Valdivia 25 1 0.2 0.1 0.500
Arequipa-Islay-Islay 5 0 0.0 0.0 NaN
Arequipa-Islay-Mejía 7 1 0.0 0.1 Inf
Arequipa-Islay-Mollendo 151 12 0.9 1.1 1.222
Arequipa-Islay-Punta de Bombón 37 2 0.2 0.2 1.000
Arequipa-La Unión-Alca 6 4 0.0 0.4 Inf
Arequipa-La Unión-Charcana 1 1 0.0 0.1 Inf
Arequipa-La Unión-Cotahuasi 11 1 0.1 0.1 1.000
Arequipa-La Unión-Huaynacotas 28 3 0.2 0.3 1.500
Arequipa-La Unión-Puyca 10 0 0.1 0.0 0.000
Arequipa-La Unión-Tauria 7 0 0.0 0.0 NaN
Arequipa-La Unión-Tomepampa 0 1 0.0 0.1 Inf
Arequipa-La Unión-Toro 4 0 0.0 0.0 NaN
Ayacucho-Huamanga-Ayacucho 1 0 0.0 0.0 NaN
Ayacucho-La Mar-San Miguel 1 0 0.0 0.0 NaN
Ayacucho-Lucanas-Chaviña 2 1 0.0 0.1 Inf
Ayacucho-Lucanas-Puquio 5 0 0.0 0.0 NaN
Ayacucho-Páucar del Sara Sara-Pausa 1 1 0.0 0.1 Inf
Cajamarca-Cajamarca-Cajamarca 6 0 0.0 0.0 NaN
Cajamarca-Jaén-Jaén 4 0 0.0 0.0 NaN
Callao-Callao-Callao 23 1 0.1 0.1 1.000
Callao-Callao-La Punta 2 0 0.0 0.0 NaN
Huancavelica-Huancavelica-Huancavelica 1 0 0.0 0.0 NaN
Huánuco-Ambo-Ambo 3 0 0.0 0.0 NaN
Huánuco-Dos de Mayo-La Unión 1 1 0.0 0.1 Inf
Huánuco-Huacaybamba-Huacaybamba 2 0 0.0 0.0 NaN
Ica-Ica-Ica 1 0 0.0 0.0 NaN
Junín-Chanchamayo-Chanchamayo 5 0 0.0 0.0 NaN
Junín-Huancayo-Chilca 2 0 0.0 0.0 NaN
Junín-Yauli-Marcapomacocha 2 0 0.0 0.0 NaN
Lambayeque-Chiclayo-Chiclayo 17 2 0.1 0.2 2.000
Lambayeque-Chiclayo-Eten 3 1 0.0 0.1 Inf
Lambayeque-Chiclayo-Eten Puerto 8 0 0.1 0.0 0.000
Lambayeque-Chiclayo-José Leonardo Ortiz 0 1 0.0 0.1 Inf
Lambayeque-Chiclayo-La Victoria 5 2 0.0 0.2 Inf
Lambayeque-Chiclayo-Lagunas 25 1 0.2 0.1 0.500
Lambayeque-Chiclayo-Oyotún 1 0 0.0 0.0 NaN
Lambayeque-Chiclayo-Patapo 4 0 0.0 0.0 NaN
Lambayeque-Chiclayo-Picsi 4 1 0.0 0.1 Inf
Lambayeque-Chiclayo-Pimentel 3 0 0.0 0.0 NaN
Lambayeque-Chiclayo-Pucalá 6 0 0.0 0.0 NaN
Lambayeque-Chiclayo-Santa Rosa 1 0 0.0 0.0 NaN
Loreto-Loreto-Parinari 2 0 0.0 0.0 NaN
Loreto-Maynas-Iquitos 25 0 0.2 0.0 0.000
Madre de Dios-Manu-Huepetuhe 0 1 0.0 0.1 Inf
Madre de Dios-Tahuamanu-Iñapari 130 13 0.8 1.2 1.500
Madre de Dios-Tahuamanu-Tahuamanu 77 1 0.5 0.1 0.200
Madre de Dios-Tambopata-Tambopata 104 5 0.7 0.4 0.571
Piura-Ayabaca-Ayabaca 86 6 0.5 0.5 1.000
Piura-Ayabaca-Paimas 13 0 0.1 0.0 0.000
Piura-Huancabamba-Huancabamba 15 0 0.1 0.0 0.000
Piura-Huancabamba-Huarmaca 2 0 0.0 0.0 NaN
Piura-Huancabamba-Lalaquiz 3 0 0.0 0.0 NaN
Piura-Huancabamba-San Miguel de El Faique 0 1 0.0 0.1 Inf
Piura-Morropón-Buenos Aires 4 1 0.0 0.1 Inf
Piura-Morropón-Chulucanas 7 1 0.0 0.1 Inf
Piura-Morropón-San Juan de Bigote 3 0 0.0 0.0 NaN
Piura-Paita-Paita 4 0 0.0 0.0 NaN
Piura-Piura-El Tallán 6 0 0.0 0.0 NaN
Piura-Piura-Piura 118 4 0.7 0.4 0.571
Piura-Sechura-Cristo Nos Valga 3 0 0.0 0.0 NaN
Piura-Sullana-Sullana 3 0 0.0 0.0 NaN
Piura-Talara-Los Órganos 0 1 0.0 0.1 Inf
Piura-Talara-Máncora 11 0 0.1 0.0 0.000
Piura-Talara-Pariñas 115 10 0.7 0.9 1.286
Puno-El Collao-Ilave 2 1 0.0 0.1 Inf
San Martín-El Dorado-Agua Blanca 1 0 0.0 0.0 NaN
San Martín-El Dorado-San Martín 22 1 0.1 0.1 1.000
San Martín-Moyobamba-Moyobamba 68 9 0.4 0.8 2.000
Tumbes-Tumbes-Pampas de Hospital 0 2 0.0 0.2 Inf
Tumbes-Tumbes-Tumbes 2 1 0.0 0.1 Inf
Ucayali-Coronel Portillo-Calleria 3 0 0.0 0.0 NaN
###
# Amazonas-Bagua-Aramango NaN # Áncash-Huaraz-Cochabamba Inf
# Áncash-Huaraz-Huaraz Inf # Apurímac-Abancay-Abancay 0.000
# Apurímac-Andahuaylas-San Miguel de Chaccrampa NaN # Apurímac-Antabamba-Antabamba Inf
# Apurímac-Aymaraes-Chalhuanca NaN # Apurímac-Chincheros-Ongoy NaN
# Apurímac-Cotabambas-Haquira Inf # Arequipa-Arequipa-Alto Selva Alegre 0.977
# Arequipa-Arequipa-Arequipa 0.990 # Arequipa-Arequipa-Cayma 0.897
# Arequipa-Arequipa-Cerro Colorado 0.500 # Arequipa-Arequipa-Characato NaNa
# Arequipa-Arequipa-Chiguata 0.917 # Arequipa-Arequipa-Jacobo Hunter 0.964
# Arequipa-Arequipa-José Luis Bustamante y Rivero 0.814 # Arequipa-Arequipa-Mariano Melgar 1.169
# Arequipa-Arequipa-Polobaya 2.000 # Arequipa-Arequipa-Quequeña 0.000
# Arequipa-Arequipa-Sabandia NaN # Arequipa-Arequipa-Sachaca Inf
# Arequipa-Arequipa-San Juan de Siguas 0.000 # Arequipa-Arequipa-San Juan de Tarucani 1.033
# Arequipa-Arequipa-Santa Isabel de Siguas 0.778 # Arequipa-Arequipa-Santa Rita de Siguas 0.500
# Arequipa-Arequipa-Tiabaya 0.842 # Arequipa-Arequipa-Uchumayo Inf
# Arequipa-Arequipa-Vítor 1.625 # Arequipa-Arequipa-Yanahuara 0.630
# Arequipa-Arequipa-Yarabamba 0.971 # Arequipa-Arequipa-Yura 0.886
# Arequipa-Camaná-Camaná 2.000 # Arequipa-Camaná-Mariano Nicolás Valcárcel 0.000
# Arequipa-Camaná-Mariscal Cáceres 0.000 # Arequipa-Camaná-Nicolás de Piérola NaN
# Arequipa-Camaná-Ocoña 2.000 # Arequipa-Camaná-Quilca NaN
# Arequipa-Caravelí-Acarí NaN # Arequipa-Caravelí-Cahuacho 2.000
# Arequipa-Caravelí-Caravelí 1.100 # Arequipa-Caravelí-Cháparra 2.000
# Arequipa-Castilla-Andagua 0.500 # Arequipa-Castilla-Ayo 3.000
# Arequipa-Castilla-Machaguay 3.000 # Arequipa-Castilla-Orcopampa Inf
# Arequipa-Castilla-Pampacolca Inf # Arequipa-Castilla-Tipán NaN
# Arequipa-Castilla-Uñón Inf # Arequipa-Castilla-Uraca Inf
# Arequipa-Caylloma-Achoma Inf # Arequipa-Caylloma-Callalli Inf
# Arequipa-Caylloma-Caylloma NaN # Arequipa-Caylloma-Huambo NaN
# Arequipa-Caylloma-Huanca Inf # Arequipa-Caylloma-Ichupampa 2.200
# Arequipa-Caylloma-Lluta Inf # Arequipa-Caylloma-San Antonio de Chuca Inf
# Arequipa-Condesuyos-Andaray NaN # Arequipa-Condesuyos-Chuquibamba 2.500
# Arequipa-Condesuyos-Salamanca 1.500 # Arequipa-Condesuyos-Yanaquihua 0.667
# Arequipa-Islay-Deán Valdivia 0.500 # Arequipa-Islay-Islay NaN
# Arequipa-Islay-Mejía Inf # Arequipa-Islay-Mollendo 1.222
# Arequipa-La Unión-Alca Inf # Arequipa-La Unión-Charcana Inf
# Arequipa-La Unión-Huaynacotas 1.500 # Arequipa-La Unión-Puyca 0.000
# Arequipa-La Unión-Tauria NaN # Arequipa-La Unión-Tomepampa Inf
# Arequipa-La Unión-Toro NaN # Ayacucho-Huamanga-Ayacucho NaN
# Ayacucho-La Mar-San Miguel NaN # Ayacucho-Lucanas-Chaviña Inf
# Ayacucho-Lucanas-Puquio NaN # Ayacucho-Páucar del Sara Sara-Pausa Inf
# Cajamarca-Cajamarca-Cajamarca NaN # Cajamarca-Jaén-Jaén NaN
# Callao-Callao-La Punta NaN # Huancavelica-Huancavelica-Huancavelica NaN
# Huánuco-Ambo-Ambo NaN # Huánuco-Dos de Mayo-La Unión Inf
# Huánuco-Huacaybamba-Huacaybamba NaN # Ica-Ica-Ica NaN
# Junín-Chanchamayo-Chanchamayo NaN # Junín-Huancayo-Chilca NaN
# Junín-Yauli-Marcapomacocha NaN # Lambayeque-Chiclayo-Chiclayo 2.000
# Lambayeque-Chiclayo-Eten Inf # Lambayeque-Chiclayo-Eten Puerto 0.000
# Lambayeque-Chiclayo-José Leonardo Ortiz Inf # Lambayeque-Chiclayo-La Victoria Inf
# Lambayeque-Chiclayo-Lagunas 0.500 # Lambayeque-Chiclayo-Oyotún NaN
# Lambayeque-Chiclayo-Patapo NaN # Lambayeque-Chiclayo-Picsi Inf
# Lambayeque-Chiclayo-Pimentel NaN # Lambayeque-Chiclayo-Pucalá NaN
# Lambayeque-Chiclayo-Santa Rosa NaN # Loreto-Loreto-Parinari NaN
# Loreto-Maynas-Iquitos 0.000 # Madre de Dios-Manu-Huepetuhe Inf
# Madre de Dios-Tahuamanu-Iñapari 1.500 # Madre de Dios-Tahuamanu-Tahuamanu 0.200
# Madre de Dios-Tambopata-Tambopata 0.571 # Piura-Ayabaca-Paimas 0.000
# Piura-Huancabamba-Huancabamba 0.000 # Piura-Huancabamba-Huarmaca NaN
# Piura-Huancabamba-Lalaquiz NaN # Piura-Huancabamba-San Miguel de El Faique Inf
# Piura-Morropón-Buenos Aires Inf # Piura-Morropón-Chulucanas Inf
# Piura-Morropón-San Juan de Bigote NaN # Piura-Paita-Paita NaN
# Piura-Piura-El Tallán NaN # Piura-Piura-Piura 0.571
# Piura-Sechura-Cristo Nos Valga NaN # Piura-Sullana-Sullana NaN
# Piura-Talara-Los Órganos Inf # Piura-Talara-Máncora 0.000
# Piura-Talara-Pariñas 1.286 # Puno-El Collao-Ilave Inf
# San Martín-El Dorado-Agua Blanca NaN # San Martín-Moyobamba-Moyobamba 2.000
# Tumbes-Tumbes-Pampas de Hospital Inf # Tumbes-Tumbes-Tumbes Inf
# Ucayali-Coronel Portillo-Calleria Na
X <-table(DataSetUpublicaFRMTO$MODALIDAD_INGRESO,DataSetUpublicaFRMTO$DESERTOR)
Y = round((100 * apply(X, 2, function(z) z / sum(z))),1);
colnames(Y) <- c("NO%","SI%")
cbind(X,Y, Ratio_SI_NO = round((Y[,'SI%'] / Y[,'NO%']),3))
NO SI NO% SI% Ratio_SI_NO
Convenios y Otros 20 5 0.1 0.4 4.000
CPU 4673 288 29.4 25.8 0.878
Deportistas Calificados 75 13 0.5 1.2 2.400
Ordinario 8597 558 54.1 50.0 0.924
Primeros Puestos 2160 230 13.6 20.6 1.515
Profesionales 87 4 0.5 0.4 0.800
Traslados Externos Nacionales 76 14 0.5 1.3 2.600
Traslados Internos 215 3 1.4 0.3 0.214
### Variables Seleccionadas TODAS
Por cada variable categórica seleccionada en el anterior paso; se procedera a seleccionar cuales utilizar en base al análisis de “Tablas Cruzadas”
#VARIABLES CATEGORICAS
library(dummies)
#Dicotomizacion de variables categoricas
Datos_Dico_cat <- dplyr::select(DataSetUpublicaFRMTO,
ESCUELA,SEXO,LUGAR_NACIMIENTO,LUGAR_RESIDENCIA,TIPO_COLEGIO,LUGAR_COLEGIO,MODALIDAD_INGRESO)
Datos_Dico_cat <- dummy.data.frame(Datos_Dico_cat,names=c(
"ESCUELA","SEXO","LUGAR_NACIMIENTO","LUGAR_RESIDENCIA","TIPO_COLEGIO","LUGAR_COLEGIO","MODALIDAD_INGRESO"))
colnames(Datos_Dico_cat) <- c(
"ESCUELA_CIENCIADELACOMPUTACION", "ESCUELA_INGENIERIADESISTEMAS",
"ESCUELA_INGENIERIAELECTRICA", "ESCUELA_INGENIERIAELECTRONICA",
"ESCUELA_INGENIERIAENTELECOMUNICACIONES", "ESCUELA_INGENIERIAINDUSTRIAL",
"ESCUELA_INGENIERIAMECANICA", "SEXO_F",
"SEXO_M", "LUGAR_NACIMIENTO_ancash_Huaraz",
"LUGAR_NACIMIENTO_ancash_Huari", "LUGAR_NACIMIENTO_ancash_MariscalLuzuriaga",
"LUGAR_NACIMIENTO_Apurimac_Abancay", "LUGAR_NACIMIENTO_Apurimac_Andahuaylas",
"LUGAR_NACIMIENTO_Apurimac_Antabamba", "LUGAR_NACIMIENTO_Apurimac_Aymaraes",
"LUGAR_NACIMIENTO_Apurimac_Chincheros", "LUGAR_NACIMIENTO_Apurimac_Cotabambas",
"LUGAR_NACIMIENTO_Arequipa_Arequipa", "LUGAR_NACIMIENTO_Arequipa_Camana",
"LUGAR_NACIMIENTO_Arequipa_Caraveli", "LUGAR_NACIMIENTO_Arequipa_Castilla",
"LUGAR_NACIMIENTO_Arequipa_Caylloma", "LUGAR_NACIMIENTO_Arequipa_Condesuyos",
"LUGAR_NACIMIENTO_Arequipa_Islay", "LUGAR_NACIMIENTO_Arequipa_LaUnión",
"LUGAR_NACIMIENTO_Ayacucho_Huamanga", "LUGAR_NACIMIENTO_Ayacucho_LaMar",
"LUGAR_NACIMIENTO_Ayacucho_Lucanas", "LUGAR_NACIMIENTO_Ayacucho_Parinacochas",
"LUGAR_NACIMIENTO_Cajamarca_Cajamarca", "LUGAR_NACIMIENTO_Cajamarca_Jaen",
"LUGAR_NACIMIENTO_Cajamarca_SanMiguel", "LUGAR_NACIMIENTO_Cajamarca_SantaCruz",
"LUGAR_NACIMIENTO_Callao_Callao", "LUGAR_NACIMIENTO_Cusco_Anta",
"LUGAR_NACIMIENTO_Cusco_Chumbivilcas", "LUGAR_NACIMIENTO_Huancavelica_Huaytara",
"LUGAR_NACIMIENTO_Huanuco_Ambo", "LUGAR_NACIMIENTO_Huanuco_DosdeMayo",
"LUGAR_NACIMIENTO_Huanuco_Huanuco", "LUGAR_NACIMIENTO_Ica_Chincha",
"LUGAR_NACIMIENTO_Ica_Ica", "LUGAR_NACIMIENTO_Ica_Pisco",
"LUGAR_NACIMIENTO_Junin_Huancayo", "LUGAR_NACIMIENTO_Junin_Junin",
"LUGAR_NACIMIENTO_Junin_Satipo", "LUGAR_NACIMIENTO_Junin_Tarma",
"LUGAR_NACIMIENTO_Junin_Yauli", "LUGAR_NACIMIENTO_LaLibertad_Trujillo",
"LUGAR_NACIMIENTO_Lambayeque_Chiclayo", "LUGAR_NACIMIENTO_Lima_Lima",
"LUGAR_NACIMIENTO_Loreto_AltoAmazonas", "LUGAR_NACIMIENTO_Loreto_Loreto",
"LUGAR_NACIMIENTO_Loreto_Maynas", "LUGAR_NACIMIENTO_MadredeDios_Manu",
"LUGAR_NACIMIENTO_MadredeDios_Tahuamanu", "LUGAR_NACIMIENTO_MadredeDios_Tambopata",
"LUGAR_NACIMIENTO_Pasco_DanielAlcidesCarrión", "LUGAR_NACIMIENTO_Pasco_Pasco",
"LUGAR_NACIMIENTO_Piura_Ayabaca", "LUGAR_NACIMIENTO_Piura_Huancabamba",
"LUGAR_NACIMIENTO_Piura_Morropón", "LUGAR_NACIMIENTO_Piura_Paita",
"LUGAR_NACIMIENTO_Piura_Piura", "LUGAR_NACIMIENTO_Piura_Sechura",
"LUGAR_NACIMIENTO_Piura_Sullana", "LUGAR_NACIMIENTO_Piura_Talara",
"LUGAR_NACIMIENTO_Puno_ElCollao", "LUGAR_NACIMIENTO_Puno_Melgar",
"LUGAR_NACIMIENTO_SanMartin_ElDorado", "LUGAR_NACIMIENTO_SanMartin_Moyobamba",
"LUGAR_NACIMIENTO_Tumbes_Tumbes", "LUGAR_NACIMIENTO_Ucayali_CoronelPortillo",
"LUGAR_RESIDENCIA_AA_AltoSelvaAlegre", "LUGAR_RESIDENCIA_AA_Arequipa",
"LUGAR_RESIDENCIA_AA_Cayma", "LUGAR_RESIDENCIA_AA_CerroColorado",
"LUGAR_RESIDENCIA_AA_Characato", "LUGAR_RESIDENCIA_AA_Chiguata",
"LUGAR_RESIDENCIA_AA_JacoboHunter", "LUGAR_RESIDENCIA_AA_JoseLuisBustamanteyRivero",
"LUGAR_RESIDENCIA_AA_LaJoya", "LUGAR_RESIDENCIA_AA_MarianoMelgar",
"LUGAR_RESIDENCIA_AA_Miraflores", "LUGAR_RESIDENCIA_AA_Pocsi",
"LUGAR_RESIDENCIA_AA_Polobaya", "LUGAR_RESIDENCIA_AA_Quequeña",
"LUGAR_RESIDENCIA_AA_Sabandia", "LUGAR_RESIDENCIA_AA_SanJuandeSiguas",
"LUGAR_RESIDENCIA_AA_SanJuandeTarucani", "LUGAR_RESIDENCIA_AA_SantaIsabeldeSiguas",
"LUGAR_RESIDENCIA_AA_SantaRitadeSiguas", "LUGAR_RESIDENCIA_AA_Socabaya",
"LUGAR_RESIDENCIA_AA_Tiabaya", "LUGAR_RESIDENCIA_AA_Uchumayo",
"LUGAR_RESIDENCIA_AA_Vitor", "LUGAR_RESIDENCIA_AA_Yanahuara",
"LUGAR_RESIDENCIA_AA_Yarabamba", "LUGAR_RESIDENCIA_AA_Yura",
"LUGAR_RESIDENCIA_AI_Mollendo", "TIPO_COLEGIO_Nacional",
"TIPO_COLEGIO_Parroquial", "TIPO_COLEGIO_Particular",
"LUGAR_COLEGIO_Amazonas_Bagua_Aramango", "LUGAR_COLEGIO_Ancash_Huaraz_Cochabamba",
"LUGAR_COLEGIO_Ancash_Huaraz_Huaraz", "LUGAR_COLEGIO_Apurimac_Abancay_Abancay",
"LUGAR_COLEGIO_Apurimac_Andahuaylas_SanMiguelChaccrampa", "LUGAR_COLEGIO_Apurimac_Antabamba_Antabamba",
"LUGAR_COLEGIO_Apurimac_Aymaraes_Chalhuanca", "LUGAR_COLEGIO_Apurimac_Chincheros_Ongoy",
"LUGAR_COLEGIO_Apurimac_Cotabambas_Haquira", "LUGAR_COLEGIO_Arequipa_Arequipa_AltoSelvaAlegre",
"LUGAR_COLEGIO_Arequipa_Arequipa_Arequipa", "LUGAR_COLEGIO_Arequipa_Arequipa_Cayma",
"LUGAR_COLEGIO_Arequipa_Arequipa_CerroColorado", "LUGAR_COLEGIO_Arequipa_Arequipa_Characato",
"LUGAR_COLEGIO_Arequipa_Arequipa_Chiguata", "LUGAR_COLEGIO_Arequipa_Arequipa_JacoboHunter",
"LUGAR_COLEGIO_Arequipa_Arequipa_JoseLuisBustamanteyRivero", "LUGAR_COLEGIO_Arequipa_Arequipa_MarianoMelgar",
"LUGAR_COLEGIO_Arequipa_Arequipa_Pocsi", "LUGAR_COLEGIO_Arequipa_Arequipa_Polobaya",
"LUGAR_COLEGIO_Arequipa_Arequipa_Quequeña", "LUGAR_COLEGIO_Arequipa_Arequipa_Sabandia",
"LUGAR_COLEGIO_Arequipa_Arequipa_Sachaca", "LUGAR_COLEGIO_Arequipa_Arequipa_SanJuandeSiguas",
"LUGAR_COLEGIO_Arequipa_Arequipa_SanJuandeTarucani", "LUGAR_COLEGIO_Arequipa_Arequipa_SantaIsabeldeSiguas",
"LUGAR_COLEGIO_Arequipa_Arequipa_SantaRitadeSiguas", "LUGAR_COLEGIO_Arequipa_Arequipa_Tiabaya",
"LUGAR_COLEGIO_Arequipa_Arequipa_Uchumayo", "LUGAR_COLEGIO_Arequipa_Arequipa_Vitor",
"LUGAR_COLEGIO_Arequipa_Arequipa_Yanahuara", "LUGAR_COLEGIO_Arequipa_Arequipa_Yarabamba",
"LUGAR_COLEGIO_Arequipa_Arequipa_Yura", "LUGAR_COLEGIO_Arequipa_Camana_Camana",
"LUGAR_COLEGIO_Arequipa_Camana_JoseMariaQuimper", "LUGAR_COLEGIO_Arequipa_Camana_MarianoNicolasValcarcel",
"LUGAR_COLEGIO_Arequipa_Camana_MariscalCaceres", "LUGAR_COLEGIO_Arequipa_Camana_NicolasdePierola",
"LUGAR_COLEGIO_Arequipa_Camana_Ocoña", "LUGAR_COLEGIO_Arequipa_Camana_Quilca",
"LUGAR_COLEGIO_Arequipa_Caraveli_Acari", "LUGAR_COLEGIO_Arequipa_Caraveli_BellaUnión",
"LUGAR_COLEGIO_Arequipa_Caraveli_Cahuacho", "LUGAR_COLEGIO_Arequipa_Caraveli_Caraveli",
"LUGAR_COLEGIO_Arequipa_Caraveli_Chaparra", "LUGAR_COLEGIO_Arequipa_Castilla_Andagua",
"LUGAR_COLEGIO_Arequipa_Castilla_Aplao", "LUGAR_COLEGIO_Arequipa_Castilla_Ayo",
"LUGAR_COLEGIO_Arequipa_Castilla_Huancarqui", "LUGAR_COLEGIO_Arequipa_Castilla_Machaguay",
"LUGAR_COLEGIO_Arequipa_Castilla_Orcopampa", "LUGAR_COLEGIO_Arequipa_Castilla_Pampacolca",
"LUGAR_COLEGIO_Arequipa_Castilla_Tipan", "LUGAR_COLEGIO_Arequipa_Castilla_Uñón",
"LUGAR_COLEGIO_Arequipa_Castilla_Uraca", "LUGAR_COLEGIO_Arequipa_Caylloma_Achoma",
"LUGAR_COLEGIO_Arequipa_Caylloma_Callalli", "LUGAR_COLEGIO_Arequipa_Caylloma_Caylloma",
"LUGAR_COLEGIO_Arequipa_Caylloma_Chivay", "LUGAR_COLEGIO_Arequipa_Caylloma_Huambo",
"LUGAR_COLEGIO_Arequipa_Caylloma_Huanca", "LUGAR_COLEGIO_Arequipa_Caylloma_Ichupampa",
"LUGAR_COLEGIO_Arequipa_Caylloma_Lari", "LUGAR_COLEGIO_Arequipa_Caylloma_Lluta",
"LUGAR_COLEGIO_Arequipa_Caylloma_Maca", "LUGAR_COLEGIO_Arequipa_Caylloma_SanAntoniodeChuca",
"LUGAR_COLEGIO_Arequipa_Condesuyos_Andaray", "LUGAR_COLEGIO_Arequipa_Condesuyos_Chuquibamba",
"LUGAR_COLEGIO_Arequipa_Condesuyos_Salamanca", "LUGAR_COLEGIO_Arequipa_Condesuyos_Yanaquihua",
"LUGAR_COLEGIO_Arequipa_Islay_Cocachacra", "LUGAR_COLEGIO_Arequipa_Islay_DeanValdivia",
"LUGAR_COLEGIO_Arequipa_Islay_Islay", "LUGAR_COLEGIO_Arequipa_Islay_Mejia",
"LUGAR_COLEGIO_Arequipa_Islay_Mollendo", "LUGAR_COLEGIO_Arequipa_Islay_PuntadeBombón",
"LUGAR_COLEGIO_Arequipa_LaUnión_Alca", "LUGAR_COLEGIO_Arequipa_LaUnión_Charcana",
"LUGAR_COLEGIO_Arequipa_LaUnión_Cotahuasi", "LUGAR_COLEGIO_Arequipa_LaUnión_Huaynacotas",
"LUGAR_COLEGIO_Arequipa_LaUnión_Puyca", "LUGAR_COLEGIO_Arequipa_LaUnión_Tauria",
"LUGAR_COLEGIO_Arequipa_LaUnión_Tomepampa", "LUGAR_COLEGIO_Arequipa_LaUnión_Toro",
"LUGAR_COLEGIO_Ayacucho_Huamanga_Ayacucho", "LUGAR_COLEGIO_Ayacucho_LaMar_SanMiguel",
"LUGAR_COLEGIO_Ayacucho_Lucanas_Chaviña", "LUGAR_COLEGIO_Ayacucho_Lucanas_Puquio",
"LUGAR_COLEGIO_Ayacucho_PaucardelSaraSara_Pausa", "LUGAR_COLEGIO_Cajamarca_Cajamarca_Cajamarca",
"LUGAR_COLEGIO_Cajamarca_Jaen_Jaen", "LUGAR_COLEGIO_Callao_Callao_Callao",
"LUGAR_COLEGIO_Callao_Callao_LaPunta", "LUGAR_COLEGIO_Huancavelica_Huancavelica",
"LUGAR_COLEGIO_Huanuco_Ambo_Ambo", "LUGAR_COLEGIO_Huanuco_DosdeMayo_LaUnión",
"LUGAR_COLEGIO_Huanuco_Huacaybamba_Huacaybamba", "LUGAR_COLEGIO_Ica_Ica_Ica",
"LUGAR_COLEGIO_Junin_Chanchamayo_Chanchamayo", "LUGAR_COLEGIO_Junin_Huancayo_Chilca",
"LUGAR_COLEGIO_Junin_Yauli_Marcapomacocha", "LUGAR_COLEGIO_Lambayeque_Chiclayo_Chiclayo",
"LUGAR_COLEGIO_Lambayeque_Chiclayo_Eten", "LUGAR_COLEGIO_Lambayeque_Chiclayo_EtenPuerto",
"LUGAR_COLEGIO_Lambayeque_Chiclayo_JoseLeonardoOrtiz", "LUGAR_COLEGIO_Lambayeque_Chiclayo_LaVictoria",
"LUGAR_COLEGIO_Lambayeque_Chiclayo_Lagunas", "LUGAR_COLEGIO_Lambayeque_Chiclayo_Oyotún",
"LUGAR_COLEGIO_Lambayeque_Chiclayo_Patapo", "LUGAR_COLEGIO_Lambayeque_Chiclayo_Picsi",
"LUGAR_COLEGIO_Lambayeque_Chiclayo_Pimentel", "LUGAR_COLEGIO_Lambayeque_Chiclayo_Pucala",
"LUGAR_COLEGIO_Lambayeque_Chiclayo_SantaRosa", "LUGAR_COLEGIO_Loreto_Loreto_Parinari",
"LUGAR_COLEGIO_Loreto_Maynas_Iquitos", "LUGAR_COLEGIO_MadredeDios_Manu_Huepetuhe",
"LUGAR_COLEGIO_MadredeDios_Tahuamanu_Iñapari", "LUGAR_COLEGIO_MadredeDios_Tahuamanu_Tahuamanu",
"LUGAR_COLEGIO_MadredeDios_Tambopata_Tambopata", "LUGAR_COLEGIO_Piura_Ayabaca_Ayabaca",
"LUGAR_COLEGIO_Piura_Ayabaca_Paimas", "LUGAR_COLEGIO_Piura_Huancabamba_Huancabamba",
"LUGAR_COLEGIO_Piura_Huancabamba_Huarmaca", "LUGAR_COLEGIO_Piura_Huancabamba_Lalaquiz",
"LUGAR_COLEGIO_Piura_Huancabamba_SanMigueldeElFaique", "LUGAR_COLEGIO_Piura_Morropón_BuenosAires",
"LUGAR_COLEGIO_Piura_Morropón_Chulucanas", "LUGAR_COLEGIO_Piura_Morropón_SanJuandeBigote",
"LUGAR_COLEGIO_Piura_Paita_Paita", "LUGAR_COLEGIO_Piura_Piura_ElTallan",
"LUGAR_COLEGIO_Piura_Piura_Piura", "LUGAR_COLEGIO_Piura_Sechura_CristoNosValga",
"LUGAR_COLEGIO_Piura_Sullana_Sullana", "LUGAR_COLEGIO_Piura_Talara_LosÓrganos",
"LUGAR_COLEGIO_Piura_Talara_Mancora", "LUGAR_COLEGIO_Piura_Talara_Pariñas",
"LUGAR_COLEGIO_Puno_ElCollao_Ilave", "LUGAR_COLEGIO_SanMartin_ElDorado_AguaBlanca",
"LUGAR_COLEGIO_SanMartin_ElDorado_SanMartin", "LUGAR_COLEGIO_SanMartin_Moyobamba_Moyobamba",
"LUGAR_COLEGIO_Tumbes_Tumbes_PampasHospital", "LUGAR_COLEGIO_Tumbes_Tumbes_Tumbes",
"LUGAR_COLEGIO_Ucayali_CoronelPortillo_Calleria", "MODALIDAD_INGRESO_ConveniosyOtros",
"MODALIDAD_INGRESO_CPU", "MODALIDAD_INGRESO_DeportistasCalificados",
"MODALIDAD_INGRESO_Ordinario", "MODALIDAD_INGRESO_PrimerosPuestos",
"MODALIDAD_INGRESO_Profesionales", "MODALIDAD_INGRESO_TrasladosExternosNacionales",
"MODALIDAD_INGRESO_TrasladosInternos")
#glimpse(Datos_Dico_cat)
ListVar.Categ.Dico.seleccionados <-
c("ESCUELA_CIENCIADELACOMPUTACION","ESCUELA_INGENIERIADESISTEMAS","ESCUELA_INGENIERIAELECTRONICA","ESCUELA_INGENIERIAENTELECOMUNICACIONES","ESCUELA_INGENIERIAINDUSTRIAL","ESCUELA_INGENIERIAMECANICA",
"SEXO_F",
"LUGAR_NACIMIENTO_ancash_Huaraz","LUGAR_NACIMIENTO_ancash_MariscalLuzuriaga","LUGAR_NACIMIENTO_Apurimac_Andahuaylas","LUGAR_NACIMIENTO_Arequipa_Arequipa","LUGAR_NACIMIENTO_Arequipa_Camana","LUGAR_NACIMIENTO_Arequipa_Caraveli","LUGAR_NACIMIENTO_Arequipa_Castilla","LUGAR_NACIMIENTO_Arequipa_Caylloma","LUGAR_NACIMIENTO_Arequipa_Condesuyos","LUGAR_NACIMIENTO_Arequipa_LaUnión","LUGAR_NACIMIENTO_Ayacucho_Lucanas",
"LUGAR_NACIMIENTO_Cajamarca_Cajamarca","LUGAR_NACIMIENTO_Cajamarca_Jaen","LUGAR_NACIMIENTO_Callao_Callao","LUGAR_NACIMIENTO_Huanuco_Ambo","LUGAR_NACIMIENTO_Huanuco_DosdeMayo","LUGAR_NACIMIENTO_Huanuco_Huanuco",
"LUGAR_NACIMIENTO_Ica_Ica","LUGAR_NACIMIENTO_Ica_Pisco","LUGAR_NACIMIENTO_Junin_Huancayo","LUGAR_NACIMIENTO_Junin_Junin","LUGAR_NACIMIENTO_Junin_Tarma","LUGAR_NACIMIENTO_Lambayeque_Chiclayo","LUGAR_NACIMIENTO_Lima_Lima",
"LUGAR_NACIMIENTO_Loreto_Maynas","LUGAR_NACIMIENTO_MadredeDios_Manu","LUGAR_NACIMIENTO_MadredeDios_Tahuamanu","LUGAR_NACIMIENTO_MadredeDios_Tambopata","LUGAR_NACIMIENTO_Piura_Ayabaca","LUGAR_NACIMIENTO_Piura_Huancabamba",
"LUGAR_NACIMIENTO_Piura_Morropón","LUGAR_NACIMIENTO_Piura_Paita","LUGAR_NACIMIENTO_Piura_Piura","LUGAR_NACIMIENTO_Piura_Sechura","LUGAR_NACIMIENTO_Piura_Talara",
"LUGAR_NACIMIENTO_Puno_ElCollao","LUGAR_NACIMIENTO_SanMartin_ElDorado","LUGAR_NACIMIENTO_SanMartin_Moyobamba","LUGAR_NACIMIENTO_Tumbes_Tumbes","LUGAR_NACIMIENTO_Ucayali_CoronelPortillo",
"LUGAR_RESIDENCIA_AA_AltoSelvaAlegre","LUGAR_RESIDENCIA_AA_Arequipa","LUGAR_RESIDENCIA_AA_Cayma","LUGAR_RESIDENCIA_AA_CerroColorado","LUGAR_RESIDENCIA_AA_Characato","LUGAR_RESIDENCIA_AA_Chiguata",
"LUGAR_RESIDENCIA_AA_JoseLuisBustamanteyRivero","LUGAR_RESIDENCIA_AA_LaJoya","LUGAR_RESIDENCIA_AA_MarianoMelgar","LUGAR_RESIDENCIA_AA_Miraflores","LUGAR_RESIDENCIA_AA_Pocsi","LUGAR_RESIDENCIA_AA_Polobaya","LUGAR_RESIDENCIA_AA_Quequeña",
"LUGAR_RESIDENCIA_AA_Sabandia","LUGAR_RESIDENCIA_AA_SanJuandeSiguas","LUGAR_RESIDENCIA_AA_SanJuandeTarucani","LUGAR_RESIDENCIA_AA_SantaIsabeldeSiguas","LUGAR_RESIDENCIA_AA_SantaRitadeSiguas","LUGAR_RESIDENCIA_AA_Socabaya",
"LUGAR_RESIDENCIA_AA_Tiabaya","LUGAR_RESIDENCIA_AA_Uchumayo","LUGAR_RESIDENCIA_AA_Vitor","LUGAR_RESIDENCIA_AA_Yanahuara","LUGAR_RESIDENCIA_AI_Mollendo","TIPO_COLEGIO_Nacional",
"TIPO_COLEGIO_Parroquial","TIPO_COLEGIO_Particular",
"LUGAR_COLEGIO_Amazonas_Bagua_Aramango","LUGAR_COLEGIO_Ancash_Huaraz_Cochabamba","LUGAR_COLEGIO_Ancash_Huaraz_Huaraz","LUGAR_COLEGIO_Apurimac_Abancay_Abancay",
"LUGAR_COLEGIO_Apurimac_Andahuaylas_SanMiguelChaccrampa","LUGAR_COLEGIO_Apurimac_Antabamba_Antabamba","LUGAR_COLEGIO_Apurimac_Aymaraes_Chalhuanca","LUGAR_COLEGIO_Apurimac_Chincheros_Ongoy","LUGAR_COLEGIO_Apurimac_Cotabambas_Haquira","LUGAR_COLEGIO_Arequipa_Arequipa_AltoSelvaAlegre","LUGAR_COLEGIO_Arequipa_Arequipa_Arequipa","LUGAR_COLEGIO_Arequipa_Arequipa_Cayma","LUGAR_COLEGIO_Arequipa_Arequipa_CerroColorado","LUGAR_COLEGIO_Arequipa_Arequipa_Characato",
"LUGAR_COLEGIO_Arequipa_Arequipa_Chiguata","LUGAR_COLEGIO_Arequipa_Arequipa_JacoboHunter","LUGAR_COLEGIO_Arequipa_Arequipa_JoseLuisBustamanteyRivero","LUGAR_COLEGIO_Arequipa_Arequipa_MarianoMelgar",
"LUGAR_COLEGIO_Arequipa_Arequipa_Polobaya","LUGAR_COLEGIO_Arequipa_Arequipa_Quequeña","LUGAR_COLEGIO_Arequipa_Arequipa_Sabandia","LUGAR_COLEGIO_Arequipa_Arequipa_Sachaca","LUGAR_COLEGIO_Arequipa_Arequipa_SanJuandeSiguas",
"LUGAR_COLEGIO_Arequipa_Arequipa_SanJuandeTarucani","LUGAR_COLEGIO_Arequipa_Arequipa_SantaIsabeldeSiguas","LUGAR_COLEGIO_Arequipa_Arequipa_SantaRitadeSiguas","LUGAR_COLEGIO_Arequipa_Arequipa_Tiabaya",
"LUGAR_COLEGIO_Arequipa_Arequipa_Uchumayo","LUGAR_COLEGIO_Arequipa_Arequipa_Vitor","LUGAR_COLEGIO_Arequipa_Arequipa_Yanahuara","LUGAR_COLEGIO_Arequipa_Arequipa_Yarabamba",
"LUGAR_COLEGIO_Arequipa_Arequipa_Yura","LUGAR_COLEGIO_Arequipa_Camana_Camana","LUGAR_COLEGIO_Arequipa_Camana_MarianoNicolasValcarcel","LUGAR_COLEGIO_Arequipa_Camana_MariscalCaceres","LUGAR_COLEGIO_Arequipa_Camana_NicolasdePierola",
"LUGAR_COLEGIO_Arequipa_Camana_Ocoña","LUGAR_COLEGIO_Arequipa_Camana_Quilca","LUGAR_COLEGIO_Arequipa_Caraveli_Acari","LUGAR_COLEGIO_Arequipa_Caraveli_Cahuacho","LUGAR_COLEGIO_Arequipa_Caraveli_Caraveli",
"LUGAR_COLEGIO_Arequipa_Caraveli_Chaparra","LUGAR_COLEGIO_Arequipa_Castilla_Andagua","LUGAR_COLEGIO_Arequipa_Castilla_Aplao","LUGAR_COLEGIO_Arequipa_Castilla_Ayo",
"LUGAR_COLEGIO_Arequipa_Castilla_Machaguay","LUGAR_COLEGIO_Arequipa_Castilla_Orcopampa","LUGAR_COLEGIO_Arequipa_Castilla_Pampacolca","LUGAR_COLEGIO_Arequipa_Castilla_Tipan","LUGAR_COLEGIO_Arequipa_Castilla_Uñón",
"LUGAR_COLEGIO_Arequipa_Castilla_Uraca","LUGAR_COLEGIO_Arequipa_Caylloma_Achoma","LUGAR_COLEGIO_Arequipa_Caylloma_Callalli","LUGAR_COLEGIO_Arequipa_Caylloma_Caylloma","LUGAR_COLEGIO_Arequipa_Caylloma_Huambo",
"LUGAR_COLEGIO_Arequipa_Caylloma_Huanca","LUGAR_COLEGIO_Arequipa_Caylloma_Ichupampa","LUGAR_COLEGIO_Arequipa_Caylloma_Lluta","LUGAR_COLEGIO_Arequipa_Caylloma_SanAntoniodeChuca",
"LUGAR_COLEGIO_Arequipa_Condesuyos_Andaray","LUGAR_COLEGIO_Arequipa_Condesuyos_Chuquibamba","LUGAR_COLEGIO_Arequipa_Condesuyos_Salamanca","LUGAR_COLEGIO_Arequipa_Condesuyos_Yanaquihua",
"LUGAR_COLEGIO_Arequipa_Islay_DeanValdivia","LUGAR_COLEGIO_Arequipa_Islay_Islay","LUGAR_COLEGIO_Arequipa_Islay_Mejia","LUGAR_COLEGIO_Arequipa_Islay_Mollendo",
"LUGAR_COLEGIO_Arequipa_LaUnión_Alca","LUGAR_COLEGIO_Arequipa_LaUnión_Charcana","LUGAR_COLEGIO_Arequipa_LaUnión_Huaynacotas","LUGAR_COLEGIO_Arequipa_LaUnión_Puyca","LUGAR_COLEGIO_Arequipa_LaUnión_Tauria",
"LUGAR_COLEGIO_Arequipa_LaUnión_Tomepampa","LUGAR_COLEGIO_Arequipa_LaUnión_Toro","LUGAR_COLEGIO_Ayacucho_Huamanga_Ayacucho","LUGAR_COLEGIO_Ayacucho_LaMar_SanMiguel",
"LUGAR_COLEGIO_Ayacucho_Lucanas_Chaviña","LUGAR_COLEGIO_Ayacucho_Lucanas_Puquio","LUGAR_COLEGIO_Ayacucho_PaucardelSaraSara_Pausa","LUGAR_COLEGIO_Cajamarca_Cajamarca_Cajamarca",
"LUGAR_COLEGIO_Cajamarca_Jaen_Jaen","LUGAR_COLEGIO_Callao_Callao_LaPunta","LUGAR_COLEGIO_Huancavelica_Huancavelica","LUGAR_COLEGIO_Huanuco_Ambo_Ambo","LUGAR_COLEGIO_Huanuco_DosdeMayo_LaUnión",
"LUGAR_COLEGIO_Huanuco_Huacaybamba_Huacaybamba","LUGAR_COLEGIO_Ica_Ica_Ica","LUGAR_COLEGIO_Junin_Chanchamayo_Chanchamayo","LUGAR_COLEGIO_Junin_Huancayo_Chilca",
"LUGAR_COLEGIO_Junin_Yauli_Marcapomacocha","LUGAR_COLEGIO_Lambayeque_Chiclayo_Chiclayo","LUGAR_COLEGIO_Lambayeque_Chiclayo_Eten","LUGAR_COLEGIO_Lambayeque_Chiclayo_EtenPuerto",
"LUGAR_COLEGIO_Lambayeque_Chiclayo_JoseLeonardoOrtiz","LUGAR_COLEGIO_Lambayeque_Chiclayo_LaVictoria","LUGAR_COLEGIO_Lambayeque_Chiclayo_Lagunas","LUGAR_COLEGIO_Lambayeque_Chiclayo_Oyotún",
"LUGAR_COLEGIO_Lambayeque_Chiclayo_Patapo","LUGAR_COLEGIO_Lambayeque_Chiclayo_Picsi","LUGAR_COLEGIO_Lambayeque_Chiclayo_Pimentel","LUGAR_COLEGIO_Lambayeque_Chiclayo_Pucala",
"LUGAR_COLEGIO_Lambayeque_Chiclayo_SantaRosa","LUGAR_COLEGIO_Loreto_Loreto_Parinari","LUGAR_COLEGIO_Loreto_Maynas_Iquitos","LUGAR_COLEGIO_MadredeDios_Manu_Huepetuhe",
"LUGAR_COLEGIO_MadredeDios_Tahuamanu_Iñapari","LUGAR_COLEGIO_MadredeDios_Tahuamanu_Tahuamanu","LUGAR_COLEGIO_MadredeDios_Tambopata_Tambopata",
"LUGAR_COLEGIO_Piura_Ayabaca_Paimas","LUGAR_COLEGIO_Piura_Huancabamba_Huancabamba","LUGAR_COLEGIO_Piura_Huancabamba_Huarmaca","LUGAR_COLEGIO_Piura_Huancabamba_Lalaquiz",
"LUGAR_COLEGIO_Piura_Huancabamba_SanMigueldeElFaique","LUGAR_COLEGIO_Piura_Morropón_BuenosAires","LUGAR_COLEGIO_Piura_Morropón_Chulucanas","LUGAR_COLEGIO_Piura_Morropón_SanJuandeBigote",
"LUGAR_COLEGIO_Piura_Paita_Paita","LUGAR_COLEGIO_Piura_Piura_ElTallan","LUGAR_COLEGIO_Piura_Piura_Piura","LUGAR_COLEGIO_Piura_Sechura_CristoNosValga",
"LUGAR_COLEGIO_Piura_Sullana_Sullana","LUGAR_COLEGIO_Piura_Talara_LosÓrganos","LUGAR_COLEGIO_Piura_Talara_Mancora","LUGAR_COLEGIO_Piura_Talara_Pariñas",
"LUGAR_COLEGIO_Puno_ElCollao_Ilave","LUGAR_COLEGIO_SanMartin_ElDorado_AguaBlanca","LUGAR_COLEGIO_SanMartin_Moyobamba_Moyobamba","LUGAR_COLEGIO_Tumbes_Tumbes_PampasHospital","LUGAR_COLEGIO_Tumbes_Tumbes_Tumbes",
"LUGAR_COLEGIO_Ucayali_CoronelPortillo_Calleria",
"MODALIDAD_INGRESO_ConveniosyOtros","MODALIDAD_INGRESO_CPU","MODALIDAD_INGRESO_DeportistasCalificados","MODALIDAD_INGRESO_Ordinario","MODALIDAD_INGRESO_PrimerosPuestos",
"MODALIDAD_INGRESO_Profesionales","MODALIDAD_INGRESO_TrasladosExternosNacionales",
"MODALIDAD_INGRESO_TrasladosInternos")
##############################################################
################## MODELAMIENTO ESTADISTICO ##################
##############################################################
data<- cbind(
as.data.frame(DataSetUpublicaFRMTO$DESERTOR),
TT_SinOut_Anio_Ingreso,
TT_SinOut_periodo_matricula,
TT_SinOut_Edad,
TT_SinOut_CREDS__APROBADOS,
TT_SinOut_ASIGS__APROBADAS,
TT_SinOut_ASIGS__DESAPROBADAS,
TT_SinOut_ANO_EGRESO_COLEGIO,
TT_SinOut_PRDO_HASTA_MATRICULA,
TT_SinOut_ProbabDesercion,
Datos_Dico_cat[,c(ListVar.Categ.Dico.seleccionados)])
colnames(data)[1] <- "DESERTOR"
#data <- cbind(DataSetUpublicaFRMTO[,ListVar.Continuas],Datos_Dico_cat)
# Selección de muestra de entrenamiento (60%) y de Validación (40%)
library(caret)
set.seed(696)
#index <- createDataPartition(data$DESERTOR, p=0.7, list=FALSE)
Tabla_FrecAcumuladas
index <- c(1:11511)## Se considera el registro 24541 por represetnar el 70% de los datos
Training <- data[ index, ]
Testing <- data[-index, ]
# Verificando que se mantenga la proporción original
round(prop.table(table(data$DESERTOR))*100,2)
NO SI
93.45 6.55
round(prop.table(table(Training$DESERTOR))*100,2)
NO SI
93.56 6.44
round(prop.table(table(Testing$DESERTOR))*100,2)
NO SI
93.21 6.79
#Balanceo de la data
#UnderSampling
set.seed(696)
under_train <- downSample(x = Training[,!(names(data) %in% c("DESERTOR"))],
y = Training$DESERTOR,
yname="DESERTOR")
#Colocando la variable dependiente(objetivo) al inicio
tmp = under_train$DESERTOR
under_train$DESERTOR <- NULL
under_train <- cbind(tmp,under_train)
colnames(under_train)[1] <- "DESERTOR"
#--------------------------
table(Training$DESERTOR)
NO SI
10770 741
table(under_train$DESERTOR)
NO SI
741 741
# OverSampling
set.seed(696)
over_train <- upSample(x = Training[,!(names(data) %in% c("DESERTOR"))],
y = Training$DESERTOR,
yname="DESERTOR")
#Colocando la variable dependiente al inicio
tmp = over_train$DESERTOR
over_train$DESERTOR <- NULL
over_train <- cbind(tmp,over_train)
colnames(over_train)[1] <- "DESERTOR"
#--------------------------
table(Training$DESERTOR)
NO SI
10770 741
table(over_train$DESERTOR)
NO SI
10770 10770
# SMOOTE
library(DMwR)
#Eliminamos la columna de identificación
#Training <- Training[,!(names(Training) %in% c("CodAlumno"))]
set.seed(696)
smote_train <- DMwR::SMOTE(DESERTOR ~ .,
Training,
perc.over = 540,
k = 5,
perc.under = 120) %>% as.data.frame()
table(Training$DESERTOR)
NO SI
10770 741
table(smote_train$DESERTOR)
NO SI
4446 4446
# No_deserta Si_Deserta
# 3676 198
# 19761 1656
# perc.over = 500 significa que va a adicionar 5 veces (500%) a la
# clase minoritaria 1656 + 5*1656 = 9936
# perc.under = 120 significa que por cada caso adicionado (5*1656=8280)
# escogerá el 120% (5*1656) = 9936 de la clase mayoritaria
# No_Fuga Si_Fuga
# 678 678
###############################################################################################################################
############################## LIBRERIA BORUTA (Selecciones de Variables automatizada) ##########################################
###############################################################################################################################
boruta_output <- Boruta::Boruta(DESERTOR ~ .,
data = data,
doTrace=2)
Computing permutation importance.. Progress: 75%. Estimated remaining time: 10 seconds.
Computing permutation importance.. Progress: 77%. Estimated remaining time: 9 seconds.
Computing permutation importance.. Progress: 75%. Estimated remaining time: 10 seconds.
Computing permutation importance.. Progress: 75%. Estimated remaining time: 10 seconds.
Computing permutation importance.. Progress: 74%. Estimated remaining time: 10 seconds.
Computing permutation importance.. Progress: 75%. Estimated remaining time: 10 seconds.
Computing permutation importance.. Progress: 76%. Estimated remaining time: 9 seconds.
Computing permutation importance.. Progress: 74%. Estimated remaining time: 11 seconds.
Computing permutation importance.. Progress: 76%. Estimated remaining time: 9 seconds.
Computing permutation importance.. Progress: 76%. Estimated remaining time: 9 seconds.
Computing permutation importance.. Progress: 75%. Estimated remaining time: 10 seconds.
Computing permutation importance.. Progress: 73%. Estimated remaining time: 11 seconds.
Computing permutation importance.. Progress: 75%. Estimated remaining time: 10 seconds.
Computing permutation importance.. Progress: 76%. Estimated remaining time: 10 seconds.
Computing permutation importance.. Progress: 77%. Estimated remaining time: 9 seconds.
boruta_signif <- names(boruta_output$finalDecision[boruta_output$finalDecision %in% c("Confirmed", "Tentative")]) # collect Confirmed and Tentative variables
print(boruta_signif) # significant variables
[1] "TT_SinOut_Anio_Ingreso"
[2] "TT_SinOut_periodo_matricula"
[3] "TT_SinOut_Edad"
[4] "TT_SinOut_CREDS__APROBADOS"
[5] "TT_SinOut_ASIGS__APROBADAS"
[6] "TT_SinOut_ANO_EGRESO_COLEGIO"
[7] "TT_SinOut_PRDO_HASTA_MATRICULA"
[8] "TT_SinOut_ProbabDesercion"
[9] "ESCUELA_CIENCIADELACOMPUTACION"
[10] "ESCUELA_INGENIERIAENTELECOMUNICACIONES"
[11] "ESCUELA_INGENIERIAINDUSTRIAL"
[12] "ESCUELA_INGENIERIAMECANICA"
[13] "SEXO_F"
[14] "LUGAR_NACIMIENTO_Huanuco_DosdeMayo"
[15] "LUGAR_NACIMIENTO_Piura_Paita"
[16] "LUGAR_RESIDENCIA_AA_CerroColorado"
[17] "TIPO_COLEGIO_Nacional"
[18] "TIPO_COLEGIO_Particular"
[19] "LUGAR_COLEGIO_Apurimac_Cotabambas_Haquira"
[20] "LUGAR_COLEGIO_Arequipa_Arequipa_Arequipa"
[21] "LUGAR_COLEGIO_Arequipa_Caylloma_SanAntoniodeChuca"
[22] "LUGAR_COLEGIO_Arequipa_Islay_Mollendo"
[23] "LUGAR_COLEGIO_Tumbes_Tumbes_PampasHospital"
[24] "MODALIDAD_INGRESO_CPU"
[25] "MODALIDAD_INGRESO_DeportistasCalificados"
[26] "MODALIDAD_INGRESO_Ordinario"
[27] "MODALIDAD_INGRESO_PrimerosPuestos"
[28] "MODALIDAD_INGRESO_TrasladosExternosNacionales"
plot(boruta_output,
cex.axis=.7,
las=2,
xlab="",
main="Importancia de variables") # plot variable importance
#DataModeloFinal <- boruta_signif #Data con variables finales a modelar
###########################################################
# RANDOM FOREST CON CARET Y VALIDACIÓN CRUZADA REPETIDA #
###########################################################
# Relación de parámetros a ajustar de un modelo
modelLookup(model='rf')
# Aplicando el modelo con Validación Cruzada Repetida
ctrl <- trainControl(method="cv", number=2, repeats = 1)#repeatedcv
set.seed(696)
modelo_rf_smote <- train(DESERTOR ~ .,
data = smote_train,
method = "rf",
trControl = ctrl,
#tuneLength = 20,
metric="Accuracy")
modelo_rf_smote
Random Forest
8892 samples
221 predictor
2 classes: 'NO', 'SI'
No pre-processing
Resampling: Cross-Validated (2 fold)
Summary of sample sizes: 4446, 4446
Resampling results across tuning parameters:
mtry Accuracy Kappa
2 0.8775304 0.7550607
111 0.9300495 0.8600990
221 0.9228520 0.8457040
Accuracy was used to select the optimal model using the largest value.
The final value used for the model was mtry = 111.
#plot(modelo_rf_smote)
varImp(modelo_rf_smote)
rf variable importance
only 20 most important variables shown (out of 221)
Overall
TT_SinOut_ProbabDesercion 100.000
TT_SinOut_Anio_Ingreso 52.274
TT_SinOut_PRDO_HASTA_MATRICULA 43.026
TT_SinOut_periodo_matricula 36.117
LUGAR_COLEGIO_Arequipa_Arequipa_MarianoMelgar 28.964
TT_SinOut_CREDS__APROBADOS 27.553
TT_SinOut_ASIGS__APROBADAS 21.562
ESCUELA_INGENIERIADESISTEMAS 18.479
LUGAR_RESIDENCIA_AA_Tiabaya 17.269
LUGAR_RESIDENCIA_AA_MarianoMelgar 12.828
LUGAR_COLEGIO_Arequipa_Condesuyos_Salamanca 12.504
TT_SinOut_ANO_EGRESO_COLEGIO 11.761
TT_SinOut_Edad 8.753
LUGAR_COLEGIO_Arequipa_Arequipa_JoseLuisBustamanteyRivero 7.767
ESCUELA_INGENIERIAINDUSTRIAL 5.863
TIPO_COLEGIO_Parroquial 4.460
TIPO_COLEGIO_Particular 4.095
ESCUELA_INGENIERIAMECANICA 3.375
MODALIDAD_INGRESO_Ordinario 2.806
ESCUELA_INGENIERIAELECTRONICA 2.622
### Entrenamos 2 modelos adicionales con la data de UNDER y OVER
set.seed(696)
modelo_rf_under <- train(DESERTOR ~ ., data = under_train, method = "rf", trControl = ctrl, metric="Accuracy")
modelo_rf_over <- train(DESERTOR ~ ., data = over_train, method = "rf", trControl = ctrl, metric="Accuracy")
########################################
######## INDICADORES DEL MODELO ########
########################################
# Prediciendo la probabilidad en la muestra de entrenamiento balaceada
ProbRf_smote <- predict(modelo_rf_smote,smote_train,type="prob") %>% as.data.frame()
colnames(ProbRf_smote) <- c("ProbRf_NO","ProbRf_SI")
head(ProbRf_smote,20)
# Prediciendo la clase (con punto de corte = 0.5)
ClasePredRf_Smote <- as.factor(ifelse(ProbRf_smote$ProbRf_SI >= 0.5, "SI", "NO"))
levels(ClasePredRf_Smote) <- c("NO","SI")
#Data balanceada con la probabilidad y clase predicha
DataRf_smote_train <- cbind(smote_train,ProbRf_smote,ClasePredRf_Smote)
# Prediciendo la probabilidad en la muestra de entrenamiento desbalaceada
ProbRf_Training <- predict(modelo_rf_smote,Training,type="prob") %>% as.data.frame()
colnames(ProbRf_Training) <- c("ProbRf_NO","ProbRf_SI")
head(ProbRf_Training)
# Prediciendo la clase (con punto de corte = 0.5)
ClasePredRf_Training <- as.factor(ifelse(ProbRf_Training$ProbRf_SI >= 0.5, 1, 0))
levels(ClasePredRf_Training) <- c("NO","SI")
#Data desbalanceada con la probabilidad y clase predicha
DataRf_Training <- cbind(Training,ProbRf_Training,ClasePredRf_Training)
##########################
# Tabla de clasificación #
##########################
# Calcular el % de acierto (accuracy) en la muestra balanceada
Accuracy_Rf_Smote <- mean(ClasePredRf_Smote==smote_train$DESERTOR)
Accuracy_Rf_Smote
[1] 1
# Calcular el % de acierto (accuracy) en la muestra desbalanceada
Accuracy_Rf_Train <- mean(ClasePredRf_Training==Training$DESERTOR)
Accuracy_Rf_Train
[1] 0.9767179
# Calcular el error de mala clasificación en la muestra balanceada
Error_Rf_Smote <- mean(ClasePredRf_Smote!=smote_train$DESERTOR)
Error_Rf_Smote
[1] 0
# Calcular el error de mala clasificación en la muestra desbalanceada
Error_Rf_Train <- mean(ClasePredRf_Training!=Training$DESERTOR)
Error_Rf_Train
[1] 0.02328208
#Cruce de clase real y predicha en la muestra balanceada
library(gmodels)
CrossTable(smote_train$DESERTOR,ClasePredRf_Smote,
prop.t=FALSE, prop.c=FALSE,prop.chisq=FALSE)
Cell Contents
|-------------------------|
| N |
| N / Row Total |
|-------------------------|
Total Observations in Table: 8892
| ClasePredRf_Smote
smote_train$DESERTOR | NO | SI | Row Total |
---------------------|-----------|-----------|-----------|
NO | 4446 | 0 | 4446 |
| 1.000 | 0.000 | 0.500 |
---------------------|-----------|-----------|-----------|
SI | 0 | 4446 | 4446 |
| 0.000 | 1.000 | 0.500 |
---------------------|-----------|-----------|-----------|
Column Total | 4446 | 4446 | 8892 |
---------------------|-----------|-----------|-----------|
#Cruce de clase real y predicha en la muestra desbalanceada
library(gmodels)
CrossTable(Training$DESERTOR,ClasePredRf_Training,
prop.t=FALSE, prop.c=FALSE,prop.chisq=FALSE)
Cell Contents
|-------------------------|
| N |
| N / Row Total |
|-------------------------|
Total Observations in Table: 11511
| ClasePredRf_Training
Training$DESERTOR | NO | SI | Row Total |
------------------|-----------|-----------|-----------|
NO | 10502 | 268 | 10770 |
| 0.975 | 0.025 | 0.936 |
------------------|-----------|-----------|-----------|
SI | 0 | 741 | 741 |
| 0.000 | 1.000 | 0.064 |
------------------|-----------|-----------|-----------|
Column Total | 10502 | 1009 | 11511 |
------------------|-----------|-----------|-----------|
#Matriz de confusión
library(caret)
caret::confusionMatrix(ClasePredRf_Smote,smote_train$DESERTOR,positive="SI") #Muestra balanceada
Confusion Matrix and Statistics
Reference
Prediction NO SI
NO 4446 0
SI 0 4446
Accuracy : 1
95% CI : (0.9996, 1)
No Information Rate : 0.5
P-Value [Acc > NIR] : < 2.2e-16
Kappa : 1
Mcnemar's Test P-Value : NA
Sensitivity : 1.0
Specificity : 1.0
Pos Pred Value : 1.0
Neg Pred Value : 1.0
Prevalence : 0.5
Detection Rate : 0.5
Detection Prevalence : 0.5
Balanced Accuracy : 1.0
'Positive' Class : SI
caret::confusionMatrix(ClasePredRf_Training,Training$DESERTOR,positive="SI") #Muestra desbalanceada
Confusion Matrix and Statistics
Reference
Prediction NO SI
NO 10502 0
SI 268 741
Accuracy : 0.9767
95% CI : (0.9738, 0.9794)
No Information Rate : 0.9356
P-Value [Acc > NIR] : < 2.2e-16
Kappa : 0.8346
Mcnemar's Test P-Value : < 2.2e-16
Sensitivity : 1.00000
Specificity : 0.97512
Pos Pred Value : 0.73439
Neg Pred Value : 1.00000
Prevalence : 0.06437
Detection Rate : 0.06437
Detection Prevalence : 0.08766
Balanced Accuracy : 0.98756
'Positive' Class : SI
#CURVAS DE ROC
# Curva ROC usando el paquete caTools
library(caTools)
AUC_Rf_Smote <- colAUC(ProbRf_smote$ProbRf_SI,smote_train$DESERTOR,plotROC = TRUE) #Muestra balanceada
#abline(0, 1,col="red")
AUC_Rf_Train <- colAUC(ProbRf_Training$ProbRf_SI,Training$DESERTOR,plotROC = TRUE) #Muestra desbalanceada
#abline(0, 1,col="red")
AUC_Rf_Smote #Devuelve el área bajo la curva en la muestra balanceada
[,1]
NO vs. SI 1
AUC_Rf_Train #Devuelve el área bajo la curva en la muestra desbalanceada
[,1]
NO vs. SI 0.995095
#CURVAS DE ROC
# Usando el paquete pROC
library(pROC)
# Área bajo la curva
roc_modelo_rf_smote <- roc(smote_train$DESERTOR,ProbRf_smote$ProbRf_SI)
roc_modelo_rf_smote
Call:
roc.default(response = smote_train$DESERTOR, predictor = ProbRf_smote$ProbRf_SI)
Data: ProbRf_smote$ProbRf_SI in 4446 controls (smote_train$DESERTOR NO) < 4446 cases (smote_train$DESERTOR SI).
Area under the curve: 1
roc_modelo_rf_train <- roc(Training$DESERTOR,ProbRf_Training$ProbRf_SI)
roc_modelo_rf_train
Call:
roc.default(response = Training$DESERTOR, predictor = ProbRf_Training$ProbRf_SI)
Data: ProbRf_Training$ProbRf_SI in 10770 controls (Training$DESERTOR NO) < 741 cases (Training$DESERTOR SI).
Area under the curve: 0.9951
#Puntos de corte muestra balanceada
PtosCorte_Smote <- data.frame(prob1=roc_modelo_rf_smote$thresholds,
sen1=roc_modelo_rf_smote$sensitivities,
esp1=roc_modelo_rf_smote$specificities)
#Puntos de corte muestra desbalanceada
PtosCorte_Train <- data.frame(prob2=roc_modelo_rf_train$thresholds,
sen2=roc_modelo_rf_train$sensitivities,
esp2=roc_modelo_rf_train$specificities)
# Punto de corte óptimo (mayor sensibilidad y especificidad) usando pROC
coords(roc_modelo_rf_smote, "best",ret=c("threshold","specificity", "sensitivity","accuracy"))
threshold specificity sensitivity accuracy
0.483 1.000 1.000 1.000
coords(roc_modelo_rf_train, "best",ret=c("threshold","specificity", "sensitivity","accuracy"))
threshold specificity sensitivity accuracy
0.6010000 0.9862581 0.9986505 0.9870559
coords(roc_modelo_rf_smote, "best")
threshold specificity sensitivity
0.483 1.000 1.000
coords(roc_modelo_rf_train, "best")
threshold specificity sensitivity
0.6010000 0.9862581 0.9986505
plot(roc_modelo_rf_smote,print.thres=T)
plot(roc_modelo_rf_train,print.thres=T)
######################################
######## EVALUCION DE MODELOS ########
######################################
# Prediciendo la probabilidad en la muestra de entrenamiento balaceada
ProbRf_Test <- predict(modelo_rf_smote,Testing,type="prob") %>% as.data.frame()
colnames(ProbRf_Test) <- c("ProbRf_NO","ProbRf_SI")
head(ProbRf_Test,20)
# Prediciendo la clase (con punto de corte = 0.5)
ClasePredRf_Test <- as.factor(ifelse(ProbRf_Test$ProbRf_SI >= 0.595 , 1, 0))
levels(ClasePredRf_Test) <- c("NO","SI")
head(cbind(Testing,ProbRf_Test,ClasePredRf_Test),8)
# Calcular el % de acierto (accuracy) en la muestra balanceada
Accuracy_Rf_Test <- mean(ClasePredRf_Test==Testing$DESERTOR)
Accuracy_Rf_Test
[1] 0.4977302
#Matriz de confusión ... vamos a sacar las matrices para muestras de smote, under y over
library(caret)
cm_rf_smote <- caret::confusionMatrix(ClasePredRf_Test,Testing$DESERTOR,positive="SI") #Muestra balanceada
cm_rf_smote
Confusion Matrix and Statistics
Reference
Prediction NO SI
NO 2549 182
SI 2584 192
Accuracy : 0.4977
95% CI : (0.4844, 0.511)
No Information Rate : 0.9321
P-Value [Acc > NIR] : 1
Kappa : 0.0025
Mcnemar's Test P-Value : <2e-16
Sensitivity : 0.51337
Specificity : 0.49659
Pos Pred Value : 0.06916
Neg Pred Value : 0.93336
Prevalence : 0.06791
Detection Rate : 0.03486
Detection Prevalence : 0.50409
Balanced Accuracy : 0.50498
'Positive' Class : SI
cm_rf_under <- caret::confusionMatrix(predict(modelo_rf_under,Testing)
,Testing$DESERTOR,positive="SI") #Muestra under
cm_rf_under
Confusion Matrix and Statistics
Reference
Prediction NO SI
NO 3995 105
SI 1138 269
Accuracy : 0.7743
95% CI : (0.763, 0.7853)
No Information Rate : 0.9321
P-Value [Acc > NIR] : 1
Kappa : 0.2182
Mcnemar's Test P-Value : <2e-16
Sensitivity : 0.71925
Specificity : 0.77830
Pos Pred Value : 0.19119
Neg Pred Value : 0.97439
Prevalence : 0.06791
Detection Rate : 0.04885
Detection Prevalence : 0.25549
Balanced Accuracy : 0.74877
'Positive' Class : SI
cm_rf_over <- caret::confusionMatrix(predict(modelo_rf_under,Testing)
,Testing$DESERTOR,positive="SI") #Muestra over
cm_rf_over
Confusion Matrix and Statistics
Reference
Prediction NO SI
NO 3995 105
SI 1138 269
Accuracy : 0.7743
95% CI : (0.763, 0.7853)
No Information Rate : 0.9321
P-Value [Acc > NIR] : 1
Kappa : 0.2182
Mcnemar's Test P-Value : <2e-16
Sensitivity : 0.71925
Specificity : 0.77830
Pos Pred Value : 0.19119
Neg Pred Value : 0.97439
Prevalence : 0.06791
Detection Rate : 0.04885
Detection Prevalence : 0.25549
Balanced Accuracy : 0.74877
'Positive' Class : SI
# Calculando el estadístico KS
library(InformationValue)
ks_stat(Testing$DESERTOR,ProbRf_Test$ProbRf_SI,returnKSTable = T)
ks_stat(Testing$DESERTOR,ProbRf_Test$ProbRf_SI)
[1] 0.1866
# Graficando el estadístico KS
ks_plot(Testing$DESERTOR,ProbRf_Test$ProbRf_SI)
#Curvas de ROC
# Curva ROC usando el paquete caTools
library(caTools)
AUC_Rf_Test <- colAUC(ProbRf_Test$ProbRf_SI,Testing$DESERTOR,plotROC = TRUE) #Muestra balanceada
#abline(0, 1,col="red")
AUC_Rf_Test
[,1]
NO vs. SI 0.5930206
#Coeficiente de Gini
gini_test <- 2*AUC_Rf_Test -1 ; gini_test
[,1]
NO vs. SI 0.1860411
#####################################################################################################
###########################################################
# RAMDOM FOREST OWN #
###########################################################
library(caret)
library(randomForest)
set.seed(696)
modelo_RF_own_smote <- randomForest(DESERTOR ~ .,
data = smote_train,
ntree = 500,
keep.forest = TRUE)
set.seed(696)
modelo_RF_own_under <- randomForest(DESERTOR ~ ., data = under_train, ntree = 1000, keep.forest = TRUE)
modelo_RF_own_over <- randomForest(DESERTOR ~ ., data = over_train, ntree = 500, keep.forest = TRUE)
summary(modelo_RF_own_smote)
Length Class Mode
call 5 -none- call
type 1 -none- character
predicted 8892 factor numeric
err.rate 1500 -none- numeric
confusion 6 -none- numeric
votes 17784 matrix numeric
oob.times 8892 -none- numeric
classes 2 -none- character
importance 221 -none- numeric
importanceSD 0 -none- NULL
localImportance 0 -none- NULL
proximity 0 -none- NULL
ntree 1 -none- numeric
mtry 1 -none- numeric
forest 14 -none- list
y 8892 factor numeric
test 0 -none- NULL
inbag 0 -none- NULL
terms 3 terms call
############
#pred <- predict(modelo_RF_own_smote, Testing, type = "class")
#tab <- table(Testing[,"DESERTOR"], pred, dnn= c("Actual", "Predicho"))
#caret::confusionMatrix(tab,positive="SI")
# library(ROCR)
# probs <- predict(modelo_RF_own_smote, Testing, type = "prob")
# head(probs)
# pred <- prediction(probs[,2], Testing[,"DESERTOR"])
# perf <- performance(pred, "tpr", "fpr")
# perf
########################################
######## INDICADORES DEL MODELO ########
########################################
# Prediciendo la probabilidad en la muestra de entrenamiento balaceada
ProbRFO_smote <- predict(modelo_RF_own_smote,smote_train,type="prob") %>% as.data.frame()
colnames(ProbRFO_smote) <- c("ProbNb_NO","ProbNb_SI")
head(ProbRFO_smote,20)
# Prediciendo la clase (con punto de corte = 0.5)
ClasePredRFo_Smote <- as.factor(ifelse(ProbRFO_smote$ProbNb_SI >= 0.5, "SI", "NO"))
levels(ClasePredRFo_Smote) <- c("NO","SI")
#Data balanceada con la probabilidad y clase predicha
DataRFo_smote_train <- cbind(smote_train,ProbRFO_smote,ClasePredRFo_Smote)
# Prediciendo la probabilidad en la muestra de entrenamiento desbalaceada
ProbRFo_Training <- predict(modelo_RF_own_smote,Training,type="prob") %>% as.data.frame()
colnames(ProbRFo_Training) <- c("ProbNb_NO","ProbNb_SI")
head(ProbRFo_Training)
# Prediciendo la clase (con punto de corte = 0.5)
ClasePredRFo_Training <- as.factor(ifelse(ProbRFo_Training$ProbNb_SI >= 0.5, 1, 0))
levels(ClasePredRFo_Training) <- c("NO","SI")
#Data desbalanceada con la probabilidad y clase predicha
DataNb_Training <- cbind(Training,ProbRFo_Training,ClasePredRFo_Training)
##########################
# Tabla de clasificación #
##########################
# Calcular el % de acierto (accuracy) en la muestra balanceada
Accuracy_RFo_Smote <- mean(ClasePredRFo_Smote==smote_train$DESERTOR)
Accuracy_RFo_Smote
[1] 0.9594017
# Calcular el % de acierto (accuracy) en la muestra desbalanceada
Accuracy_RFo_Train <- mean(ClasePredRFo_Training==Training$DESERTOR)
Accuracy_RFo_Train
[1] 0.9631657
# Calcular el error de mala clasificación en la muestra balanceada
Error_RFo_Smote <- mean(ClasePredRFo_Smote!=smote_train$DESERTOR)
Error_RFo_Smote
[1] 0.04059829
# Calcular el error de mala clasificación en la muestra desbalanceada
Error_RFo_Train <- mean(ClasePredRFo_Training!=Training$DESERTOR)
Error_RFo_Train
[1] 0.03683433
#Cruce de clase real y predicha en la muestra balanceada
library(gmodels)
CrossTable(smote_train$DESERTOR,ClasePredRFo_Smote,
prop.t=FALSE, prop.c=FALSE,prop.chisq=FALSE)
Cell Contents
|-------------------------|
| N |
| N / Row Total |
|-------------------------|
Total Observations in Table: 8892
| ClasePredRFo_Smote
smote_train$DESERTOR | NO | SI | Row Total |
---------------------|-----------|-----------|-----------|
NO | 4444 | 2 | 4446 |
| 1.000 | 0.000 | 0.500 |
---------------------|-----------|-----------|-----------|
SI | 359 | 4087 | 4446 |
| 0.081 | 0.919 | 0.500 |
---------------------|-----------|-----------|-----------|
Column Total | 4803 | 4089 | 8892 |
---------------------|-----------|-----------|-----------|
#Cruce de clase real y predicha en la muestra desbalanceada
library(gmodels)
CrossTable(Training$DESERTOR,ClasePredRFo_Training,
prop.t=FALSE, prop.c=FALSE,prop.chisq=FALSE)
Cell Contents
|-------------------------|
| N |
| N / Row Total |
|-------------------------|
Total Observations in Table: 11511
| ClasePredRFo_Training
Training$DESERTOR | NO | SI | Row Total |
------------------|-----------|-----------|-----------|
NO | 10705 | 65 | 10770 |
| 0.994 | 0.006 | 0.936 |
------------------|-----------|-----------|-----------|
SI | 359 | 382 | 741 |
| 0.484 | 0.516 | 0.064 |
------------------|-----------|-----------|-----------|
Column Total | 11064 | 447 | 11511 |
------------------|-----------|-----------|-----------|
#Matriz de confusión
library(caret)
caret::confusionMatrix(ClasePredRFo_Smote,smote_train$DESERTOR,positive="SI") #Muestra balanceada
Confusion Matrix and Statistics
Reference
Prediction NO SI
NO 4444 359
SI 2 4087
Accuracy : 0.9594
95% CI : (0.9551, 0.9634)
No Information Rate : 0.5
P-Value [Acc > NIR] : < 2.2e-16
Kappa : 0.9188
Mcnemar's Test P-Value : < 2.2e-16
Sensitivity : 0.9193
Specificity : 0.9996
Pos Pred Value : 0.9995
Neg Pred Value : 0.9253
Prevalence : 0.5000
Detection Rate : 0.4596
Detection Prevalence : 0.4599
Balanced Accuracy : 0.9594
'Positive' Class : SI
caret::confusionMatrix(ClasePredRFo_Training,Training$DESERTOR,positive="SI") #Muestra desbalanceada
Confusion Matrix and Statistics
Reference
Prediction NO SI
NO 10705 359
SI 65 382
Accuracy : 0.9632
95% CI : (0.9596, 0.9665)
No Information Rate : 0.9356
P-Value [Acc > NIR] : < 2.2e-16
Kappa : 0.6249
Mcnemar's Test P-Value : < 2.2e-16
Sensitivity : 0.51552
Specificity : 0.99396
Pos Pred Value : 0.85459
Neg Pred Value : 0.96755
Prevalence : 0.06437
Detection Rate : 0.03319
Detection Prevalence : 0.03883
Balanced Accuracy : 0.75474
'Positive' Class : SI
#CURVAS DE ROC
# Curva ROC usando el paquete caTools
library(caTools)
AUC_Nb_Smote <- colAUC(ProbRFO_smote$ProbNb_SI,smote_train$DESERTOR,plotROC = TRUE) #Muestra balanceada
#abline(0, 1,col="red")
AUC_Nb_Train <- colAUC(ProbRFo_Training$ProbNb_SI,Training$DESERTOR,plotROC = TRUE) #Muestra desbalanceada
#abline(0, 1,col="red")
AUC_Nb_Smote #Devuelve el área bajo la curva en la muestra balanceada
[,1]
NO vs. SI 0.9993734
AUC_Nb_Train #Devuelve el área bajo la curva en la muestra desbalanceada
[,1]
NO vs. SI 0.9857357
#CURVAS DE ROC
# Usando el paquete pROC
library(pROC)
# Área bajo la curva
roc_modelo_RF_own_smote <- roc(smote_train$DESERTOR,ProbRFO_smote$ProbNb_SI)
roc_modelo_RF_own_smote
Call:
roc.default(response = smote_train$DESERTOR, predictor = ProbRFO_smote$ProbNb_SI)
Data: ProbRFO_smote$ProbNb_SI in 4446 controls (smote_train$DESERTOR NO) < 4446 cases (smote_train$DESERTOR SI).
Area under the curve: 0.9994
roc_modelo_RF_own_train <- roc(Training$DESERTOR,ProbRFo_Training$ProbNb_SI)
roc_modelo_RF_own_train
Call:
roc.default(response = Training$DESERTOR, predictor = ProbRFo_Training$ProbNb_SI)
Data: ProbRFo_Training$ProbNb_SI in 10770 controls (Training$DESERTOR NO) < 741 cases (Training$DESERTOR SI).
Area under the curve: 0.9857
#Puntos de corte muestra balanceada
PtosCorte_Smote <- data.frame(prob1=roc_modelo_RF_own_smote$thresholds,
sen1=roc_modelo_RF_own_smote$sensitivities,
esp1=roc_modelo_RF_own_smote$specificities)
#Puntos de corte muestra desbalanceada
PtosCorte_Train <- data.frame(prob2=roc_modelo_RF_own_train$thresholds,
sen2=roc_modelo_RF_own_train$sensitivities,
esp2=roc_modelo_RF_own_train$specificities)
# Punto de corte óptimo (mayor sensibilidad y especificidad) usando pROC
coords(roc_modelo_RF_own_smote, "best",ret=c("threshold","specificity", "sensitivity","accuracy"))
threshold specificity sensitivity accuracy
0.2810000 0.9849303 0.9887539 0.9868421
coords(roc_modelo_RF_own_train, "best",ret=c("threshold","specificity", "sensitivity","accuracy"))
threshold specificity sensitivity accuracy
0.2550000 0.9409471 0.9581646 0.9420554
coords(roc_modelo_RF_own_smote, "best")
threshold specificity sensitivity
0.2810000 0.9849303 0.9887539
coords(roc_modelo_RF_own_train, "best")
threshold specificity sensitivity
0.2550000 0.9409471 0.9581646
plot(roc_modelo_RF_own_smote,print.thres=T)
plot(roc_modelo_RF_own_train,print.thres=T)
######################################
######## EVALUCION DE MODELOS ########
######################################
# Prediciendo la probabilidad en la muestra de entrenamiento balaceada
ProbRFo_Test <- predict(modelo_RF_own_smote,Testing,type="prob") %>% as.data.frame()
colnames(ProbRFo_Test) <- c("ProbNb_NO","ProbNb_SI")
head(ProbRFo_Test,20)
# Prediciendo la clase (con punto de corte = 0.5)
ClasePredRFo_Test <- as.factor(ifelse(ProbRFo_Test$ProbNb_SI >= 0.437, 1, 0))
levels(ClasePredRFo_Test) <- c("NO","SI")
head(cbind(Testing,ProbRFo_Test,ClasePredRFo_Test),8)
# Calcular el % de acierto (accuracy) en la muestra balanceada
Accuracy_Nb_Test <- mean(ClasePredRFo_Test==Testing$DESERTOR)
Accuracy_Nb_Test
[1] 0.8974033
#Matriz de confusión
library(caret)
cm_RF_own_smote<- caret::confusionMatrix(ClasePredRFo_Test,Testing$DESERTOR,positive="SI") #Muestra balanceada
cm_RF_own_smote
Confusion Matrix and Statistics
Reference
Prediction NO SI
NO 4856 288
SI 277 86
Accuracy : 0.8974
95% CI : (0.8891, 0.9053)
No Information Rate : 0.9321
P-Value [Acc > NIR] : 1.000
Kappa : 0.1784
Mcnemar's Test P-Value : 0.674
Sensitivity : 0.22995
Specificity : 0.94604
Pos Pred Value : 0.23691
Neg Pred Value : 0.94401
Prevalence : 0.06791
Detection Rate : 0.01562
Detection Prevalence : 0.06592
Balanced Accuracy : 0.58799
'Positive' Class : SI
cm_RF_own_under<- caret::confusionMatrix(predict(modelo_RF_own_under,Testing)
,Testing$DESERTOR,positive="SI") #Muestra under
cm_RF_own_under
Confusion Matrix and Statistics
Reference
Prediction NO SI
NO 3736 111
SI 1397 263
Accuracy : 0.7262
95% CI : (0.7142, 0.7379)
No Information Rate : 0.9321
P-Value [Acc > NIR] : 1
Kappa : 0.1662
Mcnemar's Test P-Value : <2e-16
Sensitivity : 0.70321
Specificity : 0.72784
Pos Pred Value : 0.15843
Neg Pred Value : 0.97115
Prevalence : 0.06791
Detection Rate : 0.04776
Detection Prevalence : 0.30143
Balanced Accuracy : 0.71552
'Positive' Class : SI
cm_RF_own_over<- caret::confusionMatrix(predict(modelo_RF_own_over,Testing)
,Testing$DESERTOR,positive="SI") #Muestra over
cm_RF_own_over
Confusion Matrix and Statistics
Reference
Prediction NO SI
NO 4797 233
SI 336 141
Accuracy : 0.8967
95% CI : (0.8883, 0.9046)
No Information Rate : 0.9321
P-Value [Acc > NIR] : 1
Kappa : 0.2763
Mcnemar's Test P-Value : 1.902e-05
Sensitivity : 0.37701
Specificity : 0.93454
Pos Pred Value : 0.29560
Neg Pred Value : 0.95368
Prevalence : 0.06791
Detection Rate : 0.02560
Detection Prevalence : 0.08662
Balanced Accuracy : 0.65577
'Positive' Class : SI
# Calculando el estadístico KS
library(InformationValue)
ks_stat(Testing$DESERTOR,ProbRFo_Test$ProbNb_SI,returnKSTable = T)
ks_stat(Testing$DESERTOR,ProbRFo_Test$ProbNb_SI)
[1] 0.2672
# Graficando el estadístico KS
ks_plot(Testing$DESERTOR,ProbRFo_Test$ProbNb_SI)
#Curvas de ROC
# Curva ROC usando el paquete caTools
library(caTools)
AUC_Nb_Test <- colAUC(ProbRFo_Test$ProbNb_SI,Testing$DESERTOR,plotROC = TRUE) #Muestra balanceada
#abline(0, 1,col="red")
AUC_Nb_Test
[,1]
NO vs. SI 0.6754533
#Coeficiente de Gini
gini_test <- 2*AUC_Nb_Test -1 ; gini_test
[,1]
NO vs. SI 0.3509065
#####################################################################################################
#####################################################################################################
###########################################################
# NAIBBY BAYES CON CARET #
###########################################################
library(e1071)
set.seed(696)
modelo_Nb_smote <- naiveBayes(DESERTOR ~ .,
data = smote_train,
probability = TRUE)
modelo_Nb_under <- naiveBayes(DESERTOR ~ ., data = under_train)
modelo_Nb_over <- naiveBayes(DESERTOR ~ ., data = over_train)
summary(modelo_Nb_smote)
Length Class Mode
apriori 2 table numeric
tables 221 -none- list
levels 2 -none- character
isnumeric 221 -none- logical
call 5 -none- call
########################################
######## INDICADORES DEL MODELO ########
########################################
# Prediciendo la probabilidad en la muestra de entrenamiento balaceada
ProbNb_smote <- predict(modelo_Nb_smote,smote_train,type="raw") %>% as.data.frame()
colnames(ProbNb_smote) <- c("ProbNb_NO","ProbNb_SI")
head(ProbNb_smote,20)
# Prediciendo la clase (con punto de corte = 0.5)
ClasePredNb_Smote <- as.factor(ifelse(ProbNb_smote$ProbNb_SI >= 0.5, "SI", "NO"))
levels(ClasePredNb_Smote) <- c("NO","SI")
#Data balanceada con la probabilidad y clase predicha
DataNb_smote_train <- cbind(smote_train,ProbNb_smote,ClasePredNb_Smote)
# Prediciendo la probabilidad en la muestra de entrenamiento desbalaceada
ProbNb_Training <- predict(modelo_Nb_smote,Training,type="raw") %>% as.data.frame()
colnames(ProbNb_Training) <- c("ProbNb_NO","ProbNb_SI")
head(ProbNb_Training)
# Prediciendo la clase (con punto de corte = 0.5)
ClasePredNb_Training <- as.factor(ifelse(ProbNb_Training$ProbNb_SI >= 0.5, 1, 0))
levels(ClasePredNb_Training) <- c("NO","SI")
#Data desbalanceada con la probabilidad y clase predicha
DataNb_Training <- cbind(Training,ProbNb_Training,ClasePredNb_Training)
##########################
# Tabla de clasificación #
##########################
# Calcular el % de acierto (accuracy) en la muestra balanceada
Accuracy_Nb_Smote <- mean(ClasePredNb_Smote==smote_train$DESERTOR)
Accuracy_Nb_Smote
[1] 0.5372245
# Calcular el % de acierto (accuracy) en la muestra desbalanceada
Accuracy_Nb_Train <- mean(ClasePredNb_Training==Training$DESERTOR)
Accuracy_Nb_Train
[1] 0.1600208
# Calcular el error de mala clasificación en la muestra balanceada
Error_Nb_Smote <- mean(ClasePredNb_Smote!=smote_train$DESERTOR)
Error_Nb_Smote
[1] 0.4627755
# Calcular el error de mala clasificación en la muestra desbalanceada
Error_Nb_Train <- mean(ClasePredNb_Training!=Training$DESERTOR)
Error_Nb_Train
[1] 0.8399792
#Cruce de clase real y predicha en la muestra balanceada
library(gmodels)
CrossTable(smote_train$DESERTOR,ClasePredNb_Smote,
prop.t=FALSE, prop.c=FALSE,prop.chisq=FALSE)
Cell Contents
|-------------------------|
| N |
| N / Row Total |
|-------------------------|
Total Observations in Table: 8892
| ClasePredNb_Smote
smote_train$DESERTOR | NO | SI | Row Total |
---------------------|-----------|-----------|-----------|
NO | 497 | 3949 | 4446 |
| 0.112 | 0.888 | 0.500 |
---------------------|-----------|-----------|-----------|
SI | 166 | 4280 | 4446 |
| 0.037 | 0.963 | 0.500 |
---------------------|-----------|-----------|-----------|
Column Total | 663 | 8229 | 8892 |
---------------------|-----------|-----------|-----------|
#Cruce de clase real y predicha en la muestra desbalanceada
library(gmodels)
CrossTable(Training$DESERTOR,ClasePredNb_Training,
prop.t=FALSE, prop.c=FALSE,prop.chisq=FALSE)
Cell Contents
|-------------------------|
| N |
| N / Row Total |
|-------------------------|
Total Observations in Table: 11511
| ClasePredNb_Training
Training$DESERTOR | NO | SI | Row Total |
------------------|-----------|-----------|-----------|
NO | 1161 | 9609 | 10770 |
| 0.108 | 0.892 | 0.936 |
------------------|-----------|-----------|-----------|
SI | 60 | 681 | 741 |
| 0.081 | 0.919 | 0.064 |
------------------|-----------|-----------|-----------|
Column Total | 1221 | 10290 | 11511 |
------------------|-----------|-----------|-----------|
#Matriz de confusión
library(caret)
caret::confusionMatrix(ClasePredNb_Smote,smote_train$DESERTOR,positive="SI") #Muestra balanceada
Confusion Matrix and Statistics
Reference
Prediction NO SI
NO 497 166
SI 3949 4280
Accuracy : 0.5372
95% CI : (0.5268, 0.5476)
No Information Rate : 0.5
P-Value [Acc > NIR] : 1.167e-12
Kappa : 0.0744
Mcnemar's Test P-Value : < 2.2e-16
Sensitivity : 0.9627
Specificity : 0.1118
Pos Pred Value : 0.5201
Neg Pred Value : 0.7496
Prevalence : 0.5000
Detection Rate : 0.4813
Detection Prevalence : 0.9254
Balanced Accuracy : 0.5372
'Positive' Class : SI
caret::confusionMatrix(ClasePredNb_Training,Training$DESERTOR,positive="SI") #Muestra desbalanceada
Confusion Matrix and Statistics
Reference
Prediction NO SI
NO 1161 60
SI 9609 681
Accuracy : 0.16
95% CI : (0.1534, 0.1668)
No Information Rate : 0.9356
P-Value [Acc > NIR] : 1
Kappa : 0.0038
Mcnemar's Test P-Value : <2e-16
Sensitivity : 0.91903
Specificity : 0.10780
Pos Pred Value : 0.06618
Neg Pred Value : 0.95086
Prevalence : 0.06437
Detection Rate : 0.05916
Detection Prevalence : 0.89393
Balanced Accuracy : 0.51341
'Positive' Class : SI
#CURVAS DE ROC
# Curva ROC usando el paquete caTools
library(caTools)
AUC_Nb_Smote <- colAUC(ProbNb_smote$ProbNb_SI,smote_train$DESERTOR,plotROC = TRUE) #Muestra balanceada
abline(0, 1,col="red")
AUC_Nb_Train <- colAUC(ProbNb_Training$ProbNb_SI,Training$DESERTOR,plotROC = TRUE) #Muestra desbalanceada
abline(0, 1,col="red")
AUC_Nb_Smote #Devuelve el área bajo la curva en la muestra balanceada
[,1]
NO vs. SI 0.5417514
AUC_Nb_Train #Devuelve el área bajo la curva en la muestra desbalanceada
[,1]
NO vs. SI 0.5166035
#CURVAS DE ROC
# Usando el paquete pROC
library(pROC)
# Área bajo la curva
roc_modelo_Nb_smote <- roc(smote_train$DESERTOR,ProbNb_smote$ProbNb_SI)
roc_modelo_Nb_smote
Call:
roc.default(response = smote_train$DESERTOR, predictor = ProbNb_smote$ProbNb_SI)
Data: ProbNb_smote$ProbNb_SI in 4446 controls (smote_train$DESERTOR NO) < 4446 cases (smote_train$DESERTOR SI).
Area under the curve: 0.5418
roc_modelo_Nb_train <- roc(Training$DESERTOR,ProbNb_Training$ProbNb_SI)
roc_modelo_Nb_train
Call:
roc.default(response = Training$DESERTOR, predictor = ProbNb_Training$ProbNb_SI)
Data: ProbNb_Training$ProbNb_SI in 10770 controls (Training$DESERTOR NO) < 741 cases (Training$DESERTOR SI).
Area under the curve: 0.5166
#Puntos de corte muestra balanceada
PtosCorte_Smote <- data.frame(prob1=roc_modelo_Nb_smote$thresholds,
sen1=roc_modelo_Nb_smote$sensitivities,
esp1=roc_modelo_Nb_smote$specificities)
#Puntos de corte muestra desbalanceada
PtosCorte_Train <- data.frame(prob2=roc_modelo_Nb_train$thresholds,
sen2=roc_modelo_Nb_train$sensitivities,
esp2=roc_modelo_Nb_train$specificities)
# Punto de corte óptimo (mayor sensibilidad y especificidad) usando pROC
coords(roc_modelo_Nb_smote, "best",ret=c("threshold","specificity", "sensitivity","accuracy"))
threshold specificity sensitivity accuracy
1.0000000 0.1311291 0.9516419 0.5413855
coords(roc_modelo_Nb_train, "best",ret=c("threshold","specificity", "sensitivity","accuracy"))
threshold specificity sensitivity accuracy
4.500366e-08 9.721448e-02 9.352227e-01 1.511598e-01
coords(roc_modelo_Nb_smote, "best")
threshold specificity sensitivity
1.0000000 0.1311291 0.9516419
coords(roc_modelo_Nb_train, "best")
threshold specificity sensitivity
4.500366e-08 9.721448e-02 9.352227e-01
plot(roc_modelo_Nb_smote,print.thres=T)
plot(roc_modelo_Nb_train,print.thres=T)
######################################
######## EVALUCION DE MODELOS ########
######################################
# Prediciendo la probabilidad en la muestra de entrenamiento balaceada
ProbNb_Test <- predict(modelo_Nb_smote,Testing,type="raw") %>% as.data.frame()
colnames(ProbNb_Test) <- c("ProbNb_NO","ProbNb_SI")
head(ProbNb_Test,20)
# Prediciendo la clase (con punto de corte = 0.5)
ClasePredNb_Test <- as.factor(ifelse(ProbNb_Test$ProbNb_SI >= 0.5, 1, 0))
levels(ClasePredNb_Test) <- c("NO","SI")
head(cbind(Testing,ProbNb_Test,ClasePredNb_Test),8)
# Calcular el % de acierto (accuracy) en la muestra balanceada
Accuracy_Nb_Test <- mean(ClasePredNb_Test==Testing$DESERTOR)
Accuracy_Nb_Test
[1] 0.1450881
#Matriz de confusión
library(caret)
cm_Nb_smote<- caret::confusionMatrix(ClasePredNb_Test,Testing$DESERTOR,positive="SI") #Muestra balanceada
cm_Nb_smote
Confusion Matrix and Statistics
Reference
Prediction NO SI
NO 454 29
SI 4679 345
Accuracy : 0.1451
95% CI : (0.1359, 0.1547)
No Information Rate : 0.9321
P-Value [Acc > NIR] : 1
Kappa : 0.0016
Mcnemar's Test P-Value : <2e-16
Sensitivity : 0.92246
Specificity : 0.08845
Pos Pred Value : 0.06867
Neg Pred Value : 0.93996
Prevalence : 0.06791
Detection Rate : 0.06265
Detection Prevalence : 0.91229
Balanced Accuracy : 0.50545
'Positive' Class : SI
cm_Nb_under<- caret::confusionMatrix(predict(modelo_Nb_under,Testing),Testing$DESERTOR,positive="SI") #Muestra under
cm_Nb_under
Confusion Matrix and Statistics
Reference
Prediction NO SI
NO 4844 350
SI 289 24
Accuracy : 0.884
95% CI : (0.8752, 0.8923)
No Information Rate : 0.9321
P-Value [Acc > NIR] : 1.00000
Kappa : 0.0085
Mcnemar's Test P-Value : 0.01762
Sensitivity : 0.064171
Specificity : 0.943698
Pos Pred Value : 0.076677
Neg Pred Value : 0.932615
Prevalence : 0.067914
Detection Rate : 0.004358
Detection Prevalence : 0.056837
Balanced Accuracy : 0.503934
'Positive' Class : SI
cm_Nb_over<- caret::confusionMatrix(predict(modelo_Nb_over,Testing),Testing$DESERTOR,positive="SI") #Muestra Over
cm_Nb_over
Confusion Matrix and Statistics
Reference
Prediction NO SI
NO 157 7
SI 4976 367
Accuracy : 0.0952
95% CI : (0.0875, 0.1032)
No Information Rate : 0.9321
P-Value [Acc > NIR] : 1
Kappa : 0.0017
Mcnemar's Test P-Value : <2e-16
Sensitivity : 0.98128
Specificity : 0.03059
Pos Pred Value : 0.06869
Neg Pred Value : 0.95732
Prevalence : 0.06791
Detection Rate : 0.06664
Detection Prevalence : 0.97022
Balanced Accuracy : 0.50593
'Positive' Class : SI
# Calculando el estadístico KS
library(InformationValue)
ks_stat(Testing$DESERTOR,ProbNb_Test$ProbNb_SI,returnKSTable = T)
ks_stat(Testing$DESERTOR,ProbNb_Test$ProbNb_SI)
[1] 0.015
# Graficando el estadístico KS
ks_plot(Testing$DESERTOR,ProbNb_Test$ProbNb_SI)
#Curvas de ROC
# Curva ROC usando el paquete caTools
library(caTools)
AUC_Nb_Test <- colAUC(ProbNb_Test$ProbNb_SI,Testing$DESERTOR,plotROC = TRUE) #Muestra balanceada
abline(0, 1,col="red")
AUC_Nb_Test
[,1]
NO vs. SI 0.5026761
#Coeficiente de Gini
gini_test <- 2*AUC_Nb_Test -1 ; gini_test
[,1]
NO vs. SI 0.005352282
#####################################################################################################
#####################################################################################################
####################################################
# BAGGING CON CARET Y VALIDACIÓN CRUZADA REPETIDA #
####################################################
# Relación de parámetros a ajustar de un modelo
modelLookup(model='treebag')
# Aplicando el modelo con Validación Cruzada Repetida
ctrl <- trainControl(method="cv", repeats = 1, number=2)#repeatedcv
set.seed(696)
modelo_TreeBagg_smote <- train(DESERTOR ~ .,
data = smote_train,
method = "treebag",
trControl = ctrl,
#tuneLength = 20,
metric="se")#Accuracy
modelo_TreeBagg_under <- caret::train(DESERTOR ~ ., data = under_train,method = "treebag",trControl = ctrl,
#tuneLength = 20,
metric="se")
modelo_TreeBagg_over <- caret::train(DESERTOR ~ ., data = over_train,method = "treebag",trControl = ctrl,
#tuneLength = 20,
metric="se")
modelo_TreeBagg_smote
Bagged CART
8892 samples
221 predictor
2 classes: 'NO', 'SI'
No pre-processing
Resampling: Cross-Validated (2 fold)
Summary of sample sizes: 4446, 4446
Resampling results:
Accuracy Kappa
0.9203779 0.8407557
#plot(modelo_TreeBagg_smote)
varImp(modelo_TreeBagg_smote)
treebag variable importance
only 20 most important variables shown (out of 221)
Overall
TT_SinOut_Anio_Ingreso 100.000
TT_SinOut_ProbabDesercion 81.806
TT_SinOut_periodo_matricula 74.737
LUGAR_COLEGIO_Arequipa_Arequipa_MarianoMelgar 54.161
TT_SinOut_ASIGS__APROBADAS 48.673
TT_SinOut_PRDO_HASTA_MATRICULA 47.558
TT_SinOut_CREDS__APROBADOS 44.078
ESCUELA_INGENIERIADESISTEMAS 40.653
LUGAR_COLEGIO_Arequipa_Condesuyos_Salamanca 24.471
TT_SinOut_ANO_EGRESO_COLEGIO 20.614
LUGAR_RESIDENCIA_AA_MarianoMelgar 19.487
TT_SinOut_Edad 19.023
LUGAR_RESIDENCIA_AA_Tiabaya 16.393
TIPO_COLEGIO_Particular 15.584
LUGAR_COLEGIO_Arequipa_Arequipa_JoseLuisBustamanteyRivero 12.235
ESCUELA_INGENIERIAINDUSTRIAL 9.960
ESCUELA_INGENIERIAMECANICA 9.626
LUGAR_COLEGIO_Arequipa_Arequipa_Arequipa 5.705
TIPO_COLEGIO_Parroquial 5.319
MODALIDAD_INGRESO_Ordinario 4.176
########################################
######## INDICADORES DEL MODELO ########
########################################
# Prediciendo la probabilidad en la muestra de entrenamiento balaceada
ProbBag_smote <- predict(modelo_TreeBagg_smote,smote_train,type="prob") %>% as.data.frame()
colnames(ProbBag_smote) <- c("ProbBag_NO","ProbBag_SI")
head(ProbBag_smote,20)
# Prediciendo la clase (con punto de corte = 0.5)
ClasePredBag_Smote <- as.factor(ifelse(ProbBag_smote$ProbBag_SI >= 0.5, "SI", "NO"))
levels(ClasePredBag_Smote) <- c("NO","SI")
#Data balanceada con la probabilidad y clase predicha
DataBag_smote_train <- cbind(smote_train,ProbBag_smote,ClasePredBag_Smote)
# Prediciendo la probabilidad en la muestra de entrenamiento desbalaceada
ProbBag_Training <- predict(modelo_TreeBagg_smote,Training,type="prob") %>% as.data.frame()
colnames(ProbBag_Training) <- c("ProbBag_NO","ProbBag_SI")
head(ProbBag_Training)
# Prediciendo la clase (con punto de corte = 0.5)
ClasePredBag_Training <- as.factor(ifelse(ProbBag_Training$ProbBag_SI >= 0.5, 1, 0))
levels(ClasePredBag_Training) <- c("NO","SI")
#Data desbalanceada con la probabilidad y clase predicha
DataBag_Training <- cbind(Training,ProbBag_Training,ClasePredBag_Training)
##########################
# Tabla de clasificación #
##########################
# Calcular el % de acierto (accuracy) en la muestra balanceada
Accuracy_Bag_Smote <- mean(ClasePredBag_Smote==smote_train$DESERTOR)
Accuracy_Bag_Smote
[1] 0.9988754
# Calcular el % de acierto (accuracy) en la muestra desbalanceada
Accuracy_Bag_Train <- mean(ClasePredBag_Training==Training$DESERTOR)
Accuracy_Bag_Train
[1] 0.9666406
# Calcular el error de mala clasificación en la muestra balanceada
Error_Bag_Smote <- mean(ClasePredBag_Smote!=smote_train$DESERTOR)
Error_Bag_Smote
[1] 0.001124606
# Calcular el error de mala clasificación en la muestra desbalanceada
Error_Bag_Train <- mean(ClasePredBag_Training!=Training$DESERTOR)
Error_Bag_Train
[1] 0.0333594
#Cruce de clase real y predicha en la muestra balanceada
library(gmodels)
CrossTable(smote_train$DESERTOR,ClasePredBag_Smote,
prop.t=FALSE, prop.c=FALSE,prop.chisq=FALSE)
Cell Contents
|-------------------------|
| N |
| N / Row Total |
|-------------------------|
Total Observations in Table: 8892
| ClasePredBag_Smote
smote_train$DESERTOR | NO | SI | Row Total |
---------------------|-----------|-----------|-----------|
NO | 4443 | 3 | 4446 |
| 0.999 | 0.001 | 0.500 |
---------------------|-----------|-----------|-----------|
SI | 7 | 4439 | 4446 |
| 0.002 | 0.998 | 0.500 |
---------------------|-----------|-----------|-----------|
Column Total | 4450 | 4442 | 8892 |
---------------------|-----------|-----------|-----------|
#Cruce de clase real y predicha en la muestra desbalanceada
library(gmodels)
CrossTable(Training$DESERTOR,ClasePredBag_Training,
prop.t=FALSE, prop.c=FALSE,prop.chisq=FALSE)
Cell Contents
|-------------------------|
| N |
| N / Row Total |
|-------------------------|
Total Observations in Table: 11511
| ClasePredBag_Training
Training$DESERTOR | NO | SI | Row Total |
------------------|-----------|-----------|-----------|
NO | 10393 | 377 | 10770 |
| 0.965 | 0.035 | 0.936 |
------------------|-----------|-----------|-----------|
SI | 7 | 734 | 741 |
| 0.009 | 0.991 | 0.064 |
------------------|-----------|-----------|-----------|
Column Total | 10400 | 1111 | 11511 |
------------------|-----------|-----------|-----------|
#Matriz de confusión
library(caret)
caret::confusionMatrix(ClasePredBag_Smote,smote_train$DESERTOR,positive="SI") #Muestra balanceada
Confusion Matrix and Statistics
Reference
Prediction NO SI
NO 4443 7
SI 3 4439
Accuracy : 0.9989
95% CI : (0.9979, 0.9995)
No Information Rate : 0.5
P-Value [Acc > NIR] : <2e-16
Kappa : 0.9978
Mcnemar's Test P-Value : 0.3428
Sensitivity : 0.9984
Specificity : 0.9993
Pos Pred Value : 0.9993
Neg Pred Value : 0.9984
Prevalence : 0.5000
Detection Rate : 0.4992
Detection Prevalence : 0.4996
Balanced Accuracy : 0.9989
'Positive' Class : SI
caret::confusionMatrix(ClasePredBag_Training,Training$DESERTOR,positive="SI") #Muestra desbalanceada
Confusion Matrix and Statistics
Reference
Prediction NO SI
NO 10393 7
SI 377 734
Accuracy : 0.9666
95% CI : (0.9632, 0.9698)
No Information Rate : 0.9356
P-Value [Acc > NIR] : < 2.2e-16
Kappa : 0.7753
Mcnemar's Test P-Value : < 2.2e-16
Sensitivity : 0.99055
Specificity : 0.96500
Pos Pred Value : 0.66067
Neg Pred Value : 0.99933
Prevalence : 0.06437
Detection Rate : 0.06377
Detection Prevalence : 0.09652
Balanced Accuracy : 0.97777
'Positive' Class : SI
#CURVAS DE ROC
# Curva ROC usando el paquete caTools
library(caTools)
AUC_Bag_Smote <- colAUC(ProbBag_smote$ProbBag_SI,smote_train$DESERTOR,plotROC = TRUE) #Muestra balanceada
#abline(0, 1,col="red")
AUC_Bag_Train <- colAUC(ProbBag_Training$ProbBag_SI,Training$DESERTOR,plotROC = TRUE) #Muestra desbalanceada
#abline(0, 1,col="red")
AUC_Bag_Smote #Devuelve el área bajo la curva en la muestra balanceada
[,1]
NO vs. SI 0.9999957
AUC_Bag_Train #Devuelve el área bajo la curva en la muestra desbalanceada
[,1]
NO vs. SI 0.990725
#CURVAS DE ROC
# Usando el paquete pROC
library(pROC)
# Área bajo la curva
roc_modelo_bag_smote <- roc(smote_train$DESERTOR,ProbBag_smote$ProbBag_SI)
roc_modelo_bag_smote
Call:
roc.default(response = smote_train$DESERTOR, predictor = ProbBag_smote$ProbBag_SI)
Data: ProbBag_smote$ProbBag_SI in 4446 controls (smote_train$DESERTOR NO) < 4446 cases (smote_train$DESERTOR SI).
Area under the curve: 1
roc_modelo_bag_train <- roc(Training$DESERTOR,ProbBag_Training$ProbBag_SI)
roc_modelo_bag_train
Call:
roc.default(response = Training$DESERTOR, predictor = ProbBag_Training$ProbBag_SI)
Data: ProbBag_Training$ProbBag_SI in 10770 controls (Training$DESERTOR NO) < 741 cases (Training$DESERTOR SI).
Area under the curve: 0.9907
#Puntos de corte muestra balanceada
PtosCorte_Smote <- data.frame(prob1=roc_modelo_bag_smote$thresholds,
sen1=roc_modelo_bag_smote$sensitivities,
esp1=roc_modelo_bag_smote$specificities)
#Puntos de corte muestra desbalanceada
PtosCorte_Train <- data.frame(prob2=roc_modelo_bag_train$thresholds,
sen2=roc_modelo_bag_train$sensitivities,
esp2=roc_modelo_bag_train$specificities)
# Punto de corte óptimo (mayor sensibilidad y especificidad) usando pROC
coords(roc_modelo_bag_smote, "best",ret=c("threshold","specificity", "sensitivity","accuracy"))
best best
threshold 0.4200000 0.4600000
specificity 0.9982006 0.9991003
sensitivity 0.9997751 0.9988754
accuracy 0.9989879 0.9989879
coords(roc_modelo_bag_train, "best",ret=c("threshold","specificity", "sensitivity","accuracy"))
threshold specificity sensitivity accuracy
0.5000000 0.9649954 0.9905533 0.9666406
coords(roc_modelo_bag_smote, "best")
best best
threshold 0.4200000 0.4600000
specificity 0.9982006 0.9991003
sensitivity 0.9997751 0.9988754
coords(roc_modelo_bag_train, "best")
threshold specificity sensitivity
0.5000000 0.9649954 0.9905533
plot(roc_modelo_bag_smote,print.thres=T)
plot(roc_modelo_bag_train,print.thres=T)
######################################
######## EVALUCION DE MODELOS ########
######################################
# Prediciendo la probabilidad en la muestra de entrenamiento balaceada
ProbBag_Test <- predict(modelo_TreeBagg_smote,Testing,type="prob") %>% as.data.frame()
colnames(ProbBag_Test) <- c("ProbBag_NO","ProbBag_SI")
head(ProbBag_Test,20)
# Prediciendo la clase (con punto de corte = 0.5)
ClasePredBag_Test <- as.factor(ifelse(ProbBag_Test$ProbBag_SI >= 0.46, 1, 0))
levels(ClasePredBag_Test) <- c("NO","SI")
head(cbind(Testing,ProbBag_Test,ClasePredBag_Test),8)
# Calcular el % de acierto (accuracy) en la muestra balanceada
Accuracy_Bag_Test <- mean(ClasePredBag_Test==Testing$DESERTOR)
Accuracy_Bag_Test
[1] 0.4632286
#Matriz de confusión
library(caret)
cm_TreeBagg_smote <- caret::confusionMatrix(ClasePredBag_Test,Testing$DESERTOR,positive="SI") #Muestra balanceada
cm_TreeBagg_smote
Confusion Matrix and Statistics
Reference
Prediction NO SI
NO 2313 136
SI 2820 238
Accuracy : 0.4632
95% CI : (0.45, 0.4765)
No Information Rate : 0.9321
P-Value [Acc > NIR] : 1
Kappa : 0.0201
Mcnemar's Test P-Value : <2e-16
Sensitivity : 0.63636
Specificity : 0.45061
Pos Pred Value : 0.07783
Neg Pred Value : 0.94447
Prevalence : 0.06791
Detection Rate : 0.04322
Detection Prevalence : 0.55529
Balanced Accuracy : 0.54349
'Positive' Class : SI
cm_TreeBagg_under <- caret::confusionMatrix( predict(modelo_TreeBagg_under,Testing)
,Testing$DESERTOR,positive="SI") #Muestra Under
cm_TreeBagg_under
Confusion Matrix and Statistics
Reference
Prediction NO SI
NO 3944 103
SI 1189 271
Accuracy : 0.7654
95% CI : (0.754, 0.7765)
No Information Rate : 0.9321
P-Value [Acc > NIR] : 1
Kappa : 0.2101
Mcnemar's Test P-Value : <2e-16
Sensitivity : 0.72460
Specificity : 0.76836
Pos Pred Value : 0.18562
Neg Pred Value : 0.97455
Prevalence : 0.06791
Detection Rate : 0.04921
Detection Prevalence : 0.26512
Balanced Accuracy : 0.74648
'Positive' Class : SI
cm_TreeBagg_over <- caret::confusionMatrix( predict(modelo_TreeBagg_over,Testing)
,Testing$DESERTOR,positive="SI") #Muestra Over
cm_TreeBagg_over
Confusion Matrix and Statistics
Reference
Prediction NO SI
NO 4974 271
SI 159 103
Accuracy : 0.9219
95% CI : (0.9145, 0.9289)
No Information Rate : 0.9321
P-Value [Acc > NIR] : 0.9985
Kappa : 0.2838
Mcnemar's Test P-Value : 8.656e-08
Sensitivity : 0.27540
Specificity : 0.96902
Pos Pred Value : 0.39313
Neg Pred Value : 0.94833
Prevalence : 0.06791
Detection Rate : 0.01870
Detection Prevalence : 0.04758
Balanced Accuracy : 0.62221
'Positive' Class : SI
# Calculando el estadístico KS
library(InformationValue)
ks_stat(Testing$DESERTOR,ProbBag_Test$ProbBag_SI,returnKSTable = T)
ks_stat(Testing$DESERTOR,ProbBag_Test$ProbBag_SI)
[1] 0.1448
# Graficando el estadístico KS
ks_plot(Testing$DESERTOR,ProbBag_Test$ProbBag_SI)
#Curvas de ROC
# Curva ROC usando el paquete caTools
library(caTools)
AUC_Bag_Test <- colAUC(ProbBag_Test$ProbBag_SI,Testing$DESERTOR,plotROC = TRUE) #Muestra balanceada
abline(0, 1,col="red")
AUC_Bag_Test
[,1]
NO vs. SI 0.5238144
#Coeficiente de Gini
gini_test <- 2*AUC_Bag_Test -1 ; gini_test
[,1]
NO vs. SI 0.0476288
#####################################################################################################
#####################################################################
############################ MODELO CART ############################
#####################################################################
##################################################
# CART CON CARET Y VALIDACIÓN CRUZADA REPETIDA #
##################################################
# Relación de modelos
library(caret)
#names(getModelInfo())
#Relación de parámetros a ajustar de un modelo
modelLookup(model='rpart')
# Aplicando el modelo con Validación Cruzada Repetida
ctrl <- trainControl(method="cv", number=2, repeats = 1)
set.seed(696)
modelo_cart_smote <- train(DESERTOR ~ .,
data = smote_train,
method = "rpart",
trControl = ctrl,
tuneLength= 20,
metric="Accuracy")
modelo_cart_under <- train(DESERTOR ~ ., data = under_train, method = "rpart", trControl = ctrl, metric="Accuracy")
modelo_cart_over <- train(DESERTOR ~ ., data = over_train, method = "rpart", trControl = ctrl, metric="Accuracy")
ImpVar_Cart <- varImp(modelo_cart_smote)
plot(ImpVar_Cart)
########################################
######## INDICADORES DEL MODELO ########
########################################
# Prediciendo la probabilidad en la muestra de entrenamiento balaceada
ProbCart_smote <- predict(modelo_cart_smote,smote_train,type="prob") %>% as.data.frame()
colnames(ProbCart_smote) <- c("ProbCart_NO","ProbCart_SI")
head(ProbCart_smote,20)
# Prediciendo la clase (con punto de corte = 0.5)
ClasePredCart_Smote <- as.factor(ifelse(ProbCart_smote$ProbCart_SI >= 0.5, "SI", "NO"))
levels(ClasePredCart_Smote) <- c("NO","SI")
#Data balanceada con la probabilidad y clase predicha
DataCart_smote_train <- cbind(smote_train,ProbCart_smote,ClasePredCart_Smote)
# Prediciendo la probabilidad en la muestra de entrenamiento desbalaceada
ProbCart_Training <- predict(modelo_cart_smote,Training,type="prob") %>% as.data.frame()
colnames(ProbCart_Training) <- c("ProbCart_NO","ProbCart_SI")
head(ProbCart_Training)
# Prediciendo la clase (con punto de corte = 0.5)
ClasePredCart_Training <- as.factor(ifelse(ProbCart_Training$ProbCart_SI >= 0.5, 1, 0))
levels(ClasePredCart_Training) <- c("NO","SI")
#Data desbalanceada con la probabilidad y clase predicha
DataCart_Training <- cbind(Training,ProbCart_Training,ClasePredCart_Training)
##########################
# Tabla de clasificación #
##########################
# Calcular el % de acierto (accuracy) en la muestra balanceada
Accuracy_Cart_Smote <- mean(ClasePredCart_Smote==smote_train$DESERTOR)
Accuracy_Cart_Smote
[1] 0.9229645
# Calcular el % de acierto (accuracy) en la muestra desbalanceada
Accuracy_Cart_Train <- mean(ClasePredCart_Training==Training$DESERTOR)
Accuracy_Cart_Train
[1] 0.9311962
# Calcular el error de mala clasificación en la muestra balanceada
Error_Cart_Smote <- mean(ClasePredCart_Smote!=smote_train$DESERTOR)
Error_Cart_Smote
[1] 0.07703554
# Calcular el error de mala clasificación en la muestra desbalanceada
Error_Cart_Train <- mean(ClasePredCart_Training!=Training$DESERTOR)
Error_Cart_Train
[1] 0.06880375
#Cruce de clase real y predicha en la muestra balanceada
library(gmodels)
CrossTable(smote_train$DESERTOR,ClasePredCart_Smote,
prop.t=FALSE, prop.c=FALSE,prop.chisq=FALSE)
Cell Contents
|-------------------------|
| N |
| N / Row Total |
|-------------------------|
Total Observations in Table: 8892
| ClasePredCart_Smote
smote_train$DESERTOR | NO | SI | Row Total |
---------------------|-----------|-----------|-----------|
NO | 4327 | 119 | 4446 |
| 0.973 | 0.027 | 0.500 |
---------------------|-----------|-----------|-----------|
SI | 566 | 3880 | 4446 |
| 0.127 | 0.873 | 0.500 |
---------------------|-----------|-----------|-----------|
Column Total | 4893 | 3999 | 8892 |
---------------------|-----------|-----------|-----------|
#Cruce de clase real y predicha en la muestra desbalanceada
library(gmodels)
CrossTable(Training$DESERTOR,ClasePredCart_Training,
prop.t=FALSE, prop.c=FALSE,prop.chisq=FALSE)
Cell Contents
|-------------------------|
| N |
| N / Row Total |
|-------------------------|
Total Observations in Table: 11511
| ClasePredCart_Training
Training$DESERTOR | NO | SI | Row Total |
------------------|-----------|-----------|-----------|
NO | 10475 | 295 | 10770 |
| 0.973 | 0.027 | 0.936 |
------------------|-----------|-----------|-----------|
SI | 497 | 244 | 741 |
| 0.671 | 0.329 | 0.064 |
------------------|-----------|-----------|-----------|
Column Total | 10972 | 539 | 11511 |
------------------|-----------|-----------|-----------|
#Matriz de confusión
library(caret)
caret::confusionMatrix(ClasePredCart_Smote,smote_train$DESERTOR,positive="SI") #Muestra balanceada
Confusion Matrix and Statistics
Reference
Prediction NO SI
NO 4327 566
SI 119 3880
Accuracy : 0.923
95% CI : (0.9172, 0.9284)
No Information Rate : 0.5
P-Value [Acc > NIR] : < 2.2e-16
Kappa : 0.8459
Mcnemar's Test P-Value : < 2.2e-16
Sensitivity : 0.8727
Specificity : 0.9732
Pos Pred Value : 0.9702
Neg Pred Value : 0.8843
Prevalence : 0.5000
Detection Rate : 0.4363
Detection Prevalence : 0.4497
Balanced Accuracy : 0.9230
'Positive' Class : SI
caret::confusionMatrix(ClasePredCart_Training,Training$DESERTOR,positive="SI") #Muestra desbalanceada
Confusion Matrix and Statistics
Reference
Prediction NO SI
NO 10475 497
SI 295 244
Accuracy : 0.9312
95% CI : (0.9264, 0.9358)
No Information Rate : 0.9356
P-Value [Acc > NIR] : 0.9739
Kappa : 0.3458
Mcnemar's Test P-Value : 9.183e-13
Sensitivity : 0.32928
Specificity : 0.97261
Pos Pred Value : 0.45269
Neg Pred Value : 0.95470
Prevalence : 0.06437
Detection Rate : 0.02120
Detection Prevalence : 0.04682
Balanced Accuracy : 0.65095
'Positive' Class : SI
#CURVAS DE ROC
# Curva ROC usando el paquete caTools
library(caTools)
AUC_Cart_Smote <- colAUC(ProbCart_smote$ProbCart_SI,smote_train$DESERTOR,plotROC = TRUE) #Muestra balanceada
#abline(0, 1,col="red")
AUC_Cart_Train <- colAUC(ProbCart_Training$ProbCart_SI,Training$DESERTOR,plotROC = TRUE) #Muestra desbalanceada
#abline(0, 1,col="red")
AUC_Cart_Smote #Devuelve el área bajo la curva en la muestra balanceada
[,1]
NO vs. SI 0.9655362
AUC_Cart_Train #Devuelve el área bajo la curva en la muestra desbalanceada
[,1]
NO vs. SI 0.8182813
#CURVAS DE ROC
# Usando el paquete pROC
library(pROC)
# Área bajo la curva
roc_modelo_cart_smote <- roc(smote_train$DESERTOR,ProbCart_smote$ProbCart_SI)
roc_modelo_cart_smote
Call:
roc.default(response = smote_train$DESERTOR, predictor = ProbCart_smote$ProbCart_SI)
Data: ProbCart_smote$ProbCart_SI in 4446 controls (smote_train$DESERTOR NO) < 4446 cases (smote_train$DESERTOR SI).
Area under the curve: 0.9655
roc_modelo_cart_train <- roc(Training$DESERTOR,ProbCart_Training$ProbCart_SI)
roc_modelo_cart_train
Call:
roc.default(response = Training$DESERTOR, predictor = ProbCart_Training$ProbCart_SI)
Data: ProbCart_Training$ProbCart_SI in 10770 controls (Training$DESERTOR NO) < 741 cases (Training$DESERTOR SI).
Area under the curve: 0.8183
#Puntos de corte muestra balanceada
PtosCorte_Smote <- data.frame(prob1=roc_modelo_cart_smote$thresholds,
sen1=roc_modelo_cart_smote$sensitivities,
esp1=roc_modelo_cart_smote$specificities)
#Puntos de corte muestra desbalanceada
PtosCorte_Train <- data.frame(prob2=roc_modelo_cart_train$thresholds,
sen2=roc_modelo_cart_train$sensitivities,
esp2=roc_modelo_cart_train$specificities)
# Punto de corte óptimo (mayor sensibilidad y especificidad) usando pROC
coords(roc_modelo_cart_smote, "best",ret=c("threshold","specificity", "sensitivity","accuracy"))
threshold specificity sensitivity accuracy
0.5492398 0.9732344 0.8726946 0.9229645
coords(roc_modelo_cart_train, "best",ret=c("threshold","specificity", "sensitivity","accuracy"))
threshold specificity sensitivity accuracy
0.1871429 0.6606314 0.8785425 0.6746590
coords(roc_modelo_cart_smote, "best")
threshold specificity sensitivity
0.5492398 0.9732344 0.8726946
coords(roc_modelo_cart_train, "best")
threshold specificity sensitivity
0.1871429 0.6606314 0.8785425
plot(roc_modelo_cart_smote,print.thres=T)
plot(roc_modelo_cart_train,print.thres=T)
######################################
######## EVALUCION DE MODELOS ########
######################################
# Prediciendo la probabilidad en la muestra de entrenamiento balaceada
ProbCart_Test <- predict(modelo_cart_smote,Testing,type="prob") %>% as.data.frame()
colnames(ProbCart_Test) <- c("ProbCart_NO","ProbCart_SI")
head(ProbCart_Test,20)
# Prediciendo la clase (con punto de corte = 0.5)
ClasePredCart_Test <- as.factor(ifelse(ProbCart_Test$ProbCart_SI >= 0.1760868, 1, 0))
levels(ClasePredCart_Test) <- c("NO","SI")
head(cbind(Testing,ProbCart_Test,ClasePredCart_Test),8)
# Calcular el % de acierto (accuracy) en la muestra balanceada
Accuracy_Cart_Test <- mean(ClasePredCart_Test==Testing$DESERTOR)
Accuracy_Cart_Test
[1] 0.3777011
#Matriz de confusión
library(caret)
cm_cart_smote <- caret::confusionMatrix(ClasePredCart_Test,Testing$DESERTOR,positive="SI") #Muestra balanceada
cm_cart_smote
Confusion Matrix and Statistics
Reference
Prediction NO SI
NO 1740 34
SI 3393 340
Accuracy : 0.3777
95% CI : (0.3649, 0.3907)
No Information Rate : 0.9321
P-Value [Acc > NIR] : 1
Kappa : 0.048
Mcnemar's Test P-Value : <2e-16
Sensitivity : 0.90909
Specificity : 0.33898
Pos Pred Value : 0.09108
Neg Pred Value : 0.98083
Prevalence : 0.06791
Detection Rate : 0.06174
Detection Prevalence : 0.67786
Balanced Accuracy : 0.62404
'Positive' Class : SI
cm_cart_under <- caret::confusionMatrix(predict(modelo_cart_under,Testing)
,Testing$DESERTOR,positive="SI") #Muestra under
cm_cart_under
Confusion Matrix and Statistics
Reference
Prediction NO SI
NO 4336 154
SI 797 220
Accuracy : 0.8273
95% CI : (0.8171, 0.8372)
No Information Rate : 0.9321
P-Value [Acc > NIR] : 1
Kappa : 0.2409
Mcnemar's Test P-Value : <2e-16
Sensitivity : 0.58824
Specificity : 0.84473
Pos Pred Value : 0.21632
Neg Pred Value : 0.96570
Prevalence : 0.06791
Detection Rate : 0.03995
Detection Prevalence : 0.18467
Balanced Accuracy : 0.71648
'Positive' Class : SI
cm_cart_over <- caret::confusionMatrix(predict(modelo_cart_over,Testing)
,Testing$DESERTOR,positive="SI") #Muestra under
cm_cart_over
Confusion Matrix and Statistics
Reference
Prediction NO SI
NO 3991 123
SI 1142 251
Accuracy : 0.7703
95% CI : (0.759, 0.7813)
No Information Rate : 0.9321
P-Value [Acc > NIR] : 1
Kappa : 0.1982
Mcnemar's Test P-Value : <2e-16
Sensitivity : 0.67112
Specificity : 0.77752
Pos Pred Value : 0.18019
Neg Pred Value : 0.97010
Prevalence : 0.06791
Detection Rate : 0.04558
Detection Prevalence : 0.25295
Balanced Accuracy : 0.72432
'Positive' Class : SI
# Calculando el estadístico KS
library(InformationValue)
ks_stat(Testing$DESERTOR,ProbCart_Test$ProbCart_SI,returnKSTable = T)
ks_stat(Testing$DESERTOR,ProbCart_Test$ProbCart_SI)
[1] 0.244
# Graficando el estadístico KS
ks_plot(Testing$DESERTOR,ProbCart_Test$ProbCart_SI)
#Curvas de ROC
# Curva ROC usando el paquete caTools
library(caTools)
AUC_Cart_Test <- colAUC(ProbCart_Test$ProbCart_SI,Testing$DESERTOR,plotROC = TRUE) #Muestra balanceada
#abline(0, 1,col="red")
AUC_Cart_Test
[,1]
NO vs. SI 0.5327427
#Coeficiente de Gini
gini_test <- 2*AUC_Cart_Test -1 ; gini_test
[,1]
NO vs. SI 0.06548536
#####################################################################################################
###########################################################
# XG BOOSTING Y VALIDACIÓN CRUZADA REPETIDA #
###########################################################
library(caret)
library(randomForest)
library(xgboost)
summary(over_train$DESERTOR)
NO SI
10770 10770
set.seed(696)
modelo_XGBoot_smote = xgboost::xgboost(data = as.matrix(smote_train[, -1]),#smote_train[, -1]),
label = ifelse(as.numeric(smote_train$DESERTOR) == 2, 1, 0)# Es necesario tener una categ. binaria
,objective = "binary:logistic",#num_class
nrounds = 200)
[1] train-error:0.101439
[2] train-error:0.076586
[3] train-error:0.071300
[4] train-error:0.068826
[5] train-error:0.067589
[6] train-error:0.064890
[7] train-error:0.063653
[8] train-error:0.061853
[9] train-error:0.061628
[10] train-error:0.061291
[11] train-error:0.059379
[12] train-error:0.058480
[13] train-error:0.057242
[14] train-error:0.054993
[15] train-error:0.054206
[16] train-error:0.053531
[17] train-error:0.052182
[18] train-error:0.051057
[19] train-error:0.050720
[20] train-error:0.049708
[21] train-error:0.049708
[22] train-error:0.049820
[23] train-error:0.049708
[24] train-error:0.049258
[25] train-error:0.047121
[26] train-error:0.047233
[27] train-error:0.046221
[28] train-error:0.046559
[29] train-error:0.046671
[30] train-error:0.046221
[31] train-error:0.045996
[32] train-error:0.045434
[33] train-error:0.044984
[34] train-error:0.044309
[35] train-error:0.043747
[36] train-error:0.043410
[37] train-error:0.043297
[38] train-error:0.043410
[39] train-error:0.042848
[40] train-error:0.042735
[41] train-error:0.042060
[42] train-error:0.041723
[43] train-error:0.041161
[44] train-error:0.041161
[45] train-error:0.040823
[46] train-error:0.040261
[47] train-error:0.039924
[48] train-error:0.039249
[49] train-error:0.038686
[50] train-error:0.038686
[51] train-error:0.038349
[52] train-error:0.037000
[53] train-error:0.036887
[54] train-error:0.036325
[55] train-error:0.036100
[56] train-error:0.036325
[57] train-error:0.035875
[58] train-error:0.035650
[59] train-error:0.035762
[60] train-error:0.034638
[61] train-error:0.034300
[62] train-error:0.034300
[63] train-error:0.034188
[64] train-error:0.032951
[65] train-error:0.031714
[66] train-error:0.030814
[67] train-error:0.030589
[68] train-error:0.030139
[69] train-error:0.029690
[70] train-error:0.028790
[71] train-error:0.028790
[72] train-error:0.029240
[73] train-error:0.028228
[74] train-error:0.028003
[75] train-error:0.027328
[76] train-error:0.026878
[77] train-error:0.026766
[78] train-error:0.026541
[79] train-error:0.026091
[80] train-error:0.025978
[81] train-error:0.025753
[82] train-error:0.024741
[83] train-error:0.024629
[84] train-error:0.024404
[85] train-error:0.024404
[86] train-error:0.024291
[87] train-error:0.023842
[88] train-error:0.022267
[89] train-error:0.022155
[90] train-error:0.021930
[91] train-error:0.020918
[92] train-error:0.020355
[93] train-error:0.020018
[94] train-error:0.019906
[95] train-error:0.019343
[96] train-error:0.019456
[97] train-error:0.018781
[98] train-error:0.018781
[99] train-error:0.018668
[100] train-error:0.018444
[101] train-error:0.016757
[102] train-error:0.015744
[103] train-error:0.015407
[104] train-error:0.015182
[105] train-error:0.014507
[106] train-error:0.014395
[107] train-error:0.013608
[108] train-error:0.013383
[109] train-error:0.013383
[110] train-error:0.013158
[111] train-error:0.013045
[112] train-error:0.012821
[113] train-error:0.012933
[114] train-error:0.012933
[115] train-error:0.012708
[116] train-error:0.012708
[117] train-error:0.012371
[118] train-error:0.012708
[119] train-error:0.012596
[120] train-error:0.012596
[121] train-error:0.012146
[122] train-error:0.011921
[123] train-error:0.011808
[124] train-error:0.011359
[125] train-error:0.011359
[126] train-error:0.011471
[127] train-error:0.010796
[128] train-error:0.010234
[129] train-error:0.009559
[130] train-error:0.009784
[131] train-error:0.009559
[132] train-error:0.009559
[133] train-error:0.009222
[134] train-error:0.009222
[135] train-error:0.008997
[136] train-error:0.008997
[137] train-error:0.008772
[138] train-error:0.008435
[139] train-error:0.008097
[140] train-error:0.008097
[141] train-error:0.008097
[142] train-error:0.008097
[143] train-error:0.008097
[144] train-error:0.008097
[145] train-error:0.008097
[146] train-error:0.007985
[147] train-error:0.007872
[148] train-error:0.007422
[149] train-error:0.007310
[150] train-error:0.007085
[151] train-error:0.006860
[152] train-error:0.006635
[153] train-error:0.006523
[154] train-error:0.006635
[155] train-error:0.006635
[156] train-error:0.006748
[157] train-error:0.006748
[158] train-error:0.006748
[159] train-error:0.006298
[160] train-error:0.006298
[161] train-error:0.006410
[162] train-error:0.006410
[163] train-error:0.005735
[164] train-error:0.005848
[165] train-error:0.005848
[166] train-error:0.005623
[167] train-error:0.004836
[168] train-error:0.004498
[169] train-error:0.004386
[170] train-error:0.004386
[171] train-error:0.004386
[172] train-error:0.004274
[173] train-error:0.003936
[174] train-error:0.003374
[175] train-error:0.003261
[176] train-error:0.002924
[177] train-error:0.002812
[178] train-error:0.003036
[179] train-error:0.003261
[180] train-error:0.003149
[181] train-error:0.003149
[182] train-error:0.003149
[183] train-error:0.002924
[184] train-error:0.003149
[185] train-error:0.002587
[186] train-error:0.002587
[187] train-error:0.002362
[188] train-error:0.002474
[189] train-error:0.002249
[190] train-error:0.002137
[191] train-error:0.002024
[192] train-error:0.002024
[193] train-error:0.001912
[194] train-error:0.001912
[195] train-error:0.002024
[196] train-error:0.002024
[197] train-error:0.002137
[198] train-error:0.002024
[199] train-error:0.001912
[200] train-error:0.002024
modelo_XGBoot_over = xgboost::xgboost(data = as.matrix(over_train[, -1]),#smote_train[, -1]),
label = ifelse(as.numeric(over_train$DESERTOR) == 2, 1, 0)# Es necesario tener una categ. binaria
,objective = "binary:logistic",#num_class
nrounds = 200)
[1] train-error:0.176091
[2] train-error:0.165274
[3] train-error:0.156128
[4] train-error:0.149814
[5] train-error:0.146797
[6] train-error:0.134587
[7] train-error:0.134448
[8] train-error:0.122934
[9] train-error:0.121820
[10] train-error:0.120613
[11] train-error:0.118477
[12] train-error:0.110306
[13] train-error:0.109471
[14] train-error:0.108682
[15] train-error:0.106221
[16] train-error:0.104178
[17] train-error:0.100139
[18] train-error:0.099304
[19] train-error:0.095079
[20] train-error:0.094568
[21] train-error:0.093686
[22] train-error:0.090344
[23] train-error:0.089322
[24] train-error:0.088394
[25] train-error:0.086722
[26] train-error:0.077994
[27] train-error:0.077669
[28] train-error:0.077623
[29] train-error:0.074884
[30] train-error:0.075905
[31] train-error:0.075720
[32] train-error:0.072006
[33] train-error:0.069731
[34] train-error:0.068709
[35] train-error:0.068292
[36] train-error:0.065831
[37] train-error:0.064670
[38] train-error:0.064160
[39] train-error:0.062906
[40] train-error:0.061421
[41] train-error:0.060492
[42] train-error:0.059703
[43] train-error:0.059471
[44] train-error:0.059007
[45] train-error:0.056685
[46] train-error:0.054178
[47] train-error:0.053296
[48] train-error:0.053064
[49] train-error:0.052878
[50] train-error:0.053064
[51] train-error:0.052739
[52] train-error:0.048004
[53] train-error:0.047539
[54] train-error:0.045729
[55] train-error:0.045868
[56] train-error:0.045636
[57] train-error:0.045357
[58] train-error:0.044754
[59] train-error:0.043268
[60] train-error:0.042665
[61] train-error:0.042293
[62] train-error:0.041922
[63] train-error:0.041736
[64] train-error:0.041365
[65] train-error:0.041411
[66] train-error:0.041179
[67] train-error:0.040761
[68] train-error:0.040204
[69] train-error:0.040065
[70] train-error:0.040019
[71] train-error:0.039786
[72] train-error:0.037837
[73] train-error:0.037372
[74] train-error:0.037187
[75] train-error:0.036722
[76] train-error:0.036351
[77] train-error:0.036305
[78] train-error:0.035562
[79] train-error:0.034633
[80] train-error:0.034587
[81] train-error:0.034448
[82] train-error:0.034262
[83] train-error:0.034215
[84] train-error:0.034215
[85] train-error:0.032312
[86] train-error:0.032358
[87] train-error:0.032126
[88] train-error:0.031616
[89] train-error:0.030223
[90] train-error:0.030130
[91] train-error:0.029805
[92] train-error:0.029759
[93] train-error:0.029387
[94] train-error:0.029062
[95] train-error:0.028087
[96] train-error:0.027159
[97] train-error:0.026880
[98] train-error:0.026880
[99] train-error:0.026648
[100] train-error:0.026091
[101] train-error:0.025766
[102] train-error:0.025023
[103] train-error:0.025023
[104] train-error:0.025070
[105] train-error:0.024884
[106] train-error:0.024745
[107] train-error:0.024141
[108] train-error:0.023909
[109] train-error:0.023955
[110] train-error:0.023955
[111] train-error:0.023863
[112] train-error:0.023398
[113] train-error:0.022516
[114] train-error:0.021820
[115] train-error:0.021495
[116] train-error:0.021402
[117] train-error:0.020799
[118] train-error:0.020752
[119] train-error:0.020706
[120] train-error:0.020195
[121] train-error:0.019916
[122] train-error:0.019824
[123] train-error:0.019313
[124] train-error:0.019220
[125] train-error:0.018802
[126] train-error:0.018709
[127] train-error:0.018152
[128] train-error:0.018059
[129] train-error:0.017967
[130] train-error:0.017642
[131] train-error:0.017409
[132] train-error:0.017502
[133] train-error:0.017409
[134] train-error:0.016527
[135] train-error:0.016435
[136] train-error:0.016435
[137] train-error:0.016481
[138] train-error:0.016435
[139] train-error:0.016017
[140] train-error:0.015831
[141] train-error:0.015645
[142] train-error:0.015645
[143] train-error:0.015692
[144] train-error:0.015460
[145] train-error:0.015460
[146] train-error:0.015413
[147] train-error:0.014670
[148] train-error:0.014578
[149] train-error:0.014578
[150] train-error:0.014485
[151] train-error:0.013928
[152] train-error:0.013556
[153] train-error:0.013278
[154] train-error:0.013370
[155] train-error:0.012999
[156] train-error:0.012674
[157] train-error:0.012813
[158] train-error:0.012488
[159] train-error:0.012488
[160] train-error:0.012349
[161] train-error:0.012256
[162] train-error:0.012024
[163] train-error:0.012024
[164] train-error:0.011885
[165] train-error:0.011421
[166] train-error:0.011235
[167] train-error:0.011003
[168] train-error:0.010956
[169] train-error:0.011003
[170] train-error:0.010910
[171] train-error:0.010864
[172] train-error:0.010817
[173] train-error:0.010492
[174] train-error:0.010446
[175] train-error:0.010306
[176] train-error:0.010306
[177] train-error:0.010306
[178] train-error:0.010214
[179] train-error:0.009981
[180] train-error:0.009842
[181] train-error:0.009749
[182] train-error:0.009656
[183] train-error:0.009564
[184] train-error:0.009656
[185] train-error:0.009285
[186] train-error:0.009239
[187] train-error:0.009099
[188] train-error:0.008914
[189] train-error:0.008960
[190] train-error:0.008867
[191] train-error:0.008774
[192] train-error:0.008682
[193] train-error:0.008728
[194] train-error:0.008728
[195] train-error:0.008589
[196] train-error:0.008635
[197] train-error:0.008449
[198] train-error:0.008217
[199] train-error:0.008264
[200] train-error:0.008124
modelo_XGBoot_under = xgboost::xgboost(data = as.matrix(under_train[, -1]),#smote_train[, -1]),
label = ifelse(as.numeric(under_train$DESERTOR) == 2, 1, 0)# Es necesario tener una categ. binaria
,objective = "binary:logistic",#num_class
nrounds = 200)
[1] train-error:0.177463
[2] train-error:0.157220
[3] train-error:0.152497
[4] train-error:0.143050
[5] train-error:0.145749
[6] train-error:0.142375
[7] train-error:0.134953
[8] train-error:0.132928
[9] train-error:0.128880
[10] train-error:0.124831
[11] train-error:0.123482
[12] train-error:0.119433
[13] train-error:0.114035
[14] train-error:0.110661
[15] train-error:0.103914
[16] train-error:0.101215
[17] train-error:0.099190
[18] train-error:0.097166
[19] train-error:0.100540
[20] train-error:0.087045
[21] train-error:0.080297
[22] train-error:0.080297
[23] train-error:0.077598
[24] train-error:0.071525
[25] train-error:0.070850
[26] train-error:0.068151
[27] train-error:0.068151
[28] train-error:0.065452
[29] train-error:0.062753
[30] train-error:0.062078
[31] train-error:0.056680
[32] train-error:0.052632
[33] train-error:0.051282
[34] train-error:0.051282
[35] train-error:0.049933
[36] train-error:0.049933
[37] train-error:0.047908
[38] train-error:0.047233
[39] train-error:0.043860
[40] train-error:0.041161
[41] train-error:0.041161
[42] train-error:0.041161
[43] train-error:0.040486
[44] train-error:0.039811
[45] train-error:0.038462
[46] train-error:0.035762
[47] train-error:0.034413
[48] train-error:0.032389
[49] train-error:0.032389
[50] train-error:0.029690
[51] train-error:0.029015
[52] train-error:0.027665
[53] train-error:0.024291
[54] train-error:0.023617
[55] train-error:0.022267
[56] train-error:0.021592
[57] train-error:0.020243
[58] train-error:0.018219
[59] train-error:0.018219
[60] train-error:0.017544
[61] train-error:0.018219
[62] train-error:0.016869
[63] train-error:0.016869
[64] train-error:0.016869
[65] train-error:0.014845
[66] train-error:0.014170
[67] train-error:0.011471
[68] train-error:0.010796
[69] train-error:0.011471
[70] train-error:0.011471
[71] train-error:0.010121
[72] train-error:0.010121
[73] train-error:0.010121
[74] train-error:0.010121
[75] train-error:0.010121
[76] train-error:0.010121
[77] train-error:0.009447
[78] train-error:0.008772
[79] train-error:0.008097
[80] train-error:0.008772
[81] train-error:0.008772
[82] train-error:0.007422
[83] train-error:0.006748
[84] train-error:0.006748
[85] train-error:0.006748
[86] train-error:0.007422
[87] train-error:0.006748
[88] train-error:0.006073
[89] train-error:0.006073
[90] train-error:0.005398
[91] train-error:0.005398
[92] train-error:0.004049
[93] train-error:0.004723
[94] train-error:0.004723
[95] train-error:0.004723
[96] train-error:0.004723
[97] train-error:0.004723
[98] train-error:0.004723
[99] train-error:0.004723
[100] train-error:0.004723
[101] train-error:0.005398
[102] train-error:0.005398
[103] train-error:0.005398
[104] train-error:0.005398
[105] train-error:0.004723
[106] train-error:0.004723
[107] train-error:0.004723
[108] train-error:0.004723
[109] train-error:0.004049
[110] train-error:0.004049
[111] train-error:0.004723
[112] train-error:0.004723
[113] train-error:0.004723
[114] train-error:0.004723
[115] train-error:0.004723
[116] train-error:0.004723
[117] train-error:0.004723
[118] train-error:0.004723
[119] train-error:0.004723
[120] train-error:0.004723
[121] train-error:0.004049
[122] train-error:0.004049
[123] train-error:0.003374
[124] train-error:0.003374
[125] train-error:0.003374
[126] train-error:0.003374
[127] train-error:0.003374
[128] train-error:0.003374
[129] train-error:0.004049
[130] train-error:0.004049
[131] train-error:0.004049
[132] train-error:0.004049
[133] train-error:0.002699
[134] train-error:0.003374
[135] train-error:0.003374
[136] train-error:0.003374
[137] train-error:0.002024
[138] train-error:0.002024
[139] train-error:0.001350
[140] train-error:0.001350
[141] train-error:0.001350
[142] train-error:0.001350
[143] train-error:0.001350
[144] train-error:0.001350
[145] train-error:0.001350
[146] train-error:0.001350
[147] train-error:0.001350
[148] train-error:0.001350
[149] train-error:0.001350
[150] train-error:0.001350
[151] train-error:0.001350
[152] train-error:0.001350
[153] train-error:0.001350
[154] train-error:0.001350
[155] train-error:0.001350
[156] train-error:0.001350
[157] train-error:0.001350
[158] train-error:0.001350
[159] train-error:0.001350
[160] train-error:0.001350
[161] train-error:0.001350
[162] train-error:0.001350
[163] train-error:0.000675
[164] train-error:0.000675
[165] train-error:0.001350
[166] train-error:0.001350
[167] train-error:0.001350
[168] train-error:0.000675
[169] train-error:0.000000
[170] train-error:0.000000
[171] train-error:0.000675
[172] train-error:0.000675
[173] train-error:0.001350
[174] train-error:0.001350
[175] train-error:0.001350
[176] train-error:0.001350
[177] train-error:0.001350
[178] train-error:0.001350
[179] train-error:0.001350
[180] train-error:0.000675
[181] train-error:0.000675
[182] train-error:0.000675
[183] train-error:0.000000
[184] train-error:0.000000
[185] train-error:0.000000
[186] train-error:0.000675
[187] train-error:0.000675
[188] train-error:0.000675
[189] train-error:0.000675
[190] train-error:0.000675
[191] train-error:0.000000
[192] train-error:0.000000
[193] train-error:0.000000
[194] train-error:0.000000
[195] train-error:0.000000
[196] train-error:0.000000
[197] train-error:0.000000
[198] train-error:0.000000
[199] train-error:0.000000
[200] train-error:0.000000
pred_smote <- predict(modelo_XGBoot_smote, newdata = as.matrix(Testing[,-1]))
pred_under <- predict(modelo_XGBoot_over, newdata = as.matrix(Testing[,-1]))
pred_over <- predict(modelo_XGBoot_under, newdata = as.matrix(Testing[,-1]))
pred_smote = ifelse(pred_smote > 0.5, 2, 1) %>% as.factor()
pred_under = ifelse(pred_under > 0.5, 2, 1) %>% as.factor()
pred_over = ifelse(pred_over > 0.5, 2, 1) %>% as.factor()
levels(pred_smote) <- c("NO","SI")
levels(pred_under) <- c("NO","SI")
levels(pred_over) <- c("NO","SI")
cm_XGBoot_smote <- caret::confusionMatrix(table(pred_smote,Testing[,1],dnn = c("Predicho", "Actual")),positive="SI")
cm_XGBoot_smote
Confusion Matrix and Statistics
Actual
Predicho NO SI
NO 3411 167
SI 1722 207
Accuracy : 0.657
95% CI : (0.6443, 0.6695)
No Information Rate : 0.9321
P-Value [Acc > NIR] : 1
Kappa : 0.0745
Mcnemar's Test P-Value : <2e-16
Sensitivity : 0.55348
Specificity : 0.66452
Pos Pred Value : 0.10731
Neg Pred Value : 0.95333
Prevalence : 0.06791
Detection Rate : 0.03759
Detection Prevalence : 0.35028
Balanced Accuracy : 0.60900
'Positive' Class : SI
cm_XGBoot_under <- caret::confusionMatrix(table(pred_under,Testing[,1],dnn = c("Predicho", "Actual")),positive="SI")
cm_XGBoot_under
Confusion Matrix and Statistics
Actual
Predicho NO SI
NO 4919 268
SI 214 106
Accuracy : 0.9125
95% CI : (0.9047, 0.9198)
No Information Rate : 0.9321
P-Value [Acc > NIR] : 1.00000
Kappa : 0.2591
Mcnemar's Test P-Value : 0.01577
Sensitivity : 0.28342
Specificity : 0.95831
Pos Pred Value : 0.33125
Neg Pred Value : 0.94833
Prevalence : 0.06791
Detection Rate : 0.01925
Detection Prevalence : 0.05811
Balanced Accuracy : 0.62087
'Positive' Class : SI
cm_XGBoot_over <- caret::confusionMatrix(table(pred_over,Testing[,1],dnn = c("Predicho", "Actual")),positive="SI")
cm_XGBoot_over
Confusion Matrix and Statistics
Actual
Predicho NO SI
NO 3782 127
SI 1351 247
Accuracy : 0.7316
95% CI : (0.7197, 0.7433)
No Information Rate : 0.9321
P-Value [Acc > NIR] : 1
Kappa : 0.1578
Mcnemar's Test P-Value : <2e-16
Sensitivity : 0.66043
Specificity : 0.73680
Pos Pred Value : 0.15457
Neg Pred Value : 0.96751
Prevalence : 0.06791
Detection Rate : 0.04485
Detection Prevalence : 0.29018
Balanced Accuracy : 0.69861
'Positive' Class : SI
######### CROSS VALIDATIONSSS #####
# library(caret)
# training_set<- over_train
# folds = createFolds(over_train$DESERTOR, k = 10)
# cv = lapply(folds, function(x) {
# training_fold = training_set[-x, ]
# test_fold = training_set[x, ]
# classifier = xgboost(data = as.matrix(training_set[, -85]),
# label = ifelse(as.numeric(training_set$DESERTOR) == 2, 1, 0), objective = "binary:logistic",
# nrounds = 5)
# y_pred = predict(classifier, newdata = as.matrix(test_fold[,-85]))
# y_pred = ifelse(y_pred > 0.5, 2, 1) %>% as.factor()
# levels(y_pred) <- c("NO","SI")
#
# cm = table(test_fold[, 85], y_pred)
# print(cm)
# accuracy = (cm[1,1]+cm[2,2])/(cm[1,1]+cm[1,2]+cm[2,1]+cm[2,2])
# sensibilidad = (cm[2,2])/(cm[2,1]+cm[2,2])
# print(accuracy)
# print(sensibilidad)
# return(sensibilidad)
# })
# accuracy = mean(as.numeric(cv))
# accuracy_sd = sd(as.numeric(cv))
#####################################################################################################
modelo_SVM_smote <- svm(DESERTOR ~ ., data = smote_train,
#class.weights = c("0"=0.3, "1"=0.7),
cost=100)# es coste es para disminur el error mientras mas grande el algoritmo tratara de ob tener una menor error posible
modelo_SVM_under <- svm(DESERTOR ~ ., data = under_train,cost=10)
modelo_SVM_over <- svm(DESERTOR ~ ., data = over_train,cost=100)
modelo_SVM_weigths <- svm(DESERTOR ~ ., data = Training, class.weights = c("NO"=0.1, "SI"=0.9),cost=10)
############################################################
###### REALIZAMOS LAS EVALUACIONES EN BASE A LA DATA DE TESTING
cm_SVM_smote <- caret::confusionMatrix(table(predict(modelo_SVM_smote,Testing)
,Testing[,1],dnn = c("Predicho", "Actual")),positive="SI")
cm_SVM_smote
Confusion Matrix and Statistics
Actual
Predicho NO SI
NO 5081 358
SI 52 16
Accuracy : 0.9255
95% CI : (0.9183, 0.9323)
No Information Rate : 0.9321
P-Value [Acc > NIR] : 0.9735
Kappa : 0.0526
Mcnemar's Test P-Value : <2e-16
Sensitivity : 0.042781
Specificity : 0.989869
Pos Pred Value : 0.235294
Neg Pred Value : 0.934179
Prevalence : 0.067914
Detection Rate : 0.002905
Detection Prevalence : 0.012348
Balanced Accuracy : 0.516325
'Positive' Class : SI
cm_SVM_under <- caret::confusionMatrix(table(predict(modelo_SVM_under,Testing)
,Testing[,1],dnn = c("Predicho", "Actual")),positive="SI")
cm_SVM_under
Confusion Matrix and Statistics
Actual
Predicho NO SI
NO 3231 114
SI 1902 260
Accuracy : 0.6339
95% CI : (0.621, 0.6467)
No Information Rate : 0.9321
P-Value [Acc > NIR] : 1
Kappa : 0.1009
Mcnemar's Test P-Value : <2e-16
Sensitivity : 0.69519
Specificity : 0.62946
Pos Pred Value : 0.12026
Neg Pred Value : 0.96592
Prevalence : 0.06791
Detection Rate : 0.04721
Detection Prevalence : 0.39259
Balanced Accuracy : 0.66232
'Positive' Class : SI
cm_SVM_over <- caret::confusionMatrix(table(predict(modelo_SVM_over,Testing)
,Testing[,1],dnn = c("Predicho", "Actual")),positive="SI")
cm_SVM_over
Confusion Matrix and Statistics
Actual
Predicho NO SI
NO 3936 185
SI 1197 189
Accuracy : 0.749
95% CI : (0.7374, 0.7605)
No Information Rate : 0.9321
P-Value [Acc > NIR] : 1
Kappa : 0.1207
Mcnemar's Test P-Value : <2e-16
Sensitivity : 0.50535
Specificity : 0.76680
Pos Pred Value : 0.13636
Neg Pred Value : 0.95511
Prevalence : 0.06791
Detection Rate : 0.03432
Detection Prevalence : 0.25168
Balanced Accuracy : 0.63608
'Positive' Class : SI
cm_SVM_weigths <- caret::confusionMatrix(table(predict(modelo_SVM_weigths,Testing)
,Testing[,1],dnn = c("Predicho", "Actual")),positive="SI")
cm_SVM_weigths
Confusion Matrix and Statistics
Actual
Predicho NO SI
NO 4174 188
SI 959 186
Accuracy : 0.7917
95% CI : (0.7808, 0.8024)
No Information Rate : 0.9321
P-Value [Acc > NIR] : 1
Kappa : 0.1588
Mcnemar's Test P-Value : <2e-16
Sensitivity : 0.49733
Specificity : 0.81317
Pos Pred Value : 0.16245
Neg Pred Value : 0.95690
Prevalence : 0.06791
Detection Rate : 0.03378
Detection Prevalence : 0.20792
Balanced Accuracy : 0.65525
'Positive' Class : SI
#table(smote_train$DESERTOR, fitted(modelo_SVM_smote), dnn = c("Actual", "Predicho"))
#################################################################################################################
################################### RESUMEN DE RESULTADOS #######################################################
# #################################################################################################################
# RF_MDL <- caret::train(x = x_trainRF, y = y_trainRF ,verbose = FALSE
# , method = "rf", metric = "Acurracy", tuneGrid = tunegrid
# , trControl = ctrl)
# mc_PredictOrigTuneGrid<- table(predict(RF_MDL,x_testRF),y_testRF)
# mc_PredictOrigTuneGrid
# cm_RF <- confusionMatrix(predict(RF_MDL,x_testRF), y_testRF,positive="SI")
# cm_RF$byClass
models <- list(
rf_smote = modelo_rf_smote,
rf_under = modelo_rf_under,
rf_over = modelo_rf_over,
RF_own_smote = modelo_RF_own_smote,
RF_own_under = modelo_RF_own_under,
RF_own_over = modelo_RF_own_over,
Nb_smote = modelo_Nb_smote,
Nb_under = modelo_Nb_under,
Nb_over = modelo_Nb_over,
TreeBagg_smote = modelo_TreeBagg_smote,
TreeBagg_under = modelo_TreeBagg_under,
TreeBagg_over = modelo_TreeBagg_over,
cart_smote = modelo_cart_smote,
cart_under = modelo_cart_under,
cart_over = modelo_cart_over,
XGBoot_smote = modelo_XGBoot_smote,
XGBoot_under = modelo_XGBoot_under,
XGBoot_over = modelo_XGBoot_over,
SVM_smote = modelo_SVM_smote,
SVM_under = modelo_SVM_under,
SVM_over = modelo_SVM_over,
SVM_weigths = modelo_SVM_weigths
)
# 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,
rf_smote ={rowModel<- 1 }, rf_under ={rowModel<- 2 }, rf_over ={rowModel<- 3 },
RF_own_smote ={rowModel<- 4 }, RF_own_under ={rowModel<- 5 }, RF_own_over ={rowModel<- 6 },
Nb_smote ={rowModel<- 7 }, Nb_under ={rowModel<- 8 }, Nb_over ={rowModel<- 9 },
TreeBagg_smote ={rowModel<- 10}, TreeBagg_under ={rowModel<- 11}, TreeBagg_over ={rowModel<- 12},
cart_smote ={rowModel<- 13}, cart_under ={rowModel<- 14}, cart_over ={rowModel<- 15},
XGBoot_smote ={rowModel<- 16}, XGBoot_under ={rowModel<- 17}, XGBoot_over ={rowModel<- 18},
SVM_smote ={rowModel<- 19}, SVM_under ={rowModel<- 20}, SVM_over ={rowModel<- 21},
SVM_weigths ={rowModel<- 22}
)
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
colnames(comparison) <- c(" model","Sensitivity","Specificity"," Precision"," Recall"," F1");
write.csv(comparison[,1:6],file="UPUPLICA_ModeloGeneral.csv", sep=",",row.names = FALSE)