Skip to content

Instantly share code, notes, and snippets.

@FraGoTe
Created June 14, 2019 13:45
Show Gist options
  • Save FraGoTe/96eaa0c2e934e9d4e2fda905a2a3dfa5 to your computer and use it in GitHub Desktop.
Save FraGoTe/96eaa0c2e934e9d4e2fda905a2a3dfa5 to your computer and use it in GitHub Desktop.

Revisions

  1. FraGoTe created this gist Jun 14, 2019.
    177 changes: 177 additions & 0 deletions TrabajoMineria.R
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,177 @@

    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] )