Web scraping Mazda 2

library(readxl)
library(dplyr)
mazda2_OLX <- read_excel("E:/Data Science/Estadistica/webscraping/mazda2_OLX.xlsx")
head(mazda2_OLX)
web-scraper-order web-scraper-start-url link link-href precio kilometraje modelo ciudad transmision
1663737096-415 https://www.olx.com.co/items/q-mazda-2 $ 41.500.0002015 - 65.000 kmVendo cambio Mazda 2 2015 como nuevoEstambul, Manizales21 ago https://www.olx.com.co/item/vendo-cambio-mazda-2-2015-como-nuevo-iid-1116330001 $ 41.500.000 65.000 km 2015 Estambul, Manizales, Caldas Mecánica
1663737099-416 https://www.olx.com.co/items/q-mazda-2 $ 59.000.0002017 - 35 kmMazda 2 grand touring 2017El Cortijo, Funza21 ago https://www.olx.com.co/item/mazda-2-grand-touring-2017-iid-1116662958 $ 59.000.000 35 km 2017 El Cortijo, Funza, Cundinamarca Mecánica
1663737102-417 https://www.olx.com.co/items/q-mazda-2 $ 12.000Llave Control Mazda 2 - 3Urbanización Praderas De Santa Rita, Ibagué21 ago https://www.olx.com.co/item/llave-control-mazda-2-3-iid-1116665550 $ 12.000 NA NA Urbanización Praderas De Santa Rita, Ibagué, Tolima NA
1663737105-418 https://www.olx.com.co/items/q-mazda-2 $ 38.000.0002014 - 92.000 kmMazda 2 38 millonesRionegro, Barrios Unidos21 ago https://www.olx.com.co/item/mazda-2-38-millones-iid-1116665872 $ 38.000.000 92.000 km 2014 Rionegro, Barrios Unidos, Bogotá Mecánica
1663737110-419 https://www.olx.com.co/items/q-mazda-2 $ 27.500.0002012 - 116.884 kmVendo o cambio a mazda 2 automáticoLa Candelaria, Medellín21 ago https://www.olx.com.co/item/vendo-o-cambio-a-mazda-2-automatico-iid-1116665931 $ 27.500.000 116.884 km 2012 La Candelaria, Medellín, Antioquia Mecánica
1663737112-420 https://www.olx.com.co/items/q-mazda-2 $ 35.500.0002012 - 137.500 kmMazda 2 2012 Hatch backBosques De Mariana, Engativá21 ago https://www.olx.com.co/item/mazda-2-2012-hatch-back-iid-1116669410 $ 35.500.000 137.500 km 2012 Bosques De Mariana, Engativá, Bogotá Mecánica
datos=select(mazda2_OLX,precio,kilometraje,modelo,ciudad,transmision)
datos$precio = gsub ("\\$", "", datos$precio)
datos$precio = as.numeric(gsub ("\\.", "", datos$precio))
datos$kilometraje = gsub ("\\km", "", datos$kilometraje)
datos$kilometraje = as.numeric(gsub ("\\.", "", datos$kilometraje))
datos$modelo = as.numeric(datos$modelo)


library(stringr)
nombre_ciudad = data.frame(str_split_fixed(datos$ciudad, ", ", 3))
datos$ciudad = nombre_ciudad$X2
head(datos)
precio kilometraje modelo ciudad transmision
41500000 65000 2015 Manizales Mecánica
59000000 35 2017 Funza Mecánica
12000 NA NA Ibagué NA
38000000 92000 2014 Barrios Unidos Mecánica
27500000 116884 2012 Medellín Mecánica
35500000 137500 2012 Engativá Mecánica

Existen varias filas de datos incompletas, se procede a hacer la exploracion de estas filas. Se encuentra que estas filas corresponden a autopartes o repuestos, por tanto se eliminan para no afectar el modelo

posna=which(is.na(datos$kilometraje))
head(mazda2_OLX[posna,3])
link
$ 12.000Llave Control Mazda 2 - 3Urbanización Praderas De Santa Rita, Ibagué21 ago
$ 200.000RADIO MAZDA 2Barrancabermeja, Santander22 ago
$ 800.000Venta de Farolas Mazda 2 prime , 2020Villa Country, Barranquilla22 ago
$ 22.000Filtro aire motor Mazda 2-3Lleras, Manizales23 ago
$ 1.000.000Computador mazda 2 cilindraje 1.5Patio Bonito II Sector, Kennedy24 ago
$ 1.400.000Rines 15 de uno de los últimos Mazda 2 originales contramarcados Mazda Case 4 huecos 100 Rines nuevos, garantía 3 añosLa Pepita, Los Mártires24 ago
library(tidyr)
datos2=na.omit(datos)
datos2$precio=datos2$precio/1000000
head(datos2)
precio kilometraje modelo ciudad transmision
41.5 65000 2015 Manizales Mecánica
59.0 35 2017 Funza Mecánica
38.0 92000 2014 Barrios Unidos Mecánica
27.5 116884 2012 Medellín Mecánica
35.5 137500 2012 Engativá Mecánica
53.0 57000 2016 Santander Mecánica

Por medio de web scraping descargar la base de datos de precios de vehiculos mazda 2 para colombia del portal olx, con las variables precio, kilometraje, modelo, transmision, ciudad.

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

##      precio        kilometraje         modelo        ciudad         
##  Min.   :  6.80   Min.   :     0   Min.   :2008   Length:361        
##  1st Qu.: 36.00   1st Qu.: 27600   1st Qu.:2012   Class :character  
##  Median : 44.00   Median : 72000   Median :2015   Mode  :character  
##  Mean   : 52.63   Mean   : 69397   Mean   :2015                     
##  3rd Qu.: 68.00   3rd Qu.:100300   3rd Qu.:2019                     
##  Max.   :159.90   Max.   :370000   Max.   :2022                     
##  transmision       
##  Length:361        
##  Class :character  
##  Mode  :character  
##                    
##                    
## 
## 
##            Automática Automática Secuencial              Mecánica 
##                   168                    33                   160
## 
##          Antioquia            Armenia       Barranquilla     Barrios Unidos 
##                  5                 10                 22                  3 
##              Bello        Bucaramanga             Caldas               Cali 
##                 10                 15                  1                 64 
##           Casanare              Cauca              Cesar          Chapinero 
##                  1                  1                  1                  6 
##               Chía             Cúcuta       Cundinamarca           Engativá 
##                  3                  5                  4                  9 
##           Envigado      Floridablanca           Fontibón              Funza 
##                  8                 10                  4                  1 
##              Girón              Huila             Ibagué             Itagüí 
##                  2                  2                  6                  3 
##            Kennedy       Los Mártires          Manizales           Medellín 
##                  7                  2                 20                 56 
##              Neiva            Pereira            Popayán      Puente Aranda 
##                  7                 14                  1                  1 
## Rafael Uribe Uribe          Risaralda           Sabaneta  San Juan de Pasto 
##                  1                  1                  7                  3 
##           Santa Fé          Santander               Suba              Sucre 
##                  1                  4                 18                  2 
##        Teusaquillo         Tunjuelito            Usaquén    Valle del Cauca 
##                  1                  1                  4                  8 
##      Villavicencio 
##                  6

se encuentra que existe una correlación negativa entre el precio y kilometraje de -0,67 y una correlacion positiva entre precio y modelo de 0,88 a su vez existe una correlacion entre kilometraje y modelo de 0,70

de acuerdo a la transmision se tiene que los menores precios se encuentran en vehiculos de transmision mecanica (maximo de 80 millones), seguido de transmision automatica con valores desde 20 a 120 millones y automatica secuencial con precios de un rango mas pequeño

Analizando la correlacion mas alta que se presenta entre el precio y el modelo se guarda una proporcionalidad directa entre ambas variables, a medida que el modelo es mas reciente el precio es mas elevado

Proponer un modelo de regresión lineal multiple e interpretar los resultados.

Modmazda <- lm (precio ~., data=datos2)
anova(Modmazda)
Df Sum Sq Mean Sq F value Pr(>F)
kilometraje 1 72119.561 72119.56146 730.4174436 0.0000000
modelo 1 53277.299 53277.29852 539.5854800 0.0000000
ciudad 44 2999.938 68.18040 0.6905222 0.9320926
transmision 2 2295.840 1147.91984 11.6259813 0.0000135
Residuals 312 30806.087 98.73746 NA NA

se encuentra que la variable ciudad no presenta significancia, por tanto no sera considerada en el modelo

datos2$transmision=factor(datos2$transmision,levels=c("Automática Secuencial","Mecánica","Automática"))

Modmazda2 <- lm (precio ~modelo+kilometraje+transmision, data=datos2)
summary(Modmazda2)
## 
## Call:
## lm(formula = precio ~ modelo + kilometraje + transmision, data = datos2)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -69.707  -4.098  -0.565   3.233  77.409 
## 
## Coefficients:
##                         Estimate Std. Error t value Pr(>|t|)    
## (Intercept)           -7.595e+03  3.403e+02 -22.316  < 2e-16 ***
## modelo                 3.798e+00  1.684e-01  22.555  < 2e-16 ***
## kilometraje           -3.731e-05  1.458e-05  -2.559   0.0109 *  
## transmisionMecánica   -8.143e+00  1.905e+00  -4.275 2.46e-05 ***
## transmisionAutomática -2.801e+00  1.852e+00  -1.512   0.1314    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 9.651 on 356 degrees of freedom
## Multiple R-squared:  0.7947, Adjusted R-squared:  0.7924 
## F-statistic: 344.4 on 4 and 356 DF,  p-value: < 2.2e-16
Modmazda3 <- step(Modmazda2,direction="both")
## Start:  AIC=1641.81
## precio ~ modelo + kilometraje + transmision
## 
##               Df Sum of Sq   RSS    AIC
## <none>                     33161 1641.8
## - kilometraje  1       610 33771 1646.4
## - transmision  2      2941 36102 1668.5
## - modelo       1     47387 80549 1960.2
summary(Modmazda3)
## 
## Call:
## lm(formula = precio ~ modelo + kilometraje + transmision, data = datos2)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -69.707  -4.098  -0.565   3.233  77.409 
## 
## Coefficients:
##                         Estimate Std. Error t value Pr(>|t|)    
## (Intercept)           -7.595e+03  3.403e+02 -22.316  < 2e-16 ***
## modelo                 3.798e+00  1.684e-01  22.555  < 2e-16 ***
## kilometraje           -3.731e-05  1.458e-05  -2.559   0.0109 *  
## transmisionMecánica   -8.143e+00  1.905e+00  -4.275 2.46e-05 ***
## transmisionAutomática -2.801e+00  1.852e+00  -1.512   0.1314    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 9.651 on 356 degrees of freedom
## Multiple R-squared:  0.7947, Adjusted R-squared:  0.7924 
## F-statistic: 344.4 on 4 and 356 DF,  p-value: < 2.2e-16
Modmazda4 = lm (precio ~modelo+transmision, data=datos2)
summary(Modmazda4)
## 
## Call:
## lm(formula = precio ~ modelo + transmision, data = datos2)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -69.614  -4.028  -0.460   3.146  77.940 
## 
## Coefficients:
##                         Estimate Std. Error t value Pr(>|t|)    
## (Intercept)           -8191.9363   249.6301 -32.816  < 2e-16 ***
## modelo                    4.0932     0.1237  33.089  < 2e-16 ***
## transmisionMecánica      -8.2012     1.9196  -4.272 2.48e-05 ***
## transmisionAutomática    -2.6547     1.8658  -1.423    0.156    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 9.726 on 357 degrees of freedom
## Multiple R-squared:  0.7909, Adjusted R-squared:  0.7891 
## F-statistic: 450.1 on 3 and 357 DF,  p-value: < 2.2e-16

simplificando el modelo no se considera la variable kilometraje puesto que el valor R2 solo pasa de 0,7924 a 0,7891

el modelo obtenido es el siguiente:

Precio= -8191.9363 + 4,0932*Modelo - 8.2012*transMecanica - 2.6547*transautomatica

Validar el poder predictivo del modelo con validación cruzada

#Validación Cruzada
Precio_predict=array(NA,361)
for(i in 1:361){
  datos_training=datos2[-i,]
  datos_test=datos2[i,]
  modelo_predict=lm(precio ~modelo+transmision,data=datos_training)
  Precio_predict[i]=predict(modelo_predict,list(modelo=datos_test$modelo,transmision=datos_test$transmision))
}
Resultado_predict=data.frame(datos2,Precio_predict)
head(Resultado_predict)
precio kilometraje modelo ciudad transmision Precio_predict
41.5 65000 2015 Manizales Mecánica 47.80132
59.0 35 2017 Funza Mecánica 55.92415
38.0 92000 2014 Barrios Unidos Mecánica 43.70349
27.5 116884 2012 Medellín Mecánica 35.53724
35.5 137500 2012 Engativá Mecánica 35.48121
53.0 57000 2016 Santander Mecánica 51.84645
MAE=mean(abs(Resultado_predict$precio-Resultado_predict$Precio_predict))
MAE #Millones#
## [1] 5.331815
MAE/mean(Resultado_predict$precio)*100
## [1] 10.12998
RMSE=sqrt(mean((Resultado_predict$precio-Resultado_predict$Precio_predict)^2))
RMSE
## [1] 9.79868
RMSE/mean(Resultado_predict$precio)*100
## [1] 18.61663

El modelo presenta un error absoluto medio de 10,12% (5,3 millones) y un error cuadratico medio de 18,6% (9,8 millones)

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

El modelo permite estimar el precio de un vehiculo de acuerdo con el modelo y el tipo de transmisión, al considerar estos criterios de compra es posible determinar el precio de mercado de un producto con estas caracteristicas. de esta manera se tiene una mayor certeza de la calidad de las ofertas en terminos de su precio asegurando que no se esta pagando mucho mas en relación a otros productos de caracteristicas similares. Esta herramienta puede ser utilizada para monetizar haciendo la funcion de asesor comercial buscando una comisión por compra o venta de vehiculos o propiamente como inversionista buscando ofertas que esten por debajo del precio de mercado para venderlos a un precio ajustado.