Análise e Modelagem de Preços de Carros Usados
1 Introdução
O mercado de venda de veículos usados desempenha um papel significativo na indústria automotiva. Com a crescente demanda por opções acessíveis e a busca por alternativas sustentáveis, a compra de veículos usados se tornou uma escolha popular. Este estudo busca analisar as tendências, preços e fatores que influenciam esse mercado dinâmico e em constante transformação.
Empregou-se métodos estatísticos, como análise exploratória de dados, modelagem estatística e técnicas de previsão, para analisar e compreender este mercado. Por meio dessas abordagens, foram investigados padrões, identificados fatores relevantes e desenvolvidos modelos capazes de prever o comportamento do mercado e auxiliar na tomada de decisões informadas.
2 Dados Utilizados
Os dados utilizados nesse trabalho foram retirados do Kaggle, se tratando de dados sobre o preço de carros usados. O conjunto de dados possui as seguintes variáveis:
v.id : Chave de identificação de cada observação
road_old: Refere-se ao preço original do carro ao ser comprado novo
road_now: Refere-se ao preço de mercado atual do carro
years: Representa o número de anos do carro
km: Refere-se a kilometragem do carro
rating: Representa a classificação ou pontuação atribuída ao carro com base em vários fatores, como desempenho, confiabilidade, segurança, etc. Ele fornece uma avaliação geral da qualidade do carro. Vai de 1 a 10, sendo 10 a avaliação máxima
condition: Indica o estado de deteriorização do carro. Indo de 1 a 10, onde 10 indica deteriorização máxima
economy: Representa a eficiência de combustível ou consumo de combustível do carro. Ele indica a distância que o carro pode percorrer por unidade de combustível consumido.
top_speed: Indica a velocidade máxima que o carro pode atingir
hp: Representa a potência do carro.
torque: Indica o torque do motor do carro. O torque representa a força rotacional produzida pelo motor, que é importante para a aceleração
current_price: Representa o preço listado atual ou o preço pedido para o carro usado. É o valor que o vendedor espera receber pelo carro.
A variável current_price foi a variável resposta do trabalho. Assim, utilizando as demais variáveis listadas, estimou-se modelos para previsão de preço de carros usados
3 Separação e Análise Exploratória dos Dados
Os dados são todos do tipo numérico, onde tem-se que :
Rows: 6
Columns: 12
$ v.id <dbl> 1, 2, 3, 4, 5, 6
$ road_now <dbl> 535651, 591911, 686990, 573999, 691388, 650007
$ road_old <dbl> 798186, 861056, 770762, 722381, 811335, 844846
$ years <dbl> 3, 6, 2, 4, 6, 6
$ km <dbl> 78945, 117220, 132538, 101065, 61559, 148846
$ rating <dbl> 1, 5, 2, 4, 3, 2
$ condition <dbl> 2, 9, 8, 3, 9, 9
$ economy <dbl> 14, 9, 15, 11, 12, 13
$ top_speed <dbl> 177, 148, 181, 197, 160, 138
$ hp <dbl> 73, 74, 53, 54, 53, 61
$ torque <dbl> 123, 95, 97, 116, 105, 109
$ current_price <dbl> 351318.0, 285001.5, 215386.0, 244295.5, 531114.5, 177933~
Observando o gráfico de valores faltantes, foi visto que nenhuma variável possuia falta de dados e portanto não foi necessária a utilização de técnicas de imputação de dados
Buscando diminuir o viés amostral, o conjunto de dados será divido em treino e teste, com proporção \((0.75, \ 0.25)\), o método de divisão utilizado será de amostragem estratificada simples, tal método foi escolhido para evitar desbalanceamento de valores dos carros nos conjuntos de treino e teste. Portanto, toda a análise e modelagem realizada nos próximos tópicos foi realizada em cima do conjunto de dados de teste, ao final da etapa de modelagem foi realizado a validação do modelo, onde utilizou-se o conjunto de teste dos dados
A partir do correlograma, observou-se que a as variáveis road_now e road_old possuem certo nivel de correlação positiva com a varíável de interesse current_price. Também observou uma forte correlação negativa com a km (o que é esperado dado que usualmente uma maior kilometragem de um veículo indica um menor poder de revenda)
`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Com histogramas de cada variável, viu-se que elas se apresentavam de maneira praticamente uniforme, ou seja, não havia problema de desbalanceamento nas variáveis preditoras
A partir do boxplot dos log dos valores de cada variável, vemos que a variável de interesse current_price pode possuir cauda pesada, ja as demais variveis não possuem essa característica.
Observando o histograma da variável, sem tranformação Log(), não observou-se a presença de caudas pesadas e portanto não foi necessário a aplicação de transformações nessa variável
4 Modelos de Regressão
4.1 Seleção Voluntária
Primeiramente, dois 2 modelos foram criados.
- Modelo Saturado:
- O modelo utiliza todas as variáveis disponiveis no conjunto de dados como preditoras
- Modelo Correlacional
- O modelo utiliza apenas as variáveis com correlação acima de 0.1 juntamente com a variével years
Os modelos apresentaram as seguintes estimativas para \(\tilde {\beta}\)
| Saturado | Correlacional | |
|---|---|---|
| (Intercept) | -14651.9* | 20605.4* |
| p = <0.1 | p = <0.1 | |
| road_now | 0.5*** | 0.5*** |
| p = <0.1 | p = <0.1 | |
| road_old | 0.5*** | 0.5*** |
| p = <0.1 | p = <0.1 | |
| years | -1595.4*** | -1063.3** |
| p = <0.1 | p = <0.1 | |
| km | -4.0*** | -4.0*** |
| p = <0.1 | p = <0.1 | |
| rating | 285.8 | |
| p = 0.2 | ||
| condition | 4629.4*** | |
| p = <0.1 | ||
| economy | 41.7 | |
| p = 0.8 | ||
| top_speed | -7.9 | |
| p = 0.6 | ||
| hp | 16.4 | |
| p = 0.3 | ||
| torque | 7.6 | |
| p = 0.6 | ||
| Num.Obs. | 748 | 748 |
| R2 | 0.995 | 0.985 |
| R2 Adj. | 0.995 | 0.984 |
| AIC | 15720.9 | 16585.0 |
| BIC | 15776.3 | 16612.7 |
| Log.Lik. | -7848.427 | -8286.511 |
| RMSE | 8722.06 | 15666.58 |
Viu-se que ambos os modelos o intercepto foi significativo, assim como as variáveis: road_now, road_now, years, km. No modelo saturado, a variável condition tambem se apresentou como significativa
O R-Quadrado Ajustado em ambos os modelos se mostrou extremamente alto, acima de \(0.98\), tal valor pode indicar um super-ajuste por parte dos dois modelos, e portanto se mostrando como modelos com baixa generalização
Os resíduos de ambos os modelos apresentaram inconsistência
- Modelo Saturado
Attaching package: 'performance'
The following objects are masked from 'package:yardstick':
mae, rmse
Viu-se que os resíduos apresentavam certo padrão, onde a partir do gráfico de homogeneidade da variância, observou-se que eles se apresentavam em dois niveis distintos: acima e abaixo do valor 1. Além disso, a partir do histograma e do qqplot, observou-se a não normalidade dos resíduos, apresentando assimetria e caudas pesadas
- Modelo Correlacional
Viu-se que os resíduos apresentavam certo padrão, onde a partir do gráfico de homogeneidade da variância, observou-se que eles se apresentavam em 3 niveis distintos: acima de 1.5, faixa do valor 1 e na faixa do valor 0.75. Além disso, a partir do histograma e do qqplot, observou-se a não normalidade dos resíduos, apresentando assimetria, caudas pesadas e multimodalidade
Utilizando testes de normalidade não parametricos (Shapiro-Wilk, Cramer-VonMisses e Lilliefors), rejeitou-se novamente a hipótese de normalidade dos resíduos com \(99\%\) de confiabilidade
Attaching package: 'kableExtra'
The following object is masked from 'package:dplyr':
group_rows
| Teste | Modelo.Sat.P.valor | Modelo.Corr.P.valor |
|---|---|---|
| Shapiro | 0 | 0 |
| Cramer | 0 | 0 |
| Lilliefors | 0 | 0 |
Assim, concluiu-se que, apesar de um ótimo valor de R-Ajustado, os dois modelos apresentaram inconsistencias em relação a normalidade dos resíduos.
4.2 Engenharia de Características
A engenharia de características é o processo de identificar, selecionar e criar variáveis relevantes a partir de padrões dos dados. Essa etapa é crucial para melhorar o desempenho dos modelos, garantindo que as características escolhidas sejam informativas e representem adequadamente o problema em questão.
Na tentativa de melhorar o modelo foi utilizado o seguinte agrupamento de variáveis:
As funções de transformações são dadas por:
% Perda de Valor = \(\frac{(Valor Inicial - Valor Atual)\times100}{Valor Inicial}\)
deterioração do Veículo = \(Média (condition ,\ years , \ km)\)
Potencia do Motor = \(Média (top \ speed ^2 ,\ hp^5 , \ torque)\)
A partir do correlograma observou-se que a variável de interesse current_price apresentou forte correlação negativa com deterioration. Com o restante das variáveis, nenhuma acima de 0.5 foi observada
O modelo construído é dado por: \[current\_price = \beta_0 \ +\ \beta_1\ value\_loss\_pct \ + \ \beta_2\ deterioration \ + \ \beta_3\ engine\_power + E\]
Os seguintes \(\beta\) foram estimados
| Features | |
|---|---|
| (Intercept) | 739155.0*** |
| p = <0.1 | |
| value_loss_pct | -771.7*** |
| p = <0.1 | |
| deterioration | -12.3*** |
| p = <0.1 | |
| engine_power | 0.0 |
| p = 0.1 | |
| Num.Obs. | 748 |
| R2 | 0.880 |
| R2 Adj. | 0.879 |
| AIC | 18115.6 |
| BIC | 18138.7 |
| Log.Lik. | -9052.782 |
| RMSE | 43639.20 |
Analisando o modelo, vemos que o intercepto foi significativo, assim como as variáveis: value_loss_pct (% Perda de Valor) e deterioration (deterioração), a variável engine_power (Potencia do Motor) não foi significativa, porém, foi mantida no modelo por conta da interpretabilidade, tal questão será abordada com detalhes nos próximos tópicos. Além disso, o R-Quadrado Ajustado foi menor que os dois outros modelos testados, porem ainda se configura como um valor alto, e portanto essa diminuição pode indicar uma melhor propriedade de generalização do modelo
O modelo apresentou os seguintes resíduos:
Podemos ver que diferente dos outros 2 modelos, não é possível enxergar padrões ou correlações entre os resíduos, e portanto não rejeita-se a hipótese de aleatoridade. Além disso, a partir do histograma e do qq plot, vemos que eles se ajustam bem a uma distribuição normal, não apresentando caudas pesadas, assimetria ou multimodalidade como os outros modelos
Utilizando testes de normalidade não paramétricos (Shapiro-Wilk, Cramer-VonMisses e Lilliefors) com parâmetro de locação fixado em 0, não rejeitou-se a hipótese de normalidade dos resíduos com \(99\%\) de confiabilidade
| Teste | Modelo.Feat.P.valor |
|---|---|
| Shapiro | 0.2048031 |
| Cramer | 0.3276374 |
| Lilliefors | 0.4188786 |
Assim, concluiu-se que os resíduos do modelo seguem distribuição normal com média 0 e variância constante.
Após testar a hipótese de normalidade e aleatoridade dos resíduos, construiu-se os gráficos das padronizações dos resíduos, buscando visualizar valores extremos ou atípicos.
Foram utilizadas as seguintes padronizações:
Resíduos semi-estudentizados
Resíduos estudentizados
Resíduos PRESS
Observando o gráfico dos resíduos vemos que eles não apresentam nenhum tipo de correlação, observação atípica ou valor extremo. Assim não é necessário transformações do tipo Box-Cox
Buscando uma melhor conclusão sobre valores extremos e atípicos, realizou-se uma análise de diagnósticos
Foi construido o seguinte gráfico para analisar pontos de alavanca. A idéia básica por trás do conceito de pontos de alavanca é avaliar a influência de cada observação sobre o próprio valor predito
Assim vemos que as observações 17 e 328 foram classificadas como alavancas e portanto são canditadas a exclusão do conjunto de dados, tal ação é realizada para minimizar vício nas estimativas
Foi construido o seguinte gráfico para analisar pontos de influência A ideia básica por trás dos pontos de influência é avaliar a influência de cada observação nos coeficientes do modelo, ou seja, em toda a estrutura da regressão. Esses pontos podem exercer uma influência desproporcional nos resultados da regressão devido a sua posição ou características peculiares.
Vemos que apenas as observações 399, 592 e 631 foram classificadas fora do intervalo normal de influência para o coeficiente da variável Potencia de Motor, onde essa variável não é significativa para o modelo. O ponto 17 foi classificado como influente no cálculo da matriz de correlação e o ponto 266 influente para a estimativa da deterioração. Esses são pontos diferentes daqueles vistos acimas.
Excluir pontos do conjunto de dados pode ser prejudicial, pois a remoção indiscriminada pode levar à perda de informações valiosas e distorcer a representatividade do conjunto. Além disso, pode causar viés e prejudicar a generalização do modelo para novos dados.
Assim, dada a inconsistencia entre os pontos se classificarem como influente ou alavancas, nenhum deles foi excluído do conjunto de dados.
A análise final do modelo foi sobre a relação entre as variveis preditoras.
Multicolinearidade em um modelo de regressão linear ocorre quando há alta correlação entre duas ou mais variáveis independentes. Isso pode afetar negativamente o modelo, tornando difícil interpretar a importância individual das variáveis e causando instabilidade nos coeficientes estimados.
O VIF é uma medida que indica o grau de inflação da variância dos coeficientes devido à multicolinearidade em um modelo de regressão.
| VIF_Values | |
|---|---|
| value_loss_pct | 1.000291 |
| deterioration | 1.008633 |
| engine_power | 1.008797 |
Sabendo que um valor crítico empírico do VIF é 5, vemos as variáveis apresentaram um valor do VIF não significativo e portanto não rejeita-se a hipótese das variáveis do modelo não serem correlacionadas
4.3 Regularização
Apesar das variáveis utilizadas se mostrarem aproximadamente ortogonais, ou seja, uma não pode ser escrita em função da outra e portanto possuem um VIF extremamente baixo, na tentativa de melhorar o modelo, realizou-se regularizações.
Foram testadas as seguintes regularizações:
Lasso (L1)
Ridge (L2)
Elastic Net (Mistura 0.7 de penalty L1 e 0.3 de Penalty L2)
Para uma estimação robusta, utilizou-se o método de cross validation para otimização de hiperparâmetro, que se trata da divisão do conjunto de treino em determinado número de folds, no caso foram dividos 10 folds. A cada iteração 9 folds eram usados como fonte de dados para otimização do hiperparâmetro \(\lambda\) e o fold restante era utilizado como validação das métricas. Ao final, obteu-se os seguintes gráficos para cada regularização
$Lm
# A tibble: 2 x 6
.metric .estimator mean n std_err .config
<chr> <chr> <dbl> <int> <dbl> <chr>
1 rmse standard 43670. 10 992. Preprocessor1_Model1
2 rsq standard 0.881 10 0.00430 Preprocessor1_Model1
$Lasso
# A tibble: 200 x 7
penalty .metric .estimator mean n std_err .config
<dbl> <chr> <chr> <dbl> <int> <dbl> <chr>
1 0 rmse standard 43675. 10 1001. Preprocessor1_Model001
2 0 rsq standard 0.881 10 0.00431 Preprocessor1_Model001
3 101. rmse standard 43675. 10 1001. Preprocessor1_Model002
4 101. rsq standard 0.881 10 0.00431 Preprocessor1_Model002
5 202. rmse standard 43675. 10 1001. Preprocessor1_Model003
6 202. rsq standard 0.881 10 0.00431 Preprocessor1_Model003
7 303. rmse standard 43675. 10 1001. Preprocessor1_Model004
8 303. rsq standard 0.881 10 0.00431 Preprocessor1_Model004
9 404. rmse standard 43675. 10 1001. Preprocessor1_Model005
10 404. rsq standard 0.881 10 0.00431 Preprocessor1_Model005
# i 190 more rows
$Ridge
# A tibble: 200 x 7
penalty .metric .estimator mean n std_err .config
<dbl> <chr> <chr> <dbl> <int> <dbl> <chr>
1 0 rmse standard 44808. 10 1102. Preprocessor1_Model001
2 0 rsq standard 0.881 10 0.00427 Preprocessor1_Model001
3 101. rmse standard 44808. 10 1102. Preprocessor1_Model002
4 101. rsq standard 0.881 10 0.00427 Preprocessor1_Model002
5 202. rmse standard 44808. 10 1102. Preprocessor1_Model003
6 202. rsq standard 0.881 10 0.00427 Preprocessor1_Model003
7 303. rmse standard 44808. 10 1102. Preprocessor1_Model004
8 303. rsq standard 0.881 10 0.00427 Preprocessor1_Model004
9 404. rmse standard 44808. 10 1102. Preprocessor1_Model005
10 404. rsq standard 0.881 10 0.00427 Preprocessor1_Model005
# i 190 more rows
$`Elastic Net`
# A tibble: 200 x 7
penalty .metric .estimator mean n std_err .config
<dbl> <chr> <chr> <dbl> <int> <dbl> <chr>
1 0 rmse standard 43675. 10 1001. Preprocessor1_Model001
2 0 rsq standard 0.881 10 0.00431 Preprocessor1_Model001
3 101. rmse standard 43675. 10 1001. Preprocessor1_Model002
4 101. rsq standard 0.881 10 0.00431 Preprocessor1_Model002
5 202. rmse standard 43675. 10 1001. Preprocessor1_Model003
6 202. rsq standard 0.881 10 0.00431 Preprocessor1_Model003
7 303. rmse standard 43675. 10 1001. Preprocessor1_Model004
8 303. rsq standard 0.881 10 0.00431 Preprocessor1_Model004
9 404. rmse standard 43675. 10 1001. Preprocessor1_Model005
10 404. rsq standard 0.881 10 0.00431 Preprocessor1_Model005
# i 190 more rows
Assim como era esperado, as regularizações não indicaram nenhum tipo de melhora no modelo. Isso ocorre porque as variáveis preditoras utilizadas já são fortemente não correlacionadas. As regularizações têm como objetivo adicionar penalidades a variáveis correlacionadas, o que não se aplica ao caso em questão.
4.4 Tópico Extra
O tópico extra busca utilizar os modelos Bayesianos e de Aprendizado de Máquina vistos em aulas.
Os modelos desenvolvidos não passaram por nenhuma modelagem complexa, ou seja, as probabilidades a priori foram definidas de maneira básica (família Gaussina sem fixação de hiperparâmetros), e os hiperparâmetros do Random Forest não passsaram por nenhum processo de tuning
Para aumentar a robustez das métricas, foi utilizado novamente o método da divisão do conjunto de dados de treino em 10 folds
# A tibble: 6 x 9
wflow_id .config preproc model .metric .estimator mean n std_err
<chr> <chr> <chr> <chr> <chr> <chr> <dbl> <int> <dbl>
1 recipe_linear_~ Prepro~ recipe line~ rmse standard 4.37e+4 10 9.92e+2
2 recipe_linear_~ Prepro~ recipe line~ rsq standard 8.81e-1 10 4.30e-3
3 recipe_rand_fo~ Prepro~ recipe rand~ rmse standard 4.61e+4 10 1.09e+3
4 recipe_rand_fo~ Prepro~ recipe rand~ rsq standard 8.70e-1 10 5.10e-3
5 recipe_linear_~ Prepro~ recipe line~ rmse standard 4.37e+4 10 9.92e+2
6 recipe_linear_~ Prepro~ recipe line~ rsq standard 8.81e-1 10 4.30e-3
Vemos que o modelo de Random Forest apresentou metricas de Erro Quadrático Médio e R Quadrado Ajustado piores que os modelos de regressão lineares. Já o modelo Bayesiano não apresentou melhoras em relação ao modelo construido na etapa de engenharia de características.
Portanto, vemos que os modelos Bayesianos e de Random Forest não apresentaram melhora ao modelo de regressão linear simples. Além disso, a interpretação de tais modelos é mais complexa e portanto não seguiremos com eles nas próximas etapas
4.5 Métricas e Interpretação do Melhor Modelo
O modelo a apresentar melhores métricas no conjunto de dados de treino foi aquele construido na etapa de Engenharia de Características, se tratando de um modelo de regressão linear. É dado por:
\[current\_price = \beta_0 \ +\ \beta_1\ value\_loss\_pct \ + \ \beta_2\ deterioration \ + \ \beta_3\ engine\_power + E\]
Os seguintes \(\beta\) foram estimados
| Features | |
|---|---|
| (Intercept) | 739155.0*** |
| p = <0.1 | |
| value_loss_pct | -771.7*** |
| p = <0.1 | |
| deterioration | -12.3*** |
| p = <0.1 | |
| engine_power | 0.0 |
| p = 0.1 | |
| Num.Obs. | 748 |
| R2 | 0.880 |
| R2 Adj. | 0.879 |
| AIC | 18115.6 |
| BIC | 18138.7 |
| Log.Lik. | -9052.782 |
| RMSE | 43639.20 |
Por fim, iremos avaliar a propriedade de generalização do modelo, analisando as métricas no conjunto de dados de teste
| Metric | Data_test | Data_Training |
|---|---|---|
| rmse | 4.438387e+04 | 4.363920e+04 |
| rsq | 8.773829e-01 | 8.797584e-01 |
Podemos ver que o modelo teve um desempenho muito parecido em ambos os conjunto de dados, indicando uma forte propriedade de generalização por parte dele.
Além disso, o modelo construído apresenta alta interpretabilidade:
- Intercepto com \(\beta\) estimado de \(7.392e+05\)
- Indica que o valor inicial de um carro usado é de \(7.392e+05\) (local e moeda de onde os dados foram retirados é desconhecida)
- % de perda de valor com \(\beta\) estimado de \(-7.717e+02\)
- Indica que a cada porcento em que o valor perdido sobre o preço do veiculo aumenta, menor é seu preço de revenda. Ou seja, se o carro tiver um grande perda de valor de mercado, o valor de revenda dele será menor por conta do novo dono ter um baixo poder de revender esse carro usado
- Deterioração com \(\beta\) estimado de \(-1.226e+01\)
- Indica que quanto maior for o grau de desgaste e deterioração do veiculo, menor será seu preço de revenda
- Potencia de Motor com \(\beta\) estimado de \(-1.025e-06\)
- Indica que quanto maior for a potencia do motor, menor será seu valor de revenda. Apesar de soar contraditório, a variável não se mostrou significativa e além disso, a cultura e costumes do lugar de onde os dados foram retirados não são conhecidos. Carros mais potentes podem indicar um maior consumo de combustível, o que pode significar um menor interesse por parte dos compradores
Temos as seguintes estimativas nos dados do conjunto de teste, o gráfico possui os valores reais, estimativas pontuais e o intervalo de confiança de \(95\%\)
O gráfico é de difícil visualização por conta do número de pontos. Assim, foi amostrado 30 pontos de maneira aleatória
Observa-se uma boa capacidade do modelo em prever os valores
5 Conclusão
Em conclusão, o trabalho desenvolvido com dados de carros usados explorou várias técnicas de regressão linear, incluindo modelos saturados e correlacionais, engenharia de características, análise de diagnósticos, análise de resíduos e regularização L1, L2 e Elastic Net. O modelo construído através da engenharia de características não apresentou altos valores de VIF, indicando baixa multicolinearidade. Além disso, os resíduos do modelo mostraram-se consistentes com a normalidade. Nesse contexto, a aplicação da regularização não apresentou ganhos significativos no modelo.
No tópico extra, foram observados 2 outros modelos discutidos em sala de aula: Bayesianos e de Aprendizado de máquina (utilizou-se o Random Forest). Onde ambos não apresentaram resultados melhores que o modelo de regressão linear simples.
Essas descobertas sugerem que a seleção cuidadosa de variáveis e a engenharia de características adequada podem fornecer um modelo robusto sem a necessidade de regularização nesse contexto de dados. Além disso, o modelo construido se mostrou altamente interpretativo e com uma ótima propriedade de generalização, obtendo boas métricas no conjunto de dados de teste
6 Bibliografia
Silge, M. K. A. J. (n.d.). Tidy Modeling with R. https://www.tmwr.org/
Dunn, T. (2022, September 19). An Introduction to Statistical Learning with the tidyverse and tidymodels. https://bookdown.org/taylordunn/islr-tidy-1655226885741/
RPubs - Random Forest Hyperparameter Tuning with Tidymodels. (n.d.). https://rpubs.com/GChirinos/Tuning_Random_Forest
Zheng, A., & Casari, A. (2018, March 23). Feature Engineering for Machine Learning. “O’Reilly Media, Inc.”
Fisher, M. R. H. A. T. J. (2022, January 18). Chapter 10 Model Validation | Introduction to Statistical Modeling. https://tjfisher19.github.io/introStatModeling/model-validation.html
7 Código Utilizado
O código utilizado nesse trabalho, assim como os dados, podem ser acessados através do seguinte link: https://github.com/Gustavo039/Cars_Regression