Base de datos, paquetes y limepieza del entorno

Cargue todos los paquetes que necesita para trabajar con data.table, modelos de predicción de regresión, árboles de decisión, cluster y Cross-Validation. Además, cargue las bases de datos. (1 punto)

Importante: Verifique la clase (class) de las variables que vaya a utilizar en todos sus modelos y si es necesario transformarla a numérica o factor, hágalo!

rm(list=ls())
library(data.table)
library(ggplot2)
library(caret)
library(jtools)
library(scales)
library(rpart.plot)
library(rpart)
library(caret)
library(factoextra)
library(dbscan)
library(janitor)
library(texreg)
library(corrgram)       
library(corrplot)
library(moderndive)
library(tidyverse)
Paris <- fread("ParisHousing.csv")
General <- fread("CC GENERAL.csv")
diabetes <- fread("diabetes.csv")

Parte 1

Pregunta 1.

  1. Realice dos modelos de regresión lineal multiple para predecir la variable price ¿Cuál predice mejor dentro de muestra?. Explique y calcule los criterios (8 puntos) Observación: No obtendrá puntaje si compara un modelo de regresión de una variable.
#Modelo 1
f1 <- formula(price ~ squareMeters + basement + attic + garage)
reg1 <- lm(formula=f1, data=Paris)
sum01 <- summ(reg1)
sum01
## MODEL INFO:
## Observations: 10000
## Dependent Variable: price
## Type: OLS linear regression 
## 
## MODEL FIT:
## F(4,9995) = 1943939011.69, p = 0.00
## R² = 1.00
## Adj. R² = 1.00 
## 
## Standard errors: OLS
## -------------------------------------------------------
##                         Est.     S.E.     t val.      p
## ------------------ --------- -------- ---------- ------
## (Intercept)          6451.21   125.18      51.53   0.00
## squareMeters          100.00     0.00   88166.45   0.00
## basement               -0.01     0.01      -0.64   0.52
## attic                  -0.01     0.01      -1.01   0.31
## garage                  0.18     0.12       1.48   0.14
## -------------------------------------------------------
#Modelo 2
f2 <- formula(price ~ squareMeters + basement + attic + garage + numPrevOwners + isNewBuilt + floors)
reg2 <- lm(formula = f2, data = Paris)
sum02 <- summ(reg2)
sum02
## MODEL INFO:
## Observations: 10000
## Dependent Variable: price
## Type: OLS linear regression 
## 
## MODEL FIT:
## F(7,9992) = 1444733184.68, p = 0.00
## R² = 1.00
## Adj. R² = 1.00 
## 
## Standard errors: OLS
## ---------------------------------------------------------
##                          Est.     S.E.      t val.      p
## ------------------- --------- -------- ----------- ------
## (Intercept)           3719.14   134.62       27.63   0.00
## squareMeters           100.00     0.00   100528.29   0.00
## basement                -0.01     0.01       -1.03   0.30
## attic                   -0.01     0.01       -1.19   0.23
## garage                   0.12     0.11        1.07   0.29
## numPrevOwners           -0.99    10.02       -0.10   0.92
## isNewBuilt             132.52    57.25        2.31   0.02
## floors                  54.27     0.99       54.79   0.00
## ---------------------------------------------------------
#Comparando modelos
Paris[, Price_mod1 := predict(reg1)]
Paris[, Price_mod2 := predict(reg2)]

#Analizando el MAE
MAE1 <- sum(abs(Paris$price - Paris$Price_mod1))/nrow(Paris)
MAE2 <- sum(abs(Paris$price - Paris$Price_mod2))/nrow(Paris)
data.table(MAE1, MAE2)
##       MAE1     MAE2
## 1: 2643.54 2324.194
#Analizando RMSE 
RMSE1 <- (sum((Paris$price - Paris$Price_mod1)^2)/nrow(Paris))^(1/2)
RMSE2 <- (sum((Paris$price - Paris$Price_mod2)^2)/nrow(Paris))^(1/2)
data.table(RMSE1, RMSE2)
##       RMSE1    RMSE2
## 1: 3262.135 2859.995
#Juntando todos los criterios de comparacion, a excepcion de los R^2 debido a que son iguales (observados en el summary)
data.table(regresion=c('Modelo 01','Modelo 02'),
           `Mean Absolute Error` = c(MAE1,MAE2),
           `Root Mean Squared Error`=c(RMSE1, RMSE2))
##    regresion Mean Absolute Error Root Mean Squared Error
## 1: Modelo 01            2643.540                3262.135
## 2: Modelo 02            2324.194                2859.995

A la hora de analizar ambos modelos, se puede manifestar que uno es mejor estimador de precios que otro y esto se debe gracias al RMSE y MAE, dejando excluido a los R^2 ya que son completamente iguales (R^2 = 1.00). Comenzando por el MAE, podemos decir que el modelo Nº2 es mejor ya que posee menos error absoluto medio. Por otra parte, el RMSE se comporta de la misma forma, me refiero con esto, a que el modelo 2 posee menos RMSE. Por lo tanto, el mejor modelo para estimar el precio es el modelo 2.

Pregunta 2

  1. Realice validacion cruzada (CV) a los modelos de la pregunta anterior por el metodo K-folds con 10 folds. ¿Se mantienen las conclusiones anteriores?. (8 puntos) Pista1: Recuerde setear la semilla set.seed(12345). Pista2: Si existen variables con NA recuerde que puede excluirlas esas observaciones del análisis, pero no las elimine.
#Modelo 1
set.seed(12345)
setupKCV <- trainControl(method = "cv" , number = 10)

predkfolds1<-train(f1,data=Paris,method="lm",trControl= setupKCV)
print(predkfolds1)
## Linear Regression 
## 
## 10000 samples
##     4 predictor
## 
## No pre-processing
## Resampling: Cross-Validated (10 fold) 
## Summary of sample sizes: 9000, 9000, 9000, 9000, 9000, 9000, ... 
## Resampling results:
## 
##   RMSE      Rsquared   MAE     
##   3262.997  0.9999987  2645.209
## 
## Tuning parameter 'intercept' was held constant at a value of TRUE
#Modelo 2
predkfolds2<-train(f2,data=Paris,method="lm",trControl= setupKCV)
print(predkfolds2)
## Linear Regression 
## 
## 10000 samples
##     7 predictor
## 
## No pre-processing
## Resampling: Cross-Validated (10 fold) 
## Summary of sample sizes: 9000, 9000, 9000, 9000, 9000, 9000, ... 
## Resampling results:
## 
##   RMSE      Rsquared  MAE     
##   2861.753  0.999999  2326.358
## 
## Tuning parameter 'intercept' was held constant at a value of TRUE

Gracias a la validacion cruzada (CV) se puede obtener las mismas conclusiones, es decir, el Modelo 2 sigue siendo mejor estimador que el Modelo 1.

Parte 2

Pregunta 1

  1. Realice dos modelos de árboles de clasificación de la variable Outcome. Pruebe cuál modelo clasifica mejor con validación cruzada. Entrene el modelo con un 75% de la muestra y testee con el 25% restante. Explicite qué modelo es mejor y porqué. (12 puntos) Importante: Recuerde setear la semilla set.seed(12345). Observación: No obtendrá puntaje si compara un modelo de clasificación de una variable.
#árbol Nº1
arbol_1 <- rpart(Outcome ~. , data=diabetes, method = "class")
rpart.plot(arbol_1)

#árbol Nº2
arbol_2 <- rpart(Outcome ~ Insulin + Glucose + Age,data = diabetes, method = "class")
rpart.plot(arbol_2)

#CV arbol 1
div1 <- createDataPartition(diabetes$Outcome, times = 1, p = 0.75, list = F)
train1 <- diabetes[div1,]
test1 <-  diabetes[-div1,]

arbol_1_t <- rpart(Outcome ~. , data=train1, method = "class")
rpart.plot(arbol_1_t)

#CV arbol 1, contnuación
prediccion_1 <- predict(arbol_1_t, newdata = test1, type = "class")
matriz1 <- table(test1$Outcome, prediccion_1)
matriz1
##    prediccion_1
##      0  1
##   0 95 17
##   1 38 42
precision1 <- sum(diag(matriz1))/sum(matriz1)
precision1
## [1] 0.7135417
#CV arbol 2
div2 <- createDataPartition(diabetes$Outcome, times = 1, p = 0.75, list = F)
train2 <- diabetes[div2,]
test2 <- diabetes[-div2,]

arbol_2_t <- rpart(Outcome ~  Insulin + Glucose + Age, data=train2, method = "class")
rpart.plot(arbol_2_t)

prediccion_2 <- predict(arbol_2_t, newdata = test2, type = "class")
matriz2 <- table(test2$Outcome, prediccion_2)
matriz2
##    prediccion_2
##       0   1
##   0 109  14
##   1  35  34
precision2 <- sum(diag(matriz2))/sum(matriz2)
precision2
## [1] 0.7447917

Por lo tanto, el arbol número 2 es mejor prediciendo que el árbol número 1, ya que, posee un porcentaje mayor de prediccion que el otro: arbol 2 = 74.48% y arbol 1 = 71.35%

Parte 3

Pregunta 1

  1. Realice un gráfico de correlación con todas las variables.
General1 <- General[, .(BALANCE, BALANCE_FREQUENCY, PURCHASES, ONEOFF_PURCHASES,INSTALLMENTS_PURCHASES, CASH_ADVANCE, PURCHASES_FREQUENCY, ONEOFF_PURCHASES_FREQUENCY, PURCHASES_INSTALLMENTS_FREQUENCY,CASH_ADVANCE_FREQUENCY, CREDIT_LIMIT, PAYMENTS, MINIMUM_PAYMENTS, PRC_FULL_PAYMENT)]
datacor <- cor(General1)
corrplot(datacor, method = 'color')

Pregunta 2

  1. Proponga dos modelos sobre las cuales segmentar la muestra, en orden de hacer análisis de clusters con el método de kmeans. Explique el por qué utiliza estas variables. (8 puntos) Pista1: Si existen outliers recuerde eliminarlos, para esto cree un nuevo objeto donde se encuentren estas dos variables. Observación: No obtendrá puntaje si compara dos modelos con solo dos variables.

El modelo 1 utilizaré las variables PURCHARSES y BALANCE, esto se debe a que el número compras de una persona y el dinero que posee la tarjeta a la hora de pagar puede ser un buen sistema de clasificacion de clientes.

#Modelo 1
data1 <- General[, .(BALANCE, PURCHASES)]

#fviz_nbclust(x = data1, FUNcluster = kmeans, method = "wss", k.max = 15, diss = get_dist(data1, method = "euclidean"), nstart = 15)

#PARA LA CORRECCIÓN: SE DEMORÓ MUCHO EN CORRER. LA PROFESORA ME DIJO QUE HICIERA CON 4 CLUSTER.

k1<-kmeans(x=data1,centers=4,nstart=15)
fviz_cluster(k1,data=data1,geom = "point")

Otro modelo que se puede utilizar para clasificar (Modelo 2), es usando las variables CASHADVANCE y CASHADVANCEFREQUENCY, es otra posibilidad debido a que el banco puede segmentar a base del efectivo adeltantado y a frecuencia de pago de ello.

data2 <- General[, .(CASH_ADVANCE, CASH_ADVANCE_FREQUENCY)]

#fviz_nbclust(x = data2, FUNcluster = kmeans, method = "wss", k.max = 15, diss = get_dist(data2, method = "euclidean"), nstart = 15)

#PARA LA CORRECCIÓN: SE DEMORÓ MUCHO EN CORRER. LA PROFESORA ME DIJO QUE HICIERA CON 4 CLUSTER.

k2 <- kmeans(x=data2,centers=4,nstart=15)
fviz_cluster(k2,data=data2,geom = "point")

Parte 4

Pregunta 1

  1. Explique la importancia de CV

La importancia del CV es primordialmente evaluar modelos como, por ejemplo, de regresiones. Así, posteriormente, compararlo con otro, aportando a la desicion sobre cuál es mejor estimador de lo que se esta buscando o investigando. Por lo tanto, la importancia del CV se basa en la funcion de comparación de modelos.

Pregunta 2

  1. ¿Qué es la relación espuria?

Una relacion espuria es cuando dos variables no poseen alguna correlacion logica entre ellas, en otras palabras, no existe un lazo que los una como, por ejemplo, gravedad y contabilidad, variables que no tienen conexión logica.

Pregunta 3

  1. ¿Qué es overfitting?

Overfitting es el entrenamiento automatizado del sistema o aplicación para poder originar un algoritmo sobre las variables que probablemente no tengan alguna conexion concisa.