install.packages("dplyr")
## package 'dplyr' successfully unpacked and MD5 sums checked
##
## The downloaded binary packages are in
## C:\Users\PERFER\AppData\Local\Temp\RtmpeGlR4v\downloaded_packages
Cargar librería
library(readr)
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(ggplot2)
library(caret)
## Loading required package: lattice
library(randomForest)
## randomForest 4.7-1.1
## Type rfNews() to see new features/changes/bug fixes.
##
## Attaching package: 'randomForest'
## The following object is masked from 'package:ggplot2':
##
## margin
## The following object is masked from 'package:dplyr':
##
## combine
#Carga de datos
datos_entrenamiento <- read.csv("C:/Users/PERFER/OneDrive - Watlow/Desktop/NE/TABLON_ENTRENAMIENTO.csv", sep = ";", header = TRUE)
datos_validacion <- read.csv("C:/Users/PERFER/OneDrive - Watlow/Desktop/NE/TABLON_VALIDACION.csv", sep = ";", header = TRUE)
Para obtener un resumen que nos da una idea inicial sobre la distribución de cada variable.
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
TARGET: la variable objetivo caría entre 0.13 y 4.62 con una mediana de 3.55, lo que indica que la mayoría de los valores se concentran alrededor de este punto.
sapply(datos_entrenamiento, function(x) sum(is.na(x)))
## TARGET VAR1 VAR2 VAR3 VAR4
## 0 0 0 0 0
Podemos observar que el conjunto de datosno tiene datos faltantes.
hist(datos_entrenamiento$VAR1, main = "Histograma de VAR1", xlab = "VAR1")
hist(datos_entrenamiento$VAR2, main = "Histograma de VAR2", xlab = "VAR2")
hist(datos_entrenamiento$VAR3, main = "Histograma de VAR3", xlab = "VAR3")
hist(datos_entrenamiento$VAR4, main = "Histograma de VAR4", xlab = "VAR4")
boxplot(datos_entrenamiento$VAR1, main = "Boxplot de VAR1")
boxplot(datos_entrenamiento$VAR2, main = "Boxplot de VAR2")
boxplot(datos_entrenamiento$VAR3, main = "Boxplot de VAR3")
boxplot(datos_entrenamiento$VAR4, main = "Boxplot de VAR4")
Podemos ver la distribución, de cada variable
correlaciones <- cor(datos_entrenamiento %>% select(-TARGET))
print(correlaciones)
## VAR1 VAR2 VAR3 VAR4
## VAR1 1 0.000000e+00 0.000000e+00 0.000000e+00
## VAR2 0 1.000000e+00 1.786398e-18 -2.002944e-21
## VAR3 0 1.786398e-18 1.000000e+00 -3.361203e-21
## VAR4 0 -2.002944e-21 -3.361203e-21 1.000000e+00
Estandarización de datos
datos_entrenamiento_est <- scale(datos_entrenamiento %>% select(-TARGET))
datos_entrenamiento_est <- as.data.frame(datos_entrenamiento_est)
modelo_lineal <- lm(TARGET ~ VAR1 + VAR2 + VAR3 + VAR4, data = datos_entrenamiento)
summary(modelo_lineal)
##
## 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
Existe una realación estadística significativa con la variable TARGET. VAR1 y VAR2 tiene un efecto positivo meintras que VAR3 Y VAR4 muestran un efecto negativo
El 84.33% sugiere que el modelo se ajusta bien a los datos y es eficaz en la predicción de TARGET usando estas variables.
library(ggplot2)
ggplot(data = datos_entrenamiento, aes(x = predict(modelo_lineal), y = residuals(modelo_lineal))) +
geom_point(color = "purple") +
theme_bw() +
labs(title = "Gráfico de Residuos (Regresión Lineal)", x = "Predicciones", y = "Residuos")
En el gráfico podemos ver que hay un patrón que sugiere que las predicciones del modelo no son perfectas.
library(randomForest)
Modelo Rnadom Forest
modelo_rf <- randomForest(TARGET ~ VAR1 + VAR2 + VAR3 + VAR4, data = datos_entrenamiento)
print(modelo_rf)
##
## Call:
## randomForest(formula = TARGET ~ VAR1 + VAR2 + VAR3 + VAR4, data = datos_entrenamiento)
## Type of random forest: regression
## Number of trees: 500
## No. of variables tried at each split: 1
##
## Mean of squared residuals: 0.2522859
## % Var explained: 86.82
El modelo Random Fores, indica que es capaz de explicar el 86.72% de la variabilidad de TARGET con las variables predictoras VAR1, VAR2, VAR3, VAR4.
varImpPlot(modelo_rf, main = "Importancia de Variables en Random Forest")
VAR1 es la variable más influyente, este gráfico ayuda a ver como influye cada variable a mejorar la precisión del modelo.
prediccion_lineal <- predict(modelo_lineal, datos_entrenamiento)
prediccion_rf <- predict(modelo_rf, datos_entrenamiento)
#Cáculo de MAE y MSE para Regresión Lineal
MAE_lineal <- mean(abs(prediccion_lineal - datos_entrenamiento$TARGET))
MSE_lineal <- mean((prediccion_lineal - datos_entrenamiento$TARGET)^2)
#Cálculo de MAE y MSE para Random Forest
MAE_rf <- mean(abs(prediccion_rf - datos_entrenamiento$TARGET))
MSE_rf <- mean((prediccion_rf - datos_entrenamiento$TARGET)^2)
#Evaluación del Modelo con el conjunto de datos TABLON_VALIDACION.csv
predicciones_lineal_val <- predict(modelo_lineal, datos_validacion)
predicciones_rf_val <- predict(modelo_rf, datos_validacion)
MAE_lineal_val <- mean(abs(predicciones_lineal_val - datos_validacion$TARGET))
MSE_lineal_val <- mean((predicciones_lineal_val - datos_validacion$TARGET)^2)
MAE_rf_val <- mean(abs(predicciones_rf_val - datos_validacion$TARGET))
MSE_rf_val <- mean((predicciones_rf_val - datos_validacion$TARGET)^2)
#Comparación de Predicciones y Valores Reales En estos gráficos comparan visualmente las predicciones de los modelos con los valores reales de TARGET
datos_validacion$prediccion_lineal <- predicciones_lineal_val
datos_validacion$prediccion_rf <- predicciones_rf_val
ggplot(datos_validacion, aes(x = TARGET, y = prediccion_lineal)) +
geom_point(color = "green") +
geom_abline(slope = 1, intercept = 0, linetype = "dashed", color = "blue") +
labs(title = "Comparación de Predicciones vs. Valores Reales (Regresión Lineal)",
x = "TARGET Real", y = "Predicción")
Los puntos verdes representan las predicciones para cada observacio´n en
comparación con los valore sreales. La línea punteada representa la
perfecta predicción , donde la spredicciones coinciden exactamente con
los valores reales. Los valoresaltos y bajos sugieren ue el modelo
podria subestimar o sobreestimar en esos rangos.
ggplot(datos_validacion, aes(x = TARGET, y = prediccion_rf)) +
geom_point(color = "orange") +
geom_abline(slope = 1, intercept = 0, linetype = "dashed", color = "blue") +
labs(title = "Comparación de Predicciones vs. Valores Reales (Random Forest)",
x = "TARGET Real", y = "Predicción")
EN este gráfico veomos las predicicones hechas por el modelo random
forest. los puntos se agrupan más cerca de la línea ideal en comparación
con la regresión linealprevia, aún así hay un patrón que indica una
tendencia a subestimar o sobreestimar en diferentes partes del rando de
TARGET