A continuación vamos a construir un modelo predictivo de precios de vehículos referencia mazda 3 para la ciudad de Cali, que descargamos con datos del portal carroya. La base de datos contiene las variables precio y año del vehículo como se observa a continuación:
library(readxl)
mazda <- read_excel("C:/Users/rarestrepo/Downloads/rsconnect/mazda3_cal.xlsx",
sheet = "modelo_simple")
head(mazda)
## # A tibble: 6 × 2
## precio_millon año
## <dbl> <dbl>
## 1 69 2019
## 2 87 2022
## 3 66 2018
## 4 56 2016
## 5 72 2017
## 6 110 2023
Continuando con el ejercicio se realiza una exploración de la base de datos:
require(table1)
## Cargando paquete requerido: table1
##
## Adjuntando el paquete: 'table1'
## The following objects are masked from 'package:base':
##
## units, units<-
require(ggplot2)
## Cargando paquete requerido: ggplot2
require(plotly)
## Cargando paquete requerido: plotly
##
## Adjuntando el paquete: 'plotly'
## The following object is masked from 'package:ggplot2':
##
## last_plot
## The following object is masked from 'package:stats':
##
## filter
## The following object is masked from 'package:graphics':
##
## layout
table1(~precio_millon+as.factor(año),data=mazda)
| Overall (N=140) |
|
|---|---|
| precio_millon | |
| Mean (SD) | 65.4 (21.5) |
| Median [Min, Max] | 67.5 [22.5, 110] |
| as.factor(año) | |
| 2005 | 1 (0.7%) |
| 2006 | 4 (2.9%) |
| 2007 | 2 (1.4%) |
| 2008 | 1 (0.7%) |
| 2009 | 6 (4.3%) |
| 2010 | 6 (4.3%) |
| 2011 | 4 (2.9%) |
| 2012 | 3 (2.1%) |
| 2014 | 1 (0.7%) |
| 2015 | 14 (10.0%) |
| 2016 | 15 (10.7%) |
| 2017 | 17 (12.1%) |
| 2018 | 22 (15.7%) |
| 2019 | 19 (13.6%) |
| 2020 | 8 (5.7%) |
| 2021 | 6 (4.3%) |
| 2022 | 8 (5.7%) |
| 2023 | 3 (2.1%) |
require(caret)
## Cargando paquete requerido: caret
## Cargando paquete requerido: lattice
mod1=train(precio_millon~año,data=mazda,method="lm")
mod1
## Linear Regression
##
## 140 samples
## 1 predictor
##
## No pre-processing
## Resampling: Bootstrapped (25 reps)
## Summary of sample sizes: 140, 140, 140, 140, 140, 140, ...
## Resampling results:
##
## RMSE Rsquared MAE
## 6.830627 0.9065914 5.472489
##
## Tuning parameter 'intercept' was held constant at a value of TRUE
mod1$finalModel
##
## Call:
## lm(formula = .outcome ~ ., data = dat)
##
## Coefficients:
## (Intercept) año
## -9883.820 4.934
#precio=-9883.820 +(4.934*año)
#ejemplo: de acuerdo con el modelo cual es el precio
#promedio de un vehiculo mazda 3 modelo 2018
-9883.820 +(4.934*2018)
## [1] 72.992
#vamos a crear la variable antiguedad
mazda$antiguedad=2024-mazda$año
mod2=train(precio_millon~antiguedad,data=mazda,method="lm")
mod2$finalModel
##
## Call:
## lm(formula = .outcome ~ ., data = dat)
##
## Coefficients:
## (Intercept) antiguedad
## 103.237 -4.934
mod2
## Linear Regression
##
## 140 samples
## 1 predictor
##
## No pre-processing
## Resampling: Bootstrapped (25 reps)
## Summary of sample sizes: 140, 140, 140, 140, 140, 140, ...
## Resampling results:
##
## RMSE Rsquared MAE
## 6.845781 0.9068548 5.58319
##
## Tuning parameter 'intercept' was held constant at a value of TRUE
#precio= 103.237 -(4.934*antiguedad)
#promedio de un vehiculo mazda 3 modelo 2018
103.237 -(4.934*(2024-2018))
## [1] 73.633
uso practico del modelo:
predict(mod1,list(año=2025:2027))
## 1 2 3
## 108.1718 113.1061 118.0404
predict(mod2,list(antiguedad=-c(1:3)))
## 1 2 3
## 108.1718 113.1061 118.0404
Los precios proyectados para los próximos 3 años son 108.1718 113.1061 118.0404 respectivamente.