## [1] "web-scraper-order"     "web-scraper-start-url" "links"                
## [4] "links-href"            "precio"                "modelo"               
## [7] "kilometraje"           "transmision"           "ciudad"

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.

La base acontinuación trabajada contiene información de ofertas de vehiculos tipo mazda 2, halladas en el portal de OLX en Colombia, por medio de Webscrapping. Entre las variables que se resultan relevantes se encuentran el modelo (año), la transmision, la ciudad,el kilometraje y como variable respuesta el precio (dado en millon).

La base cuenta con un total de 9 columnas y 313 observaciones.

Datos Mazda 2 Colombia
precio modelo kilometraje transmision ciudad
$ 31.000.000 2009 120.470 km Mecánica Sector Centro, Armenia, Quindío
$ 39.000.000 2013 87.000 km Automática Los Angeles, Engativá, Bogotá
$ 66.000.000 2018 96.000 km Automática Guayacanes, Manizales, Caldas
$ 27.800.000 2008 130.000 km Mecánica El Olivo, San Juan de Pasto, Nariño
$ 34.000.000 2008 140.000 km Automática San Bernardo, Medellín, Antioquia
$ 56.500.000 2018 30.000 km Mecánica Bosques del Limonar, Cali, Valle del Cauca

Pre-Procesamiento de Datos

mazda_col$precio=as.numeric(sub("$", "", sub(".", "", precio, fixed=TRUE), fixed=TRUE))

mazda_col$modelo=as.character(mazda_col$modelo)


mazda_col[c('ciudad_1', 'ciudad_2','ciudad_3')] <- str_split_fixed(mazda_col$ciudad, ',', 3)

mazda_col$kilometraje=as.numeric(sub("km", "", sub(".", "", mazda_col$kilometraje, fixed=TRUE), fixed=TRUE))

#### Filtrando columnas necesarias:

mazda_col= mazda_col[,c("web-scraper-order","precio","modelo","kilometraje","transmision","ciudad","ciudad_1","ciudad_2", "ciudad_3")]

Revisión de datos Faltantes

apply(is.na(mazda_col), 2, sum)
## web-scraper-order            precio            modelo       kilometraje 
##                 0                 0                 0                 0 
##       transmision            ciudad          ciudad_1          ciudad_2 
##                 4                 0                 0                 0 
##          ciudad_3 
##                 0

Se observa que existen 4 valores faltantes para la variable transmision, como es dificil predecir si es automatico o manual el vehiculo, se evaluará sacar estos registros del estudio, no tiene mucho sentido crear otra categoría adicional para los faltantes, pues no representan ni el 2% de la base.

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

tabla_modelo = tabla_freq(mazda_col$modelo)
tabla_transmision = tabla_freq(mazda_col$transmision)



kbl(list(tabla_modelo,tabla_transmision),caption = "<center><strong>Modelo (año) y  Tipo de transmision</strong></center>") %>%
  kable_paper(bootstrap_options = "striped")
Modelo (año) y Tipo de transmision
Categoría Freq. Abs. Freq. Rel.
1995 1 0.3236246
2007 2 0.6472492
2008 18 5.8252427
2009 12 3.8834951
2010 16 5.1779935
2011 32 10.3559871
2012 27 8.7378641
2013 30 9.7087379
2014 18 5.8252427
2015 18 5.8252427
2016 18 5.8252427
2017 23 7.4433657
2018 21 6.7961165
2019 22 7.1197411
2020 13 4.2071197
2021 15 4.8543689
2022 23 7.4433657
Total 309 100.0000000
Categoría Freq. Abs. Freq. Rel.
Automática 143 46.278317
Automática Secuencial 25 8.090615
Mecánica 141 45.631068
Total 309 100.000000

Como puede observarse hay un año que se puede considerar atípico que es 1995. Al ser una variable con tantos niveles, se propone convertirla en numerica, hallar los cuartiles y de acuerdo a eso recategorizarla para su posterior uso en el modelo. Respecto a la transmision cerca del 55% se trata de una version automática, por lo que tambien se reagrupara para una mejor utilización de la variable.

#### Organizando transmision

mazda_col=mazda_col %>% 
  mutate(transmision = ifelse(as.character(transmision) == "Automática Secuencial", "Automática", as.character(transmision)))



#### Organizando modelo de acuerdo a cuartiles 

mazda_col$modelo=as.numeric(mazda_col$modelo)

mazda_col$modelo_cat <- cut(mazda_col$modelo, breaks = c(0, 2011, 2014,2018, Inf),
                  labels = c("menos_2011", "2011_2014", "2014_2018","2018_2022"),
                  right = TRUE)

tabla_modelo_new = tabla_freq(mazda_col$modelo_cat)
tabla_transmision_new = tabla_freq(mazda_col$transmision)



kbl(list(tabla_modelo_new,tabla_transmision_new),caption = "<center><strong>Modelo (año) y  Tipo de transmision (Recategorizadas) </strong></center>") %>%
  kable_paper(bootstrap_options = "striped")
Modelo (año) y Tipo de transmision (Recategorizadas)
Categoría Freq. Abs. Freq. Rel.
menos_2011 81 26.21359
2011_2014 75 24.27184
2014_2018 80 25.88997
2018_2022 73 23.62460
Total 309 100.00000
Categoría Freq. Abs. Freq. Rel.
Automática 168 54.36893
Mecánica 141 45.63107
Total 309 100.00000

Se observa en la siguiente tabla, que parecen existir un punto atipico pues reporta que un vehiculo tiene 280 mil kms recorridos. En cuanto al precio dado en millones,el promedio del precio del vehiculo esta alrededor de 50 millones de pesos.

tabla_km = descriptivas(mazda_col$kilometraje)
tabla_precio = descriptivas(mazda_col$precio)


kbl(list(tabla_km, tabla_precio ),
    caption = "<center><strong>Distribución Kilometraje y Precio  Mazda 2</strong></center>") %>%
  kable_paper(bootstrap_options = "striped")
Distribución Kilometraje y Precio Mazda 2
MEDIDA VALOR
Observaciones 309.00
Mínimo 0.00
1er Q 39500.00
Media 75777.69
Mediana 80000.00
Desv Est 46796.49
3er Q 108000.00
Máximo 280000.00
MEDIDA VALOR
Observaciones 309.00
Mínimo 6800.00
1er Q 35000.00
Media 50284.79
Mediana 42000.00
Desv Est 20630.44
3er Q 63000.00
Máximo 169800.00
mazda_col$precio=as.numeric(mazda_col$precio)


par(mfrow = c(2,2))
boxplot(mazda_col$precio, horizontal = TRUE, main = "Boxplot Precio Vehiculo Mazda 2",col="#A6CEE3" )
hist(mazda_col$precio,main = "Histograma Precio Vehiculo Mazda 2" , ylab = "Frecuencia" , xlab = "Millones de pesos",col="#A6CEE3")
boxplot(mazda_col$kilometraje, horizontal = TRUE, main = "Boxplot Kms recorridos",col="#A6CEE3" )
hist(mazda_col$kilometraje,main = "Histograma Kms recorridos" , ylab = "Frecuencia" , xlab = "m2",col="#A6CEE3")

Análisis Bivariado

Se puede observar que a medida que va aumentando el modelo (año) del mazda 2, el precio va incrementando, apesar de que cuando esta entra 2018 y 2022 existen precios atipicos, lo que puede deberse a algun dato incorrecto dentro de la base, el precio promedio de los vehiculos con modelo menor a 2011 es de 32.5 millones.

El promedio del precio de vehiculos con transmision automática, es en promedio de 57 millones vs 38.5 millones que representa el promedio de la transmisión mecánica.

Existen ciertos puntos atipicos e influyentes al visualizar la relación del precio del vehiculo con el kilometraje, en su mayoria existe una relación negativa entre ambas variables como es de esperarse.

Análisis Correlación

## [1] -0.6529679

Se puede observar que las relaciones entre variables continuas con respecto a la variable precio del vehiculo, es apenas del 65% entre el kilomtreaje y el precio, con tendencia negativa.

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

options(scipen=999)
ml=lm(precio~ kilometraje+transmision+modelo_cat,data=mazda_col)
summary(ml)
## 
## Call:
## lm(formula = precio ~ kilometraje + transmision + modelo_cat, 
##     data = mazda_col)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -66035  -4026    353   3956  92428 
## 
## Coefficients:
##                        Estimate  Std. Error t value             Pr(>|t|)    
## (Intercept)         40607.54297  2566.41770  15.823 < 0.0000000000000002 ***
## kilometraje            -0.05068     0.01944  -2.606              0.00960 ** 
## transmisionMecánica -5491.02629  1310.46340  -4.190            0.0000366 ***
## modelo_cat2011_2014  5968.16141  1803.02240   3.310              0.00105 ** 
## modelo_cat2014_2018 21079.86913  1978.18620  10.656 < 0.0000000000000002 ***
## modelo_cat2018_2022 38590.37803  2483.34056  15.540 < 0.0000000000000002 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 11160 on 303 degrees of freedom
## Multiple R-squared:  0.7122, Adjusted R-squared:  0.7075 
## F-statistic:   150 on 5 and 303 DF,  p-value: < 0.00000000000000022

\[H_0 :\beta_1,.., \beta_5=0\] \[H_a :\beta_1,.., \beta_5\neq 0\]

Se Puede observar que \(|t_0| > t_{\alpha/2 ,n-2}\), entonces se rechaza \(H_0\), y se dice que \(\beta_1\) es diferente de 0.Lo mismo sucede para el resto de betas a un nivel de significancia del 5%.

El coeficiente de determinación representa la proporción de la variabilidad de Y que es posible explicar a travez de x. En este caso el modelo construido explica el 70.7% de las variaciones del precio de los vehiculos mazda 2 a traves del kilometraje, la transmision y el modelo.

\[ Y_{(precio)} =40,607.5-0.051*kms-5,491.03*mecanico+5,968.2*modelocat2+21,079.9*modelocat3+38,590.4*modelocat4\]

Interpretación Betas

Validación de Supuestos Modelo 1:

  1. \(E(e_i )= 0\)
error_medio_m1=mean(residuals(ml))
error_medio_m1
## [1] 0.0000000000004694138

El valor esperado (promedio) de los residuales es igual a 0.

  1. Supuesto de Normalidad

\[H_0 : X \sim N(\mu,\sigma^2)\] \[H_a : X \nsim N(\mu,\sigma^2)\]

norm_m1=shapiro.test(ml$residuals)
norm_m1
## 
##  Shapiro-Wilk normality test
## 
## data:  ml$residuals
## W = 0.69593, p-value < 0.00000000000000022

Con P-value es menor a a 0.05 (nivel de significancia escogido), se rechaza \(H_0\), entonces podría pensar que los errores no siguen una distribución normal.

  1. Supuesto de Homocedasticidad de Varianza (Breush Pagan)

\(H_0 : Los \quad residuales \quad se \quad distribuyen \quad con \quad la \quad misma \quad varianza\)

\(H_a : Los \quad residuales \quad no \quad se \quad distribuyen \quad con \quad la \quad misma \quad varianza\)

homocedasticidad_m1=bptest(ml)
homocedasticidad_m1
## 
##  studentized Breusch-Pagan test
## 
## data:  ml
## BP = 16.938, df = 5, p-value = 0.004618

Como P-value es menor a 0.05 (nivel de significancia escogido), no se rechaza \(H_0\), entonces se podría pensar que los errores cumplen con el supuesto de homocedasticidad.

  1. Supuesto de Autocorrelación de los errores (Durbin-Watson)

\[H_0 : No \quad existe \quad correlación \quad entre \quad los \quad errores\] \[H_a : Existe \quad correlación \quad entre \quad los \quad errores\]

autocor_m1=dwt(ml, alternative = "two.sided")
autocor_m1
##  lag Autocorrelation D-W Statistic p-value
##    1      0.02343263      1.952991   0.614
##  Alternative hypothesis: rho != 0

Como P-value es mayor a 0.05 (nivel de significancia escogido),no se rechaza \(H_0\), entonces se podría pensar que los errores no estan autocorrelacionados.

4.Validar el poder predictivo del modelo con validación cruzada.

ml_2=step(ml)
## Start:  AIC=5765.64
## precio ~ kilometraje + transmision + modelo_cat
## 
##               Df   Sum of Sq         RSS    AIC
## <none>                       37723533543 5765.6
## - kilometraje  1   845708643 38569242186 5770.5
## - transmision  1  2185883403 39909416946 5781.0
## - modelo_cat   3 32550933940 70274467483 5951.9
ml_2
## 
## Call:
## lm(formula = precio ~ kilometraje + transmision + modelo_cat, 
##     data = mazda_col)
## 
## Coefficients:
##         (Intercept)          kilometraje  transmisionMecánica  
##         40607.54297             -0.05068          -5491.02629  
## modelo_cat2011_2014  modelo_cat2014_2018  modelo_cat2018_2022  
##          5968.16141          21079.86913          38590.37803

Según lo anterior el modelo sugerido es el que actualmente es esta trabajando, pues no sugiere eliminar ninguna variable.

control <- trainControl(method = "cv", number = 10)

#fit a regression model and use k-fold CV to evaluate performance
model_cv_1 <- train(precio ~ kilometraje + transmision + modelo_cat, data = mazda_col, method = "lm", trControl = control)

#view summary of k-fold CV               
print(model_cv_1)
## Linear Regression 
## 
## 309 samples
##   3 predictor
## 
## No pre-processing
## Resampling: Cross-Validated (10 fold) 
## Summary of sample sizes: 279, 279, 277, 278, 277, 278, ... 
## Resampling results:
## 
##   RMSE      Rsquared   MAE     
##   10129.14  0.7626013  6204.231
## 
## Tuning parameter 'intercept' was held constant at a value of TRUE

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

Un modelo que permita de predecir el precio del vehiculos dadas las caracteristicas expuestas anteriormente, como herramienta le sería de ayuda al consumidor para saber tanto a que precio vender su vehiculo como a que precio comprar. Saber si el posible negocio que el quiera realizar se encuentra dentro de lo que en promedio se puede observar.