Entrenamiento y predicciones usando Regresión lineal y SVM
Cargamos librerias
library(e1071)
library(knitr)
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(corrplot)
## corrplot 0.92 loaded
library(visreg)
library(ggplot2)
library(caret)
## Loading required package: lattice
Estableemos nuestro directorio para trabajar con los datos y hacemos
análisis exploratorio de los datos.
datos_entrenamiento = read.csv(file = "/Users/macbookair/Desktop/R (MASTER)/TABLON_ENTRENAMIENTO.csv", header = TRUE, sep = ";")
summary(datos_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
str(datos_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 ...
head(datos_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
Revisamos si existen nulos
colSums(is.na(datos_entrenamiento))
## TARGET VAR1 VAR2 VAR3 VAR4
## 0 0 0 0 0
Graficamos las variables
# Creamos gráficos de dispersión para cada una de las variables independientes y observamos su relación con TARGET
ggplot(datos_entrenamiento, aes(x = VAR1, y = TARGET)) +
geom_point()

ggplot(datos_entrenamiento, aes(x = VAR2, y = TARGET)) +
geom_point()

ggplot(datos_entrenamiento, aes(x = VAR3, y = TARGET)) +
geom_point()

ggplot(datos_entrenamiento, aes(x = VAR4, y = TARGET)) +
geom_point()

Modelo de regresión lineal
Al ser TARGET, la variable que queremos predecir, una variable
continua, el tipo de modelo que tenemos que usar para predecirla es un
modelo de regresión lineal.
modelo = lm(TARGET ~ VAR1 + VAR2 + VAR3 + VAR4, data = datos_entrenamiento)
summary(modelo)
##
## Call:
## lm(formula = TARGET ~ VAR1 + VAR2 + VAR3 + VAR4, data = datos_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
Todos los coeficientes tienen p-valores muy bajos (< 0.05), lo
que sugiere que son estadísticamente significativos.
Predicciones
library(e1071)
datos_test = read.csv(file = "/Users/macbookair/Desktop/R (MASTER)/TABLON_VALIDACION.csv", header = TRUE, sep = ";")
predicciones = predict(modelo, newdata = datos_test )
#Predicciones
head(predicciones)
## 1 2 3 4 5 6
## 0.8570753 0.9439305 1.0307857 1.1176409 1.2044960 1.2913512
# MSE
print(sprintf("Media de errores al cuadrado (MSE): %.3f", sqrt(mean((predicciones - datos_test$TARGET)^2))))
## [1] "Media de errores al cuadrado (MSE): 0.560"
# R2
print(sprintf("R2: %.3f", R2(predicciones, datos_test$TARGET)))
## [1] "R2: 0.844"
R-cuadrado sugiere que el 84.4% de la variabilidad en la variable de
respuesta es explicada por el modelo. Esto es bastante bueno.
El valor de la Media de errores al cuadrado es 0.560, relativamente
bajo, lo cual es un buen indicador.
Modelo de Super Vector Machines (SVM)
modelo_svm = svm(TARGET ~ ., data = datos_entrenamiento, kernel = "linear")
print(modelo_svm)
##
## Call:
## svm(formula = TARGET ~ ., data = datos_entrenamiento, kernel = "linear")
##
##
## Parameters:
## SVM-Type: eps-regression
## SVM-Kernel: linear
## cost: 1
## gamma: 0.25
## epsilon: 0.1
##
##
## Number of Support Vectors: 2682
Predicciones y evaluación del modelo
predicciones_svm = predict(modelo_svm, newdata = datos_test)
head(predicciones_svm)
## 1 2 3 4 5 6
## 1.152199 1.231549 1.310898 1.390248 1.469597 1.548947
# Evalúa el rendimiento del modelo SVM
print(sprintf("Media de errores al cuadrado (MSE) del modelo SVM: %.3f", sqrt(mean((predicciones_svm - datos_test$TARGET)^2))))
## [1] "Media de errores al cuadrado (MSE) del modelo SVM: 0.573"
print(sprintf("R2 del modelo SVM: %.3f", R2(predicciones_svm, datos_test$TARGET)))
## [1] "R2 del modelo SVM: 0.842"
R-cuadrado sugiere que el 84.2% de la variabilidad en la variable de
respuesta es explicada por el modelo. Sigue siendo bueno aunque el
modelo de regresión lineal tuvo mejor desempeño.
El valor de la Media de errores al cuadrado es 0.573, es bueno pero
de igual forma aquí el modelo de regresión lineal se desempeñó mejor con
un MSE ligeramente menor.