Aplicacion Regresión Múltiple + WebScraping

  1. Importamos la data descargada mediante la herramienta de WebScraping del portal Olx Colombia para los vehículos Mazda 2
library(readxl)
library(ggplot2)
library(plotly)

mazda2_colombia <- read_excel("D:/01_PUJ/02_02_Met_Est_Toma_decis/Scripts/mazda2_colombia.xlsx")
head(mazda2_colombia)
  1. Realizar una exploración de datos para evaluar la posible relación entre el precio con las demás variables.
summary(mazda2_colombia)
##      precio             modelo      kilometraje     transmision       
##  Min.   : 6000000   Min.   :2008   Min.   :     0   Length:94         
##  1st Qu.:32600000   1st Qu.:2010   1st Qu.: 50250   Class :character  
##  Median :39500000   Median :2013   Median : 88725   Mode  :character  
##  Mean   :45382979   Mean   :2014   Mean   : 79084                     
##  3rd Qu.:55000000   3rd Qu.:2017   3rd Qu.:109750                     
##  Max.   :98000000   Max.   :2022   Max.   :198000                     
##     ciudad         
##  Length:94         
##  Class :character  
##  Mode  :character  
##                    
##                    
## 

Análisis: Con la información anterior se puede observar que existe un valor para precio mínimo de un vehículo Mazda 2 modelo 2022 es de “6000000”, valor que está alejado de la media y mediana de los datos además puede ser un dato falso que puede afectar el modelo de regresión. Por lo que se decide eliminar ese dato.

mazda2_colombia = mazda2_colombia[!(mazda2_colombia$precio == 6000000),]
summary(mazda2_colombia)
##      precio             modelo      kilometraje     transmision       
##  Min.   :22000000   Min.   :2008   Min.   :     0   Length:93         
##  1st Qu.:32900000   1st Qu.:2010   1st Qu.: 51000   Class :character  
##  Median :39500000   Median :2013   Median : 89450   Mode  :character  
##  Mean   :45806452   Mean   :2014   Mean   : 79932                     
##  3rd Qu.:55000000   3rd Qu.:2016   3rd Qu.:110000                     
##  Max.   :98000000   Max.   :2022   Max.   :198000                     
##     ciudad         
##  Length:93         
##  Class :character  
##  Mode  :character  
##                    
##                    
## 
library(ggplot2)
library(plotly)
library(ggpubr)

graf_preciovsmodelo=ggplot(mazda2_colombia,aes(y=modelo,x=precio)) + geom_point(colour = "green", size = 2) + geom_smooth()
A<- ggplotly(graf_preciovsmodelo)
A
graf_preciovskilom=ggplot(mazda2_colombia,aes(y=kilometraje,x=precio)) + geom_point(colour = "red", size = 2) + geom_smooth()
B<- ggplotly(graf_preciovskilom)
B
#ggarrange(graf_preciovsmodelo, graf_preciovskilom,  labels = c("A", "B" ), ncol = 2, nrow = 1)

Análisis: realizando el paso anterior se pudo observar que ahora si el precio menor para un vehículo seria de 22000000 millones, y su mayor de 98000000 millones y que los gráficos nos muestran que a mayor modelo mayor precio y a mayor kilometraje del vehículo su precio suele ser menor.

cor(mazda2_colombia$modelo,mazda2_colombia$precio)
## [1] 0.9518097
cor(mazda2_colombia$kilometraje,mazda2_colombia$precio)
## [1] -0.5811003
library(GGally)
library(dplyr)
ggpairs(select_if(mazda2_colombia, is.numeric), lower = list(continuous = "smooth"),
        diag = list(continuous = "barDiag"), axisLabels = "none")

Análisis: Como podemos observar el modelo de correlación entre las variables precio y modelo es alto (0.95) mientras que el coeficiente de correlación entre las variables kilometraje y precio y modelo y kilometraje es bajo.

#realiamos un conteo para cada tipo de transmision

tab_trans = table(mazda2_colombia$transmision)
tab_trans = (prop.table(tab_trans))
tab_trans= data.frame(tab_trans)
head(tab_trans[order(tab_trans$Freq, decreasing = TRUE),])
require(ggplot2)
graf0 <-ggplot(mazda2_colombia,aes(x= transmision, y=precio, fill=transmision))+
  geom_boxplot()+
  theme_bw()
ggplotly(graf0)
#Realiamos un conteo por ciudades

tab_ciudad = table(mazda2_colombia$ciudad)
tab_ciudad = (prop.table(tab_ciudad))
tab_ciudad= data.frame(tab_ciudad)
head(tab_ciudad[order(tab_ciudad$Freq, decreasing = TRUE),])

Análisis: En cuanto a las variables cualitativas como lo son el tipo de transmision y la ciudad, se observa que el tipo de trasmisión Automática presenta un 46% seguida de la mecanica con un 43%. Por otro lado la ciudad en donde existen más vehículos a la venta es en Medellin con un 25% de los datos seguido por la ciudad de cali.

3.Proponer un modelo de regresión lineal múltiple e interpretar los resultados (betas)

#se ingresa una semilla para replicar el ejercicio
set.seed(123)
mod_autos=lm(precio~modelo+kilometraje+ciudad+transmision,data=mazda2_colombia)
summary(mod_autos)
## 
## Call:
## lm(formula = precio ~ modelo + kilometraje + ciudad + transmision, 
##     data = mazda2_colombia)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -12015137  -2078731         0   2318771  15985390 
## 
## Coefficients:
##                                    Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                      -7.575e+09  4.122e+08 -18.377  < 2e-16 ***
## modelo                            3.790e+06  2.046e+05  18.519  < 2e-16 ***
## kilometraje                      -3.925e+01  1.719e+01  -2.284  0.02593 *  
## ciudadBarranquilla               -6.786e+06  4.539e+06  -1.495  0.14017    
## ciudadBello                      -2.671e+05  4.355e+06  -0.061  0.95130    
## ciudadBogotá                     -9.646e+06  4.140e+06  -2.330  0.02320 *  
## ciudadBucaramanga                -6.517e+06  6.428e+06  -1.014  0.31471    
## ciudadCali                       -6.259e+06  4.015e+06  -1.559  0.12425    
## ciudadCartago                    -6.485e+06  6.737e+06  -0.963  0.33963    
## ciudadCúcuta                     -1.401e+07  6.477e+06  -2.162  0.03459 *  
## ciudadEnvigado                   -7.083e+06  5.528e+06  -1.281  0.20503    
## ciudadFloridablanca              -7.534e+06  4.703e+06  -1.602  0.11442    
## ciudadFusagasugá                 -7.933e+06  6.410e+06  -1.238  0.22071    
## ciudadGirón                      -7.835e+06  6.282e+06  -1.247  0.21713    
## ciudadHuila                      -1.001e+07  6.537e+06  -1.531  0.13091    
## ciudadItagüí                     -7.289e+06  6.432e+06  -1.133  0.26161    
## ciudadLa Ceja                    -8.482e+05  6.647e+06  -0.128  0.89888    
## ciudadManizales                  -5.750e+06  4.531e+06  -1.269  0.20936    
## ciudadMedellín                   -5.896e+06  3.949e+06  -1.493  0.14072    
## ciudadNeiva                      -4.960e+06  6.542e+06  -0.758  0.45139    
## ciudadPereira                    -5.651e+06  4.777e+06  -1.183  0.24149    
## ciudadPopayán                    -3.245e+06  6.267e+06  -0.518  0.60653    
## ciudadRionegro                   -9.445e+06  5.286e+06  -1.787  0.07901 .  
## ciudadSabaneta                   -8.782e+06  5.330e+06  -1.648  0.10464    
## ciudadSan Gil                    -5.937e+06  6.372e+06  -0.932  0.35525    
## ciudadTuluá                      -6.797e+06  6.413e+06  -1.060  0.29346    
## ciudadValledupar                 -1.657e+06  6.407e+06  -0.259  0.79680    
## ciudadVillavicencio              -5.611e+06  4.494e+06  -1.249  0.21668    
## ciudadZipaquirá                  -4.892e+06  6.645e+06  -0.736  0.46449    
## transmisionAutomática Secuencial  3.545e+06  2.583e+06   1.373  0.17497    
## transmisionMecánica              -3.997e+06  1.390e+06  -2.875  0.00558 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 5105000 on 60 degrees of freedom
##   (2 observations deleted due to missingness)
## Multiple R-squared:  0.9456, Adjusted R-squared:  0.9184 
## F-statistic: 34.77 on 30 and 60 DF,  p-value: < 2.2e-16

vamos a mejorar el modelo

mod_autos_mejorado = step(mod_autos)
## Start:  AIC=2835.22
## precio ~ modelo + kilometraje + ciudad + transmision
## 
##               Df  Sum of Sq        RSS    AIC
## - ciudad      26 5.1547e+14 2.0791e+15 2809.2
## <none>                      1.5636e+15 2835.2
## - kilometraje  1 1.3594e+14 1.6996e+15 2840.8
## - transmision  2 3.5618e+14 1.9198e+15 2849.9
## - modelo       1 8.9376e+15 1.0501e+16 3006.5
## 
## Step:  AIC=2809.15
## precio ~ modelo + kilometraje + transmision
## 
##               Df  Sum of Sq        RSS    AIC
## <none>                      2.0791e+15 2809.2
## - kilometraje  1 1.1905e+14 2.1981e+15 2812.2
## - transmision  2 4.4535e+14 2.5244e+15 2822.8
## - modelo       1 1.2134e+16 1.4213e+16 2982.1
summary(mod_autos_mejorado)
## 
## Call:
## lm(formula = precio ~ modelo + kilometraje + transmision, data = mazda2_colombia)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -11014491  -3530955   -584412   3003133  18577384 
## 
## Coefficients:
##                                    Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                      -7.301e+09  3.285e+08 -22.224  < 2e-16 ***
## modelo                            3.650e+06  1.629e+05  22.403  < 2e-16 ***
## kilometraje                      -3.114e+01  1.403e+01  -2.219  0.02911 *  
## transmisionAutomática Secuencial  4.708e+06  2.116e+06   2.225  0.02871 *  
## transmisionMecánica              -3.249e+06  1.087e+06  -2.989  0.00364 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 4917000 on 86 degrees of freedom
##   (2 observations deleted due to missingness)
## Multiple R-squared:  0.9277, Adjusted R-squared:  0.9243 
## F-statistic: 275.8 on 4 and 86 DF,  p-value: < 2.2e-16

Análisis: Con el modelo inicial podemos observar que este toma en cuenta todas las variables tanto cualitativas como cuantitativas que se tienen disponibles, mostrándonos un r2 de 0.91. Cuando aplicamos el modelo mejorado se excluyen variables cualitativas lo que genera un modelo con un r2 más alto (0.92) por lo que las variables en uso pueden llegar a representar el 92% de la variable precio.

  1. Validar el poder predictivo del Modelo con Validación Cruzada. Validación Cruzada

Para la validación cruzada vamos tomar el 80% de los datos para modelar y el 20% para predecir:

Modelar

# para un total de 94 datos (80% para modelar y 20% para validar):

modelar= sample(1:94, size=76)
modelar
##  [1] 31 79 51 14 67 42 50 43 91 25 69 57  9 72 26  7 89 82 36 87 15 32 93 77 41
## [26] 23 27 60 53 81 66 68 73 38 85 34 29  5  8 12 13 18 33 63 90 61 21 74 70 80
## [51] 94 16 30  6 56 22 39 44 17 59  4 54 83 49 19 88 20 37 58 86 84  3 40 75 55
## [76] 45
#sacamos los datos en base a los 76  para modelar
autos_modelar= mazda2_colombia[modelar,]
head(autos_modelar)
# data set con 18 datos para validar:
autos_validar= mazda2_colombia[-modelar,]
head(autos_validar)
#predecir set de validacion
pre_autos_modelar = lm(formula = precio ~ modelo + transmision, data = mazda2_colombia)
summary(pre_autos_modelar)
## 
## Call:
## lm(formula = precio ~ modelo + transmision, data = mazda2_colombia)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -11015256  -3252930   -584117   3157402  19812086 
## 
## Coefficients:
##                                    Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                      -7.626e+09  3.006e+08 -25.368  < 2e-16 ***
## modelo                            3.810e+06  1.493e+05  25.515  < 2e-16 ***
## transmisionAutomática Secuencial  5.228e+06  2.150e+06   2.432  0.01706 *  
## transmisionMecánica              -3.168e+06  1.111e+06  -2.852  0.00542 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 5027000 on 87 degrees of freedom
##   (2 observations deleted due to missingness)
## Multiple R-squared:  0.9235, Adjusted R-squared:  0.9209 
## F-statistic: 350.2 on 3 and 87 DF,  p-value: < 2.2e-16

Validar:

#predecir set de validacion

precio_pred = predict(pre_autos_modelar, list(modelo=autos_validar$modelo, transmision=autos_validar$transmision))
precio_pred
##        1        2        3        4        5        6        7        8 
## 55325636 44537361 33106222 28652978 29295842 59778880 24842598 24842598 
##        9       10       11       12       13       14       15       16 
## 63589259 48347740 32463357 52158120 74377535 36916601 40084117       NA 
##       17       18 
## 62946395 40726981
#comparar precio real

precio_real = autos_validar$precio

error_precio = precio_real-precio_pred

resultado_precio = data.frame(precio_real, precio_pred, error_precio)
head(resultado_precio, 5)
#calcular el Indicador de evaluacion de prediccion

MAE=mean(abs(error_precio))
MAE
## [1] NA
(MAE/mean(precio_real))*100
## [1] NA
## RMSE

RMSE = sqrt(mean((error_precio)^2))
RMSE
## [1] NA

Realizando el análisis de validación cruzada se puede observar que el modelo puede llegar errar en un 9% del precio promedio de acuerdo al MAE y a la vez nos muestra que la diferencia entre el precio real vs precio predictor puede llegar a ser de 4040249 y la desviación estándar de la varianza es de 4702245 de acuerdo al RMSE.

  1. Discutir potenciales usos del modelo como herramienta practica (como monetizar los resultados de este modelo)

Con este tipo de modelo de regresión múltiple, se puede evidenciar que toma bastante importancia ya que a través de él y de un correcto modelado de los datos, va permitir predecir ciertos parámetros que son de suma importancia para la toma de decisiones de cualquier persona u organización, en este caso para la compra o venta de un vehículo, consiguiendo con esto que se pueda maximizar la ganancia si es que estoy como vendedor o minimizar la inversión si es que actuó como comprador de un vehículo.