Carregando pacotes e datasets, e eliminando as colunas referentes ao “id”

pacotes <- c("readxl", "PerformanceAnalytics")
lapply(pacotes, library, character.only = TRUE)
cars_train <- read_excel("cars_train.xlsx")
cars_test <- read_excel("cars_test.xlsx")
cars_train <- cars_train[-1]
cars_test <- cars_test[-1]

Calculando e exibindo a matriz de correlação

chart.Correlation((cars_train[, c(1, 5:7, 9, 28)]), histogram = TRUE)

A matriz de correlação nos permite compreender a relação que as variáveis numéricas mantém entre si. Podemos ver que “num_fotos” e “num_portas” possuem baixa correlação com todas as outras e que pouco influenciam no preço dos automóveis.

Curiosamente, “num_portas” apresenta uma leve correlação negativa com o preço, o que pode parecer contra-intuitivo devido ao senso comum de que carros com mais portas tendem a serem mais caros por serem maiores e etc. Entretanto, os dados apresentam essse comportamento devido a presença de observações que representam carros esportivos de luxo de duas portas que possuem um valor muito elevado.

As outras variáveis numéricas seguem um comportamento esperado. “ano_de_fabricacao” apresenta forte correlação positiva com “ano_modelo”, e ambas apresentam correlação positiva com preço. Indicando que quanto mais novo o carro, maior tende a ser o seu preço.

A variável “hodometro” também segue um comportamento esperado, apresentando correlação negativa com “ano_de_fabricacao”, “ano_modelo” e “preco”. Podemos inferir que carros mais antigos tendem a ter uma quilometragem registrada no hodômetro maior. Consequentemente, quanto maior a quilometragem registrada no hodômetro, menor é o preço do automóvel.

Essa breve análise nos mostra que as variáveis numéricas, no geral, possuem relações confiáveis e coerentes com a realidade.

Análise de Variância

cars_train$num_fotos <- ifelse(is.na(cars_train$num_portas), 0, cars_train$num_portas)
cars_train <- replace(cars_train, is.na(cars_train), "nao")
anova <- aov(preco ~ marca, data = cars_train) 
summary(anova)                                      
##                Df    Sum Sq   Mean Sq F value Pr(>F)    
## marca          39 5.703e+13 1.462e+12     308 <2e-16 ***
## Residuals   29544 1.403e+14 4.747e+09                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Caso desejemos analisar uma variável diferente de “marca”, basta substituir “marca” pelo nome da variável desejada. Antes de usar a função aov foi necessário um pequeno tratamento nos dados para eliminar os valores vazios (NA).

As análises de variância (ANOVA) são úteis para avaliar o grau de significância de uma variável em relação a outra, permitindo uma compreensão clara das relações entre as variáveis. Quando usadas em conjunto com análises de correlação, obtemos um panorama abrangente das relações entre as variáveis.

Usando a função aov, foi possível analisar todas as variáveis independentes em função da variável dependente “preco”.

Os resultados indicaram que praticamente todas as variáveis se mostraram significantes para a formação do preço a um nível de confiança de 95%. As únicas variáveis que não se mostraram significantes a 95% de confiança foram “elegivel_revisao”, “ipva_pago” e “veiculo_alienado”.

Exibindo estatísticas das variáveis

summary(cars_train)
##    num_fotos        marca              modelo             versao         
##  Min.   :2.000   Length:29584       Length:29584       Length:29584      
##  1st Qu.:4.000   Class :character   Class :character   Class :character  
##  Median :4.000   Mode  :character   Mode  :character   Mode  :character  
##  Mean   :3.941                                                           
##  3rd Qu.:4.000                                                           
##  Max.   :4.000                                                           
##  ano_de_fabricacao   ano_modelo     hodometro         cambio         
##  Min.   :1985      Min.   :1997   Min.   :   100   Length:29584      
##  1st Qu.:2015      1st Qu.:2016   1st Qu.: 31214   Class :character  
##  Median :2018      Median :2018   Median : 57434   Mode  :character  
##  Mean   :2017      Mean   :2018   Mean   : 58431                     
##  3rd Qu.:2019      3rd Qu.:2020   3rd Qu.: 81954                     
##  Max.   :2022      Max.   :2023   Max.   :390065                     
##    num_portas        tipo             blindado             cor           
##  Min.   :2.000   Length:29584       Length:29584       Length:29584      
##  1st Qu.:4.000   Class :character   Class :character   Class :character  
##  Median :4.000   Mode  :character   Mode  :character   Mode  :character  
##  Mean   :3.941                                                           
##  3rd Qu.:4.000                                                           
##  Max.   :4.000                                                           
##  tipo_vendedor      cidade_vendedor    estado_vendedor     anunciante       
##  Length:29584       Length:29584       Length:29584       Length:29584      
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##  entrega_delivery   troca         elegivel_revisao dono_aceita_troca 
##  Mode :logical    Mode :logical   Mode :logical    Length:29584      
##  FALSE:23601      FALSE:24523     FALSE:29584      Class :character  
##  TRUE :5983       TRUE :5061                       Mode  :character  
##                                                                      
##                                                                      
##                                                                      
##  veiculo_único_dono revisoes_concessionaria  ipva_pago        
##  Length:29584       Length:29584            Length:29584      
##  Class :character   Class :character        Class :character  
##  Mode  :character   Mode  :character        Mode  :character  
##                                                               
##                                                               
##                                                               
##  veiculo_licenciado garantia_de_fábrica revisoes_dentro_agenda
##  Length:29584       Length:29584        Length:29584          
##  Class :character   Class :character    Class :character      
##  Mode  :character   Mode  :character    Mode  :character      
##                                                               
##                                                               
##                                                               
##  veiculo_alienado       preco        
##  Length:29584       Min.   :   9870  
##  Class :character   1st Qu.:  76572  
##  Mode  :character   Median : 114356  
##                     Mean   : 133024  
##                     3rd Qu.: 163680  
##                     Max.   :1359813
summary(cars_test)
##    num_fotos        marca              modelo             versao         
##  Min.   : 8.00   Length:9862        Length:9862        Length:9862       
##  1st Qu.: 8.00   Class :character   Class :character   Class :character  
##  Median : 8.00   Mode  :character   Mode  :character   Mode  :character  
##  Mean   :10.32                                                           
##  3rd Qu.:14.00                                                           
##  Max.   :21.00                                                           
##  NA's   :60                                                              
##  ano_de_fabricacao   ano_modelo     hodometro         cambio         
##  Min.   :1988      Min.   :2007   Min.   :   100   Length:9862       
##  1st Qu.:2015      1st Qu.:2016   1st Qu.: 31323   Class :character  
##  Median :2018      Median :2018   Median : 56742   Mode  :character  
##  Mean   :2017      Mean   :2018   Mean   : 58237                     
##  3rd Qu.:2019      3rd Qu.:2020   3rd Qu.: 81784                     
##  Max.   :2022      Max.   :2023   Max.   :381728                     
##                                                                      
##    num_portas        tipo             blindado             cor           
##  Min.   :2.000   Length:9862        Length:9862        Length:9862       
##  1st Qu.:4.000   Class :character   Class :character   Class :character  
##  Median :4.000   Mode  :character   Mode  :character   Mode  :character  
##  Mean   :3.943                                                           
##  3rd Qu.:4.000                                                           
##  Max.   :4.000                                                           
##                                                                          
##  tipo_vendedor      cidade_vendedor    estado_vendedor     anunciante       
##  Length:9862        Length:9862        Length:9862        Length:9862       
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##                                                                             
##  entrega_delivery   troca         elegivel_revisao dono_aceita_troca 
##  Mode :logical    Mode :logical   Mode :logical    Length:9862       
##  FALSE:7907       FALSE:8217      FALSE:9862       Class :character  
##  TRUE :1955       TRUE :1645                       Mode  :character  
##                                                                      
##                                                                      
##                                                                      
##                                                                      
##  veiculo_único_dono revisoes_concessionaria  ipva_pago        
##  Length:9862        Length:9862             Length:9862       
##  Class :character   Class :character        Class :character  
##  Mode  :character   Mode  :character        Mode  :character  
##                                                               
##                                                               
##                                                               
##                                                               
##  veiculo_licenciado garantia_de_fábrica revisoes_dentro_agenda veiculo_alienado
##  Length:9862        Length:9862         Length:9862            Mode:logical    
##  Class :character   Class :character    Class :character       NA's:9862       
##  Mode  :character   Mode  :character    Mode  :character                       
##                                                                                
##                                                                                
##                                                                                
## 

Através da função summary, podemos visualizar informações estatísticas sobre as variáveis nos conjuntos de dados “cars_train” e “cars_test”. Ela fornece o tipo de cada variável, além da amplitude e de informações estatísticas, como a média, mediana e quartis para as variáveis numéricas.

Após analisar o conjunto de dados usando a função summary, podemos observar algumas informações relevantes. Por exemplo, a média dos preços dos carros é de 133.024. Além disso, notamos que o conjunto de dados possui observações que representam carros muito recentes, com ano do modelo igual a 2023, assim como observações relacionadas a carros mais antigos, com o ano de fabricação em 1985.

Observamos também uma variação considerável na quilometragem registrada nos hodômetros dos carros no conjunto de dados. Alguns carros possuem uma quilometragem muito baixa, sugerindo um uso limitado, enquanto outros apresentam uma quilometragem bastante elevada, indicando um uso mais extensivo.

Assim, o uso da summary nos permite ter uma visão geral das características e distribuição das variáveis. Essas informações estatísticas são úteis para entender melhor os dados e identificar possíveis discrepâncias, outliers ou padrões nos valores das variáveis.

Exibindo as categorias/níveis das variáveis qualitativas

levels(factor(cars_train$marca)) 
##  [1] "ALFA ROMEO"    "AUDI"          "BMW"           "BRM"          
##  [5] "CHERY"         "CHEVROLET"     "CHRYSLER"      "CITROËN"      
##  [9] "DODGE"         "EFFA"          "FERRARI"       "FIAT"         
## [13] "FORD"          "HONDA"         "HYUNDAI"       "IVECO"        
## [17] "JAC"           "JAGUAR"        "JEEP"          "KIA"          
## [21] "LAND ROVER"    "LEXUS"         "LIFAN"         "MASERATI"     
## [25] "MERCEDES-BENZ" "MINI"          "MITSUBISHI"    "NISSAN"       
## [29] "PEUGEOT"       "PORSCHE"       "RAM"           "RENAULT"      
## [33] "SMART"         "SSANGYONG"     "SUBARU"        "SUZUKI"       
## [37] "TOYOTA"        "TROLLER"       "VOLKSWAGEN"    "VOLVO"
levels(factor(cars_test$marca))  
##  [1] "ALFA ROMEO"    "AUDI"          "BMW"           "CHERY"        
##  [5] "CHEVROLET"     "CHRYSLER"      "CITROËN"       "DODGE"        
##  [9] "EFFA"          "FERRARI"       "FIAT"          "FORD"         
## [13] "HONDA"         "HYUNDAI"       "JAC"           "JAGUAR"       
## [17] "JEEP"          "KIA"           "LAMBORGHINI"   "LAND ROVER"   
## [21] "LEXUS"         "LIFAN"         "MASERATI"      "MERCEDES-BENZ"
## [25] "MINI"          "MITSUBISHI"    "NISSAN"        "PEUGEOT"      
## [29] "PORSCHE"       "RAM"           "RENAULT"       "SMART"        
## [33] "SSANGYONG"     "SUBARU"        "SUZUKI"        "TOYOTA"       
## [37] "TROLLER"       "VOLKSWAGEN"    "VOLVO"

Caso desejemos analisar uma variável diferente de “marca”, basta substituir “marca” pelo nome da variável desejada.

A função levels nos permite identificar a quantidade de categorias/níveis presentes nas variáveis qualitativas/categóricas. Essa função é útil, pois em conjunto com outras análises, nos proporciona uma boa compreensão da complexidade dos dados com os quais estamos lidando.

Nesse caso em especial, observamos que algumas das variáveis qualitativas possuem uma grande quantidade de categorias, com destaque para a variável “versao”.

Isso indica que o treinamento de um modelo preditivo será desafiador, uma vez que essas variáveis aumentam a complexidade do modelo e devem ser incluídas no treinamento, pois sabemos, tanto por meio das análises realizadas aqui como por nossa experiência no mundo real, que variáveis como modelo, versão e marca do carro têm influência direta no preço.

Percebe-se também que as categorias das variáveis qualitativas não são exatamente as mesmas nos dois datasets. Por exemplo, a categoria “BRM” da variável “marca” é exclusiva do dataset “cars_train”. Logo, será necessário um tratamento especial nos dados para que seja possível fazer previsões de preço no dataset “cars_test” usando um modelo treinado a partir do datase “cars_train”.

Exibindo as frequências de cada categoria/nível das variáveis qualitativas

table(cars_train$marca)         
## 
##    ALFA ROMEO          AUDI           BMW           BRM         CHERY 
##             9          1698          1784             1           153 
##     CHEVROLET      CHRYSLER       CITROËN         DODGE          EFFA 
##          3020            30           194            37             1 
##       FERRARI          FIAT          FORD         HONDA       HYUNDAI 
##             1          1918          1060          1586          2043 
##         IVECO           JAC        JAGUAR          JEEP           KIA 
##             2             3           148          2000           408 
##    LAND ROVER         LEXUS         LIFAN      MASERATI MERCEDES-BENZ 
##           760            75             8             7          1125 
##          MINI    MITSUBISHI        NISSAN       PEUGEOT       PORSCHE 
##           137           862           438          1675           349 
##           RAM       RENAULT         SMART     SSANGYONG        SUBARU 
##           168           538            12            14            41 
##        SUZUKI        TOYOTA       TROLLER    VOLKSWAGEN         VOLVO 
##            41          2180           177          4594           287
table(cars_test$marca)          
## 
##    ALFA ROMEO          AUDI           BMW         CHERY     CHEVROLET 
##             1           593           591            49          1000 
##      CHRYSLER       CITROËN         DODGE          EFFA       FERRARI 
##            10            54            10             1             1 
##          FIAT          FORD         HONDA       HYUNDAI           JAC 
##           605           385           511           697             2 
##        JAGUAR          JEEP           KIA   LAMBORGHINI    LAND ROVER 
##            64           667           157             1           267 
##         LEXUS         LIFAN      MASERATI MERCEDES-BENZ          MINI 
##            16             2             5           376            45 
##    MITSUBISHI        NISSAN       PEUGEOT       PORSCHE           RAM 
##           286           145           571           121            53 
##       RENAULT         SMART     SSANGYONG        SUBARU        SUZUKI 
##           173             4             6            13            10 
##        TOYOTA       TROLLER    VOLKSWAGEN         VOLVO 
##           702            46          1546            76

Caso desejemos analisar uma variável diferente de “marca”, basta substituir “marca” pelo nome da variável desejada.

A função table também é muito útil para obter informações sobre as variáveis qualitativas. Ela nos permite verificar a contagem de observações em cada uma das categorias de uma variável qualitativa..

Ao analisarmos os dados, observamos que variáveis com um maior número de categorias apresentam algumas categorias com um número muito pequeno de observações. Especificamente, a variável “versao” possui várias categorias com poucas observações.

Conforme mencionado anteriormente, essa característica em um conjunto de dados pode tornar as previsões mais desafiadoras, especialmente quando não podemos simplesmente excluir as variáveis que possuem essas características.