1. Introdução

O Consumidor.gov.br é uma plataforma pública que permite a comunicação direta entre consumidores e empresas para a tentativa de solução de conflitos de consumo pela internet. A base de dados disponibilizada pela plataforma reúne reclamações registradas por consumidores contra empresas cadastradas, contendo informações sobre localização, perfil do consumidor, empresa reclamada, segmento de mercado, tipo de problema, tempo de resposta, situação da reclamação e avaliação do consumidor.

O problema abordado neste projeto é a identificação de padrões nas reclamações de consumidores registradas no Brasil entre 2024 e 2025. Esse tema é relevante porque reclamações de consumo não representam apenas casos individuais de insatisfação, mas também podem indicar problemas recorrentes em determinados segmentos de mercado, empresas, canais de compra ou tipos de serviço. Compreender esses padrões pode ajudar a revelar quais áreas concentram maior volume de conflitos e quais fatores estão associados a melhores ou piores avaliações dos consumidores.

Para abordar esse problema, serão utilizados os dados públicos de reclamações do Consumidor.gov.br referentes aos anos de 2024 e 2025. A metodologia adotada consiste em importar os arquivos da base, unir os dados mensais em um único conjunto, limpar e padronizar as variáveis, tratar valores ausentes, converter datas e variáveis numéricas, criar variáveis derivadas e, em seguida, realizar uma análise exploratória dos dados. Essa análise buscará comparar reclamações por período, região, unidade federativa, segmento de mercado, empresa, grupo de problema, tempo de resposta, status de resolução e nota do consumidor.

A técnica adotada será baseada em análise exploratória de dados, utilizando tabelas de resumo, agrupamentos, proporções, médias, gráficos e tabelas interativas. Essa abordagem permite observar padrões gerais e também realizar comparações entre diferentes grupos, como segmentos de mercado ou regiões do país. Além disso, serão criadas variáveis derivadas, como categorias de tempo de resposta, classificação da nota do consumidor e classificação do resultado da reclamação, para facilitar a interpretação dos dados.

A análise pode ajudar diferentes potenciais usuários. Para consumidores, os resultados podem indicar quais segmentos ou empresas apresentam maior concentração de reclamações e quais tendem a receber melhores avaliações. Para empresas, a análise pode revelar problemas recorrentes e oportunidades de melhoria no atendimento. Para órgãos de defesa do consumidor e gestores públicos, os resultados podem auxiliar no monitoramento de setores com maior volume de conflitos e na formulação de políticas públicas voltadas à proteção do consumidor.

2. Pacotes requeridos

Os pacotes abaixo serão utilizados para importar, limpar, transformar, resumir e visualizar os dados.

pacotes_necessarios <- c(
  "tidyverse",
  "readr",
  "lubridate",
  "janitor",
  "stringr",
  "knitr",
  "DT",
  "jsonlite",
  "scales",
  "plotly"
)

pacotes_nao_instalados <- pacotes_necessarios[
  !(pacotes_necessarios %in% installed.packages()[, "Package"])
]

if (length(pacotes_nao_instalados) > 0) {
  install.packages(pacotes_nao_instalados)
}

library(tidyverse)
library(readr)
library(lubridate)
library(janitor)
library(stringr)
library(knitr)
library(DT)
library(jsonlite)
library(scales)
library(plotly)
pacotes <- data.frame(
  pacote = c(
    "tidyverse",
    "readr",
    "lubridate",
    "janitor",
    "stringr",
    "knitr",
    "DT",
    "jsonlite",
    "scales",
    "plotly"
  ),
  finalidade = c(
    "Conjunto de pacotes para manipulação, transformação e visualização de dados.",
    "Importação de arquivos CSV e outros formatos tabulares.",
    "Tratamento e conversão de variáveis de data.",
    "Padronização dos nomes das colunas e limpeza inicial da base.",
    "Manipulação e padronização de textos.",
    "Exibição de tabelas formatadas no relatório.",
    "Criação de tabelas interativas em HTML.",
    "Acesso a metadados em formato JSON quando necessário.",
    "Formatação de números e percentuais.",
    "Criação de gráficos interativos para exploração visual dos dados."
  )
)

knitr::kable(
  pacotes,
  caption = "Pacotes utilizados no projeto"
)
Pacotes utilizados no projeto
pacote finalidade
tidyverse Conjunto de pacotes para manipulação, transformação e visualização de dados.
readr Importação de arquivos CSV e outros formatos tabulares.
lubridate Tratamento e conversão de variáveis de data.
janitor Padronização dos nomes das colunas e limpeza inicial da base.
stringr Manipulação e padronização de textos.
knitr Exibição de tabelas formatadas no relatório.
DT Criação de tabelas interativas em HTML.
jsonlite Acesso a metadados em formato JSON quando necessário.
scales Formatação de números e percentuais.
plotly Criação de gráficos interativos para exploração visual dos dados.

A utilização desses pacotes permite construir um fluxo completo de análise de dados, passando pela importação da base, limpeza, padronização, criação de variáveis, produção de tabelas e construção de gráficos estáticos e interativos.

3. Preparação dos dados

3.1 Fonte dos dados

Os dados foram obtidos no portal de dados abertos do Ministério da Justiça e Segurança Pública, no conjunto de dados “Reclamações do Consumidor.gov.br”:

https://dados.mj.gov.br/dataset/reclamacoes-do-consumidor-gov-br

O conjunto contém reclamações registradas por consumidores na plataforma Consumidor.gov.br. Cada linha representa uma reclamação e as colunas descrevem informações como localização do consumidor, empresa reclamada, segmento de mercado, assunto, problema, data de abertura, tempo de resposta, situação da reclamação e avaliação do consumidor.

3.2 Importação dos dados

O código abaixo acessa a API do portal de dados, identifica os arquivos CSV de 2024 e 2025 e importa automaticamente esses dados.

Caso a API não funcione no momento da execução, também é possível baixar manualmente os arquivos CSV do portal e colocá-los em uma pasta chamada dados. O código tentará primeiro buscar arquivos locais nessa pasta. Se não encontrar, buscará os arquivos diretamente no portal.

url_api <- "https://dados.mj.gov.br/api/3/action/package_show?id=reclamacoes-do-consumidor-gov-br"

ler_csv_consumidor <- function(caminho_ou_url) {
  read_delim(
    file = caminho_ou_url,
    delim = ";",
    locale = locale(encoding = "UTF-8"),
    col_types = cols(.default = col_character()),
    na = c("", "NA", "N/A", "NULL", "null")
  )
}

# Opção 1: buscar arquivos CSV salvos localmente em uma pasta chamada "dados"
arquivos_locais <- list.files(
  path = "dados",
  pattern = "\\.csv$",
  full.names = TRUE
)

arquivos_locais_2024_2025 <- arquivos_locais[
  str_detect(arquivos_locais, "2024|2025")
]

if (length(arquivos_locais_2024_2025) > 0) {
  
  dados_brutos <- arquivos_locais_2024_2025 %>%
    map_dfr(
      ~ ler_csv_consumidor(.x) %>%
        mutate(arquivo_origem = basename(.x))
    )
  
} else {
  
  # Opção 2: importar os arquivos diretamente do portal de dados
  metadados <- fromJSON(url_api)
  
  recursos <- metadados$result$resources %>%
    as_tibble()
  
  recursos_2024_2025 <- recursos %>%
    filter(
      str_detect(name, "2024|2025") |
        str_detect(url, "2024|2025")
    ) %>%
    filter(str_detect(tolower(format), "csv") | str_detect(tolower(url), "\\.csv"))
  
  urls_2024_2025 <- recursos_2024_2025$url
  
  dados_brutos <- map_dfr(
    urls_2024_2025,
    ~ ler_csv_consumidor(.x) %>%
      mutate(arquivo_origem = .x)
  )
}

dim(dados_brutos)
## [1] 4064095      33

Após a importação, o objeto dados_brutos contém a junção dos arquivos disponíveis para os anos de 2024 e 2025.

names(dados_brutos)
##  [1] "Gestor"                        "Canal de Origem"              
##  [3] "Região"                        "UF"                           
##  [5] "Cidade"                        "Sexo"                         
##  [7] "Faixa Etária"                  "Ano Abertura"                 
##  [9] "Mês Abertura"                  "Data Abertura"                
## [11] "Data Resposta"                 "Data Análise"                 
## [13] "Data Recusa"                   "Data Finalização"             
## [15] "Prazo Resposta"                "Prazo Analise Gestor"         
## [17] "Tempo Resposta"                "Nome Fantasia"                
## [19] "Segmento de Mercado"           "Área"                         
## [21] "Assunto"                       "Grupo Problema"               
## [23] "Problema"                      "Como Comprou Contratou"       
## [25] "Procurou Empresa"              "Respondida"                   
## [27] "Situação"                      "Avaliação Reclamação"         
## [29] "Nota do Consumidor"            "Análise da Recusa"            
## [31] "arquivo_origem"                "Interação com Judiciario"     
## [33] "Último Complemento Consumidor"

3.3 Padronização dos nomes das variáveis

Os nomes originais das colunas possuem acentos, espaços e letras maiúsculas. Para facilitar a manipulação dos dados, os nomes foram padronizados com a função clean_names().

dados <- dados_brutos %>%
  clean_names()

names(dados)
##  [1] "gestor"                        "canal_de_origem"              
##  [3] "regiao"                        "uf"                           
##  [5] "cidade"                        "sexo"                         
##  [7] "faixa_etaria"                  "ano_abertura"                 
##  [9] "mes_abertura"                  "data_abertura"                
## [11] "data_resposta"                 "data_analise"                 
## [13] "data_recusa"                   "data_finalizacao"             
## [15] "prazo_resposta"                "prazo_analise_gestor"         
## [17] "tempo_resposta"                "nome_fantasia"                
## [19] "segmento_de_mercado"           "area"                         
## [21] "assunto"                       "grupo_problema"               
## [23] "problema"                      "como_comprou_contratou"       
## [25] "procurou_empresa"              "respondida"                   
## [27] "situacao"                      "avaliacao_reclamacao"         
## [29] "nota_do_consumidor"            "analise_da_recusa"            
## [31] "arquivo_origem"                "interacao_com_judiciario"     
## [33] "ultimo_complemento_consumidor"

Essa etapa transforma, por exemplo, Data Abertura em data_abertura, Nome Fantasia em nome_fantasia e Nota do Consumidor em nota_do_consumidor.

3.4 Seleção das variáveis de interesse

Nem todas as variáveis disponíveis serão utilizadas nesta análise. Foram selecionadas as variáveis mais relevantes para compreender o perfil das reclamações, sua distribuição geográfica, os segmentos de mercado, os problemas relatados e os indicadores de resposta e avaliação.

dados <- dados %>%
  select(
    arquivo_origem,
    gestor,
    canal_de_origem,
    regiao,
    uf,
    cidade,
    sexo,
    faixa_etaria,
    ano_abertura,
    mes_abertura,
    data_abertura,
    data_resposta,
    data_analise,
    data_recusa,
    data_finalizacao,
    prazo_resposta,
    prazo_analise_gestor,
    tempo_resposta,
    nome_fantasia,
    segmento_de_mercado,
    area,
    assunto,
    grupo_problema,
    problema,
    como_comprou_contratou,
    procurou_empresa,
    respondida,
    situacao,
    avaliacao_reclamacao,
    nota_do_consumidor,
    analise_da_recusa
  )

3.5 Conversão de tipos de dados

Na base original, algumas variáveis numéricas e de data podem ser importadas como texto. Por isso, foram realizadas conversões para os tipos adequados.

dados <- dados %>%
  mutate(
    ano_abertura = as.integer(ano_abertura),
    mes_abertura = as.integer(mes_abertura),
    
    data_abertura = dmy(data_abertura),
    data_resposta = dmy(data_resposta),
    data_analise = dmy(data_analise),
    data_recusa = dmy(data_recusa),
    data_finalizacao = ymd(data_finalizacao),
    
    prazo_analise_gestor = as.numeric(prazo_analise_gestor),
    tempo_resposta = as.numeric(tempo_resposta),
    nota_do_consumidor = as.numeric(nota_do_consumidor)
  )

As datas foram convertidas para permitir análises temporais posteriores. As variáveis tempo_resposta, prazo_analise_gestor e nota_do_consumidor foram convertidas para formato numérico para permitir cálculos estatísticos.

3.6 Padronização das variáveis textuais

As variáveis categóricas foram padronizadas para reduzir inconsistências causadas por espaços extras e diferenças de capitalização.

dados <- dados %>%
  mutate(
    across(
      where(is.character),
      ~ str_squish(.x)
    ),
    across(
      c(
        regiao,
        uf,
        cidade,
        sexo,
        faixa_etaria,
        canal_de_origem,
        nome_fantasia,
        segmento_de_mercado,
        area,
        assunto,
        grupo_problema,
        problema,
        como_comprou_contratou,
        procurou_empresa,
        respondida,
        situacao,
        avaliacao_reclamacao,
        analise_da_recusa
      ),
      ~ str_to_sentence(.x)
    ),
    uf = str_to_upper(uf),
    regiao = str_to_upper(regiao),
    respondida = str_to_upper(respondida),
    procurou_empresa = str_to_upper(procurou_empresa)
  )

3.7 Filtragem dos anos de interesse

Como o objetivo do projeto é analisar as reclamações entre 2024 e 2025, foram mantidos apenas os registros cuja data de abertura pertence a esse período.

dados <- dados %>%
  mutate(
    ano = year(data_abertura),
    mes = month(data_abertura),
    mes_nome = month(data_abertura, label = TRUE, abbr = FALSE)
  ) %>%
  filter(ano %in% c(2024, 2025))

3.8 Tratamento de valores ausentes

Antes de remover ou substituir valores ausentes, é importante verificar em quais variáveis eles aparecem com maior frequência.

resumo_ausentes <- dados %>%
  summarise(across(everything(), ~ sum(is.na(.)))) %>%
  pivot_longer(
    cols = everything(),
    names_to = "variavel",
    values_to = "valores_ausentes"
  ) %>%
  mutate(
    percentual_ausente = valores_ausentes / nrow(dados)
  ) %>%
  arrange(desc(valores_ausentes))

resumo_ausentes %>%
  slice_head(n = 15) %>%
  mutate(percentual_ausente = percent(percentual_ausente, accuracy = 0.1)) %>%
  kable(
    caption = "Variáveis com maior quantidade de valores ausentes"
  )
Variáveis com maior quantidade de valores ausentes
variavel valores_ausentes percentual_ausente
prazo_analise_gestor 3509998 88.1%
data_analise 3509945 88.1%
analise_da_recusa 3460132 86.9%
data_recusa 3459655 86.9%
nota_do_consumidor 2682184 67.3%
data_resposta 505518 12.7%
tempo_resposta 505518 12.7%
avaliacao_reclamacao 413585 10.4%
sexo 89 0.0%
arquivo_origem 0 0.0%
gestor 0 0.0%
canal_de_origem 0 0.0%
regiao 0 0.0%
uf 0 0.0%
cidade 0 0.0%

Algumas ausências são esperadas. Por exemplo, a ausência de nota_do_consumidor pode indicar que a reclamação ainda não foi avaliada pelo consumidor ou foi finalizada sem avaliação. Por isso, essas observações serão mantidas na base.

dados <- dados %>%
  mutate(
    avaliacao_reclamacao = replace_na(avaliacao_reclamacao, "Não avaliada"),
    situacao = replace_na(situacao, "Sem informação"),
    analise_da_recusa = replace_na(analise_da_recusa, "Sem recusa"),
    cidade = replace_na(cidade, "Não informada"),
    sexo = replace_na(sexo, "Não informado"),
    faixa_etaria = replace_na(faixa_etaria, "Não informada")
  )

3.9 Criação de novas variáveis

Foram criadas variáveis derivadas para facilitar a análise exploratória posterior.

dados_limpos <- dados %>%
  mutate(
    resposta_binaria = case_when(
      respondida == "S" ~ "Respondida",
      respondida == "N" ~ "Não respondida",
      TRUE ~ "Sem informação"
    ),
    
    procurou_empresa_binaria = case_when(
      procurou_empresa == "S" ~ "Procurou a empresa antes",
      procurou_empresa == "N" ~ "Não procurou a empresa antes",
      TRUE ~ "Sem informação"
    ),
    
    reclamacao_avaliada = case_when(
      is.na(nota_do_consumidor) ~ "Não avaliada",
      TRUE ~ "Avaliada"
    ),
    
    resolvida = case_when(
      str_detect(str_to_lower(avaliacao_reclamacao), "resolvida") &
        !str_detect(str_to_lower(avaliacao_reclamacao), "não") ~ "Resolvida",
      
      str_detect(str_to_lower(avaliacao_reclamacao), "não resolvida") ~ "Não resolvida",
      
      TRUE ~ "Não avaliada"
    ),
    
    tempo_resposta_categoria = case_when(
      is.na(tempo_resposta) ~ "Sem resposta",
      tempo_resposta <= 5 ~ "Até 5 dias",
      tempo_resposta <= 10 ~ "6 a 10 dias",
      tempo_resposta > 10 ~ "Mais de 10 dias"
    ),
    
    nota_categoria = case_when(
      is.na(nota_do_consumidor) ~ "Sem nota",
      nota_do_consumidor <= 2 ~ "Baixa",
      nota_do_consumidor <= 4 ~ "Média",
      nota_do_consumidor == 5 ~ "Alta"
    )
  )

A variável resposta_binaria indica se a reclamação foi respondida pela empresa. A variável procurou_empresa_binaria indica se o consumidor tentou contato prévio com a empresa antes de registrar a reclamação. A variável resolvida resume o resultado da avaliação da reclamação. A variável tempo_resposta_categoria agrupa o tempo de resposta em faixas interpretáveis. A variável nota_categoria classifica a nota do consumidor em baixa, média, alta ou sem nota.

3.10 Base final após o pré-processamento

Após as etapas de limpeza e transformação, a base final contém 3982873 reclamações e 40 variáveis.

dimensoes <- tibble(
  indicador = c("Número de linhas", "Número de colunas"),
  valor = c(nrow(dados_limpos), ncol(dados_limpos))
)

kable(
  dimensoes,
  caption = "Dimensões da base após o pré-processamento"
)
Dimensões da base após o pré-processamento
indicador valor
Número de linhas 3982873
Número de colunas 40

Abaixo, é apresentada uma amostra da base final. Para evitar uma tabela excessivamente longa, são exibidas apenas algumas linhas.

dados_limpos %>%
  select(
    ano,
    mes_nome,
    regiao,
    uf,
    cidade,
    sexo,
    faixa_etaria,
    nome_fantasia,
    segmento_de_mercado,
    area,
    grupo_problema,
    problema,
    resposta_binaria,
    resolvida,
    nota_do_consumidor,
    tempo_resposta
  ) %>%
  slice_head(n = 20) %>%
  kable(
    caption = "Amostra da base final após limpeza e pré-processamento"
  )
Amostra da base final após limpeza e pré-processamento
ano mes_nome regiao uf cidade sexo faixa_etaria nome_fantasia segmento_de_mercado area grupo_problema problema resposta_binaria resolvida nota_do_consumidor tempo_resposta
2024 janeiro SE RJ Rio de janeiro M Entre 31 a 40 anos Facebook / instagram Provedores de conteúdo e outros serviços na internet Demais serviços Vício de qualidade Dificuldade para alterar/ ativar serviços Respondida Não avaliada NA 3
2024 janeiro SE SP São paulo M Entre 61 a 70 anos Latam airlines (tam) Transporte aéreo Transportes Vício de qualidade Inadequação das instalações/ acomodações Respondida Resolvida 5 2
2024 janeiro NE PB João pessoa M Entre 21 a 30 anos Tim Operadoras de telecomunicações (telefonia, internet, tv por assinatura) Telecomunicações Contrato / oferta Ligações indesejadas de telemarketing (0303) Respondida Não avaliada NA 4
2024 janeiro SE SP Sumaré M Entre 41 a 50 anos Brisanet telecom Operadoras de telecomunicações (telefonia, internet, tv por assinatura) Produtos de telefonia e informática Cobrança / contestação Negativação indevida (spc, serasa, scpc etc) Respondida Não avaliada NA 9
2024 janeiro NE BA Salvador F Entre 21 a 30 anos Ifood Empresas de intermediação de serviços / negócios Demais serviços Cobrança / contestação Dificuldade / atraso na devolução de valores pagos / reembolso / retenção de valores Respondida Não avaliada NA 9
2024 janeiro SE SP Campinas M Entre 21 a 30 anos Banco santander Bancos, financeiras e administradoras de cartão Serviços financeiros Atendimento / sac Dificuldade de contato / acesso a outros canais (exceto sac) Respondida Não avaliada NA 9
2024 janeiro SE RJ Duque de caxias M Entre 21 a 30 anos Paypal do brasil Empresas de pagamento eletrônico Serviços financeiros Atendimento / sac Má qualidade no atendimento (descortesia / despreparo/ constrangimento) Respondida Resolvida 5 7
2024 janeiro NE MA São luís F Entre 31 a 40 anos Tudo azul Programas de fidelidade Demais serviços Contrato / oferta Dificuldade para alterar ou cancelar o contrato /serviço Respondida Não avaliada NA 7
2024 janeiro S PR Palmas M Entre 21 a 30 anos Banco bv (antigo banco votorantim) Bancos, financeiras e administradoras de cartão Serviços financeiros Atendimento / sac Sac - dificuldade de contato / acesso Respondida Não avaliada NA 7
2024 janeiro SE MG São gonçalo do rio das pedras M Entre 61 a 70 anos Hoteis.com Viagens, turismo e hospedagem Turismo/viagens Cobrança / contestação Cobrança por serviço não fornecido/ em desacordo com a utilização / fora do prazo Respondida Não avaliada NA 4
2024 janeiro SE SP Guarulhos M Entre 31 a 40 anos Cartões itaú Bancos, financeiras e administradoras de cartão Serviços financeiros Dados pessoais e privacidade Dados pessoais ou financeiros incorretos / desatualizados ? Dificuldade de retificação Respondida Não avaliada NA 8
2024 janeiro NE PB João pessoa M Entre 21 a 30 anos Nubank Bancos, financeiras e administradoras de cartão Serviços financeiros Cobrança / contestação Negativação indevida (não cumprimento de acordo de parcelamento) Respondida Não avaliada NA 3
2024 janeiro NE PB João pessoa M Entre 21 a 30 anos Banco bv (antigo banco votorantim) Bancos, financeiras e administradoras de cartão Serviços financeiros Cobrança / contestação Negativação indevida referente a cobrança não reconhecida Respondida Não avaliada NA 9
2024 janeiro SE ES Cariacica M Entre 41 a 50 anos Caixa econômica federal Bancos, financeiras e administradoras de cartão Serviços financeiros Cobrança / contestação Cobrança em duplicidade / cobrança referente a pagamento já efetuado Respondida Não avaliada NA 2
2024 janeiro SE SP São josé do rio preto M Entre 41 a 50 anos Latam airlines (tam) Transporte aéreo Transportes Vício de qualidade Negativa de embarque de passageiro (preterição / overbooking) Respondida Resolvida 5 2
2024 janeiro NE CE Fortaleza M Entre 41 a 50 anos Assurant seguradora Seguros, capitalização e previdência Serviços financeiros Cobrança / contestação Dificuldade / atraso na devolução de valores pagos / reembolso / retenção de valores Respondida Não avaliada NA 9
2024 janeiro SE SP Santos M Entre 21 a 30 anos Casasbahia.com Comércio eletrônico Demais produtos Entrega do produto Não entrega / demora na entrega do produto Respondida Resolvida 5 7
2024 janeiro SE SP São paulo F Entre 31 a 40 anos Globoplay Provedores de conteúdo e outros serviços na internet Demais serviços Vício de qualidade Funcionamento inadequado do serviço Respondida Não avaliada NA 8
2024 janeiro SE SP São paulo F Entre 31 a 40 anos Vivo - telefônica Operadoras de telecomunicações (telefonia, internet, tv por assinatura) Telecomunicações Contrato / oferta Oferta não cumprida / serviço não fornecido/ venda enganosa / publicidade enganosa Respondida Resolvida 5 8
2024 janeiro SE MG Juiz de fora M Entre 51 a 60 anos Google Provedores de conteúdo e outros serviços na internet Demais serviços Vício de qualidade Dificuldade para alterar/ ativar serviços Respondida Resolvida 5 10

3.11 Tabela interativa da base limpa

dados_limpos %>%
  select(
    ano,
    mes_nome,
    regiao,
    uf,
    cidade,
    nome_fantasia,
    segmento_de_mercado,
    problema,
    resposta_binaria,
    resolvida,
    nota_do_consumidor,
    tempo_resposta
  ) %>%
  slice_head(n = 200) %>%
  datatable(
    caption = "Tabela interativa com até 200 registros da base limpa",
    options = list(
      pageLength = 10,
      scrollX = TRUE,
      language = list(url = "//cdn.datatables.net/plug-ins/1.10.11/i18n/Portuguese-Brasil.json")
    )
  )

3.12 Resumo das variáveis de interesse

resumo_variaveis <- tibble(
  variavel = c(
    "ano",
    "mes_nome",
    "regiao",
    "uf",
    "cidade",
    "sexo",
    "faixa_etaria",
    "nome_fantasia",
    "segmento_de_mercado",
    "area",
    "assunto",
    "grupo_problema",
    "problema",
    "resposta_binaria",
    "resolvida",
    "nota_do_consumidor",
    "tempo_resposta"
  ),
  descricao = c(
    "Ano de abertura da reclamação",
    "Mês de abertura da reclamação",
    "Região do consumidor",
    "Unidade federativa do consumidor",
    "Cidade do consumidor",
    "Sexo informado pelo consumidor",
    "Faixa etária do consumidor",
    "Nome fantasia da empresa reclamada",
    "Segmento de mercado da empresa",
    "Área geral da reclamação",
    "Assunto da reclamação",
    "Grupo geral do problema relatado",
    "Descrição específica do problema",
    "Indica se a reclamação foi respondida pela empresa",
    "Indica se a reclamação foi resolvida, não resolvida ou não avaliada",
    "Nota atribuída pelo consumidor",
    "Tempo de resposta da empresa em dias"
  ),
  tipo = c(
    "Numérica",
    "Categórica ordinal",
    "Categórica",
    "Categórica",
    "Categórica",
    "Categórica",
    "Categórica ordinal",
    "Categórica",
    "Categórica",
    "Categórica",
    "Categórica",
    "Categórica",
    "Categórica",
    "Categórica",
    "Categórica",
    "Numérica",
    "Numérica"
  )
)

kable(
  resumo_variaveis,
  caption = "Descrição das variáveis de interesse"
)
Descrição das variáveis de interesse
variavel descricao tipo
ano Ano de abertura da reclamação Numérica
mes_nome Mês de abertura da reclamação Categórica ordinal
regiao Região do consumidor Categórica
uf Unidade federativa do consumidor Categórica
cidade Cidade do consumidor Categórica
sexo Sexo informado pelo consumidor Categórica
faixa_etaria Faixa etária do consumidor Categórica ordinal
nome_fantasia Nome fantasia da empresa reclamada Categórica
segmento_de_mercado Segmento de mercado da empresa Categórica
area Área geral da reclamação Categórica
assunto Assunto da reclamação Categórica
grupo_problema Grupo geral do problema relatado Categórica
problema Descrição específica do problema Categórica
resposta_binaria Indica se a reclamação foi respondida pela empresa Categórica
resolvida Indica se a reclamação foi resolvida, não resolvida ou não avaliada Categórica
nota_do_consumidor Nota atribuída pelo consumidor Numérica
tempo_resposta Tempo de resposta da empresa em dias Numérica

3.13 Estatísticas descritivas iniciais

Embora a análise exploratória completa seja realizada posteriormente, algumas estatísticas iniciais ajudam a compreender a base limpa.

estatisticas_iniciais <- tibble(
  indicador = c(
    "Total de reclamações",
    "Número de empresas",
    "Número de segmentos de mercado",
    "Número de UFs",
    "Número de cidades",
    "Percentual de reclamações respondidas",
    "Percentual de reclamações avaliadas",
    "Nota média do consumidor",
    "Tempo médio de resposta"
  ),
  valor = c(
    nrow(dados_limpos),
    n_distinct(dados_limpos$nome_fantasia, na.rm = TRUE),
    n_distinct(dados_limpos$segmento_de_mercado, na.rm = TRUE),
    n_distinct(dados_limpos$uf, na.rm = TRUE),
    n_distinct(dados_limpos$cidade, na.rm = TRUE),
    percent(mean(dados_limpos$resposta_binaria == "Respondida", na.rm = TRUE), accuracy = 0.1),
    percent(mean(dados_limpos$reclamacao_avaliada == "Avaliada", na.rm = TRUE), accuracy = 0.1),
    round(mean(dados_limpos$nota_do_consumidor, na.rm = TRUE), 2),
    round(mean(dados_limpos$tempo_resposta, na.rm = TRUE), 2)
  )
)

kable(
  estatisticas_iniciais,
  caption = "Resumo inicial da base limpa"
)
Resumo inicial da base limpa
indicador valor
Total de reclamações 3982873
Número de empresas 1812
Número de segmentos de mercado 45
Número de UFs 27
Número de cidades 6795
Percentual de reclamações respondidas 87.3%
Percentual de reclamações avaliadas 32.7%
Nota média do consumidor 2.72
Tempo médio de resposta 6.67

3.14 Distribuição inicial por ano

distribuicao_ano <- dados_limpos %>%
  count(ano, name = "total_reclamacoes") %>%
  mutate(percentual = total_reclamacoes / sum(total_reclamacoes))

distribuicao_ano %>%
  mutate(percentual = percent(percentual, accuracy = 0.1)) %>%
  kable(
    caption = "Distribuição das reclamações por ano"
  )
Distribuição das reclamações por ano
ano total_reclamacoes percentual
2024 1495226 37.5%
2025 2487647 62.5%

3.15 Distribuição inicial por região

distribuicao_regiao <- dados_limpos %>%
  count(regiao, name = "total_reclamacoes") %>%
  arrange(desc(total_reclamacoes)) %>%
  mutate(percentual = total_reclamacoes / sum(total_reclamacoes))

distribuicao_regiao %>%
  mutate(percentual = percent(percentual, accuracy = 0.1)) %>%
  kable(
    caption = "Distribuição das reclamações por região"
  )
Distribuição das reclamações por região
regiao total_reclamacoes percentual
SE 1959793 49.2%
NE 743706 18.7%
S 657055 16.5%
CO 411939 10.3%
N 210380 5.3%

4. Análise exploratória dos dados

Nesta seção, são realizadas análises exploratórias com o objetivo de identificar padrões nas reclamações registradas no Consumidor.gov.br entre 2024 e 2025. A análise considera a evolução temporal das reclamações, sua distribuição geográfica, os segmentos de mercado mais reclamados, os principais grupos de problema e a relação entre tempo de resposta, avaliação do consumidor e resolução das reclamações.

4.1 Evolução mensal das reclamações

O gráfico indica que o volume mensal de reclamações não se manteve totalmente estável entre 2024 e 2025. Em 2024, observa-se uma oscilação mais moderada, com queda mais acentuada em junho e recuperação nos meses seguintes. A partir do início de 2025, há uma tendência de crescimento mais clara no número de reclamações, especialmente entre maio e novembro, período em que o total mensal atinge os maiores valores da série.

Esse aumento pode indicar uma intensificação do uso da plataforma Consumidor.gov.br, uma maior concentração de conflitos de consumo em determinados meses ou mudanças no volume de registros disponíveis na base. Já a queda brusca no final da série deve ser interpretada com cautela, pois está relacionada à incompletude do último mês disponível. Por isso, essa variação final não deve ser analisada isoladamente como uma redução real das reclamações.

reclamacoes_mes <- dados_limpos %>%
  mutate(data_mes = floor_date(data_abertura, unit = "month")) %>%
  count(data_mes, name = "total_reclamacoes") %>%
  arrange(data_mes)

kable(
  reclamacoes_mes,
  caption = "Quantidade mensal de reclamações registradas"
)
Quantidade mensal de reclamações registradas
data_mes total_reclamacoes
2024-01-01 129523
2024-02-01 118440
2024-03-01 126497
2024-04-01 92803
2024-05-01 129716
2024-06-01 54284
2024-07-01 129868
2024-08-01 129537
2024-09-01 122682
2024-10-01 159304
2024-11-01 150936
2024-12-01 151636
2025-01-01 192792
2025-02-01 158520
2025-03-01 168253
2025-04-01 181428
2025-05-01 202704
2025-06-01 208283
2025-07-01 235980
2025-08-01 264643
2025-09-01 258478
2025-10-01 276204
2025-11-01 285994
2025-12-01 54368
grafico_mensal <- ggplot(
  reclamacoes_mes,
  aes(x = data_mes, y = total_reclamacoes)
) +
  geom_line(linewidth = 1) +
  geom_point() +
  labs(
    title = "Evolução mensal das reclamações no Consumidor.gov.br",
    subtitle = "Reclamações registradas entre 2024 e 2025",
    x = "Mês de abertura",
    y = "Total de reclamações"
  ) +
  scale_x_date(date_labels = "%m/%Y", date_breaks = "2 months") +
  theme_minimal() +
  theme(
    axis.text.x = element_text(angle = 45, hjust = 1)
  )

grafico_mensal

A primeira análise observa a evolução mensal das reclamações registradas no Consumidor.gov.br. Essa etapa permite identificar oscilações, tendências de crescimento ou queda e possíveis meses atípicos no volume de registros.

4.2 Distribuição das reclamações por região

A segunda análise observa a distribuição das reclamações por região do país.

reclamacoes_regiao <- dados_limpos %>%
  count(regiao, name = "total_reclamacoes") %>%
  arrange(desc(total_reclamacoes)) %>%
  mutate(
    percentual = total_reclamacoes / sum(total_reclamacoes)
  )

reclamacoes_regiao %>%
  mutate(percentual = percent(percentual, accuracy = 0.1)) %>%
  kable(caption = "Distribuição das reclamações por região")
Distribuição das reclamações por região
regiao total_reclamacoes percentual
SE 1959793 49.2%
NE 743706 18.7%
S 657055 16.5%
CO 411939 10.3%
N 210380 5.3%
ggplot(
  reclamacoes_regiao,
  aes(x = reorder(regiao, total_reclamacoes), y = total_reclamacoes)
) +
  geom_col() +
  coord_flip() +
  labs(
    title = "Distribuição das reclamações por região",
    x = "Região",
    y = "Total de reclamações"
  ) +
  theme_minimal()

A distribuição regional ajuda a identificar onde as reclamações se concentram. No entanto, é importante lembrar que regiões mais populosas tendem naturalmente a apresentar maior quantidade absoluta de reclamações. Por isso, essa análise deve ser interpretada como uma visão inicial da distribuição geográfica, e não como uma taxa proporcional à população.

4.3 Unidades federativas com maior número de reclamações

reclamacoes_uf <- dados_limpos %>%
  count(uf, name = "total_reclamacoes") %>%
  arrange(desc(total_reclamacoes)) %>%
  slice_head(n = 10) %>%
  mutate(
    percentual = total_reclamacoes / sum(total_reclamacoes)
  )

reclamacoes_uf %>%
  mutate(percentual = percent(percentual, accuracy = 0.1)) %>%
  kable(caption = "Dez unidades federativas com maior número de reclamações")
Dez unidades federativas com maior número de reclamações
uf total_reclamacoes percentual
SP 994550 31.3%
MG 466900 14.7%
RJ 416590 13.1%
PR 285721 9.0%
BA 232143 7.3%
RS 194443 6.1%
SC 176891 5.6%
DF 150650 4.7%
GO 141007 4.4%
CE 116883 3.7%
ggplot(
  reclamacoes_uf,
  aes(x = reorder(uf, total_reclamacoes), y = total_reclamacoes)
) +
  geom_col() +
  coord_flip() +
  labs(
    title = "Estados com maior número de reclamações",
    x = "UF",
    y = "Total de reclamações"
  ) +
  theme_minimal()

O gráfico mostra uma forte concentração das reclamações em poucos estados. São Paulo aparece com grande distância em relação aos demais, aproximando-se de 1 milhão de registros no período analisado. Em seguida aparecem Minas Gerais e Rio de Janeiro, também com volumes elevados, mas bastante inferiores ao de São Paulo. Paraná, Bahia, Rio Grande do Sul, Santa Catarina, Distrito Federal, Goiás e Ceará completam os dez estados com maior número de reclamações.

Essa concentração sugere que o volume absoluto de reclamações acompanha, em parte, o peso demográfico e econômico desses estados, especialmente no caso de São Paulo, Minas Gerais e Rio de Janeiro. No entanto, essa leitura deve ser feita com cautela, pois o gráfico mostra números absolutos, e não taxas proporcionais à população ou ao número de consumidores de cada estado. Assim, estados mais populosos e com maior atividade econômica tendem naturalmente a registrar mais reclamações. Uma análise posterior poderia comparar o total de reclamações com a população de cada UF, permitindo identificar quais estados têm maior incidência relativa de reclamações.

4.4 Segmentos de mercado mais reclamados

Nesta etapa, são identificados os segmentos de mercado com maior número de reclamações. Essa análise é central para compreender quais áreas econômicas concentram maior volume de conflitos de consumo.

segmentos_top <- dados_limpos %>%
  count(segmento_de_mercado, name = "total_reclamacoes") %>%
  arrange(desc(total_reclamacoes)) %>%
  slice_head(n = 10) %>%
  mutate(
    percentual = total_reclamacoes / sum(total_reclamacoes)
  )

segmentos_top %>%
  mutate(percentual = percent(percentual, accuracy = 0.1)) %>%
  kable(caption = "Dez segmentos de mercado com maior número de reclamações")
Dez segmentos de mercado com maior número de reclamações
segmento_de_mercado total_reclamacoes percentual
Bancos, financeiras e administradoras de cartão 1602125 48.8%
Operadoras de telecomunicações (telefonia, internet, tv por assinatura) 422298 12.9%
Transporte aéreo 190106 5.8%
Bancos de dados e cadastros de consumidores 180176 5.5%
Comércio eletrônico 172228 5.2%
Provedores de conteúdo e outros serviços na internet 167870 5.1%
Empresas de pagamento eletrônico 147193 4.5%
Energia elétrica 146904 4.5%
Seguros, capitalização e previdência 132843 4.0%
Empresas de intermediação de serviços / negócios 119549 3.6%
ggplot(
  segmentos_top,
  aes(x = reorder(segmento_de_mercado, total_reclamacoes), y = total_reclamacoes)
) +
  geom_col() +
  coord_flip() +
  labs(
    title = "Segmentos de mercado com maior número de reclamações",
    x = "Segmento de mercado",
    y = "Total de reclamações"
  ) +
  theme_minimal()

O gráfico mostra uma forte concentração das reclamações em poucos segmentos de mercado, com destaque muito expressivo para o setor de bancos, financeiras e administradoras de cartão, que aparece muito acima dos demais. Em seguida, mas em patamar bem inferior, aparecem as operadoras de telecomunicações, enquanto os outros segmentos — como transporte aéreo, bancos de dados e cadastros de consumidores, comércio eletrônico e energia elétrica — apresentam volumes mais próximos entre si.

Esse resultado sugere que os conflitos de consumo registrados no período se concentram sobretudo em setores com grande alcance junto ao público e alta frequência de contratação de serviços, especialmente os serviços financeiros e de telecomunicações. No caso do segmento financeiro, o elevado número de reclamações pode estar associado a questões recorrentes como cobrança, contratação, atendimento e contestação de operações. Ainda assim, essa leitura deve ser feita com cautela, pois o gráfico apresenta valores absolutos: segmentos com maior presença no mercado e maior número de consumidores tendem naturalmente a concentrar mais reclamações. Por isso, nas análises seguintes, é importante observar também indicadores como nota média do consumidor, percentual de resolução e tempo de resposta.

4.5 Empresas com maior número de reclamações

empresas_top <- dados_limpos %>%
  count(nome_fantasia, segmento_de_mercado, name = "total_reclamacoes") %>%
  arrange(desc(total_reclamacoes)) %>%
  slice_head(n = 15)

empresas_top %>%
  kable(caption = "Quinze empresas com maior número de reclamações")
Quinze empresas com maior número de reclamações
nome_fantasia segmento_de_mercado total_reclamacoes
Nubank Bancos, financeiras e administradoras de cartão 191532
Serasa experian Bancos de dados e cadastros de consumidores 169488
Vivo - telefônica Operadoras de telecomunicações (telefonia, internet, tv por assinatura) 125616
Banco santander Bancos, financeiras e administradoras de cartão 119324
Banco do brasil Bancos, financeiras e administradoras de cartão 116455
Caixa econômica federal Bancos, financeiras e administradoras de cartão 108809
Banco bradesco Bancos, financeiras e administradoras de cartão 108406
Google Provedores de conteúdo e outros serviços na internet 81593
Claro celular Operadoras de telecomunicações (telefonia, internet, tv por assinatura) 79373
Tim Operadoras de telecomunicações (telefonia, internet, tv por assinatura) 78571
Banco itaú unibanco Bancos, financeiras e administradoras de cartão 74299
Facebook / instagram Provedores de conteúdo e outros serviços na internet 73729
Banco pan Bancos, financeiras e administradoras de cartão 67314
Azul linhas aéreas Transporte aéreo 66384
Claro residencial Operadoras de telecomunicações (telefonia, internet, tv por assinatura) 63231
ggplot(
  empresas_top,
  aes(x = reorder(nome_fantasia, total_reclamacoes), y = total_reclamacoes)
) +
  geom_col() +
  coord_flip() +
  labs(
    title = "Empresas com maior número de reclamações",
    x = "Empresa",
    y = "Total de reclamações"
  ) +
  theme_minimal()

O gráfico mostra que as reclamações se concentram em empresas de grande presença nacional, especialmente dos setores financeiro, telecomunicações, tecnologia e transporte. A Nubank aparece como a empresa com maior número de registros, seguida por Serasa Experian, Vivo, Banco Santander, Banco do Brasil, Caixa Econômica Federal e Banco Bradesco. Essa composição indica que boa parte das reclamações está associada a serviços amplamente utilizados pela população, como bancos, cartões, crédito, telefonia, internet e plataformas digitais.

A presença de várias instituições financeiras entre as empresas mais reclamadas reforça o padrão observado na análise por segmento de mercado, em que bancos, financeiras e administradoras de cartão aparecem com forte destaque. No entanto, assim como nas análises anteriores, o volume absoluto de reclamações não significa necessariamente pior desempenho isolado, pois empresas com maior base de clientes tendem a registrar mais reclamações. Por isso, essa informação deve ser combinada com outros indicadores, como nota média do consumidor, percentual de resolução e tempo médio de resposta.

4.6 Grupos de problema mais frequentes

problemas_top <- dados_limpos %>%
  count(grupo_problema, name = "total_reclamacoes") %>%
  arrange(desc(total_reclamacoes)) %>%
  slice_head(n = 10) %>%
  mutate(
    percentual = total_reclamacoes / sum(total_reclamacoes)
  )

problemas_top %>%
  mutate(percentual = percent(percentual, accuracy = 0.1)) %>%
  kable(caption = "Grupos de problema mais frequentes")
Grupos de problema mais frequentes
grupo_problema total_reclamacoes percentual
Cobrança / contestação 1947858 48.9%
Contrato / oferta 558900 14.0%
Atendimento / sac 519385 13.0%
Vício de qualidade 457279 11.5%
Dados pessoais e privacidade 285573 7.2%
Entrega do produto 127874 3.2%
Informação 60725 1.5%
Saúde e segurança 25279 0.6%
ggplot(
  problemas_top,
  aes(x = reorder(grupo_problema, total_reclamacoes), y = total_reclamacoes)
) +
  geom_col() +
  coord_flip() +
  labs(
    title = "Grupos de problema mais frequentes",
    x = "Grupo de problema",
    y = "Total de reclamações"
  ) +
  theme_minimal()

O gráfico mostra que as reclamações estão fortemente concentradas no grupo cobrança / contestação, que aparece com larga vantagem sobre os demais e representa, de forma isolada, o principal foco de conflito entre consumidores e empresas. Em um segundo nível aparecem contrato / oferta e atendimento / SAC, seguidos por vício de qualidade. Já grupos como dados pessoais e privacidade, entrega do produto, informação e saúde e segurança apresentam participação bem menor no conjunto das reclamações.

Esse resultado sugere que boa parte dos conflitos registrados no Consumidor.gov.br está relacionada menos a questões excepcionais e mais a problemas recorrentes do cotidiano das relações de consumo, especialmente cobranças indevidas, contestação de valores, dificuldades contratuais e falhas no atendimento. A predominância de cobrança / contestação também ajuda a explicar por que segmentos como bancos, financeiras, telecomunicações e serviços digitais aparecem com destaque nas análises anteriores, já que são setores em que esse tipo de problema costuma ser frequente. Assim, a análise dos grupos de problema complementa a leitura por empresa e por segmento, ao mostrar não apenas onde estão as reclamações, mas também qual é a natureza dos conflitos relatados.

4.7 Resultado das reclamações

Nesta etapa, observa-se a distribuição das reclamações segundo seu resultado: resolvida, não resolvida ou não avaliada.

resultado_reclamacoes <- dados_limpos %>%
  count(resolvida, name = "total_reclamacoes") %>%
  mutate(
    percentual = total_reclamacoes / sum(total_reclamacoes)
  ) %>%
  arrange(desc(total_reclamacoes))

resultado_reclamacoes %>%
  mutate(percentual = percent(percentual, accuracy = 0.1)) %>%
  kable(caption = "Distribuição das reclamações segundo o resultado")
Distribuição das reclamações segundo o resultado
resolvida total_reclamacoes percentual
Não avaliada 2682189 67.3%
Não resolvida 675276 17.0%
Resolvida 625408 15.7%
ggplot(
  resultado_reclamacoes,
  aes(x = reorder(resolvida, total_reclamacoes), y = total_reclamacoes)
) +
  geom_col() +
  coord_flip() +
  labs(
    title = "Distribuição das reclamações por resultado",
    x = "Resultado",
    y = "Total de reclamações"
  ) +
  theme_minimal()

O gráfico mostra que a maior parte das reclamações está concentrada na categoria “Não avaliada”, que aparece com volume muito superior às categorias “Resolvida” e “Não resolvida”. Entre as reclamações que efetivamente receberam avaliação do consumidor, observa-se um número relativamente próximo entre casos resolvidos e não resolvidos, com leve predominância das reclamações classificadas como não resolvidas.

Esse resultado sugere, em primeiro lugar, que uma parcela muito expressiva dos registros finalizados não conta com avaliação posterior do consumidor, o que limita uma interpretação direta sobre a efetividade geral da plataforma apenas com base nessa variável. Ainda assim, ao considerar apenas as reclamações avaliadas, percebe-se que a resolução dos conflitos não é uniforme, havendo um contingente relevante de consumidores que não considerou seu problema solucionado. Por isso, a categoria “Não avaliada” deve ser interpretada com cautela: ela não significa necessariamente ausência de resposta ou fracasso no atendimento, mas sim ausência de retorno do consumidor sobre o desfecho da reclamação.

4.8 Nota média por segmento de mercado

Para ir além da contagem de reclamações, esta análise compara os segmentos de mercado segundo a nota média dada pelos consumidores. Foram considerados apenas segmentos com pelo menos 100 reclamações avaliadas, evitando interpretações baseadas em poucos casos.

nota_segmento <- dados_limpos %>%
  filter(!is.na(nota_do_consumidor)) %>%
  group_by(segmento_de_mercado) %>%
  summarise(
    total_avaliacoes = n(),
    nota_media = mean(nota_do_consumidor, na.rm = TRUE),
    tempo_medio_resposta = mean(tempo_resposta, na.rm = TRUE),
    .groups = "drop"
  ) %>%
  filter(total_avaliacoes >= 100) %>%
  arrange(nota_media)

nota_segmento %>%
  slice_head(n = 10) %>%
  mutate(
    nota_media = round(nota_media, 2),
    tempo_medio_resposta = round(tempo_medio_resposta, 2)
  ) %>%
  kable(caption = "Segmentos com menores notas médias entre os segmentos com pelo menos 100 avaliações")
Segmentos com menores notas médias entre os segmentos com pelo menos 100 avaliações
segmento_de_mercado total_avaliacoes nota_media tempo_medio_resposta
Fabricantes - eletroeletrônicos, produtos de telefonia e informática 28150 1.86 6.62
Viagens, turismo e hospedagem 36543 1.88 4.61
Montadoras, concessionárias e prestadores de serviços automotivos 4955 1.91 6.80
Estabelecimentos de ensino 11800 1.93 5.94
Entidades sem fins lucrativos 1103 2.10 4.80
Empresas de apostas, loterias e promoções comerciais 3178 2.13 4.67
Administradoras de consórcios 3720 2.16 6.63
Operadoras de planos de saúde e administradoras de benefícios 23755 2.17 6.76
Agua e saneamento 12334 2.18 5.64
Construtoras, incorporadoras e imobiliárias 3930 2.27 6.96
nota_segmento_top <- nota_segmento %>%
  slice_head(n = 10)

ggplot(
  nota_segmento_top,
  aes(x = reorder(segmento_de_mercado, nota_media), y = nota_media)
) +
  geom_col() +
  coord_flip() +
  labs(
    title = "Segmentos com menores notas médias",
    subtitle = "Considerando apenas segmentos com pelo menos 100 avaliações",
    x = "Segmento de mercado",
    y = "Nota média do consumidor"
  ) +
  ylim(0, 5) +
  theme_minimal()

O gráfico apresenta os segmentos de mercado com menores notas médias atribuídas pelos consumidores, considerando apenas segmentos com pelo menos 100 avaliações. Diferentemente das análises anteriores, aqui o foco não está no volume de reclamações, mas na percepção dos consumidores sobre o desfecho do atendimento. Os segmentos com menores notas médias incluem construtoras, incorporadoras e imobiliárias, água e saneamento, operadoras de planos de saúde, administradoras de consórcios, empresas de apostas e loterias, entidades sem fins lucrativos, estabelecimentos de ensino, serviços automotivos, viagens e hospedagem e fabricantes de eletrônicos.

As notas médias desses segmentos ficam próximas da parte inferior da escala de avaliação, indicando maior insatisfação entre os consumidores que avaliaram suas reclamações. Esse resultado sugere que, mesmo que alguns desses segmentos não estejam entre os maiores em volume absoluto de reclamações, eles podem apresentar problemas relevantes quanto à capacidade de resolver conflitos de forma satisfatória. Por isso, a nota média complementa a contagem de reclamações: ela ajuda a identificar setores que talvez não sejam os mais reclamados, mas que recebem avaliações piores quando os consumidores registram sua experiência.

4.9 Tempo de resposta e nota do consumidor

Nesta análise, observa-se a relação entre o tempo de resposta da empresa e a nota atribuída pelo consumidor. Para facilitar a interpretação, o tempo de resposta foi agrupado em categorias.

tempo_nota <- dados_limpos %>%
  filter(!is.na(nota_do_consumidor)) %>%
  group_by(tempo_resposta_categoria) %>%
  summarise(
    total_avaliacoes = n(),
    nota_media = mean(nota_do_consumidor, na.rm = TRUE),
    percentual_resolvidas = mean(resolvida == "Resolvida", na.rm = TRUE),
    .groups = "drop"
  ) %>%
  mutate(
    percentual_resolvidas = percent(percentual_resolvidas, accuracy = 0.1),
    nota_media = round(nota_media, 2)
  )

tempo_nota %>%
  kable(caption = "Nota média e percentual de resolução por categoria de tempo de resposta")
Nota média e percentual de resolução por categoria de tempo de resposta
tempo_resposta_categoria total_avaliacoes nota_media percentual_resolvidas
6 a 10 dias 768431 2.73 49.4%
Até 5 dias 483945 2.77 47.7%
Mais de 10 dias 21893 2.45 42.7%
Sem resposta 26420 1.63 21.5%
tempo_nota_grafico <- dados_limpos %>%
  filter(!is.na(nota_do_consumidor)) %>%
  group_by(tempo_resposta_categoria) %>%
  summarise(
    nota_media = mean(nota_do_consumidor, na.rm = TRUE),
    total_avaliacoes = n(),
    .groups = "drop"
  )

ggplot(
  tempo_nota_grafico,
  aes(x = tempo_resposta_categoria, y = nota_media)
) +
  geom_col() +
  labs(
    title = "Nota média do consumidor por tempo de resposta",
    x = "Categoria de tempo de resposta",
    y = "Nota média"
  ) +
  ylim(0, 5) +
  theme_minimal()

A relação entre tempo de resposta e nota média ajuda a avaliar se respostas mais rápidas estão associadas a melhores avaliações. Essa análise pode ser útil para empresas interessadas em melhorar o atendimento e reduzir a insatisfação dos consumidores.

4.10 Resolução das reclamações por segmento de mercado

Nesta etapa, são analisados os segmentos de mercado segundo o percentual de reclamações resolvidas. Foram considerados apenas segmentos com pelo menos 100 reclamações avaliadas.

resolucao_segmento <- dados_limpos %>%
  filter(resolvida %in% c("Resolvida", "Não resolvida")) %>%
  group_by(segmento_de_mercado) %>%
  summarise(
    total_avaliadas = n(),
    total_resolvidas = sum(resolvida == "Resolvida"),
    percentual_resolucao = total_resolvidas / total_avaliadas,
    nota_media = mean(nota_do_consumidor, na.rm = TRUE),
    .groups = "drop"
  ) %>%
  filter(total_avaliadas >= 100) %>%
  arrange(percentual_resolucao)

resolucao_segmento %>%
  slice_head(n = 10) %>%
  mutate(
    percentual_resolucao = percent(percentual_resolucao, accuracy = 0.1),
    nota_media = round(nota_media, 2)
  ) %>%
  kable(caption = "Segmentos com menores percentuais de resolução")
Segmentos com menores percentuais de resolução
segmento_de_mercado total_avaliadas total_resolvidas percentual_resolucao nota_media
Viagens, turismo e hospedagem 36542 8573 23.5% 1.88
Fabricantes - eletroeletrônicos, produtos de telefonia e informática 28150 6634 23.6% 1.86
Estabelecimentos de ensino 11800 3119 26.4% 1.93
Montadoras, concessionárias e prestadores de serviços automotivos 4955 1324 26.7% 1.91
Entidades sem fins lucrativos 1103 305 27.7% 2.10
Provedores de conteúdo e outros serviços na internet 50031 14670 29.3% 2.27
Administradoras de consórcios 3720 1247 33.5% 2.16
Empresas de apostas, loterias e promoções comerciais 3178 1095 34.5% 2.13
Bancos, financeiras e administradoras de cartão 384219 134207 34.9% 2.34
Empresas de recuperação de crédito 20319 7509 37.0% 2.43
resolucao_segmento_grafico <- resolucao_segmento %>%
  slice_head(n = 10)

ggplot(
  resolucao_segmento_grafico,
  aes(x = reorder(segmento_de_mercado, percentual_resolucao), y = percentual_resolucao)
) +
  geom_col() +
  coord_flip() +
  scale_y_continuous(labels = percent) +
  labs(
    title = "Segmentos com menores percentuais de resolução",
    subtitle = "Considerando apenas segmentos com pelo menos 100 reclamações avaliadas",
    x = "Segmento de mercado",
    y = "Percentual de resolução"
  ) +
  theme_minimal()

Essa análise combina duas dimensões importantes: volume de reclamações avaliadas e capacidade de resolução. Segmentos com menor percentual de resolução merecem atenção especial, pois podem indicar dificuldades estruturais no atendimento ou na solução dos problemas apresentados pelos consumidores.

4.11 Tabela interativa de empresas

A tabela abaixo apresenta um resumo das empresas com maior volume de reclamações, incluindo total de reclamações, nota média, tempo médio de resposta e percentual de resolução. Foram consideradas apenas empresas com pelo menos 100 reclamações avaliadas.

resumo_empresas <- dados_limpos %>%
  group_by(nome_fantasia, segmento_de_mercado) %>%
  summarise(
    total_reclamacoes = n(),
    total_avaliadas = sum(!is.na(nota_do_consumidor)),
    nota_media = mean(nota_do_consumidor, na.rm = TRUE),
    tempo_medio_resposta = mean(tempo_resposta, na.rm = TRUE),
    percentual_resolucao = mean(resolvida == "Resolvida", na.rm = TRUE),
    .groups = "drop"
  ) %>%
  filter(total_avaliadas >= 100) %>%
  arrange(desc(total_reclamacoes)) %>%
  mutate(
    nota_media = round(nota_media, 2),
    tempo_medio_resposta = round(tempo_medio_resposta, 2),
    percentual_resolucao = percent(percentual_resolucao, accuracy = 0.1)
  )

datatable(
  resumo_empresas,
  caption = "Resumo interativo por empresa",
  options = list(
    pageLength = 10,
    scrollX = TRUE
  )
)

Essa tabela permite explorar as empresas de maneira mais detalhada. Com ela, é possível comparar não apenas o volume de reclamações, mas também a nota média, o tempo de resposta e o percentual de resolução.

4.12 Gráfico interativo: volume de reclamações e nota média por empresa

Para complementar a análise, foi criado um gráfico interativo relacionando o volume de reclamações e a nota média das empresas. Cada ponto representa uma empresa, e o tamanho do ponto indica o total de reclamações.

empresas_interativo <- dados_limpos %>%
  group_by(nome_fantasia, segmento_de_mercado) %>%
  summarise(
    total_reclamacoes = n(),
    total_avaliadas = sum(!is.na(nota_do_consumidor)),
    nota_media = mean(nota_do_consumidor, na.rm = TRUE),
    tempo_medio_resposta = mean(tempo_resposta, na.rm = TRUE),
    percentual_resolucao = mean(resolvida == "Resolvida", na.rm = TRUE),
    .groups = "drop"
  ) %>%
  filter(total_avaliadas >= 100) %>%
  mutate(
    percentual_resolucao = round(percentual_resolucao * 100, 1),
    texto = paste0(
      "Empresa: ", nome_fantasia,
      "<br>Segmento: ", segmento_de_mercado,
      "<br>Total de reclamações: ", total_reclamacoes,
      "<br>Nota média: ", round(nota_media, 2),
      "<br>Tempo médio de resposta: ", round(tempo_medio_resposta, 2),
      "<br>Percentual de resolução: ", percentual_resolucao, "%"
    )
  )

grafico_empresas_interativo <- ggplot(
  empresas_interativo,
  aes(
    x = total_reclamacoes,
    y = nota_media,
    size = total_reclamacoes,
    text = texto
  )
) +
  geom_point(alpha = 0.6) +
  labs(
    title = "Volume de reclamações e nota média por empresa",
    x = "Total de reclamações",
    y = "Nota média do consumidor"
  ) +
  ylim(0, 5) +
  theme_minimal()

ggplotly(grafico_empresas_interativo, tooltip = "text")

O gráfico relaciona o volume de reclamações de cada empresa com a nota média atribuída pelos consumidores. A maior parte das empresas aparece concentrada próxima ao eixo esquerdo, indicando que muitas organizações possuem volume relativamente baixo de reclamações quando comparadas às maiores empresas da base. Ao mesmo tempo, observa-se que a nota média varia bastante entre essas empresas, ficando em geral entre aproximadamente 1,5 e 4.

Entre as empresas com maior número de reclamações, não há uma relação simples e direta entre volume de registros e pior avaliação. Algumas empresas com muitos registros mantêm notas médias relativamente mais altas, enquanto outras apresentam notas mais baixas mesmo com grande volume de reclamações. Isso sugere que o número absoluto de reclamações, isoladamente, não é suficiente para avaliar o desempenho de uma empresa. Para uma interpretação mais completa, é necessário considerar também a satisfação do consumidor, o tempo médio de resposta e o percentual de resolução.

Assim, esse gráfico ajuda a identificar casos prioritários para análise: empresas posicionadas mais à direita e mais abaixo combinam alto volume de reclamações com baixa nota média, podendo indicar maior insatisfação dos consumidores. Já empresas à direita com notas mais altas podem representar organizações muito demandadas, mas com desempenho relativamente melhor na resolução ou condução das reclamações.

4.13 Principais insights da análise exploratória

A análise exploratória mostra que as reclamações registradas no Consumidor.gov.br entre 2024 e 2025 não estão distribuídas de forma homogênea no tempo, no território ou entre os setores econômicos. A base final reúne 3.982.873 reclamações após o pré-processamento, sendo 1.495.226 registros em 2024 e 2.487.647 em 2025. Isso significa que 2025 concentrou 62,5% das reclamações analisadas, indicando crescimento importante do volume de registros no segundo ano da série.

A evolução mensal reforça esse padrão de crescimento. Em 2024, o volume mensal de reclamações oscilou de forma mais moderada, com alguns meses de queda, como junho. Em 2025, por outro lado, observa-se uma elevação mais consistente a partir do primeiro semestre, alcançando os maiores valores entre agosto e novembro. A queda observada em dezembro de 2025 deve ser interpretada com cautela, pois está relacionada à incompletude do arquivo desse mês, e não a uma redução real das reclamações.

Do ponto de vista geográfico, as reclamações se concentram principalmente na região Sudeste, que representa 49,2% dos registros da base. Em seguida aparecem Nordeste, Sul, Centro-Oeste e Norte. Na análise por unidade federativa, São Paulo se destaca com grande distância em relação aos demais estados, seguido por Minas Gerais e Rio de Janeiro. Esse resultado sugere uma relação entre o volume de reclamações e a concentração populacional e econômica dessas regiões. No entanto, como a análise utiliza números absolutos, não é possível afirmar que esses locais tenham maior incidência proporcional de reclamações sem comparar os dados com a população ou o número de consumidores de cada estado.

A análise por segmento de mercado revela uma concentração expressiva no setor de bancos, financeiras e administradoras de cartão. Esse segmento aparece com volume muito superior aos demais, seguido por operadoras de telecomunicações, transporte aéreo, comércio eletrônico, empresas de pagamento eletrônico e outros serviços digitais. Esse padrão também se repete na análise por empresa, em que aparecem com destaque instituições financeiras, empresas de telefonia, plataformas digitais e companhias aéreas. Isso indica que os conflitos registrados na plataforma estão fortemente associados a serviços de uso frequente, contratação recorrente e grande alcance nacional.

A análise dos grupos de problema permite compreender melhor a natureza dessas reclamações. O grupo cobrança / contestação aparece como o principal tipo de conflito, com grande vantagem em relação aos demais. Em seguida aparecem contrato / oferta, atendimento / SAC, vício de qualidade e dados pessoais e privacidade. Esse resultado mostra que uma parte importante das reclamações não está relacionada apenas ao produto ou serviço em si, mas também a cobranças, contestação de valores, dificuldades contratuais e problemas de atendimento.

Outro ponto importante é que o volume de reclamações, isoladamente, não é suficiente para avaliar a qualidade do atendimento das empresas ou segmentos. Por isso, foram analisadas também a nota média do consumidor, o percentual de resolução e o tempo de resposta. A nota média geral da base foi de 2,72, em uma escala de 1 a 5, o que indica uma avaliação intermediária-baixa entre os consumidores que deram nota. Além disso, apenas 32,7% das reclamações foram avaliadas, o que mostra que a interpretação dos resultados de satisfação deve considerar a grande quantidade de registros sem avaliação.

A relação entre tempo de resposta e nota média indica que reclamações respondidas em até 5 dias ou entre 6 e 10 dias apresentam notas médias próximas, mas respostas acima de 10 dias e casos sem resposta apresentam pior desempenho. Em especial, os registros sem resposta possuem nota média bastante inferior e menor percentual de resolução. Esse resultado sugere que a ausência de resposta ou a demora excessiva podem estar associadas a maior insatisfação do consumidor.

De forma geral, os principais achados indicam que os conflitos de consumo analisados se concentram em setores de grande alcance, especialmente serviços financeiros, telecomunicações e plataformas digitais, e que os problemas mais frequentes estão ligados a cobrança, contrato e atendimento. A combinação entre volume de reclamações, nota média, tempo de resposta e resolução permite uma leitura mais completa do fenômeno, evitando conclusões baseadas apenas na quantidade absoluta de registros.

5. Conclusão

Este projeto teve como objetivo analisar as reclamações registradas no Consumidor.gov.br entre 2024 e 2025, buscando identificar padrões relacionados ao volume de registros, à distribuição geográfica, aos segmentos de mercado, às empresas reclamadas, aos tipos de problema, ao tempo de resposta, à avaliação do consumidor e ao resultado das reclamações.

Para responder a esse problema, foram utilizados dados públicos disponibilizados pelo Ministério da Justiça e Segurança Pública. A metodologia adotada envolveu a importação dos arquivos mensais, a união das bases em um único conjunto de dados, a padronização dos nomes das variáveis, a conversão de datas e variáveis numéricas, o tratamento de valores ausentes, a filtragem do período de interesse e a criação de variáveis derivadas. Em seguida, foi realizada uma análise exploratória com tabelas, gráficos estáticos e recursos interativos, permitindo comparar os registros por tempo, território, setor econômico, empresa, tipo de problema e indicadores de atendimento.

A análise mostrou que avaliar apenas o número de reclamações pode levar a conclusões incompletas. Empresas e segmentos com muitos registros podem simplesmente ter maior base de consumidores. Por isso, indicadores como nota média, percentual de resolução e tempo de resposta são fundamentais. A nota média geral foi de 2,72, indicando uma avaliação intermediária-baixa entre os consumidores que avaliaram suas reclamações. Além disso, apenas 32,7% das reclamações possuíam avaliação do consumidor, o que limita a interpretação direta sobre satisfação e resolução.

Os resultados podem ser úteis para diferentes públicos. Para consumidores, a análise ajuda a identificar setores e empresas que concentram mais reclamações e quais tipos de problema aparecem com maior frequência. Para empresas, os resultados podem orientar melhorias em atendimento, cobrança, comunicação contratual e canais de resposta. Para órgãos públicos e entidades de defesa do consumidor, os padrões observados podem auxiliar no monitoramento de setores mais problemáticos e na definição de ações de fiscalização, mediação e educação para o consumo.

Apesar dos resultados encontrados, a análise possui limitações importantes. A base inclui apenas reclamações registradas no Consumidor.gov.br, não abrangendo outros canais, como Procons estaduais, Reclame Aqui, atendimento interno das empresas ou processos judiciais. Além disso, o número absoluto de reclamações não foi ponderado pela população, pelo número de clientes ou pela participação de mercado das empresas. Outra limitação relevante é a grande quantidade de reclamações sem avaliação do consumidor, o que dificulta medir com precisão a satisfação e a resolução efetiva dos conflitos.

Como possibilidades de continuidade, seria interessante cruzar os dados com informações populacionais por estado, indicadores socioeconômicos ou dados sobre participação de mercado das empresas. Também seria possível realizar uma análise textual mais detalhada da variável “Problema”, identificar padrões específicos dentro de cada segmento de mercado ou construir um painel interativo para acompanhar os principais indicadores por empresa, região e tipo de reclamação. Dessa forma, o projeto poderia avançar de uma análise exploratória geral para uma ferramenta mais completa de monitoramento dos conflitos de consumo no Brasil.