Punto 1. Por medio de webscrapping descargar la base de datos de precios de vehiculos mazda 2 para Colombia del portal OLX https://www.olx.com.co/, con las variables: precio, kilometraje, modelo, transmisióm y ciudad.

Del ejercicio de web scraping se obtuvieron 88 registros que cumplen con los criterios de ser marca Mazda y referencia Mazada 2, para diferentes ciudades de Colombia.

library(readxl)
mazda2_MCD <- read_excel("C:/Users/PACHO/Downloads/mazda2_MCD.xlsx", 
    col_types = c("numeric", 
        "numeric", "numeric", "text", "text"))
df=mazda2_MCD
head(df,5)
## # A tibble: 5 x 5
##     precio kilometraje modelo transmision Ciudad       
##      <dbl>       <dbl>  <dbl> <chr>       <chr>        
## 1 44500000       87500   2015 Mecánica    Floridablanca
## 2 42500000      102222   2013 Automática  Itagüí       
## 3 31500000      100000   2011 Automática  Bogotá       
## 4 67000000       61997   2017 Automática  Medellín     
## 5 45000000       92000   2015 Automática  Medellín

Punto 2. Realizar una exploración de datos para evaluar la posible relación entre precio con las demas variables.

summary(df)
##      precio          kilometraje         modelo     transmision       
##  Min.   :22000000   Min.   :     0   Min.   :2008   Length:88         
##  1st Qu.:34000000   1st Qu.: 48750   1st Qu.:2011   Class :character  
##  Median :40700000   Median : 90750   Median :2013   Mode  :character  
##  Mean   :46268750   Mean   : 83716   Mean   :2014                     
##  3rd Qu.:55000000   3rd Qu.:110000   3rd Qu.:2017                     
##  Max.   :95000000   Max.   :370000   Max.   :2022                     
##     Ciudad         
##  Length:88         
##  Class :character  
##  Mode  :character  
##                    
##                    
## 
require(ggplot2)

ggplot(mapping = aes(x = df$kilometraje, y = df$precio)) + geom_point() + 
  ylab('Precio') + xlab('Kilometraje') + ggtitle(label = 'Relación entre precio y kilometraje') +
  theme(plot.title = element_text(hjust = 0.5))

cor(df$precio,df$kilometraje)
## [1] -0.4682872
require(ggplot2)

ggplot(mapping = aes(x = df$modelo, y = df$precio)) + geom_point() + 
  ylab('Precio') + xlab('modelo') + ggtitle(label = 'Relación entre precio y modelo') +
  theme(plot.title = element_text(hjust = 0.5))

ggplot(df,aes(x= transmision, y=precio, fill=transmision))+
  geom_boxplot()+
  theme_bw()

Análisis

Del gráfico entre la relación del precio y el kilometraje, se observa una tendencia a que mayor sea el kilometraje del vehiculo, el valor del precio disminuira y se puede corroborar con el coeficiente de correlación entre estas dos variables que es de -0.4682, lo que indica una relación negativa. Asi mismo, de la relación entre el el precio y el modelo se observa que los modelos más recientes tienen un precio mas eleveado en comparación con los modelos antiguos. Por último, con base en la transmisión del vehiculo y la relación con el precio, se observa que los vehiculos mas costosos son los de transmisión secuencial, y los de transmisiones automática y mecánica tienen precios similares.

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

En un primer momento se propone un moodelo de regresión lineal con todas las variables (kilometraje, modelo y transmisión) que nos indica un r2 de 0.9192.

mod_mazda= lm(precio~kilometraje+modelo+transmision, data=df)
summary(mod_mazda)
## 
## Call:
## lm(formula = precio ~ kilometraje + modelo + transmision, data = df)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -10141381  -3829781   -146546   2959352  17384908 
## 
## Coefficients:
##                                    Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                      -7.246e+09  3.065e+08 -23.643  < 2e-16 ***
## kilometraje                      -2.142e+01  1.071e+01  -2.001  0.04872 *  
## modelo                            3.622e+06  1.520e+05  23.821  < 2e-16 ***
## transmisionAutomática Secuencial  6.153e+06  2.261e+06   2.721  0.00793 ** 
## transmisionMecánica              -2.238e+06  1.105e+06  -2.025  0.04612 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 4947000 on 83 degrees of freedom
## Multiple R-squared:  0.9229, Adjusted R-squared:  0.9192 
## F-statistic: 248.4 on 4 and 83 DF,  p-value: < 2.2e-16

A continuación utilizamos la función step para identificar cuál es el mejor modelo para aplicar y coincide con el modelo planteado anteriormente.

mod_mazdafinal = step(mod_mazda,direction='both')
## Start:  AIC=2717.76
## precio ~ kilometraje + modelo + transmision
## 
##               Df  Sum of Sq        RSS    AIC
## <none>                      2.0311e+15 2717.8
## - kilometraje  1 9.7935e+13 2.1291e+15 2719.9
## - transmision  2 3.5914e+14 2.3903e+15 2728.1
## - modelo       1 1.3886e+16 1.5917e+16 2896.9
summary(mod_mazdafinal)
## 
## Call:
## lm(formula = precio ~ kilometraje + modelo + transmision, data = df)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -10141381  -3829781   -146546   2959352  17384908 
## 
## Coefficients:
##                                    Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                      -7.246e+09  3.065e+08 -23.643  < 2e-16 ***
## kilometraje                      -2.142e+01  1.071e+01  -2.001  0.04872 *  
## modelo                            3.622e+06  1.520e+05  23.821  < 2e-16 ***
## transmisionAutomática Secuencial  6.153e+06  2.261e+06   2.721  0.00793 ** 
## transmisionMecánica              -2.238e+06  1.105e+06  -2.025  0.04612 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 4947000 on 83 degrees of freedom
## Multiple R-squared:  0.9229, Adjusted R-squared:  0.9192 
## F-statistic: 248.4 on 4 and 83 DF,  p-value: < 2.2e-16

Punto 4. Validad el poder predictivo del Modelo con Validación Cruzada..

# Conjunto de 88 datos (80% para modelar y 20% para validar):

modelar= sample(1:88, size=70)
modelar
##  [1] 28 12 61 53 18  8 29  1 79 85 86 71 44 74 42 88 37 56 54 81 62 59 49 26 38
## [26] 52  9 60 55 27 46 58 80 84 73 33 83 47 45 11 34 41  5  6 13  2 48 19 39 63
## [51] 68 22  3 51 67 23 14 36 35 65 17 20  7  4 87 77 40 82 25 50
# data set con 70 datos para modelar:
df_modelar= df[modelar,]
head(df_modelar)
## # A tibble: 6 x 5
##     precio kilometraje modelo transmision           Ciudad   
##      <dbl>       <dbl>  <dbl> <chr>                 <chr>    
## 1 23500000      136000   2008 Automática            Bogotá   
## 2 41000000      120000   2012 Automática            Medellín 
## 3 70000000       35000   2020 Mecánica              Neiva    
## 4 73500000       39500   2021 Automática Secuencial Envigado 
## 5 35000000       96700   2010 Mecánica              Armenia  
## 6 53000000       57000   2016 Mecánica              Santander
# data set con 18 datos para validar:
df_validar= df[-modelar,]
head(df_validar)
## # A tibble: 6 x 5
##     precio kilometraje modelo transmision           Ciudad       
##      <dbl>       <dbl>  <dbl> <chr>                 <chr>        
## 1 69000000       42000   2018 Automática            Barranquilla 
## 2 36000000         183   2011 Mecánica              Medellín     
## 3 42000000      101832   2014 Automática            Caldas       
## 4 41900000       94000   2014 Mecánica              Manizales    
## 5 70000000       70000   2019 Automática Secuencial Villavicencio
## 6 35500000      121800   2013 Mecánica              Pereira
mod_mazda_modelar = lm(formula = precio ~ kilometraje + modelo + transmision, data = df)
summary(mod_mazda_modelar)
## 
## Call:
## lm(formula = precio ~ kilometraje + modelo + transmision, data = df)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -10141381  -3829781   -146546   2959352  17384908 
## 
## Coefficients:
##                                    Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                      -7.246e+09  3.065e+08 -23.643  < 2e-16 ***
## kilometraje                      -2.142e+01  1.071e+01  -2.001  0.04872 *  
## modelo                            3.622e+06  1.520e+05  23.821  < 2e-16 ***
## transmisionAutomática Secuencial  6.153e+06  2.261e+06   2.721  0.00793 ** 
## transmisionMecánica              -2.238e+06  1.105e+06  -2.025  0.04612 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 4947000 on 83 degrees of freedom
## Multiple R-squared:  0.9229, Adjusted R-squared:  0.9192 
## F-statistic: 248.4 on 4 and 83 DF,  p-value: < 2.2e-16

Se procede a obtener los valores del precio con base en el modelo:

predict_precio = predict(mod_mazda_modelar, list(modelo=df_validar$modelo, transmision=df_validar$transmision, kilometraje=df_validar$kilometraje))
predict_precio
##        1        2        3        4        5        6        7        8 
## 62228178 35533488 46459290 44389299 71402963 40171993 29559322 37424145 
##        9       10       11       12       13       14       15       16 
## 50420234 65849989 25811922 69640188 35633098 69030856 40831750 21099005 
##       17       18 
## 38826496 52964440

Identificación del error con base en el precio real del vehiculo.

precio_real = df_validar$precio

error = precio_real-predict_precio

resultado = data.frame(precio_real, predict_precio, error)
head(resultado, 5)
##   precio_real predict_precio      error
## 1    69000000       62228178  6771822.5
## 2    36000000       35533488   466512.4
## 3    42000000       46459290 -4459290.1
## 4    41900000       44389299 -2489299.2
## 5    70000000       71402963 -1402962.9
MAE=mean(abs(error))
MAE
## [1] 3499109

El MAE indica que la diferencia entre el precio real vs el precio predicho en promedio es de 4158692 de pesos.

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

Como herramienta práctica, el presente modelo se podria incorporar en la página de OLX para que el usuario final pueda ingresar los valores de las variables identificadas, y que se puede brindar un precio estimado del vehiculo con las características que se desea, y así poder tener una aproximación a lo que puede costar un vehiculo y sea un apoyo para la toma de decisión.