📊 Introdução ao Modelo de Risco de Crédito¶
Um Guia Didático Completo para Iniciantes¶
🎯 O que você vai aprender neste capítulo?¶
Este é o primeiro capítulo do curso de Modelagem de Risco de Crédito, onde você será introduzido aos conceitos fundamentais que sustentam toda a indústria de crédito e empréstimos. Este notebook foi desenhado para ser autoexplicativo e didático, ideal para estudantes e profissionais que estão começando na área.
📋 Conteúdo Programático:¶
🎯 Conceitos Fundamentais - O que é risco de crédito e por que modelá-lo?
📊 Carregamento e Exploração de Dados - Primeiro contato com dados reais
🔍 Análise Exploratória de Dados (EDA) - Entendendo padrões e distribuições
📈 Visualização de Dados - Gráficos para insights visuais
🎯 Análise do Target - Compreendendo a variável de interesse
📊 Métricas de Avaliação - AUC, KS e outras métricas essenciais
🚀 Modelo Simples de Demonstração - Seu primeiro modelo de crédito
💡 Interpretação de Resultados - O que os números significam?
🎯 Aplicações Práticas - Como usar modelos no mundo real
🎓 Objetivos de Aprendizagem:¶
Ao final deste notebook, você será capaz de:
✅ Compreender o conceito de risco de crédito e sua importância
✅ Realizar análise exploratória de dados de crédito
✅ Entender e calcular métricas fundamentais (AUC, Gini, KS)
✅ Construir e avaliar um modelo simples de classificação
✅ Interpretar resultados e tomar decisões baseadas em dados
✅ Aplicar conceitos em cenários práticos de negócio
💡 Por que isso é importante?¶
"O risco de crédito é um dos pilares fundamentais do sistema financeiro. Instituições que conseguem modelar e gerenciar bem esse risco têm vantagem competitiva significativa, podendo oferecer melhores taxas, reduzir perdas e crescer de forma sustentável."
Impacto no mundo real:
🏦 Bancos usam modelos de risco para aprovar empréstimos
💳 Empresas de cartão de crédito definem limites baseados em risco
🏠 Financeiras avaliam risco antes de financiar imóveis
📊 Reguladores exigem modelos robustos (Basel III)
📖 Estrutura Pedagógica¶
Cada seção seguirá o formato:
🎯 O que vamos fazer? - Objetivo claro da seção
❓ Por que fazemos isso? - Justificativa técnica e de negócio
🔧 Como fazemos? - Implementação prática com código
📊 Resultado obtido - Outputs e visualizações
💡 O que isso significa? - Interpretação detalhada dos resultados
🎯 Decisão tomada - Próximos passos baseados nos resultados
Autor: Karel Montero
Data: 2025
Versão: 1.0 - Didática
🎯 SEÇÃO 1: CONCEITOS FUNDAMENTAIS¶
📚 O que é Risco de Crédito?¶
Risco de crédito é a probabilidade de um tomador de empréstimo não cumprir com suas obrigações de pagamento, resultando em perda financeira para o credor.
Tipos de Risco de Crédito:¶
Default Risk (Risco de Inadimplência)
Probabilidade do devedor não pagar o empréstimo
É o foco principal deste curso
Credit Spread Risk (Risco de Spread)
Risco de mudança na percepção de risco do mercado
Afeta o preço de títulos de dívida
Downgrade Risk (Risco de Rebaixamento)
Risco de deterioração da qualidade de crédito
Pode afetar custos de captação
Por que Modelar Risco de Crédito?¶
Para a Instituição Financeira:
💰 Reduzir perdas - Identificar clientes de alto risco antes de emprestar
📊 Otimizar pricing - Cobrar taxas adequadas ao nível de risco
🎯 Melhorar decisões - Automatizar aprovações com critérios objetivos
📈 Crescer com segurança - Expandir carteira mantendo qualidade
⚖️ Compliance regulatório - Atender exigências do Banco Central (Basel III)
Para o Cliente:
✅ Decisões mais rápidas - Aprovação automatizada em minutos
💳 Acesso a crédito - Modelos justos podem aprovar mais pessoas
💰 Melhores taxas - Clientes de baixo risco pagam menos
O Problema de Classificação:¶
Modelagem de risco de crédito é um problema de classificação binária:
Classe 0: Cliente NÃO dará default (bom pagador) - Classe majoritária
Classe 1: Cliente DARÁ default (mau pagador) - Classe minoritária
Desafio: As classes são desbalanceadas - tipicamente apenas 3-10% dos clientes dão default.
📚 Configuração do Ambiente¶
🎯 O que vamos fazer?¶
Vamos importar todas as bibliotecas necessárias para nossa análise e configurar o ambiente de trabalho.
❓ Por que fazemos isso?¶
Antes de começar qualquer análise, precisamos preparar nosso ambiente com as ferramentas adequadas. Cada biblioteca tem um propósito específico:
pandas 🐼 - Manipulação e análise de dados tabulares
numpy 🔢 - Operações matemáticas e arrays numéricos
matplotlib 📊 - Criação de gráficos e visualizações básicas
seaborn 🎨 - Visualizações estatísticas mais sofisticadas
sklearn 🤖 - Algoritmos de machine learning e métricas de avaliação
🔧 Como fazemos?¶
✅ Fonte Noto Sans configurada! ✅ Bibliotecas importadas com sucesso! 📚 Ambiente configurado para análise de risco de crédito
📊 SEÇÃO 2: Carregamento e Primeira Exploração dos Dados¶
🎯 O que vamos fazer?¶
Vamos carregar o dataset de risco de crédito e fazer uma primeira exploração para entender sua estrutura, tamanho e tipos de variáveis.
❓ Por que fazemos isso?¶
Antes de qualquer análise ou modelagem, precisamos:
Verificar se os dados foram carregados corretamente
Entender a estrutura do dataset (quantas linhas e colunas)
Identificar os tipos de variáveis (numéricas, categóricas, datas)
Conhecer as variáveis disponíveis para modelagem
Esta é a primeira etapa obrigatória de qualquer projeto de ciência de dados!
🔧 Como fazemos?¶
📂 Carregando dados de risco de crédito... ✅ Dados carregados com sucesso! 📊 Dimensões do dataset: 1,200,000 linhas × 14 colunas 💾 Memória utilizada: 526.0 MB 📋 Colunas disponíveis no dataset: ============================================================ 1. idade 2. genero 3. estado_civil 4. renda 5. valor_emprestimo 6. prazo_emprestimo 7. score_credito 8. historico_inadimplencia 9. tempo_emprego 10. tipo_emprego 11. regiao 12. data_emprestimo 13. prob_default 14. default 📊 Tipos de dados por coluna: ============================================================ idade → float64 genero → object estado_civil → object renda → object valor_emprestimo → object prazo_emprestimo → int64 score_credito → float64 historico_inadimplencia → int64 tempo_emprego → float64 tipo_emprego → object regiao → object data_emprestimo → object prob_default → float64 default → int64 👀 Primeiras 3 linhas do dataset: ============================================================ idade genero estado_civil renda valor_emprestimo \ 0 38.66 M divorciado 3546.0902855483905 5860.251362574305 1 22.52 F divorciado 1999.1507983385166 1076.3851406682254 2 44.01 M solteiro 2506.1863772417305 1938.8563208086252 prazo_emprestimo score_credito historico_inadimplencia tempo_emprego \ 0 12 880.90 2 47.47 1 48 852.73 3 25.00 2 24 877.59 2 1.57 tipo_emprego regiao data_emprestimo prob_default default 0 autonomo sudeste 2022-08-25 5.61e-03 0 1 autonomo centro-oeste 2023-05-18 2.41e-03 0 2 publico sul 2022-11-12 8.67e-04 0
💡 O que isso significa?¶
Interpretação dos Resultados:¶
Tamanho do Dataset:
Temos 1.200.000 registros (mais de 1 milhão de empréstimos!)
Este é um dataset de tamanho real, similar ao que encontramos em bancos
Volume grande é importante para treinar modelos robustos
Variáveis Disponíveis (14 colunas):
Variáveis Demográficas:
idade- Idade do cliente (importante: risco varia com idade)estado_civil- Casado, solteiro, etc. (afeta estabilidade financeira)genero- género do clienteregiao- Região do cliente (Norte, Sul, Nordeste)
Variáveis Financeiras:
renda- Renda mensal do cliente (capacidade de pagamento)score_credito- Score de crédito (histórico de pagamentos)tempo_emprego- Anos no emprego atual (estabilidade)tipo_emprego- Tipo do emprego atual (CLT, Autónomo)
Variáveis do Empréstimo:
valor_emprestimo- Quanto foi emprestadoprazo_emprestimo- Prazo em meses para pagarhistórico_inadimplencia- Número de vezes que o cliente já ficou inadimplente
Variáveis Temporais:
data_emprestimo- Quando o empréstimo foi feito
Variável Target (nosso objetivo):
default- Se o cliente deu calote (0 = não, 1 = sim) ⭐ ESTA É A VARIÁVEL QUE QUEREMOS PREVER!prob_default- Probabilidade de default.
🎯 Decisão tomada:¶
✅ Dados carregados com sucesso
✅ Temos variáveis demográficas, financeiras e do empréstimo
✅ Próximo passo: Analisar qualidade e distribuição dos dados
🔍 SEÇÃO 3: Análise Exploratória de Dados (EDA)¶
🎯 O que vamos fazer?¶
Vamos examinar a qualidade dos dados, identificar valores ausentes, entender distribuições e detectar possíveis problemas.
❓ Por que fazemos isso?¶
A Análise Exploratória de Dados (EDA) é crucial porque:
Identifica problemas de qualidade - Valores ausentes, duplicados, outliers
Revela padrões nos dados - Distribuições, tendências, anomalias
Informa decisões de pré-processamento - Como tratar cada variável
Evita surpresas na modelagem - Problemas descobertos cedo são mais fáceis de resolver
"Garbage in, garbage out" - Se os dados de entrada são ruins, o modelo será ruim!
🔧 Como fazemos?¶
🔍 ANÁLISE DE QUALIDADE DOS DADOS
======================================================================
📊 1. VALORES AUSENTES (Missing Values):
------------------------------------------------------------
Variável Valores Ausentes Percentual
------------------------------------------------------------
idade 0 0.0%
genero 5,848 0.5%
estado_civil 11,938 1.0%
renda 141,765 11.8%
valor_emprestimo 4,816 0.4%
prazo_emprestimo 0 0.0%
score_credito 29,891 2.5%
historico_inadimplencia 0 0.0%
tempo_emprego 120,510 10.0%
tipo_emprego 0 0.0%
regiao 0 0.0%
data_emprestimo 0 0.0%
prob_default 0 0.0%
default 0 0.0%
------------------------------------------------------------
TOTAL 314,768 1.9%
📊 2. REGISTROS DUPLICADOS:
------------------------------------------------------------
Registros duplicados: 0 (0.00%)
📊 3. ESTATÍSTICAS DESCRITIVAS (Variáveis Numéricas):
------------------------------------------------------------
count mean std min 25% 50% \
idade 1.20e+06 35.52 11.72 -1.00 26.89 34.99
renda 1.06e+06 3627.47 2954.93 80.00 1985.22 2981.26
valor_emprestimo 1.20e+06 4110.86 3420.25 203.29 1817.76 3163.81
prazo_emprestimo 1.20e+06 32.53 68.47 -360.00 12.00 24.00
score_credito 1.17e+06 699.49 143.74 100.00 599.37 724.32
historico_inadimplencia 1.20e+06 0.80 0.90 0.00 0.00 1.00
tempo_emprego 1.08e+06 24.01 24.01 0.00 6.91 16.63
prob_default 1.20e+06 0.03 0.07 0.00 0.00 0.01
default 1.20e+06 0.03 0.17 0.00 0.00 0.00
75% max
idade 43.14 121.00
renda 4475.71 268656.83
valor_emprestimo 5306.28 80000.00
prazo_emprestimo 36.00 7200.00
score_credito 819.93 1000.00
historico_inadimplencia 1.00 8.00
tempo_emprego 33.28 322.53
prob_default 0.02 0.96
default 0.00 1.00
📊 4. DISTRIBUIÇÃO DO TARGET (default):
------------------------------------------------------------
Não Default (Bom) → 1,164,501 registros ( 97.0%)
Default (Mau) → 35,499 registros ( 3.0%)
💡 O que isso significa?¶
Interpretação da Análise de Qualidade:¶
1. Valores Ausentes:
⚠️ 11.3.0% de dados ausentes em
renda- Problema significativo!⚠️ 10% de dados ausentes em
tempo_emprego- Problema significativo!Entre 1-5% de ausentes nas outras variáveis - Aceitável, mas precisa tratamento
Decisão: Precisaremos imputar ou remover valores ausentes antes da modelagem
2. Registros Duplicados:
Sem registros duplicados - Isso é ótimo!!
Decisão: Nada a fazer neste sentido
3. Distribuição do Target:
97% Não-Default vs 3% Default
DESBALANCEAMENTO DE CLASSES! 🚨
Isso é normal em risco de crédito (maioria dos clientes paga)
Desafio: Modelo pode tender a prever sempre "não default"
Decisão: Precisaremos usar técnicas especiais (balanceamento, métricas adequadas)
4. Valores Problemáticos:
Valores negativos ou zero em variáveis que não deveriam ter
Idades = 0, rendas negativas, scores negativos
Interpretação: Podem ser:
Erros de digitação
Valores ausentes codificados como 0 ou -999
Dados sintéticos com ruído
Decisão: Tratar como valores ausentes ou outliers
Principais Insights:¶
✅ Dataset grande (1.2M registros) - Ótimo para modelagem
⚠️ Classes desbalanceadas - Precisaremos de técnicas especiais
⚠️ Valores ausentes e problemáticos - Requer limpeza✅ Boa variedade de features - Demográficas, financeiras, empréstimo
🎯 Decisão tomada:¶
Antes de modelar, precisaremos:
Tratar valores ausentes
Remover/tratar valores problemáticos
Considerar técnicas de balanceamento
Usar métricas apropriadas para classes desbalanceadas
📈 SEÇÃO 4: Visualização de Dados¶
🎯 O que vamos fazer?¶
Vamos criar visualizações para entender melhor as distribuições das variáveis numéricas e identificar outliers visualmente.
❓ Por que fazemos isso?¶
Visualizações são essenciais porque:
Revelam padrões que números sozinhos não mostram
Identificam outliers de forma intuitiva
Mostram assimetrias nas distribuições
Facilitam comunicação com stakeholders não-técnicos
"Uma imagem vale mais que mil palavras (ou mil linhas de estatísticas!)"
🔧 Como fazemos?¶
📊 Criando histogramas das variáveis numéricas...
✅ Histogramas criados com sucesso!
📊 Criando boxplots para identificação de outliers...
✅ Boxplots criados com sucesso!
💡 O que isso significa?¶
Interpretação dos Boxplots:¶
O que são Boxplots?
Caixa (box): Representa 50% dos dados centrais (Q1 a Q3)
Linha vermelha: Mediana (valor do meio)
Whiskers (bigodes): Extensão até 1.5× IQR
Pontos vermelhos: Outliers (valores extremos)
Observações por Variável:
📊 Todas as variáveis apresentam outliers (pontos pretos)
🔴 Outliers extremos em renda e valor_emprestimo
⚠️ Valores negativos visíveis em várias variáveis
Decisão: Precisaremos de tratamento robusto de outliers no próximo notebook!
🎯 SEÇÃO 5: Análise do Target (Variável de Interesse)¶
🎯 O que vamos fazer?¶
Vamos analisar em profundidade a variável default (nossa variável target) e entender como ela se relaciona com outras variáveis, especialmente a idade.
❓ Por que fazemos isso?¶
A variável target é a mais importante do dataset porque:
É o que queremos prever
Sua distribuição afeta a escolha do modelo
Seu desbalanceamento influencia métricas e técnicas
Entender sua relação com outras variáveis ajuda na feature engineering
Perguntas que queremos responder:
Qual a taxa de default geral?
Como o default varia por faixa etária?
Quais grupos têm maior risco?
🔧 Como fazemos?¶
🎯 ANÁLISE DA VARIÁVEL TARGET (default) ====================================================================== 📊 1. ESTATÍSTICAS GERAIS: ------------------------------------------------------------ Total de amostras: 1,200,000 Defaults (Classe 1): 35,499 ( 3.0%) Não-defaults (Classe 0): 1,164,501 ( 97.0%) 📊 2. CRIANDO FAIXAS ETÁRIAS PARA ANÁLISE: ------------------------------------------------------------ ✅ Faixas etárias criadas: 18-25: Jovens adultos 26-35: Adultos jovens 36-45: Adultos 46-55: Adultos maduros 56-65: Pré-aposentadoria 65+: Idosos 📊 3. TAXA DE DEFAULT POR FAIXA ETÁRIA: ---------------------------------------- Faixa Etária Total Clientes Defaults Taxa Default ------------------------------------------------------------ 18-25 242,550 8,221 3.4% 26-35 356,542 10,153 2.8% 36-45 355,600 10,089 2.8% 46-55 184,320 5,289 2.9% 56-65 49,874 1,389 2.8% 65+ 9,953 326 3.3% 📊 4. INSIGHTS PRINCIPAIS: ---------------------------------------- 🔴 Faixa de MAIOR risco: 18-25 (3.4%) 🟢 Faixa de MENOR risco: 56-65 (2.8%) 📊 Diferença de risco: 0.6%
📊 Criando visualização da taxa de default por faixa etária...
✅ Visualização criada com sucesso!
💡 O que isso significa?¶
Interpretação da Análise do Target:¶
Principais Descobertas:
Desbalanceamento Confirmado:
97% não dão default vs 3% dão default
Razão de ~32:1 (muito desbalanceado!)
Implicação: Modelos simples podem ter 97% de acurácia apenas prevendo "não default" sempre!
Variação por Idade:
Jovens (18-25) têm MAIOR risco (~10.3%)
Adultos (26-65) têm risco similar (~7.2-7.3%)
Diferença de 3 pontos percentuais entre grupos
Insights de Negócio:
💡 Jovens podem precisar de análise mais rigorosa
💡 Ou podem receber taxas de juros mais altas
💡 Idade é uma feature relevante para o modelo
Decisões Estratégicas:
✅ Idade deve ser incluída no modelo
✅ Podemos criar features derivadas (ex: "é_jovem")
✅ Considerar modelos segmentados por faixa etária
📊 SEÇÃO 6: Métricas de Avaliação de Modelos¶
🎯 O que vamos fazer?¶
Vamos criar uma função para calcular as principais métricas usadas em modelos de risco de crédito.
❓ Por que fazemos isso?¶
Em problemas de classificação, especialmente com classes desbalanceadas, a acurácia não é suficiente!
Exemplo: Se 97% dos clientes não dão default, um modelo que sempre prevê "não default" teria 97% de acurácia, mas seria inútil!
Por isso, usamos métricas especializadas:
📊 Métricas Principais:¶
1. AUC (Area Under the ROC Curve)
Mede a capacidade do modelo de separar as classes
Varia de 0.5 (aleatório) a 1.0 (perfeito)
Interpretação:
AUC < 0.6: Modelo ruim
AUC 0.6-0.7: Modelo fraco
AUC 0.7-0.8: Modelo aceitável
AUC 0.8-0.9: Modelo bom
AUC > 0.9: Modelo excelente
2. Gini Coefficient
Derivado do AUC: Gini = 2 × AUC - 1
Varia de 0 (aleatório) a 1 (perfeito)
Muito usado no mercado financeiro
Interpretação:
Gini > 0.4: Modelo aceitável
Gini > 0.6: Modelo bom
3. KS (Kolmogorov-Smirnov)
Mede a máxima separação entre distribuições
Varia de 0 a 1
Interpretação:
KS < 0.2: Modelo ruim
KS 0.2-0.3: Modelo razoável
KS > 0.3: Modelo bom
4. Precision (Precisão)
Dos que o modelo previu como default, quantos realmente são?
Importante quando: Falsos positivos são custosos
Fórmula: TP / (TP + FP)
5. Recall (Sensibilidade)
Dos que realmente são default, quantos o modelo identificou?
Importante quando: Falsos negativos são custosos
Fórmula: TP / (TP + FN)
6. F1-Score
Média harmônica entre Precision e Recall
Balanceia as duas métricas
Fórmula: 2 × (Precision × Recall) / (Precision + Recall)
🎯 Trade-off Precision vs Recall:¶
⚖️ Alta Precision → Menos falsos positivos → Rejeita menos clientes bons
⚖️ Alto Recall → Menos falsos negativos → Captura mais defaults
No risco de crédito:
Falso Negativo (FN) = Emprestar para quem vai dar default → Perda financeira!
Falso Positivo (FP) = Rejeitar quem pagaria → Perda de oportunidade
Geralmente, FN é mais custoso → Priorizamos Recall!
🔧 Como fazemos?¶
✅ Função de métricas criada com sucesso! 📊 Calcula 6 métricas essenciais para avaliação de modelos de crédito
🚀 SEÇÃO 7: Modelo Simples de Demonstração¶
🎯 O que vamos fazer?¶
Vamos construir um modelo simples de Regressão Logística para demonstrar o processo completo de modelagem de risco de crédito.
❓ Por que fazemos isso?¶
Este é um modelo de demonstração para:
Ilustrar o fluxo completo de modelagem
Estabelecer um baseline (linha de base) para comparação
Aplicar as métricas que aprendemos
Entender interpretação de resultados
Por que Regressão Logística?
✅ Simples e interpretável
✅ Rápida de treinar
✅ Boa para estabelecer baseline
✅ Amplamente usada na indústria
✅ Coeficientes têm interpretação clara
⚠️ Importante: Este modelo NÃO está otimizado! Estamos usando dados brutos (com valores ausentes e outliers) apenas para demonstração. Nos próximos notebooks, faremos a preparação adequada dos dados.
🔧 Como fazemos?¶
Passos da Modelagem:¶
Selecionar features (variáveis preditoras)
Preparar dados (remover valores ausentes)
Dividir em treino e teste
Treinar o modelo
Fazer predições
Avaliar com nossas métricas
🚀 CONSTRUINDO MODELO DE DEMONSTRAÇÃO ====================================================================== 📊 PASSO 1: Selecionando features... ---------------------------------------- Features selecionadas: 6 1. idade 2. renda 3. score_credito 4. tempo_emprego 5. valor_emprestimo 6. prazo_emprestimo ✅ Dados iniciais: X=(1200000, 6), y=(1200000,) 🧹 PASSO 2: Limpando dados... ---------------------------------------- Valores NaN no target (y): 0 Valores NaN nas features (X): 296,982 ✅ Após limpeza: X=(928323, 6), y=(928323,) 📉 Registros removidos: 271,677 ✂️ PASSO 3: Dividindo dados em treino e teste... ---------------------------------------- 📊 Conjunto de TREINO: 742,658 amostras - Defaults: 21,924 (3.0%) - Não-defaults: 720,734 (97.0%) 📊 Conjunto de TESTE: 185,665 amostras - Defaults: 5,481 (3.0%) - Não-defaults: 180,184 (97.0%) 🤖 PASSO 4: Treinando modelo de Regressão Logística... ---------------------------------------- ✅ Modelo treinado com sucesso! 📊 Coeficientes do modelo: idade: -0.008651120298335731 renda: -0.0006430826043734994 score_credito: -0.008768950131154021 tempo_emprego: -0.0011102144788258572 valor_emprestimo: 0.00038232083969972117 prazo_emprestimo: -0.00013003686064424677 🔮 PASSO 5: Fazendo predições no conjunto de teste... ---------------------------------------- ✅ Predições realizadas para 185,665 amostras 📊 Probabilidade média: 0.0293 📊 PASSO 6: Avaliando o modelo... ---------------------------------------- 🎯 RESULTADOS DO MODELO: ================================================== AUC: 0.8684 Gini: 0.7368 KS: 0.5872 Precision: 0.0935 Recall: 0.0042 F1-Score: 0.0080 ==================================================
💡 O que isso significa?¶
Interpretação dos Resultados do Modelo:¶
Análise dos Coeficientes:
Coeficientes positivos → Aumentam a probabilidade de default
Coeficientes negativos → Diminuem a probabilidade de default
Interpretação típica (depende dos dados):
score_creditonegativo → Maior score = menor risco ✅ (faz sentido!)rendanegativo → Maior renda = menor risco ✅ (faz sentido!)valor_emprestimopositivo → Maior empréstimo = maior risco ✅ (faz sentido!)
Análise das Métricas:
Vamos interpretar os valores obtidos:
1. AUC (0.87):
Modelo muito melhor que o aleatório (0.5)
Performance boa, mas esperado com dados brutos
Indica que há sinal nos dados, mas precisamos melhorar
2. Gini (0.74):
Valor excelente (ideal > 0.4)
Confirma que o modelo tem poder discriminativo limitado
Melhorias virão com preparação adequada dos dados
3. KS (0.59):
Valor excelente (ideal > 0.2)
Separação entre classes é fraca
Esperado para modelo baseline - pode melhorar com otimização
4. Precision e Recall (0.09 (Precision) / 0.004 (Recall)):
Modelo tem baixa precisão mas detecta alguns defaults
Isso acontece porque:
Classes muito desbalanceadas (97% vs 3%)
Threshold padrão (0.5) é muito alto
Modelo "joga seguro" prevendo a classe majoritária
Solução: Ajustar threshold ou usar técnicas de balanceamento
Por que o modelo está "ruim"?¶
Motivos esperados:
❌ Dados não tratados - Valores ausentes, outliers, dados brutos
❌ Sem feature engineering - Não criamos features derivadas
❌ Sem balanceamento - Classes muito desbalanceadas
❌ Threshold não otimizado - Usando 0.5 padrão
❌ Sem normalização - Escalas diferentes entre variáveis
Isto é NORMAL e ESPERADO! 🎯
Este é apenas um modelo baseline para demonstração. Nos próximos notebooks, vamos:
✅ Limpar e preparar os dados adequadamente
✅ Criar features engenheiradas
✅ Balancear as classes
✅ Otimizar hiperparâmetros
✅ Testar modelos mais sofisticados
📈 Visualização dos Resultados¶
🎯 O que vamos fazer?¶
Vamos criar visualizações para entender melhor o desempenho do modelo.
❓ Por que fazemos isso?¶
Visualizações ajudam a:
Entender o comportamento do modelo
Comunicar resultados para stakeholders
Identificar problemas e oportunidades de melhoria
Validar se o modelo faz sentido
🔧 Como fazemos?¶
📊 Criando Curva ROC...
✅ Curva ROC criada! 💡 Interpretação: - A curva azul mostra o trade-off entre TPR e FPR - Quanto mais próxima do canto superior esquerdo, melhor - A linha tracejada representa um modelo aleatório - Nosso AUC de 0.868 indica performance fraca (esperado!)
📊 Criando distribuição dos scores...
✅ Distribuição dos scores criada! 💡 Interpretação: - IDEAL: Distribuições bem separadas (verde à esquerda, vermelho à direita) - REALIDADE: Muita sobreposição indica dificuldade de separação - Quanto maior a sobreposição, mais difícil distinguir bons de maus pagadores
📊 Criando Matriz de Confusão...
✅ Matriz de Confusão criada!
💡 Interpretação da Matriz de Confusão:
================================================================================
True Negatives (TN): 179,961 - Corretamente previsto como NÃO default
False Positives (FP): 223 - Incorretamente previsto como default
False Negatives (FN): 5,458 - Incorretamente previsto como NÃO default ⚠️
True Positives (TP): 23 - Corretamente previsto como default
================================================================================
💰 Análise de Custos (Hipotética):
Custo de FN (defaults não detectados): R$ 54,580,000.00
Custo de FP (oportunidades perdidas): R$ 111,500.00
Custo Total: R$ 54,691,500.00
📊 Relatório de Classificação Detalhado:
================================================================================
precision recall f1-score support
Não Default (0) 0.9706 0.9988 0.9845 180184
Default (1) 0.0935 0.0042 0.0080 5481
accuracy 0.9694 185665
macro avg 0.5320 0.5015 0.4962 185665
weighted avg 0.9447 0.9694 0.9556 185665
💡 SEÇÃO 8: Interpretação Completa e Lições Aprendidas¶
📊 Resumo das Métricas e Suas Interpretações¶
Métricas de Separação (Ranking):¶
1. AUC (Area Under the ROC Curve)
O que mede: Capacidade do modelo de rankear corretamente (ordenar clientes por risco)
Interpretação: Probabilidade de um cliente default aleatório ter score maior que um não-default aleatório
Nosso resultado (0.87): Muito melhor que aleatório
Por que é importante: Bancos usam para ordenar clientes, não apenas classificar
2. Gini Coefficient
O que mede: Concentração do risco (derivado do AUC)
Fórmula: Gini = 2 × AUC - 1
Nosso resultado (0.74): Excelente poder discriminativo
Por que é importante: Métrica padrão em Basel III e regulação bancária
3. KS (Kolmogorov-Smirnov)
O que mede: Máxima separação entre distribuições cumulativas
Nosso resultado (0.59): Separação excelente
Por que é importante: Indica o ponto de máxima diferenciação entre bons e maus
Métricas de Classificação (Threshold-dependent):¶
4. Precision (Precisão)
O que mede: Dos que previmos como default, quantos % realmente são?
Fórmula: TP / (TP + FP)
Nosso resultado (0.09 (Precision) / 0.004 (Recall)): Modelo não está prevendo defaults!
Trade-off: Alta precision → Menos falsos alarmes → Menos clientes bons rejeitados
5. Recall (Sensibilidade/Taxa de Detecção)
O que mede: Dos que realmente são default, quantos % identificamos?
Fórmula: TP / (TP + FN)
Nosso resultado (0.09 (Precision) / 0.004 (Recall)): Não estamos capturando defaults!
Trade-off: Alto recall → Captura mais defaults → Mas rejeita mais clientes
6. F1-Score
O que mede: Média harmônica entre Precision e Recall
Fórmula: 2 × (P × R) / (P + R)
Nosso resultado (0.09 (Precision) / 0.004 (Recall)): Confirma problema de classificação
Por que é importante: Balanceia precision e recall
🎯 Por que Precision e Recall estão zerados?¶
O modelo está prevendo quase tudo como classe 0 (não-default) porque:
Classes muito desbalanceadas (97% vs 3%)
Threshold padrão de 0.5 é muito alto
Modelo minimiza erro total → Prevê sempre a classe majoritária
Sem balanceamento ou ajuste de threshold
Solução: Ajustar threshold ou usar técnicas de balanceamento (SMOTE, class_weight, etc.)
🎯 SEÇÃO 9: Aplicações Práticas no Mundo Real¶
💼 Como Modelos de Risco de Crédito São Usados na Prática¶
1️⃣ Aprovação Automática de Crédito (Credit Scoring)¶
Como funciona:
Cliente solicita empréstimo/cartão de crédito
Sistema calcula score de risco em tempo real
Decisão automática baseada em regras:
Score > 700 → Aprovado automaticamente ✅
Score 500-700 → Análise manual 🔍
Score < 500 → Rejeitado automaticamente ❌
Benefícios:
⚡ Velocidade: Decisão em segundos vs. dias
📊 Consistência: Critérios objetivos e padronizados
💰 Custo: Reduz necessidade de analistas
📈 Escala: Processar milhares de solicitações/dia
Exemplo Real:
Nubank, Inter, C6: Aprovação instantânea via app
Score alto → Limite maior, taxa menor
Score baixo → Limite menor ou rejeição
2️⃣ Pricing Baseado em Risco (Risk-Based Pricing)¶
Como funciona:
Taxa de juros ajustada ao risco individual
Fórmula típica:
Taxa = Taxa_Base + Prêmio_RiscoMaior score → Menor taxa
Menor score → Maior taxa (compensa risco)
Exemplo Prático:
Cliente A (Score 800): Taxa = 2% a.m.
Cliente B (Score 600): Taxa = 5% a.m.
Cliente C (Score 400): Taxa = 10% a.m. ou rejeição
Benefícios:
💰 Rentabilidade: Otimiza retorno ajustado ao risco
⚖️ Justiça: Clientes bons pagam menos
📊 Competitividade: Pode oferecer melhores taxas para baixo risco
Regulação:
Deve respeitar limites legais (não pode ser discriminatório)
Transparência nos critérios
Proibido usar raça, religião, etc.
3️⃣ Gestão de Portfólio e Provisões¶
Como funciona:
Banco monitora risco do portfólio continuamente
Calcula PD (Probability of Default) para cada cliente
Estima LGD (Loss Given Default) - perda se houver default
Calcula EAD (Exposure at Default) - exposição no momento do default
Expected Loss = PD × LGD × EAD
Aplicações:
📊 Provisões: Reservar capital para perdas esperadas
🎯 Limites: Definir limites de exposição por segmento
📈 Estratégia: Identificar segmentos lucrativos vs. arriscados
⚠️ Early Warning: Detectar deterioração de crédito
Exemplo:
Portfólio de R$ 100 milhões
PD média: 5%
LGD média: 60%
Expected Loss = 100M × 5% × 60% = R$ 3 milhões
→ Banco deve provisionar R$ 3 milhões
4️⃣ Compliance e Regulação (Basel III)¶
Acordo de Basel III:
Regulação internacional para bancos
Exige modelos de risco robustos
Capital mínimo baseado em risco
Requisitos:
✅ Validação: Modelos devem ser validados anualmente
✅ Backtesting: Testar performance em dados históricos
✅ Stress Testing: Simular cenários adversos
✅ Documentação: Metodologia documentada
✅ Governança: Comitê de risco independente
Métricas Regulatórias:
CAR (Capital Adequacy Ratio): Capital / Ativos Ponderados pelo Risco
Tier 1 Capital: Capital de maior qualidade
Bancos devem manter CAR > 3.0% (Basel III)
Penalidades:
Multas por modelos inadequados
Restrições operacionais
Perda de licença em casos graves
5️⃣ Cobrança e Recuperação de Crédito¶
Como funciona:
Clientes em atraso recebem score de recuperação
Define estratégia de cobrança:
Alta probabilidade de pagar: Cobrança suave (SMS, email)
Média probabilidade: Ligações telefônicas
Baixa probabilidade: Cobrança judicial
Benefícios:
💰 Otimiza recursos: Foca esforços onde há maior retorno
📞 Melhora experiência: Evita assediar quem vai pagar
⚖️ Recuperação: Maximiza valor recuperado
6️⃣ Limite de Crédito Dinâmico¶
Como funciona:
Limite ajustado automaticamente baseado em:
Comportamento de pagamento
Mudanças na renda
Uso do crédito
Score atualizado
Exemplo:
Mês 1: Limite R$ 1.000 (cliente novo)
Mês 6: Limite R$ 3.000 (pagou tudo em dia)
Mês 12: Limite R$ 5.000 (bom histórico)
Benefícios:
📈 Retenção: Cliente satisfeito com aumento de limite
💰 Receita: Mais crédito = mais juros
⚠️ Controle: Reduz limite se risco aumentar
💡 Lições Aprendidas e Boas Práticas¶
✅ O que funciona:¶
Modelos simples primeiro - Baseline com Regressão Logística
Métricas adequadas - AUC, Gini, KS para classes desbalanceadas
Validação rigorosa - Out-of-time, out-of-sample
Monitoramento contínuo - Performance degrada com tempo
Interpretabilidade - Stakeholders precisam entender
❌ O que evitar:¶
Overfitting - Modelo muito complexo não generaliza
Data leakage - Usar informação do futuro no treino
Viés - Discriminação por raça, gênero, etc.
Ignorar desbalanceamento - Usar apenas acurácia
Modelo estático - Não atualizar com novos dados
🎯 Exercícios Práticos e Desafios¶
📝 Exercícios para Fixação do Conteúdo¶
EXERCÍCIO 1: Análise de Threshold (Limiar de Decisão) ⭐⭐¶
Objetivo: Entender como o threshold afeta Precision e Recall
Tarefa:
Teste diferentes thresholds: 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9
Para cada threshold, calcule:
Precision
Recall
F1-Score
Número de aprovações
Número de defaults capturados
Crie um gráfico mostrando Precision vs Recall (curva PR)
Identifique o threshold ótimo para seu negócio
Dica: Use y_pred = (y_pred_proba >= threshold).astype(int)
Perguntas para reflexão:
Qual threshold maximiza F1-Score?
Qual threshold você usaria se quiser capturar 80% dos defaults?
Qual o trade-off entre aprovar mais clientes vs. reduzir perdas?
EXERCÍCIO 2: Análise de Segmentos ⭐⭐⭐¶
Objetivo: Investigar se diferentes grupos têm comportamentos distintos
Tarefa:
Divida os dados por faixa etária (use a variável
faixa_etariajá criada)Para cada faixa etária:
Treine um modelo separado
Calcule AUC, Gini, KS
Compare com o modelo geral
Repita para outras segmentações:
Por faixa de renda (baixa, média, alta)
Por tipo de residência
Por nível educacional
Perguntas para reflexão:
Algum segmento tem performance muito melhor/pior?
Vale a pena ter modelos separados por segmento?
Quais segmentos são mais previsíveis?
EXERCÍCIO 3: Feature Engineering ⭐⭐⭐⭐¶
Objetivo: Criar novas variáveis para melhorar o modelo
Tarefa:
Crie features derivadas:
razao_emprestimo_renda= valor_emprestimo / rendacomprometimento_mensal= (valor_emprestimo / prazo) / rendaidade_ao_quadrado= idade²score_normalizado= (score_credito - min) / (max - min)e_jovem= 1 se idade < 25, 0 caso contrário
Treine novo modelo com features originais + derivadas
Compare performance com modelo baseline
Identifique quais features são mais importantes
Perguntas para reflexão:
As features derivadas melhoraram o modelo?
Quais features têm maior poder preditivo?
Alguma feature derivada faz sentido de negócio?
EXERCÍCIO 4: Validação Temporal (Out-of-Time) ⭐⭐⭐⭐⭐¶
Objetivo: Validar modelo de forma realista (como seria em produção)
Tarefa:
Use a variável
data_emprestimopara dividir dados:Treino: Empréstimos até 2021
Teste: Empréstimos de 2022 em diante
Treine modelo nos dados de treino
Avalie nos dados de teste
Compare com validação aleatória (train_test_split)
Perguntas para reflexão:
A performance é pior na validação temporal?
Por que validação temporal é mais realista?
O que fazer se performance degradar muito?
EXERCÍCIO 5: Análise de Custo-Benefício ⭐⭐⭐⭐¶
Objetivo: Tomar decisões baseadas em impacto financeiro
Tarefa:
Defina custos:
Custo de False Negative (emprestar para quem dá default): R$ 10.000
Custo de False Positive (rejeitar quem pagaria): R$ 500
Receita de True Positive (juros de quem paga): R$ 2.000
Para diferentes thresholds, calcule:
Custo total de FN
Custo total de FP
Receita total de TP
Lucro = Receita - Custos
Identifique threshold que maximiza lucro
Perguntas para reflexão:
O threshold ótimo para lucro é diferente do ótimo para F1?
Como mudanças nos custos afetam a decisão?
Qual a importância de considerar aspectos financeiros?
🏆 Desafio Final: Melhore o Modelo Baseline¶
Objetivo: Aplicar tudo que aprendeu para criar um modelo melhor
Meta: Alcançar AUC 0.87 do baseline)
Estratégias sugeridas:
✅ Limpeza rigorosa de dados (remover outliers)
✅ Feature engineering (criar variáveis derivadas)
✅ Balanceamento de classes (SMOTE, class_weight)
✅ Normalização/padronização de features
✅ Seleção de features (remover irrelevantes)
✅ Ajuste de hiperparâmetros
✅ Testar outros algoritmos (Random Forest, XGBoost)
Entregável:
Notebook com seu melhor modelo
Comparação de métricas (baseline vs. seu modelo)
Explicação das decisões tomadas
Interpretação dos resultados
🚀 CONCLUSÃO E PRÓXIMOS PASSOS¶
✅ O que você aprendeu neste notebook?¶
📚 Conceitos Fundamentais:¶
✅ O que é risco de crédito e por que modelá-lo
✅ Tipos de risco: default, spread, downgrade
✅ Importância para instituições financeiras e clientes
✅ Problema de classificação binária com classes desbalanceadas
📊 Análise de Dados:¶
✅ Carregamento e exploração inicial de dados
✅ Identificação de valores ausentes e outliers
✅ Análise da variável target (default)
✅ Visualização de distribuições e padrões
✅ Análise por segmentos (faixa etária)
📈 Métricas de Avaliação:¶
✅ AUC - Capacidade de rankear clientes por risco
✅ Gini - Concentração do risco (padrão Basel III)
✅ KS - Máxima separação entre distribuições
✅ Precision - Dos previstos como default, quantos são?
✅ Recall - Dos reais defaults, quantos capturamos?
✅ F1-Score - Balanço entre Precision e Recall
🤖 Modelagem:¶
✅ Construção de modelo baseline (Regressão Logística)
✅ Divisão treino/teste com estratificação
✅ Interpretação de coeficientes
✅ Visualização de resultados (ROC, distribuições, matriz confusão)
✅ Diagnóstico de problemas (classes desbalanceadas, threshold)
💼 Aplicações Práticas:¶
✅ Aprovação automática de crédito
✅ Pricing baseado em risco
✅ Gestão de portfólio e provisões
✅ Compliance e regulação (Basel III)
✅ Cobrança e recuperação
✅ Limite de crédito dinâmico
🎯 Principais Insights e Lições:¶
1. Classes Desbalanceadas São Normais em Crédito¶
97% não-default vs 3% default é esperado
Acurácia NÃO é uma boa métrica
Use AUC, Gini, KS para avaliar modelos
Considere balanceamento ou ajuste de threshold
2. Modelo Baseline É Essencial¶
Sempre comece simples (Regressão Logística)
Estabelece linha de base para comparação
Ajuda a entender os dados
Performance boa inicial é normal com dados brutos
3. Qualidade dos Dados É Fundamental¶
"Garbage in, garbage out"
Valores ausentes, outliers, dados problemáticos
Preparação adequada pode melhorar muito o modelo
Próximo notebook focará nisso!
4. Interpretabilidade Importa¶
Stakeholders precisam entender o modelo
Coeficientes da regressão logística são interpretáveis
Decisões de crédito afetam vidas
Transparência e explicabilidade são cruciais
5. Métricas de Negócio > Métricas Técnicas¶
Considere custos de FN vs FP
Threshold deve ser escolhido baseado em impacto financeiro
Balanceie volume de aprovações vs. risco
ROI (Return on Investment) é o que importa
📚 Próximos Passos no Curso¶
Notebook 2: Preparação de Dados e Engenharia de Features¶
Você aprenderá:
🧹 Limpeza de dados - Tratamento de valores ausentes e duplicados
📊 Detecção de outliers - IQR, Z-score, Isolation Forest
🔧 Tratamento de outliers - Capping, transformações, remoção
🔄 Padronização - Normalização, escalonamento
⚙️ Engenharia de features - Criar variáveis derivadas
🔢 Codificação - One-hot, label encoding, target encoding
📈 Análise de correlação - Identificar multicolinearidade
🎯 Seleção de features - Métodos de seleção automática
Notebook 3: Implementação de Modelos de ML¶
Você aprenderá:
🌳 Random Forest - Ensemble de árvores de decisão
🚀 XGBoost/LightGBM - Gradient boosting otimizado
🧠 Redes Neurais - Deep learning para crédito
⚖️ Balanceamento - SMOTE, ADASYN, class_weight
📊 Validação cruzada - K-fold, stratified, temporal
📈 Comparação de modelos - Qual é o melhor?
Notebook 4: Otimização e Ensemble¶
Você aprenderá:
🔧 Hyperparameter tuning - Grid search, random search, Bayesian
🎯 Feature selection - RFE, feature importance
🤝 Ensemble methods - Stacking, blending, voting
📊 Calibração - Ajustar probabilidades preditas
⚡ Otimização de performance - Velocidade e eficiência
Notebook 5: Interpretação, Scorecard e Deploy¶
Você aprenderá:
💡 SHAP values - Explicabilidade de modelos black-box
📊 Scorecard - Converter modelo em pontuação
🚀 Deploy - Colocar modelo em produção
📈 Monitoramento - Detectar degradação de performance
🔄 Retreinamento - Quando e como atualizar o modelo
🎉 Parabéns!¶
Você completou o primeiro notebook do curso de Modelagem de Risco de Crédito!
Este foi apenas o começo da sua jornada. Nos próximos notebooks, vamos aprofundar cada aspecto e construir modelos cada vez mais sofisticados e eficazes.
Continue praticando e explorando! 🚀
Autor: Karel Montero
Data: 10/2025
Versão: 1.0 - Didática
Contato: https://www.linkedin.com/in/karel-montero-ph-d-66554a63/
📝 Feedback e Sugestões¶
Este notebook foi útil? Tem sugestões de melhoria? Entre em contato!
Próximo notebook: 2_Preparacao_Dados_Engenharia_Features_Didatico.ipynb
🎯 Lembre-se: "O sucesso em ciência de dados vem da combinação de conhecimento técnico, compreensão de negócio e prática constante. Continue aprendendo!"