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.