Requerimiento

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.

Carga de librerias

Carga Set de datos

tabla_entrenamiento = read.csv("./TABLON_ENTRENAMIENTO.csv", sep = ";", header = T, na.strings = "?")
tabla_validacion = read.csv("./TABLON_VALIDACION.csv", sep = ";", header = T, na.strings = "?")

Analisis Exploratorio

Validamos si los datos se imporataron correctamente

head(tabla_entrenamiento)
##     TARGET VAR1 VAR2 VAR3 VAR4
## 1 0.127681    1  0.5    1  300
## 2 0.137929    2  0.5    1  300
## 3 0.166577    3  0.5    1  300
## 4 0.276655    4  0.5    1  300
## 5 0.375599    5  0.5    1  300
## 6 0.537873    6  0.5    1  300
View(tabla_entrenamiento)
str(tabla_entrenamiento)
## 'data.frame':    3150 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 ...

Exploramos las variables unicas

print("Unique VAR1")
## [1] "Unique VAR1"
unique(tabla_entrenamiento$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
print("Unique VAR2")
## [1] "Unique VAR2"
unique(tabla_entrenamiento$VAR2)
## [1]  0.50  0.75  1.00  2.50  5.00  7.50 10.00
print("Unique VAR3")
## [1] "Unique VAR3"
unique(tabla_entrenamiento$VAR3)
## [1] 1 3 6
print("Unique VAR4")
## [1] "Unique VAR4"
unique(tabla_entrenamiento$VAR4)
## [1] 300 400 500

Comprobamos la estructura de la tabla de entrenamiento

str(tabla_entrenamiento)
## 'data.frame':    3150 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 ...

Valores nulos

colSums(is.na(tabla_entrenamiento))
## TARGET   VAR1   VAR2   VAR3   VAR4 
##      0      0      0      0      0

Resumen

summary(tabla_entrenamiento)
##      TARGET            VAR1           VAR2             VAR3            VAR4    
##  Min.   :0.1277   Min.   : 1.0   Min.   : 0.500   Min.   :1.000   Min.   :300  
##  1st Qu.:2.2131   1st Qu.:13.0   1st Qu.: 0.750   1st Qu.:1.000   1st Qu.:300  
##  Median :3.5503   Median :25.5   Median : 2.500   Median :3.000   Median :400  
##  Mean   :3.0593   Mean   :25.5   Mean   : 3.893   Mean   :3.333   Mean   :400  
##  3rd Qu.:4.1773   3rd Qu.:38.0   3rd Qu.: 7.500   3rd Qu.:6.000   3rd Qu.:500  
##  Max.   :4.6191   Max.   :50.0   Max.   :10.000   Max.   :6.000   Max.   :500

Correlación entre las variables

Validamos la correlación entre las variables

relacion=cor(tabla_entrenamiento)
relacion
##             TARGET      VAR1          VAR2          VAR3          VAR4
## TARGET  1.00000000 0.9060818  1.432753e-01 -2.919999e-02 -3.400951e-02
## VAR1    0.90608176 1.0000000  0.000000e+00  0.000000e+00  0.000000e+00
## VAR2    0.14327533 0.0000000  1.000000e+00  1.786398e-18 -2.002944e-21
## VAR3   -0.02919999 0.0000000  1.786398e-18  1.000000e+00 -3.361203e-21
## VAR4   -0.03400951 0.0000000 -2.002944e-21 -3.361203e-21  1.000000e+00
corrplot(relacion, method = "color")

Se vizualiza que entre Var1 y Target hay una fuerte relación

Gráfico de dispersión entre las variables de las variables VAR1, VAR2, VAR3 y TARGET

ggplot(tabla_entrenamiento,aes(VAR1,TARGET)) +  geom_point()

ggplot(tabla_entrenamiento,aes(VAR2,TARGET)) +  geom_point()

ggplot(tabla_entrenamiento,aes(VAR3,TARGET)) +  geom_point()

ggplot(tabla_entrenamiento,aes(VAR4,TARGET)) +  geom_point()

Modelo Regresión Lineal

model = lm(TARGET ~ VAR1 + VAR2 + VAR3 + VAR4, data = tabla_entrenamiento)
summary(model)
## 
## Call:
## lm(formula = TARGET ~ VAR1 + VAR2 + VAR3 + VAR4, data = tabla_entrenamiento)
## 
## 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
plot(model)

El modelo de regresión lineal indica que la variable dependiente (TARGET) está significativamente influenciada por las variables independientes (VAR1, VAR2, VAR3, VAR4). El modelo muestra que todas las variables tienen efectos significativos (p < 0.001), con R^2 de 0.8435, lo que sugiere que aproximadamente el 84.35% de la variabilidad en la variable dependiente es explicada por las variables independientes. El modelo es estadísticamente sólido, respaldado por un F-estadístico significativo. En resumen, el modelo proporciona una comprensión concisa de las relaciones entre las variables y destaca como un predictor robusto de la variable dependiente.

Predicción

Utilizamos la función predict realizar predicciones utilizando el modelo de regresión lineal (model) en un nuevo conjunto de datos (tabla_validacion)

predecir = predict (model, newdata = tabla_validacion)
head(predecir)
##         1         2         3         4         5         6 
## 0.8570753 0.9439305 1.0307857 1.1176409 1.2044960 1.2913512

Media de los errores al cuadrado (MSE) entre las predicciones (predecir) y los valores reales de la variable dependiente (tabla_validacion$TARGET).

print(sprintf("Media de errores al cuadrado (MSE): %.3f", sqrt(mean((predecir - tabla_validacion$TARGET)^2))))
## [1] "Media de errores al cuadrado (MSE): 0.560"

La diferencia entre las predicciones y los valores reales al cuadrado es aproximadamente igual a la raíz cuadrada de 0.8570753 (para la primera observación), 0.9439305 (para la segunda observación), y así sucesivamente. Esto proporciona una medida de la dispersión o variabilidad de las predicciones en comparación con los valores reales.

R^2

print(sprintf("R2: %.3f", R2(predecir, tabla_validacion$TARGET)))
## [1] "R2: 0.844"

El resultado que obtuviste, “R2: 0.844”, indica que el coeficiente de determinación (R^2) entre las predicciones y los valores reales de la variable dependiente es aproximadamente 0.844. Este valor representa la proporción de la variabilidad en la variable dependiente que es explicada por el modelo de regresión lineal. Un R^2 de 0.844 es bastante alto y sugiere que el modelo es capaz de explicar aproximadamente el 84.4% de la variabilidad en la variable dependiente a partir de las variables independientes incluidas en el modelo.

SVM

Ajustamos el modelo (SVM) con un kernel lineal en el conjunto de datos tabla_validacion

modelo_svm = svm(TARGET ~ ., data = tabla_validacion, kernel = "linear")
print(modelo_svm)
## 
## Call:
## svm(formula = TARGET ~ ., data = tabla_validacion, kernel = "linear")
## 
## 
## Parameters:
##    SVM-Type:  eps-regression 
##  SVM-Kernel:  linear 
##        cost:  1 
##       gamma:  0.25 
##     epsilon:  0.1 
## 
## 
## Number of Support Vectors:  1929
predicciones_svm = predict(modelo_svm, newdata = tabla_validacion)
head(predicciones_svm)
##        1        2        3        4        5        6 
## 1.231835 1.311363 1.390891 1.470419 1.549947 1.629475
print(sprintf("Media de errores al cuadrado (MSE) del modelo SVM: %.3f", sqrt(mean((predicciones_svm - tabla_validacion$TARGET)^2))))
## [1] "Media de errores al cuadrado (MSE) del modelo SVM: 0.586"
print(sprintf("R2 del modelo SVM: %.3f", R2(predicciones_svm, tabla_validacion$TARGET)))
## [1] "R2 del modelo SVM: 0.843"