Problema:
Modelos tradicionais de crédito avaliam clientes de forma isolada, ignorando padrões coletivos de comportamento financeiro.
Solução:
Pipeline de Data Science combinando Machine Learning e Teoria dos Grafos para enriquecer a representação dos clientes.
Resultados:
- Melhor modelo: XGBoost tradicional (sem redes)
- AUC máximo: 0.7759
- Features de rede ajudaram apenas na Regressão Logística
- Simulação financeira:
- Lucro: R$ 4,595,500
- Threshold: 25%
- Aprovação: 73.2%
- Inadimplência: 12.4%
flowchart TD
A[Data Source\nUCI Credit Card Dataset] --> B[EDA\nTarget distribution\nLIMIT_BAL\nPAY_0\nCorrelations]
B --> C[Traditional Features\nPAY_X\nBILL_AMT\nPAY_AMT\nDemographics]
B --> D[Graph Features\nKNN Graph k5\nNetworkX\nDegree\nPageRank\nLouvain]
C --> E[Model Training\nLogistic Regression\nRandom Forest\nXGBoost]
D --> E
E --> F[Evaluation\nAUC\nXGBoost wins\nGraphs help linear models]
F --> G[Output\nProbability of Default]
G --> H[Business Simulation\nPlus 1500 good\nMinus 5000 default]
H --> I[Optimal Threshold 25 percent\nProfit 4.59M BRL]
Avaliar se métricas de grafos melhoram modelos de crédito e mensurar impacto financeiro real.
- Rede via KNN
- PageRank
- Degree
- Clustering
- Louvain
- Logistic Regression
- Random Forest
- XGBoost
Comparação:
- Baseline vs Enriquecido
- Probabilidade → decisão
- Otimização de threshold
| Modelo | Baseline | Com Redes |
|---|---|---|
| Logistic Regression | 0.7150 | 0.7195 |
| Random Forest | 0.7741 | 0.7736 |
| XGBoost | 0.7759 | 0.7719 |
Conclusão: XGBoost tradicional foi o melhor modelo.
- Receita por bom pagador: R$ 1.500
- Perda por inadimplente: R$ -5.000
Resultado ótimo:
- Threshold: 25%
- Lucro: R$ 4,595,500
- Aprovação: 73.2%
- Default: 12.4%
/
├── assets/ # Imagens e gráficos gerados pelas análises
│ └── img/ # Gráficos EDA, curvas ROC e simulações financeiras
├── data/
│ ├── raw/ # Dados brutos (UCI Credit Card dataset)
│ └── processed/ # Dados enriquecidos com features de rede (.parquet)
├── notebooks/ # Núcleo analítico do projeto (pipeline de Data Science)
│ ├── 0_eda.ipynb
│ ├── 1_network_construction.ipynb
│ ├── 2_model_training.ipynb
│ └── 3_credit_strategy_simulation.ipynb
├── .gitignore # Regras de exclusão de arquivos do versionamento
├── LICENSE # Licença MIT de uso e distribuição do código
├── README.md
└── requirements.txt # Dependências do projeto
- Python
- Pandas / NumPy
- Scikit-learn
- XGBoost
- NetworkX
- Matplotlib / Seaborn
O dataset utilizado neste projeto é público e pode ser baixado em:
https://www.kaggle.com/datasets/uciml/default-of-credit-card-clients-dataset
Após o download, coloque o arquivo UCI_Credit_Card.csv na pasta:
data/raw/
git clone https://github.com/lbaffa/predicao-de-inadimplencia-com-grafos.git
cd predicao-de-inadimplencia-com-grafos
python -m venv venv
Windows:
venv\Scripts\activate
Linux/Mac:
source venv/bin/activate
pip install -r requirements.txt
0_eda.ipynb
1_network_construction.ipynb
2_model_training.ipynb
3_credit_strategy_simulation.ipynb
- Grafos não melhoram modelos baseados em árvores
- AUC não representa valor de negócio
- Threshold é problema econômico
- Feature engineering precisa ser validado empiricamente
MIT License

