Credit Risk Simulation and Policy Optimization — Python edition of creditools
Project description
PyCrediTools é uma biblioteca de ponta projetada para equipes de Risco de Crédito. Traduzida e evoluída a partir do pacote fundacional em R, ela fornece motores computacionais para Simulação de Funis de Crédito (Trade-off de Políticas) e Agrupamento Autónomo de Risco (Risk Clustering).
Esqueça as aproximações por tentativas e erros. Com o PyCrediTools, você pode testar cortes de score contra taxas de aprovação, encontrar a política que maximiza a receita mantendo a inadimplência dentro do apetite ao risco, e recriar dinamicamente as faixas de Rating de forma matematicamente ótima.
🚀 Instalação
Atualmente em fase final de testes, o pacote pode ser instalado diretamente do GitHub:
pip install git+https://github.com/matheuspasche/pycreditools.git
(Em breve estará disponível no PyPI via pip install pycreditools)
💡 Core Features
- Credit Policy Simulation: Monte estágios rigorosos (Filtros duros, Regras de Corte de Score, Probabilidades Variáveis) e estresse a carteira sob diferentes condições económicas (agravamentos macro, declínios monotónicos).
- Automated Risk Clustering: Agrupe milhares de combinações de scores numa arquitetura compacta de "Ratings de Risco". O algoritmo respeita limitações de negócio rigorosas (Tolerância a inversão de safra, Exigência Mínima de Volume).
- Distance Linkage Engine: (Novo!) Uma evolução do algoritmo Ward tradicional que prioriza a simetria orgânica e o distanciamento da probabilidade de inadimplência em vez da densidade volumétrica da carteira.
📖 Quickstart (Exemplo de Uso)
O uso típico envolve duas fases: Simular a política para gerar a "População Aprovada", e depois agrupar essa população em Ratings estruturais.
1. Simulação do Funil
import pandas as pd
from pycreditools.policy import CreditPolicy
from pycreditools.stages import CutoffStage
from pycreditools.simulation import simulate_policy
# Carregar Dados (O seu histórico de propostas e performance real)
df = pd.read_csv("minha_base.csv")
# Criar a Política
policy = (
CreditPolicy(score_cols=["meu_score_novo"], actual_default_col="inadimplencia")
.add_stage(CutoffStage("Aprovacao_Score", cutoffs={"meu_score_novo": 650}))
)
# Simular aprovação
df_simulado = simulate_policy(df, policy)
df_aprovados = df_simulado[df_simulado["_approved"]]
2. Agrupamento Ótimo de Risco (Clustering)
Vamos pedir ao motor que encontre o número ótimo de curvas de risco (até um máximo de 5 grupos), garantindo que nunca se cruzam no tempo (max_crossings=0).
from pycreditools.grouping import find_risk_groups
clustering = find_risk_groups(
df_aprovados,
score_cols="meu_score_novo",
default_col="inadimplencia",
time_col="safra_mes", # Para matriz de temporalidade
bins=20, # Granularidade da pesquisa
max_groups=5, # Teto Máximo
method="distance", # Heurística pura de Distância
max_crossings=0, # Tolerância Zero a inversão de curvas
min_vol_ratio=0.05 # Cada Rating deve ter >5% do volume
)
# Aplicar o modelo (nova coluna "risk_rating" gerada)
df_final = clustering.predict(df_aprovados)
print(f"O algoritmo agrupou os scores em {clustering.n_groups} Ratings de Risco Perfeitos.")
print(df_final.groupby("risk_rating")["inadimplencia"].mean())
🧠 Algoritmos de Agrupamento
Ao invocar o find_risk_groups, o motor aceita dois métodos principais (method="ward" ou method="distance"):
Ward Method Tradicional (method="ward")
Pesquisa aglomerativa que funde micro-faixas usando o critério de variância espacial (Ward). Este método tende a produzir faixas de risco igualmente densas em termos de volume (Ratings com 20% do volume cada, mesmo que o risco não esteja bem distribuído).
Distance Linkage Autónomo (method="distance")
Um critério de custo inovador que ignora o volume na hora de medir as pontes matemáticas, penalizando unicamente o (Risco 1 - Risco 2)^2. A consequência brilhante disto é que os Ratings finais ficam distribuídos pelas faixas de probabilidade com distâncias perfeitamente equidistantes, independentemente se um Rating ficar com 30% da carteira e outro com 8%. Ideal para mapas visuais limpos e estabilidade de risco orgânica.
🛠️ Contribuir e Desenvolver
Para correr a suite de testes e submeter pull requests:
git clone https://github.com/matheuspasche/pycreditools.git
cd pycreditools
pip install -e .[dev]
pytest tests/
📜 Licença
Distribuído sob licença MIT. Desenvolvido para a engenharia financeira moderna.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pycreditools-0.1.0.tar.gz.
File metadata
- Download URL: pycreditools-0.1.0.tar.gz
- Upload date:
- Size: 21.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9d7b870a2e92c65bfbc18a1ca927f7ce93d0fe81e0e45aaf8e91985676bf47df
|
|
| MD5 |
7b0f0a0ce0a88adbc9a73bedd2322757
|
|
| BLAKE2b-256 |
75b9a4fd74b357f032bc4308c93e7e83dd7fa6132cc197d95d660c168e6e1997
|
File details
Details for the file pycreditools-0.1.0-py3-none-any.whl.
File metadata
- Download URL: pycreditools-0.1.0-py3-none-any.whl
- Upload date:
- Size: 28.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dc992c466904923e991ef5cf4e02e9ed20386035f46edfbeb56f1659f568f0d8
|
|
| MD5 |
572973f9d11f339d0ac7611e7c680278
|
|
| BLAKE2b-256 |
f0c8062648722b9cb6b9042990479ed55e0ad33b27202c000802d6cca83ecfa8
|