Dinâmica de Preços e Hospitalidade: Uma Análise do Airbnb no Rio de Janeiro

Introdução

1.1. Contextualização e Problema

O Rio de Janeiro é um dos destinos turísticos mais procurados do mundo, apresentando um mercado de aluguel de curta temporada dinâmico e heterogêneo. Para anfitriões e investidores, definir o preço correto de uma diária (pricing) é um desafio complexo que envolve variáveis como localização, amenidades oferecidas e sazonalidade. Da mesma forma, turistas buscam entender quais fatores realmente impactam o custo final da estadia. O problema central deste projeto é identificar os determinantes de preço no ecossistema do Airbnb carioca, respondendo à pergunta: Quais características estruturais e de serviço mais influenciam a valorização de um imóvel no Rio de Janeiro?

1.2. Origem dos Dados

Os dados utilizados nesta análise provêm do portal Inside Airbnb, uma fonte independente e não comercial de dados públicos. O dataset refere-se à coleta realizada em 26 de setembro de 2025, contendo informações detalhadas sobre listagens, anfitriões e disponibilidade na cidade do Rio de Janeiro.

1.3. Metodologia e Abordagem

A abordagem metodológica segue o fluxo padrão de Ciência de Dados (CRISP-DM adaptado):

  1. Ingestão e Limpeza (ETL): Tratamento de variáveis formatadas incorretamente (preços como texto) e saneamento de dados faltantes.
  2. Engenharia de Atributos (Feature Engineering): Utilização de técnicas de Text Mining e Expressões Regulares (Regex) para extrair informações estruturadas de campos textuais complexos, especificamente a lista de amenidades (amenities).
  3. Análise Estatística: Aplicação de cortes manuais e estatísticos (IQR) para tratamento de outliers.

1.4. Valor para o Cliente

Esta análise servirá como ferramenta de inteligência de mercado. Para anfitriões, fornece evidências sobre quais investimentos (ex: instalar ar-condicionado ou piscina) trazem maior retorno financeiro. Para turistas, ajuda a identificar padrões de custo-benefício, permitindo decisões de reserva mais informadas.


Pacotes Necessários

Abaixo temos as bibliotecas da linguagem R utilizadas para viabilizar esta análise:

Pacote Utilidade no Projeto
tidyverse Conjunto fundamental para manipulação de dados (dplyr) e visualização (ggplot2).
jsonlite Essencial para realizar o parsing da coluna de amenidades que está em formato JSON.
stringr Manipulação de strings, usado para limpar símbolos de moeda e categorizar textos.
purrr Programação funcional para iterar sobre as listas de amenidades.
knitr Geração e formatação do relatório final.

Preparação dos Dados

3.1. Carregamento dos Dados

Importamos o dataset bruto, garantindo que strings não sejam convertidas automaticamente em fatores para facilitar a manipulação textual.

listings <- read.csv("listings.csv", stringsAsFactors = FALSE)

3.2 Escolha de variáveis relevantes

A variável bathrooms possuia muitos valores NA’s (4433), por isso escolhemos a bathrooms_text e iremos extrair os dados da mesma

# Seleção de colunas estratégicas
listings_clean <- listings %>%
  select(
    # Identificação e Texto
    id, name, description, 
    
    # Anfitrião
    host_id, host_total_listings_count, host_identity_verified, 
    host_is_superhost, host_since,
    
    # Localização
    neighbourhood_cleansed, latitude, longitude,
    
    # Características do Imóvel
    room_type, accommodates, bathrooms_text, bedrooms, beds, amenities,
    
    # Preço e Regras
    price, minimum_nights, maximum_nights,
    
    # Reviews
    number_of_reviews, review_scores_rating, last_review
  )

# Verifique o tamanho
dim(listings_clean)
## [1] 43068    23

3.3 Limpeza da variável bathrooms_text

listings_clean <- listings_clean %>%
  mutate(
    # 1. Tenta extrair o primeiro número que aparecer (ex: "1.5" de "1.5 baths")
    bathrooms_new = as.numeric(str_extract(bathrooms_text, "[0-9\\.]+")),
    
    # 2. Correção de casos especiais (Text Mining)
    bathrooms_final = case_when(
      # Se estiver escrito "Half-bath" (Lavabo) e não tiver número, vale 0.5
      is.na(bathrooms_new) & str_detect(tolower(bathrooms_text), "half-bath") ~ 0.5,
      
      # Se achou o número no passo 1, usa ele
      !is.na(bathrooms_new) ~ bathrooms_new,
      
      # Se não achou nada, fica como NA
      TRUE ~ NA_real_
    )
  ) %>%
  # Remove a coluna de texto antiga e a temporária, mantendo só a limpa
  select(-bathrooms_text, -bathrooms_new) %>%
  rename(bathrooms = bathrooms_final) # Renomeia para o nome padrão 'bathrooms'

# Verificação Rápida
# Vamos ver se deu certo (tem que aparecer números, não texto)
summary(listings_clean$bathrooms)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##   0.000   1.000   1.000   1.483   2.000  16.000      53
listings_clean %>% count(bathrooms, sort = TRUE)
##    bathrooms     n
## 1        1.0 27294
## 2        2.0  8323
## 3        1.5  2158
## 4        3.0  1734
## 5        2.5  1136
## 6        3.5   430
## 7        4.0   430
## 8        0.0   340
## 9        0.5   310
## 10       5.0   195
## 11       4.5   171
## 12       6.0   139
## 13       5.5    88
## 14       7.0    79
## 15       8.0    55
## 16       6.5    53
## 17        NA    53
## 18      11.0    20
## 19       7.5    16
## 20      10.0    12
## 21       9.0    11
## 22       8.5     7
## 23      12.0     4
## 24      10.5     3
## 25      16.0     3
## 26       9.5     1
## 27      11.5     1
## 28      12.5     1
## 29      15.5     1
unique(listings_clean$bathrooms)
##  [1]  1.5  2.0  1.0  3.0  4.0  7.0  6.0  5.0  2.5  3.5  4.5  0.0  9.0  0.5  6.5
## [16]  5.5   NA  8.0  7.5  8.5 10.0 15.5 12.0 11.0 16.0 11.5  9.5 10.5 12.5

3.3 Limpeza da Variável price

A variável price foi importada originalmente como texto (ex: "$1,200.00"). Para utilizá-la em cálculos estatísticos, é necessário remover símbolos monetários e converte-la para numérico. Antes de aplicar a limpeza definitiva, realizamos um diagnóstico para mensurar a perda de dados (conversões que resultam em NA ou zeros).

# 1. Simular a limpeza para identificar os problemas
diagnostico_precos <- listings %>%
  select(id, price) %>%
  mutate(
    price_limpo = str_remove_all(price, "[\\$,]"), # Remove $ e vírgula
    price_num = as.numeric(price_limpo) # Converte para numérico
  )

# 2. Contar a perda total (NAs + Zeros)
perda <- diagnostico_precos %>%
  summarise(
    total_linhas = n(),
    qtd_na = sum(is.na(price_num)),          
    qtd_zeros = sum(price_num == 0, na.rm = TRUE), 
    total_perdido = qtd_na + qtd_zeros,
    porcentagem_perda = (total_perdido / total_linhas) * 100
  )

print(perda)
##   total_linhas qtd_na qtd_zeros total_perdido porcentagem_perda
## 1        43068   4398         0          4398          10.21176

Considerando que a perda de dados é de apenas 10.21%, o que é um pouco irrelevante frente ao total e que o preço é nossa variável alvo, optamos por remover observações inválidas.

listings_clean <- listings %>%
  mutate(price = as.numeric(str_remove_all(price, "[\\$,]"))) %>%
  filter(!is.na(price) & price > 0)

3.4 Análise e Tratamento de Outliers

O mercado imobiliário do Rio de Janeiro é marcado por extrema desigualdade. Uma análise preliminar da distribuição de preços revela a presença de valores extremos (outliers) que distorcem a visualização e a média.

listings_clean %>%
  ggplot(aes(y = price)) +
  geom_boxplot(fill = "skyblue", outlier.color = "red", outlier.shape = 1) +
  labs(
    title = "Distribuição dos Preços (Dados Brutos)",
    subtitle = "Presença de outliers extremos distorce a escala",
    y = "Preço da Diária (R$)"
  ) +
  theme_minimal()

Observa-se valores superiores a R$ 100.000,00, prováveis erros de cadastro. Para manter a análise focada no mercado real de turismo (incluindo o segmento de luxo, mas excluindo erros), aplicamos um filtro manual (Thresholding) limitando as diárias a R$ 5.000,00.

listings_clean <- listings_clean %>%
 filter(price <= 5000)

# Visualização pós-filtro
listings_clean %>%
  ggplot(aes(y = price)) +
  geom_boxplot(fill = "skyblue") +
  labs(
    title = "Distribuição dos Preços (Filtro R$ 5.000)",
    y = "Preço da Diária (R$)"
  ) +
  theme_minimal()

Nota Metodológica: Consideramos utilizar o método estatístico do Intervalo Interquartil (IQR), que sugeriu um corte no valor deR$ 1.110. No entanto, descartamos essa abordagem pois ela eliminaria propriedades legítimas de alto padrão (coberturas em Copacabana e Ipanema), que são cruciais para nossa análise.

3.5 Engenharia de atributos: amenities

A coluna amenities contém listas em formato JSON não estruturado com mais de 7.000 variações textuais. Para transformar esses dados em variáveis úteis para análise, realizamos um processo de:

  1. Parsing: Extração dos itens da lista.
  2. Categorização: Uso de Expressões Regulares (RegEx) para agrupar itens similares (ex: “Wifi 5G” e “Internet” tornam-se “Internet”).
  3. One-Hot Encoding: Criação de colunas binárias (0 ou 1) indicando a presença de cada categoria no imóvel.
# 1. Criação do dicionário de amenidades únicas
amenities <- listings_clean %>%
  select(amenities) %>%
  mutate(lista_convertida = purrr::map(amenities, function(x) {
    # Tratamento de erro simples caso não seja JSON válido
    tryCatch({
      parsed <- jsonlite::fromJSON(as.character(x))
      return(as.character(unlist(parsed)))
    }, error = function(e) return(NA))
  })) %>%
  filter(!is.na(lista_convertida)) %>%
  unnest(lista_convertida) %>%
  select(amenity = lista_convertida) %>%
  distinct()

Aplicando a categorização baseada em palavras-chave:

categorized_amenities <- amenities %>%
  mutate(
    amenity_lower = tolower(amenity),
    category = case_when(
      # Cozinha
      str_detect(amenity_lower, "kitchen|stove|oven|baking|bread maker|dining table|dishwasher|trash|fridge|refrigerator|freezer|coffee|nespresso|tea|kettle") ~ "cozinha",
      
      # Climatização
      str_detect(amenity_lower, "split|ac unit|air conditioning|ar condicionado|midea|gree|consul|lg|samsung|springer|carrier|toshiba|fan|ventilador|ceiling|aquecedor|heating|heater") ~ "climatizacao",
      
      # Exercício
      str_detect(amenity_lower, "gym|exercise|bikes|kayak|boat|resort access") ~ "exercicio",
      
      # piscina
      str_detect(amenity_lower, "pool|hot tub|sauna") ~ "piscina",
      
      # Internet
      str_detect(amenity_lower, "wifi|ethernet") ~ "internet",
      
      # Lazer
      str_detect(amenity_lower, "game|ping pong|bowling|climbing") ~ "jogos",
      str_detect(amenity_lower, "books|piano") ~ "relax",
      str_detect(amenity_lower, "record player|tv|sound") ~ "entretenimento",
      
      # Família
      str_detect(amenity_lower, "baby|crib|high chair|changing table|children") ~ "familia",
      
      # Banheiro
      str_detect(amenity_lower, "conditioner|shampoo|soap|shower gel|essentials|hair dryer|bidet|hot water") ~ "banheiro",

      # Estrutura
      str_detect(amenity_lower, "ev charger|parking|garage|carport") ~ "estacionamento",
      str_detect(amenity_lower, "balcony|garden|backyard|grill|hammock") ~ "area_externa",
      
      # Localização
      str_detect(amenity_lower, "view|beach|mar|water|lake") ~ "vista_e_localizacao",
      
      # Lavanderia
      str_detect(amenity_lower, "washer|dryer|drying rack") ~ "Lavanderia",
      
      # Cuidado com Roupas
      str_detect(amenity_lower, "iron|hangers|storage") ~ "Roupas",
      
      # Serviços
      str_detect(amenity_lower, "luggage|cleaning|breakfast|housekeeping") ~ "servicos",
      
      # Segurança
      str_detect(amenity_lower, "smoke|fire|first aid|carbon monoxide|safe|lock|key|security") ~ "seguranca",
      
      TRUE ~ "Outros"
    )
  ) %>% select(amenity, category)

# Top 10 categorias
categorized_amenities %>% count(category, sort = TRUE) %>% head(10) %>% kable()
category n
entretenimento 2076
cozinha 1575
banheiro 1202
internet 589
servicos 396
piscina 305
climatizacao 80
estacionamento 79
exercicio 65
familia 53

Por fim, realizamos a pivotagem para integrar essas novas variáveis ao dataset principal.

# Definição das categorias estratégicas
categorias_importantes <- c(
  "banheiro","cozinha","climatizacao","exercicio","piscina","internet","entretenimento","familia","relax","estacionamento","vista_e_localizacao","seguranca"
)

listings_dummies <- listings_clean %>%
  select(id, amenities) %>%
  mutate(amenities = str_remove_all(amenities, '\\[|\\]|\\"|\\\\')) %>% 
  separate_rows(amenities, sep = ",") %>%
  mutate(amenities = str_trim(amenities)) %>%
  filter(amenities != "") %>%
  left_join(categorized_amenities, by = c("amenities" = "amenity")) %>%
  filter(!is.na(category)) %>% 
  
  mutate(category_final = case_when(
    category %in% categorias_importantes ~ category,
    TRUE ~ NA_character_
  )) %>%
  filter(!is.na(category_final)) %>%
  
  # Criação das variáveis binárias
  distinct(id, category_final) %>% 
  mutate(tem_item = 1) %>%
  pivot_wider(
    names_from = category_final, 
    values_from = tem_item, 
    values_fill = 0 
  )

# Junção final
listings_completo <- listings_clean %>%
  left_join(listings_dummies, by = "id") %>%
  mutate(across(all_of(categorias_importantes), ~replace_na(., 0)))

3.6 Resumo dos dados

O dataset final listings_completo encontra-se limpo, com preços numéricos tratados, variáveis principais selecionadas e enriquecido com 13 novas variáveis binárias indicando a presença de amenidades chave.

Análise Exploratória

Localização

Aqui nós vamos analisar os bairros mais populares no Airbnb.

# Selecionar os 20 bairros mais populares
top_bairros <- listings_completo %>%
  count(neighbourhood_cleansed, sort = TRUE) %>%
  top_n(20, n) %>%
  pull(neighbourhood_cleansed)

listings_completo %>%
  filter(neighbourhood_cleansed %in% top_bairros) %>%
  filter(price <= 5000) %>% # Filtro visual
  ggplot(aes(x = reorder(neighbourhood_cleansed, price, FUN = median), y = price)) +
  geom_boxplot(fill = "steelblue", alpha = 0.7) +
  scale_y_log10(labels = scales::dollar_format(prefix = "R$")) +
  coord_flip() + # Vira o gráfico para ler os nomes
  labs(
    title = "Distribuição de Preços nos 20 Bairros Mais Populares",
    x = "",
    y = "Preço (Escala Log)"
  ) +
  theme_minimal()

Ao analisar os 20 bairros mais populares do Rio de Janeiro (nessa listagem), o gráfico nos mostra claramente como o valor da diária muda dependendo da região:

  1. Os Bairros Mais Caros: No topo da lista estão São Conrado, Lagoa, Leblon e Ipanema. A linha preta no meio das caixas (a mediana) está bem à direita, indicando que o preço “padrão” para se hospedar nessas áreas é naturalmente mais alto.

  2. Muita Variedade (Copacabana e Barra): Em bairros como Barra da Tijuca e Copacabana, as caixas azuis são mais “compridas”. Isso significa que esses bairros atendem a todos os bolsos: existem muitas opções baratas, mas também muitas opções caras no mesmo lugar.

  3. Opções Econômicas: Na parte inferior do gráfico, vemos o Centro, Tijuca e Catete como as opções mais acessíveis, com os preços médios mais baixos da lista.

  4. Imóveis de Luxo em Todo Lugar: Os pontos pretos isolados à direita das caixas (outliers) mostram que, mesmo em bairros mais simples ou turísticos, existem imóveis de luxo que cobram valores muito acima da média local.

Agora vamos fazer uma visualização em mapa, onde o tamanho e cor dos círculos são baseados no preço médio do bairro

Notas e Reviews

Vamos analisar o valor dos imóveis de acordo com as notas recebidas

library(lubridate)

# Filtro de qualidade: Imóveis ativos e avaliados
listings_avaliados <- listings_completo %>%
  filter(
    number_of_reviews >= 3,
    !is.na(last_review),
    last_review >= as.Date("2024-01-01"), # Apenas reviews recentes
  )

listings_avaliados %>%
  ggplot(aes(x = review_scores_rating, y = price)) +
  geom_point(alpha = 0.3, color = "darkgray") +
  geom_smooth(method = "gam", color = "blue") + 
  scale_y_log10(labels = scales::dollar_format(prefix = "R$")) +
  labs(
    title = "Correlação: Nota da Avaliação vs. Preço",
    subtitle = "Filtro: Imóveis com >3 reviews",
    x = "Nota (0 a 5)",
    y = "Preço (Log)"
  ) +
  theme_minimal()

Ao cruzar a nota média das avaliações (review_scores_rating) com o preço da diária, o gráfico de dispersão nos revela três comportamentos importantes do mercado:

  1. Concentração de Notas Altas: A grande maioria dos imóveis está “espremida” no lado direito do gráfico, com notas entre 4,5 e 5,0. Isso mostra que é muito raro encontrar acomodações mal avaliadas na plataforma; a maioria das experiências é considerada positiva.

  2. Nota não define Preço: A linha azul (tendência) permanece praticamente reta na maior parte do gráfico. Isso indica que ter uma nota maior não faz o preço subir automaticamente. Um imóvel com nota 4,0 tem, em média, uma faixa de preço muito parecida com um de nota 4,8.

  3. Variedade de Preços na Nota Máxima: Ao olharmos para os imóveis com nota 5,0, vemos uma enorme variação vertical: existem desde opções super baratas (perto de R$ 100) até opções de luxo (acima de R$ 3.000).

Tipos de quarto

Agora vamos ver a diferença dos tipos de quarto

# Tipo de quarto
room_type_plot <- listings_completo %>%
  filter(price <= 5000) %>%
  ggplot(aes(x = room_type, y = price, fill = room_type)) +
  geom_boxplot() +
  scale_y_log10() +
  labs(title = "Impacto: Tipo de Quarto", x = "", y = "") +
  theme_minimal() + theme(legend.position = "none", axis.text.x = element_text(angle = 45, hjust = 1))

print(room_type_plot)

O gráfico confirma a lógica de que “quanto mais privacidade, maior o preço”, mas traz um detalhe interessante sobre quartos de hotel:

  1. Quartos de Hotel no Topo: A categoria “Hotel room” (caixa verde) apresenta a maior mediana de preço. Isso indica que, na média, ficar em um quarto de hotel listado no Airbnb sai mais caro do que alugar um apartamento inteiro comum.

  2. A Grande Variação das Casas Inteiras: A categoria “Entire home/apt” (caixa vermelha) vem em segundo lugar no preço, mas note como a caixa e as linhas verticais são compridas. Isso mostra que esse grupo é muito misturado: engloba desde “kitnets” baratas até mansões caríssimas.

  3. Opções Econômicas:Como esperado, “Private room” (quarto privado) e “Shared room” (quarto compartilhado) são as opções mais baratas. O quarto compartilhado (caixa roxa) é, isoladamente, a opção de menor custo da plataforma.

Características Físicas

Primeiro vamos ver a relação entre número de banheiros e preço

O gráfico confirma que a quantidade de banheiros é um dos indicadores mais confiáveis de preço e padrão do imóvel:

  1. A “Escada” de Valor: Existe uma relação positiva muito clara: a cada banheiro adicional, o preço mediano (linha preta no meio da caixa) sobe um degrau. Diferente da nota de avaliação, que não afetava muito o preço, aqui a correlação é visível e direta.

  2. O Salto de Patamar: Note a diferença de altura entre as caixas de 1 banheiro e 3 banheiros. Enquanto imóveis com 1 banheiro têm mediana próxima a R$ 250,00, os de 3 banheiros saltam para quase R$ 1.000,00. Isso indica que banheiros extras geralmente estão associados a apartamentos muito maiores e luxuosos.

  3. Indício de Tamanho: A variável “banheiros” funciona como um ótimo “proxy” (representante) para o tamanho total do imóvel. Dificilmente um imóvel pequeno tem 4 banheiros; portanto, ao filtrar por banheiros, indiretamente estamos filtrando por mansões e grandes apartamentos de temporada.

Anemities

Agora vamos criar uma função para plotar os gráficos de relação entre preço e a presença de uma amenity na sua descrição

# Função para plotar amenidades binárias automaticamente
plot_amenity <- function(data, coluna, titulo) {
  data %>%
    ggplot(aes(x = factor(.data[[coluna]]), y = price, fill = factor(.data[[coluna]]))) +
    geom_boxplot(fill="lightblue") +
    scale_y_log10(labels = scales::dollar_format(prefix = "R$")) +
    scale_x_discrete(labels = c("0" = "Não", "1" = "Sim")) +
    labs(title = titulo, x = "", y = "Preço (Log)") +
    theme_minimal() +
    theme(legend.position = "none")
}

Preço x piscina

Este gráfico compara os preços das acomodações que têm piscina (“Sim”) com as que não têm (“Não”). A diferença visual é imediata e nos mostra que:

  1. Valorização Clara: A caixa azul da direita (“Sim”) está posicionada bem acima da esquerda. Isso significa que, em geral, ter uma piscina aumenta significativamente o preço da diária. A linha preta central (mediana) mostra que o preço “padrão” de um imóvel com piscina é quase o dobro de um sem.

  2. O “Piso” de Preço é Mais Alto: Note que a parte inferior da caixa da direita começa em um valor muito mais alto. Isso indica que é difícil encontrar acomodações muito baratas que tenham piscina; esse item estabelece um patamar mínimo de preço mais elevado.

  3. Maior Variação de Preços: A caixa e as linhas verticais dos imóveis com piscina são mais longas. Isso sugere que, dentro da categoria “com piscina”, existe uma variedade enorme de luxo: desde prédios comuns com piscina compartilhada até mansões exclusivas com valores altíssimos.

Preço x vista e localização

O gráfico compara imóveis que possuem atributos de localização privilegiada (como “vista para o mar” ou “beira-mar”) com os demais. A análise visual nos mostra que:

  1. O Preço da Paisagem: A caixa da direita (“Sim”) está posicionada mais acima do que a da esquerda (“Não”). A linha preta central (mediana) confirma que imóveis com vista ou localização privilegiada cobram, em média, diárias mais caras.

  2. Difícil de achar “barato” com vista: Observe a parte de baixo das caixas. O “piso” de preço (o valor mínimo comum) dos imóveis com vista é mais alto. Isso indica que a vista funciona como um filtro natural: é muito raro encontrar uma acomodação “beira-mar” que seja extremamente econômica.

  3. Muita Sobreposição: Apesar da valorização, existe muita sobreposição entre as duas caixas. Isso acontece porque muitos imóveis de luxo no Rio de Janeiro (no Leblon ou Ipanema, por exemplo) são caríssimos mesmo sem ter vista direta para o mar (ficando na quadra de trás ou ruas internas), o que eleva a média do grupo “Não”.

Preço x climatização (ventilador, ar condicionado, etc)

O gráfico nos mostra que, no Rio de Janeiro, o ar condicionado e/oyu ventilador funcionam mais como um item essencial do que como um artigo de luxo:

  1. Valorização Moderada: A caixa da direita (“Sim”) está um pouco acima da esquerda (“Não”), e a linha preta (mediana) é ligeiramente mais alta. Isso indica que imóveis com ar condicionado são, sim, mais caros, mas a diferença não é tão gigantesca quanto a que vimos na Piscina ou na Vista.

  2. Item de “Sobrevivência”: Como o Rio é uma cidade muito quente, o ar condicionado é quase obrigatório para qualquer imóvel mediano. Por isso, a caixa “Sim” é muito grande e abrange desde apartamentos simples até os de luxo.

  3. O “Barato” sai quente: A principal diferença está na parte de baixo do gráfico. É possível encontrar imóveis sem ar condicionado por preços muito baixos (veja como a linha da esquerda desce mais). Já para ter ar condicionado, existe um preço mínimo que o turista precisa pagar.

Preço x vaga de garagem

O gráfico mostra que a comodidade de ter onde estacionar é um diferencial que encarece a diária, refletindo a dificuldade de estacionamento em áreas turísticas do Rio:

  1. Diferença de Preço: A mediana (linha preta central) dos imóveis com garagem (“Sim”) é visivelmente superior à dos imóveis sem vaga. Isso confirma que o turista está disposto a pagar mais pela segurança e conveniência de guardar o carro.

  2. Fator de “Piso”: Observe a parte inferior das caixas: imóveis com vaga de garagem raramente são muito baratos. A presença da vaga geralmente eleva o preço mínimo da locação, afastando o imóvel da categoria “super econômica”.

  3. Valorização em Áreas Densas: Considerando que muitos bairros turísticos (como Copacabana) têm alta densidade e poucas vagas na rua, um imóvel que oferece garagem privativa ganha uma vantagem competitiva grande, justificando o preço maior observado no gráfico.

Preço x cozinha equipada

O gráfico revela que, diferente da piscina ou da vista, a cozinha não é um grande diferencial de luxo, mas sim uma comodidade padrão:

  1. Diferença Muito Pequena: As duas caixas (“Não” e “Sim”) estão praticamente na mesma altura. A linha preta central (mediana) dos imóveis com cozinha é apenas levemente superior. Isso mostra que ter uma cozinha não faz o preço da diária disparar.

  2. Item Básico, não de Luxo: A cozinha é esperada na maioria dos apartamentos inteiros (que são a maior parte do Airbnb). Por ser algo tão comum, ela não gera uma valorização extra significativa, ao contrário de itens raros como piscina.

  3. O “Fundo do Poço” é mais baixo sem cozinha: A única diferença visível é na parte de baixo do gráfico. Os imóveis sem cozinha (provavelmente quartos simples ou de hotel) conseguem chegar a preços mínimos mais baixos do que os imóveis equipados.

Preço x tem internet

O gráfico nos mostra que, no Rio de Janeiro, o ar condicionado funciona mais como um item essencial do que como um artigo de luxo:

  1. Valorização Moderada: A caixa da direita (“Sim”) está um pouco acima da esquerda (“Não”), e a linha preta (mediana) é ligeiramente mais alta. Isso indica que imóveis com ar condicionado são, sim, mais caros, mas a diferença não é tão gigantesca quanto a que vimos na Piscina ou na Vista.

  2. Item de “Sobrevivência”: Como o Rio é uma cidade muito quente, o ar condicionado é quase obrigatório para qualquer imóvel mediano. Por isso, a caixa “Sim” é muito grande e abrange desde apartamentos simples até os de luxo.

  3. O “Barato” sai quente: A principal diferença está na parte de baixo do gráfico. É possível encontrar imóveis sem ar condicionado por preços muito baixos (veja como a linha da esquerda desce mais). Já para ter ar condicionado, existe um preço mínimo que o turista precisa pagar.

Conclusão

5.1. Síntese dos Resultados

O objetivo central deste estudo foi desmistificar a composição de preços do Airbnb no Rio de Janeiro, respondendo à pergunta: “O que realmente valoriza uma diária na Cidade Maravilhosa?”. Através da limpeza e análise de dados de milhares de listagens, foi possível traçar uma hierarquia clara de valor.

A análise confirmou que o mercado carioca é fortemente segregado. A localização (Bairro) atua como o primeiro e mais forte discriminador de preço. Um imóvel “médio” no Leblon ou Ipanema custa invariavelmente mais que um imóvel de topo de linha na Tijuca ou Centro.

5.2. Insights Estratégicos

Além da localização, identificamos três categorias de influenciadores de preço:

  1. Os Multiplicadores de Valor (Luxo): Atributos como Piscina, Vista/Beira-mar e Quantidade de Banheiros mostraram as correlações mais fortes com preços elevados. A variável “Banheiros”, em especial, provou ser um excelente proxy (indicador indireto) para o tamanho e padrão do imóvel: a cada banheiro adicional, o imóvel salta para uma nova faixa de preço.

  2. Os Itens de Sobrevivência (Essenciais): Ar Condicionado e Internet comportam-se como itens obrigatórios. Sua presença não garante um preço de luxo (a mediana sobe pouco), mas sua ausência rebaixa o imóvel para as faixas de preço mais baixas. No clima do Rio de Janeiro, o ar condicionado é o divisor de águas entre o mercado “econômico” e o “padrão”.

  3. O Paradoxo das Avaliações: Descobrimos que não existe correlação linear forte entre Nota e Preço. O mercado apresenta um viés de positividade (a maioria das notas é alta). Portanto, ter nota 5,0 é uma condição necessária para competitividade, mas não é suficiente para cobrar caro.

5.3. Implicações para os Clientes

  • Para Anfitriões: O investimento em reformas estruturais (mais banheiros, vaga de garagem) ou em lazer privativo (piscina) gera retorno financeiro muito superior ao de serviços simples (como café da manhã ou itens de cozinha). Para quem está na Zona Sul, a garagem é um diferencial competitivo poderoso.
  • Para Turistas: A “nota alta” não deve ser o único critério de escolha, pois ela é comum a quase todos os imóveis. Para economizar sem perder qualidade, a estratégia ideal é buscar bairros adjacentes à Zona Sul (como Botafogo ou Flamengo) ou abrir mão de itens de lazer como piscina, que encarecem desproporcionalmente a diária.

5.4. Limitações e Trabalhos Futuros

Esta análise representa um recorte temporal (Cross-sectional) referente a setembro de 2025. Portanto, ela não captura a sazonalidade crítica do Rio de Janeiro (Carnaval e Réveillon), onde a dinâmica de preços pode se alterar drasticamente.

Além disso, o corte manual de preços acima de R$ 5.000,00, embora necessário para a visualização estatística, pode ter excluído o nicho de “ultra-luxo” (mansões de celebridades). Para trabalhos futuros, sugere-se uma análise de sentimentos nos textos dos comentários (reviews) para entender se aspectos qualitativos (como a simpatia do anfitrião) influenciam a taxa de ocupação, já que o preço parece ser ditado majoritariamente pela estrutura física.

Referências

  • Fonte dos Dados: Inside Airbnb. Disponível em: http://insideairbnb.com/get-the-data.html. Acesso em: 26 set. 2025.
  • Ferramentas: R Core Team (2025). R: A language and environment for statistical computing. R Foundation for Statistical Computing, Vienna, Austria.