📊 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:¶

  1. 🎯 Conceitos Fundamentais - O que é risco de crédito e por que modelá-lo?

  2. 📊 Carregamento e Exploração de Dados - Primeiro contato com dados reais

  3. 🔍 Análise Exploratória de Dados (EDA) - Entendendo padrões e distribuições

  4. 📈 Visualização de Dados - Gráficos para insights visuais

  5. 🎯 Análise do Target - Compreendendo a variável de interesse

  6. 📊 Métricas de Avaliação - AUC, KS e outras métricas essenciais

  7. 🚀 Modelo Simples de Demonstração - Seu primeiro modelo de crédito

  8. 💡 Interpretação de Resultados - O que os números significam?

  9. 🎯 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:¶

  1. Default Risk (Risco de Inadimplência)

    • Probabilidade do devedor não pagar o empréstimo

    • É o foco principal deste curso

  2. 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

  3. 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:

  1. Verificar se os dados foram carregados corretamente

  2. Entender a estrutura do dataset (quantas linhas e colunas)

  3. Identificar os tipos de variáveis (numéricas, categóricas, datas)

  4. 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 cliente

  • regiao - 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 emprestado

  • prazo_emprestimo - Prazo em meses para pagar

  • histó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:

  1. Identifica problemas de qualidade - Valores ausentes, duplicados, outliers

  2. Revela padrões nos dados - Distribuições, tendências, anomalias

  3. Informa decisões de pré-processamento - Como tratar cada variável

  4. 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:

  1. Tratar valores ausentes

  2. Remover/tratar valores problemáticos

  3. Considerar técnicas de balanceamento

  4. 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:

  1. Revelam padrões que números sozinhos não mostram

  2. Identificam outliers de forma intuitiva

  3. Mostram assimetrias nas distribuições

  4. 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...
No description has been provided for this image
✅ Histogramas criados com sucesso!
📊 Criando boxplots para identificação de outliers...
No description has been provided for this image
✅ 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:

  1. É o que queremos prever

  2. Sua distribuição afeta a escolha do modelo

  3. Seu desbalanceamento influencia métricas e técnicas

  4. 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...
No description has been provided for this image
✅ Visualização criada com sucesso!

💡 O que isso significa?¶

Interpretação da Análise do Target:¶

Principais Descobertas:

  1. 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!

  2. 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

  3. 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

  4. 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:

  1. Ilustrar o fluxo completo de modelagem

  2. Estabelecer um baseline (linha de base) para comparação

  3. Aplicar as métricas que aprendemos

  4. 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:¶

  1. Selecionar features (variáveis preditoras)

  2. Preparar dados (remover valores ausentes)

  3. Dividir em treino e teste

  4. Treinar o modelo

  5. Fazer predições

  6. 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_credito negativo → Maior score = menor risco ✅ (faz sentido!)

  • renda negativo → Maior renda = menor risco ✅ (faz sentido!)

  • valor_emprestimo positivo → 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:

  1. ❌ Dados não tratados - Valores ausentes, outliers, dados brutos

  2. ❌ Sem feature engineering - Não criamos features derivadas

  3. ❌ Sem balanceamento - Classes muito desbalanceadas

  4. ❌ Threshold não otimizado - Usando 0.5 padrão

  5. ❌ 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:

  1. Entender o comportamento do modelo

  2. Comunicar resultados para stakeholders

  3. Identificar problemas e oportunidades de melhoria

  4. Validar se o modelo faz sentido

🔧 Como fazemos?¶

📊 Criando Curva ROC...
No description has been provided for this image
✅ 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...
No description has been provided for this image
✅ 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...
No description has been provided for this image
✅ 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:

  1. Classes muito desbalanceadas (97% vs 3%)

  2. Threshold padrão de 0.5 é muito alto

  3. Modelo minimiza erro total → Prevê sempre a classe majoritária

  4. 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_Risco

  • Maior 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:¶

  1. Modelos simples primeiro - Baseline com Regressão Logística

  2. Métricas adequadas - AUC, Gini, KS para classes desbalanceadas

  3. Validação rigorosa - Out-of-time, out-of-sample

  4. Monitoramento contínuo - Performance degrada com tempo

  5. Interpretabilidade - Stakeholders precisam entender

❌ O que evitar:¶

  1. Overfitting - Modelo muito complexo não generaliza

  2. Data leakage - Usar informação do futuro no treino

  3. Viés - Discriminação por raça, gênero, etc.

  4. Ignorar desbalanceamento - Usar apenas acurácia

  5. 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:

  1. Teste diferentes thresholds: 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9

  2. Para cada threshold, calcule:

    • Precision

    • Recall

    • F1-Score

    • Número de aprovações

    • Número de defaults capturados

  3. Crie um gráfico mostrando Precision vs Recall (curva PR)

  4. 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:

  1. Divida os dados por faixa etária (use a variável faixa_etaria já criada)

  2. Para cada faixa etária:

    • Treine um modelo separado

    • Calcule AUC, Gini, KS

    • Compare com o modelo geral

  3. 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:

  1. Crie features derivadas:

    • razao_emprestimo_renda = valor_emprestimo / renda

    • comprometimento_mensal = (valor_emprestimo / prazo) / renda

    • idade_ao_quadrado = idade²

    • score_normalizado = (score_credito - min) / (max - min)

    • e_jovem = 1 se idade < 25, 0 caso contrário

  2. Treine novo modelo com features originais + derivadas

  3. Compare performance com modelo baseline

  4. 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:

  1. Use a variável data_emprestimo para dividir dados:

    • Treino: Empréstimos até 2021

    • Teste: Empréstimos de 2022 em diante

  2. Treine modelo nos dados de treino

  3. Avalie nos dados de teste

  4. 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:

  1. 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

  2. Para diferentes thresholds, calcule:

    • Custo total de FN

    • Custo total de FP

    • Receita total de TP

    • Lucro = Receita - Custos

  3. 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:

  1. ✅ Limpeza rigorosa de dados (remover outliers)

  2. ✅ Feature engineering (criar variáveis derivadas)

  3. ✅ Balanceamento de classes (SMOTE, class_weight)

  4. ✅ Normalização/padronização de features

  5. ✅ Seleção de features (remover irrelevantes)

  6. ✅ Ajuste de hiperparâmetros

  7. ✅ 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!"