Skip to content

Instantly share code, notes, and snippets.

@FraGoTe
Created June 14, 2019 13:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save FraGoTe/96eaa0c2e934e9d4e2fda905a2a3dfa5 to your computer and use it in GitHub Desktop.
Save FraGoTe/96eaa0c2e934e9d4e2fda905a2a3dfa5 to your computer and use it in GitHub Desktop.
install.packages("readxl")
library("readxl")
data <- read_excel("BASE_ALERTAS_2.xlsx",sheet=2)
table(data$TARGET)
#Se elimina la columna del codigo del cliente
data$ID_CLIENTE <- NULL
#Se eliminan las columnas que contienen valores en 0
data$IMPORTE_SAL <- NULL
data$IMPORTE_MN_S <- NULL
data$CANTIDAD_MN_S <- NULL
data$IMPORTE_MY_S <- NULL
data$CANTIDAD_MY_S <- NULL
#Convertimos a factor las distintas categorias o clases que posee la data
data$TARGET <- as.factor(data$TARGET)
data$TIP_DOCUMENTO <- as.factor(data$TIP_DOCUMENTO)
data$TIP_PERSONA <- as.factor(data$TIP_PERSONA)
data$PAIS_RESIDENCIA <- as.factor(data$PAIS_RESIDENCIA)
data$GENERO <- as.factor(data$GENERO)
data$COD_POSTAL <- as.factor(data$COD_POSTAL)
data$EDAD <- as.integer(data$EDAD)
data$ANTIGUEDAD <- as.integer(data$ANTIGUEDAD)
data$MEDIDA_CANTIDAD <- as.integer(data$MEDIDA_CANTIDAD)
data$MEDIDA_IMPORTE <- as.double(data$MEDIDA_IMPORTE)
data$MEDIDA_CONCEPTO <- as.double(data$MEDIDA_CONCEPTO)
data$IMPORTE_T <- as.double(data$IMPORTE_T)
data$PROMEDIO_T <- as.double(data$PROMEDIO_T)
data$IMPORTE_MN <- as.double(data$IMPORTE_MN)
data$CANTIDAD_MN <- as.integer(data$CANTIDAD_MN)
data$IMPORTE_MY <- as.double(data$IMPORTE_MY)
data$CANTIDAD_MY <- as.integer(data$CANTIDAD_MY)
data$IMPORTE_ING <- as.double(data$IMPORTE_ING)
data$CANTIDAD_ING <- as.integer(data$CANTIDAD_ING)
data$IMPORTE_MN_I <- as.double(data$IMPORTE_MN_I)
data$CANTIDAD_MN_I <- as.integer(data$CANTIDAD_MN_I)
data$IMPORTE_MY_I <- as.double(data$IMPORTE_MY_I)
data$CANTIDAD_MY_I <- as.integer(data$CANTIDAD_MY_I)
data$CANTIDAD_SAL <- as.integer(data$CANTIDAD_SAL)
data$CANTIDAD_T <- as.integer(data$CANTIDAD_T)
data$CANTIDAD_PRODUCTO <- as.integer(data$CANTIDAD_PRODUCTO)
data$CANTIDAD_PRODUCTOS_DIFENTES <- as.integer(data$CANTIDAD_PRODUCTOS_DIFENTES)
data$CANTIDAD_OFICINAS_DISTINTAS_APERTURA <- as.integer(data$CANTIDAD_OFICINAS_DISTINTAS_APERTURA)
#En el siguiente gráfico podemos apreciar tenemos datos perdidos entre
#COD_POSTAL y GENERO, es decir que dichos datos se han perdido en simultaneo en el 38% de la data.
library(VIM)
aggr(data,numbers=T, sortComb=TRUE, sortVar=TRUE, only.miss=TRUE)
#Asignando el valor empresa a los campos NA
levels <- levels(data$GENERO)
levels[length(levels) + 1] <- "Empresa"
data$GENERO <- factor(data$GENERO, levels = levels)
data$GENERO[is.na(data$GENERO)] <- "Empresa"
levels <- levels(data$COD_POSTAL)
levels[length(levels) + 1] <- "Empresa"
data$COD_POSTAL <- factor(data$COD_POSTAL, levels = levels)
data$COD_POSTAL[is.na(data$COD_POSTAL)] <- "Empresa"
#vemos el summary de los datos y detectamos que existen valores perdidos en la data
#en los campos COD_POSTAL, GENERO y COD_OCUPACION
summary(data)
#Creamos las varibles dummys the los tipos de datos categoricos
library(caret)
dummies <- dummyVars(TARGET ~ ., data=data,
fullRank = TRUE)
dummies$TARGET <- as.factor(dummies$TARGET)
data1 <- as.data.frame(predict(dummies, newdata=data))
datos2 <- cbind(data1,TARGET= data$TARGET)
#Particionamos la data en 80% para train y 20% para test
library(caret)
set.seed(123)
index <- createDataPartition(datos2$TARGET,
p=0.8,
list=FALSE)
DataTrain <- datos2[ index, ]
DataTesting <- datos2[-index, ]
# Verificando que se mantenga la proporcion original
addmargins(table(data$TARGET))
round(prop.table(table(data$TARGET))*100,2)
addmargins(table(DataTrain$TARGET))
round(prop.table(table(DataTrain$TARGET))*100,2)
addmargins(table(DataTesting$TARGET))
round(prop.table(table(DataTesting$TARGET))*100,2)
#install.packages("DMwR")
library(DMwR)
set.seed(123)
Balance_train <- SMOTE(TARGET ~ .,
data=as.data.frame(DataTrain),
perc.over = 1000,
perc.under=150)
addmargins(table(DataTrain$TARGET))
addmargins(table(Balance_train$TARGET) )
library(caret)
ctrl <- trainControl(method="repeatedcv",
repeats = 3, number=10)
target <- "TARGET"
predictores <- setdiff(names(Balance_train), target)
predictores
set.seed(123)
modelo_C5 <- train(Balance_train[,predictores],
Balance_train[,target],
preProcess=c("range"),
method = "C5.0",
trControl = ctrl,
tuneLength = 5,
metric="Accuracy")
PredictC5 <- predict(modelo_C5,DataTesting[,predictores] )
# algoritmo aplicando Boosting
set.seed(123)
Modelo_Boost <- train(Balance_train[,predictores],
Balance_train[,target],
preProcess=c("range"),
method = "adaboost",
trControl = ctrl,
metric="Accuracy")
PredictBoost <- predict(Modelo_Boost,DataTesting[,predictores] )
# algoritmo aplicando Random forest
set.seed(123)
Modelo_RForest <- train(Balance_train[,predictores],
as.factor(Balance_train[,target]),
preProcess=c("range"),
method = "rf",
trControl = ctrl,
metric="Accuracy")
PredictRForest <- predict(Modelo_RForest,DataTesting[,predictores] )
# algoritmo aplicando SVM Radial
set.seed(123)
Modelo_SVM <- train(Balance_train[,predictores],
as.factor(Balance_train[,target]),
preProcess=c("range"),
method = "svmRadial",
trControl = ctrl,
metric="Accuracy")
PredictSVM <- predict(Modelo_SVM,DataTesting[,predictores] )
@FraGoTe
Copy link
Author

FraGoTe commented Jun 14, 2019

Modelo C5

Warning in preProcess.default(thresh = 0.95, k = 5, freqCut = 19, uniqueCut = 10, :
No variation for for: COD_DEPARTAMENTO11, COD_DEPARTAMENTO19, COD_CIIU0121, COD_CIIU1320, COD_CIIU1541, COD_CIIU1721, COD_CIIU1730, COD_CIIU1810, COD_CIIU1920, COD_CIIU2221, COD_CIIU2412, COD_CIIU2919, COD_CIIU2929, COD_CIIU3430, COD_CIIU4030, COD_CIIU5233, COD_CIIU6110, COD_CIIU6303, COD_CIIU7020, COD_CIIU7220, COD_CIIU7310, COD_CIIU8021, COD_CIIU9219, COD_OCUPACION225, COD_OCUPACIONASE, COD_OCUPACIONENC, COD_OCUPACIONJUE, COD_OCUPACIONMED, COD_OCUPACIONNOT, COD_OCUPACIONOBC, COD_OCUPACIONOFI, COD_OCUPACIONSUB, COD_POSTAL.L0026, CANTIDAD_SAL

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment