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.
tabla_entrenamiento = read.csv("./TABLON_ENTRENAMIENTO.csv", sep = ";", header = T, na.strings = "?")
tabla_validacion = read.csv("./TABLON_VALIDACION.csv", sep = ";", header = T, na.strings = "?")
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 ...
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
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 ...
colSums(is.na(tabla_entrenamiento))
## TARGET VAR1 VAR2 VAR3 VAR4
## 0 0 0 0 0
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
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
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()
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.
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.
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.
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"