Foro Actividad 2 - Luis Ortega

Enunciado del problema

A través de un conjunto de datos (TABLON_ENTRENAMIENTO.csv) se debe entrenar un modelo que realice la predicción de la variable TARGET teniendo en cuenta los inputs dados por las variables (VAR1, VAR2, VAR3, VAR4).

Se debe realizar el test del modelo utilizando los datos del fichero TABLON_VALIDACION.csv. Para ello, elija la métrica que mejor se adapte a la naturaleza de los datos. Pista: la variable TARGET es cuantitativa continua.

Este reto se debe resolver en RStudio y presentar los resultados a través de un documento (html o pdf) creado con RMarkdown.

Debe indagar sobre diferentes naturalezas de modelos predictivos y mostrar cuál de ellos es el que mejor resultado arroja para el caso bajo estudio tras realizar la comparación entre las métricas obtenidas.

Sólo se puntuarán las contribuciones que resuelvan (de forma parcial o total) el caso planteado.

Si sólo se participa en el segundo se podrá optar a una calificación máxima de 8 puntos. Si participan en el primero o en ambos podrán optar a una calificación máxima planteada.

Carga de librerías

library(ggplot2)
library(corrplot)
library(dplyr)
library(GGally)
library(rpart)
library(rpart.plot)
library(randomForest)
library(caret)
library(mltools)
library(e1071)
library(kernlab)

Carga de archivos

-Primer visualización de datos -Verificación de valores nulos -Rango de columna “TARGET” para conocer los valores esperados

train <- read.csv("C:/Users/ogl88/OneDrive/Documentos/Master Big Data/3. Técnicas de análisis y exploración de datos/Foro 2/TABLON_ENTRENAMIENTO.csv", header = TRUE, sep = ";")
test <- read.csv("C:/Users/ogl88/OneDrive/Documentos/Master Big Data/3. Técnicas de análisis y exploración de datos/Foro 2/TABLON_VALIDACION.csv", header = TRUE, sep = ";")
full <- rbind(train, test)
str(full)
## 'data.frame':    5400 obs. of  5 variables:
##  $ TARGET: num  0.128 0.138 0.167 0.277 0.376 ...
##  $ VAR1  : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ VAR2  : num  0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 ...
##  $ VAR3  : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ VAR4  : int  300 300 300 300 300 300 300 300 300 300 ...
colSums(is.na(full))
## TARGET   VAR1   VAR2   VAR3   VAR4 
##      0      0      0      0      0
range(full$TARGET)
## [1] 0.127681 4.619065
apply(full[2:5],2,function(x) unique(x))
## $VAR1
##  [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
## [26] 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
## 
## $VAR2
##  [1]  0.50  0.75  1.00  2.50  5.00  7.50 10.00  0.80  2.00  4.00  6.00  8.00
## 
## $VAR3
## [1] 1 3 6
## 
## $VAR4
## [1] 300 400 500

No se realiza limpieza de valores nulos al no haberlos

Correlación visual de variables vs TARGET

##             TARGET      VAR1          VAR2          VAR3          VAR4
## TARGET  1.00000000 0.9084015  1.275580e-01 -2.439513e-02 -3.366129e-02
## VAR1    0.90840145 1.0000000  0.000000e+00  0.000000e+00  0.000000e+00
## VAR2    0.12755801 0.0000000  1.000000e+00 -6.848732e-19 -4.376592e-20
## VAR3   -0.02439513 0.0000000 -6.848732e-19  1.000000e+00 -1.960702e-21
## VAR4   -0.03366129 0.0000000 -4.376592e-20 -1.960702e-21  1.000000e+00

-Se considera la variable 1 (VAR1) la mayormente relacionada a la determinación del valor de TARGET ## Modelo predictivo Se decide explorar correlación entre VAR1 y TARGET # Regresión lineal Para diseñar un modelo predictivo para la variable TARGET, al ser una variable continua y numérica se recurre a una regresion lineal y evaluando las 4 variables numéricas disponibles (VAR1 - VAR4)

set.seed(123)
Rlineal <- lm(TARGET ~ VAR1 + VAR2 + VAR3 + VAR4, data = train)
print(Rlineal)
## 
## Call:
## lm(formula = TARGET ~ VAR1 + VAR2 + VAR3 + VAR4, data = train)
## 
## Coefficients:
## (Intercept)         VAR1         VAR2         VAR3         VAR4  
##   0.9167535    0.0868552    0.0574772   -0.0196577   -0.0005762
summary(Rlineal)
## 
## Call:
## lm(formula = TARGET ~ VAR1 + VAR2 + VAR3 + VAR4, data = train)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1.31196 -0.49367  0.09087  0.47884  1.00021 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  0.9167535  0.0552213  16.601  < 2e-16 ***
## VAR1         0.0868552  0.0006762 128.455  < 2e-16 ***
## VAR2         0.0574772  0.0028297  20.312  < 2e-16 ***
## VAR3        -0.0196577  0.0047486  -4.140 3.57e-05 ***
## VAR4        -0.0005762  0.0001195  -4.822 1.49e-06 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.5476 on 3145 degrees of freedom
## Multiple R-squared:  0.8435, Adjusted R-squared:  0.8433 
## F-statistic:  4238 on 4 and 3145 DF,  p-value: < 2.2e-16

Se encuentra un valor de R^2 de 0.84, denotando una relación fuerte con la linea de regresión

predTARGET <- predict(Rlineal, newdata = test, type = "response")
summary(predTARGET)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  0.6435  1.9862  3.0757  3.0747  4.1576  5.5268
summary(Rlineal)
## 
## Call:
## lm(formula = TARGET ~ VAR1 + VAR2 + VAR3 + VAR4, data = train)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1.31196 -0.49367  0.09087  0.47884  1.00021 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  0.9167535  0.0552213  16.601  < 2e-16 ***
## VAR1         0.0868552  0.0006762 128.455  < 2e-16 ***
## VAR2         0.0574772  0.0028297  20.312  < 2e-16 ***
## VAR3        -0.0196577  0.0047486  -4.140 3.57e-05 ***
## VAR4        -0.0005762  0.0001195  -4.822 1.49e-06 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.5476 on 3145 degrees of freedom
## Multiple R-squared:  0.8435, Adjusted R-squared:  0.8433 
## F-statistic:  4238 on 4 and 3145 DF,  p-value: < 2.2e-16
cat("Rango de valores predecidos: ",range(predTARGET),"\n")
## Rango de valores predecidos:  0.6435484 5.526815
cat("Media de valores predecidos: ",mean(predTARGET))
## Media de valores predecidos:  3.074664
#inverso de 
regresion2=1 - sum((full$TARGET - predTARGET)^2) / sum((full$TARGET - mean(full$TARGET))^2)
## Warning in full$TARGET - predTARGET: longitud de objeto mayor no es múltiplo de
## la longitud de uno menor
print(regresion2)
## [1] 0.8064779
plot(Rlineal)

#TestRForest <- c(sqrt(mean((RforestTable[,1] - RforestTable[,2])^2)),R2(RforestTable[,1],RforestTable[,2]))

Unicamente se observa una relacion fuerte de TARGET con VAR1, cómo se mostró en el primer análisis

Se procede a evaluar predicción

t1 <- table(full$TARGET)
# Cálculo de precision y recall

precision <- t1[2]/(sum(t1[2]))
recall <- t1[2] / (t1[2] + t1[1])
print("Precisión: ")
## [1] "Precisión: "
precision
## 0.128498 
##        1
print("Recall: ")
## [1] "Recall: "
recall
## 0.128498 
##      0.5
# F1 score
F1<- 2*precision*recall/(precision+recall)
print("F1: ")
## [1] "F1: "
F1
##  0.128498 
## 0.6666667

Recall 12% Denotas una correlacion debil entre variables

Random Forest

Se recurre a una segunda iteración de predicción con el método Random forest para buscar un porcentaje de precisión mayor.

## 
## Call:
##  randomForest(x = train, y = train$TARGET, importance = TRUE) 
##                Type of random forest: regression
##                      Number of trees: 500
## No. of variables tried at each split: 1
## 
##           Mean of squared residuals: 0.06923433
##                     % Var explained: 96.38

Se toma como primer iteración 100 árboles para abarcar una buena eficiencia del modelo

## [1] "Mean of squared errors (MSE): 0.26"
## [1] "R2 score: 0.99"

R^2 de .99% muestra, indica poca probabilidad de overfitting

#Interpretación de métricas

#MSE (Error Cuadrático Medio):

El Error Cuadrático Medio (MSE, por sus siglas en inglés) es una medida de la calidad de un estimador. Representa el promedio de los cuadrados de las diferencias entre los valores predichos y los valores reales. Cuanto menor sea el MSE, mejor será el ajuste del modelo a los datos.

#R^2 (Coeficiente de Determinación):

El Coeficiente de Determinación (R^2) es una medida estadística que representa la proporción de la variabilidad de una variable dependiente que es explicada por un modelo predictivo. R^2 tiene un rango de 0 a 1, donde 0 indica que el modelo no explica la variabilidad y 1 indica una explicación perfecta. Un valor más alto de R^2 sugiere que el modelo se ajusta mejor a los datos.

Conclusiones

Comparando ambos modelos podemos observar los isgueintes resultados:

##                   MSE        R2
## regresion2  0.8064779 0.8064779
## TestRForest 0.2574956 0.9890053

Podemos con estos resultados argumentar que el método de Random forest tiene un mejor desempeño que la regresión lineal, por lo que sería el método a recurrir para un mejor resultado