Skip to main content

Credit Risk Simulation and Policy Optimization — Python edition of creditools

Project description

📊 PyCrediTools

Credit Risk Simulation and Policy Optimization for Python

Python License Status


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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pycreditools-0.1.0.tar.gz (21.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pycreditools-0.1.0-py3-none-any.whl (28.0 kB view details)

Uploaded Python 3

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

Hashes for pycreditools-0.1.0.tar.gz
Algorithm Hash digest
SHA256 9d7b870a2e92c65bfbc18a1ca927f7ce93d0fe81e0e45aaf8e91985676bf47df
MD5 7b0f0a0ce0a88adbc9a73bedd2322757
BLAKE2b-256 75b9a4fd74b357f032bc4308c93e7e83dd7fa6132cc197d95d660c168e6e1997

See more details on using hashes here.

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

Hashes for pycreditools-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 dc992c466904923e991ef5cf4e02e9ed20386035f46edfbeb56f1659f568f0d8
MD5 572973f9d11f339d0ac7611e7c680278
BLAKE2b-256 f0c8062648722b9cb6b9042990479ed55e0ad33b27202c000802d6cca83ecfa8

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page