O risco de crédito e a inadimplência representam alguns dos maiores desafios para as instituições financeiras. Quando os clientes falham em honrar seus pagamentos, os bancos enfrentam não apenas perdas de receita, mas também a necessidade de aumentar suas reservas de capital. Compreender o perfil do cliente inadimplente é essencial para a saúde do sistema financeiro. O interesse neste problema se justifica pela sua aplicação direta no mundo real: a otimização da concessão de crédito afeta diretamente a sustentabilidade e lucratividade corporativa.
Para abordar este problema, utilizaremos o conjunto de dados “Default of Credit Card Clients”, oriundo de Taiwan e disponibilizado no UCI Machine Learning Repository. A metodologia empregada consistirá em uma análise exploratória de dados (EDA). Realizaremos a importação, limpeza (traduzindo e padronizando variáveis) e estruturação das informações, seguidas de cruzamentos estatísticos e visualizações para identificar padrões demográficos e históricos associados à inadimplência.
A técnica envolverá a manipulação de dados utilizando o ecossistema
tidyverse no R. Iremos recategorizar variáveis numéricas
não normalizadas (como os códigos de escolaridade e estado civil para
texto descritivo), criar novas variáveis de interesse e aplicar
estatística descritiva. Adotaremos visualizações dinâmicas e interativas
para permitir uma exploração aprofundada dos resultados, indo além da
simples plotagem estática.
Esta análise ajudará potenciais clientes — como gerentes de risco, analistas de crédito e instituições financeiras — a tomarem decisões embasadas. Ao identificar quais características (ex: idade, histórico de pagamentos, limite de crédito) têm maior correlação com a falta de pagamento, os clientes poderão ajustar seus algoritmos de aprovação, refinar políticas de crédito e intervir preventivamente com perfis de alto risco.
Abaixo, carregamos as bibliotecas necessárias para replicar esta análise. O carregamento prévio garante que o leitor tenha os requisitos necessários para a execução do código.
dplyr e ggplot2)..xls.library(tidyverse)
library(readxl)
library(DT)
library(plotly)
Os dados utilizados neste projeto foram extraídos do repositório de Machine Learning da Universidade da Califórnia, Irvine (UCI). O conjunto de dados original pode ser acessado através deste hiperlink para o UCI Machine Learning Repository. A escolha desta base pública garante a reprodutibilidade da análise.
O dataset Default of Credit Card Clients foi coletado com o propósito de avaliar a precisão de algoritmos preditivos de inadimplência em Taiwan. Os dados correspondem a medições feitas entre abril e setembro de 2005. O arquivo original possui 30.000 instâncias e 24 atributos.
Algumas peculiaridades importantes da base original: * Falta
de Normalização: As variáveis categóricas como “Sexo”,
“Educação” e “Estado Civil” estão codificadas em números inteiros, sem
significado intuitivo imediato. * Valores Não
Documentados: A variável “Educação” apresenta categorias
numéricas (0, 5, 6) que não estão descritas no dicionário de dados
oficial. O mesmo ocorre com a variável “Estado Civil” (valor 0). *
Nomenclatura: A primeira coluna é um identificador
(ID) que não possui valor preditivo. A variável alvo se
chama default payment next month, um nome longo e com
espaços que dificulta a manipulação no R.
A limpeza dos dados teve como foco principal a tradução das variáveis para o português, a recategorização de fatores numéricos para texto descritivo e o tratamento das anomalias encontradas.
# Importando o dataset do arquivo Excel armazenado na pasta 'dados'
df_raw <- read_excel("dados/default_of_credit_card_clients.xls", skip = 1)
# Limpeza e transformação dos dados
df_clean <- df_raw %>%
# Removendo a coluna de ID
select(-ID) %>%
# Renomeando colunas para facilitar o uso no R e traduzindo
rename(
Limite_Credito = LIMIT_BAL,
Sexo = SEX,
Escolaridade = EDUCATION,
Estado_Civil = MARRIAGE,
Idade = AGE,
Inadimplente = `default payment next month`
) %>%
# Recategorizando e traduzindo as variáveis numéricas
mutate(
Sexo = case_when(
Sexo == 1 ~ "Masculino",
Sexo == 2 ~ "Feminino"
),
Escolaridade = case_when(
Escolaridade == 1 ~ "Pós-graduação",
Escolaridade == 2 ~ "Universidade",
Escolaridade == 3 ~ "Ensino Médio",
Escolaridade %in% c(0, 4, 5, 6) ~ "Outros",
TRUE ~ "Desconhecido"
),
Estado_Civil = case_when(
Estado_Civil == 1 ~ "Casado",
Estado_Civil == 2 ~ "Solteiro",
Estado_Civil %in% c(0, 3) ~ "Outros"
),
Inadimplente = as.factor(ifelse(Inadimplente == 1, "Sim", "Não"))
)
Após o processo de limpeza e estruturação, o formato do conjunto de
dados se apresenta de forma muito mais legível. Abaixo, apresentamos os
dados limpos utilizando a biblioteca DT, que permite
interagir de forma condensada com a tabela, evitando a impressão de
milhares de linhas no relatório.
# Gerando tabela interativa com limite de visualização
datatable(head(df_clean, 200),
options = list(pageLength = 5, scrollX = TRUE),
caption = 'Amostra dos 200 primeiros registros do dataset limpo.')
Após a limpeza, o dataset conta com clientes que possuem idades
variando entre 21 e 79 anos, com um
limite de crédito médio de R$ 167.484,3. A variável
resposta Inadimplente demonstra que a maior parte dos
clientes no histórico honrou seus compromissos, sendo fundamental
entender o perfil da minoria que apresenta a classe “Sim” para mitigar
riscos de crédito no futuro.
A análise exploratória busca transformar os registros isolados em informações úteis para a tomada de decisão. Nesta etapa, investigaremos a relação entre o perfil demográfico dos clientes, seus limites de crédito e a taxa de inadimplência, utilizando visualizações interativas para facilitar a exploração dos dados.
Para entender se a idade e o sexo influenciam na falta de pagamento, criamos uma nova métrica agregando a taxa percentual de inadimplentes por idade.
# Calculando a taxa de inadimplência por idade e sexo
df_idade_sexo <- df_clean %>%
group_by(Idade, Sexo) %>%
summarise(
Total = n(),
Inadimplentes = sum(Inadimplente == "Sim"),
Taxa_Inadimplencia = (Inadimplentes / Total) * 100,
.groups = 'drop'
) %>%
filter(Total > 30) # Filtrando idades com poucas amostras para evitar distorções estatísticas
# Criando o gráfico estático com ggplot2
g1 <- ggplot(df_idade_sexo, aes(x = Idade, y = Taxa_Inadimplencia, color = Sexo)) +
geom_line(size = 1) +
geom_point(aes(text = paste("Idade:", Idade, "<br>Taxa:", round(Taxa_Inadimplencia, 2), "%<br>Total Clientes:", Total))) +
scale_color_manual(values = c("Masculino" = "#2C3E50", "Feminino" = "#E74C3C")) +
labs(
title = "Taxa de Inadimplência por Idade e Sexo",
x = "Idade",
y = "Taxa de Inadimplência (%)"
) +
theme_minimal()
# Transformando em gráfico interativo
ggplotly(g1, tooltip = "text")
Insight: O gráfico interativo revela variações nas taxas de inadimplência ao longo da vida dos clientes. Passando o mouse sobre as linhas, podemos observar picos em determinadas faixas etárias (especialmente entre os clientes mais jovens), o que permite que a instituição direcione campanhas de educação financeira ou ajuste limites de forma preventiva.
Outra hipótese importante é avaliar se o limite concedido pelo banco tem relação com a probabilidade de calote do cliente. Para isso, comparamos o limite médio disponibilizado para os clientes que honraram seus pagamentos com o daqueles que ficaram inadimplentes.
# Calculando o limite de crédito médio para cada grupo
df_limite <- df_clean %>%
group_by(Inadimplente) %>%
summarise(
Limite_Medio = mean(Limite_Credito),
.groups = 'drop'
)
# Criando o gráfico de barras
g2 <- ggplot(df_limite, aes(x = Inadimplente, y = Limite_Medio, fill = Inadimplente)) +
geom_col(width = 0.6, alpha = 0.8) +
scale_fill_manual(values = c("Não" = "#27AE60", "Sim" = "#C0392B")) +
labs(
title = "Limite de Crédito Médio por Status de Pagamento",
x = "Inadimplente (Próximo Mês)",
y = "Limite de Crédito Médio (NT$)"
) +
theme_minimal() +
theme(legend.position = "none")
# Transformando em gráfico interativo
ggplotly(g2, tooltip = c("x", "y"))
Insight: O gráfico demonstra de forma direta que clientes adimplentes (“Não”) possuem, em média, um limite de crédito significativamente maior do que os clientes inadimplentes (“Sim”). Essa diferença indica que a instituição financeira já adota políticas de restrição de crédito, liberando valores menores para perfis que apresentam maior probabilidade de calote.
Por fim, agrupamos os dados para analisar o volume total de clientes e a taxa de inadimplência com base no grau de escolaridade.
# Criando tabela resumo
df_escolaridade <- df_clean %>%
group_by(Escolaridade) %>%
summarise(
Quantidade_Clientes = n(),
Volume_Credito_Medio = round(mean(Limite_Credito), 2),
Percentual_Inadimplencia = round((sum(Inadimplente == "Sim") / Quantidade_Clientes) * 100, 2)
) %>%
arrange(desc(Percentual_Inadimplencia))
# Exibindo como tabela interativa
datatable(df_escolaridade,
options = list(dom = 't'),
colnames = c('Escolaridade', 'Qtd Clientes', 'Limite Médio (NT$)', 'Inadimplência (%)'),
caption = 'Resumo do Perfil Educacional e Risco de Crédito')
Insight: A tabela permite facilitar comparações importantes entre os níveis educacionais. Observa-se uma correlação direta: clientes com nível de Pós-graduação possuem os maiores limites de crédito médios e as menores taxas de inadimplência, enquanto categorias de menor escolaridade apresentam maior risco percentual para a instituição.
O principal problema investigado neste projeto foi a identificação de padrões que influenciam o risco de crédito e a inadimplência em cartões de crédito. Esta análise é essencial para mitigar perdas financeiras em instituições bancárias.
A abordagem adotada consistiu na importação, estruturação e análise
exploratória do dataset Default of Credit Card Clients. A
metodologia envolveu a limpeza e tradução de variáveis com o pacote
tidyverse, seguida da aplicação de estatística descritiva e
criação de novas métricas (como a taxa percentual de inadimplência).
Adotamos os pacotes plotly e DT para
desenvolver visualizações interativas.
As análises revelaram insights significativos: * Há uma variação notável na taxa de inadimplência de acordo com a faixa etária, com picos perceptíveis em idades específicas. * A distribuição do limite de crédito está inversamente relacionada à inadimplência: clientes com menores limites tendem a apresentar maior risco de calote. * O grau de escolaridade mostrou forte correlação com o comportamento financeiro. Clientes com nível de pós-graduação possuem os menores índices de inadimplência (19.23%) em comparação com aqueles de ensino médio (25.16%).
As descobertas apresentadas têm implicações diretas para a gestão de risco. Instituições financeiras podem utilizar esses perfis (como a correlação entre baixa escolaridade e maior risco) para ajustar calibragens de modelos de aprovação (score de crédito), aplicar limites mais conservadores para perfis de alto risco e desenhar produtos de crédito mais aderentes à realidade de cada faixa etária.
Apesar dos resultados consistentes, a análise possui limitações inerentes aos dados. A base refere-se exclusivamente a clientes de Taiwan no ano de 2005, o que significa que os padrões comportamentais e econômicos podem não ser diretamente transponíveis para outros países ou cenários macroeconômicos atuais. Além disso, as categorias não documentadas nas variáveis originais exigiram o agrupamento na classe “Outros”, o que pode ocultar nuances importantes do perfil do cliente. Para análises futuras, seria ideal incorporar dados socioeconômicos mais recentes e construir modelos preditivos de machine learning.