Skip to main content

Interpretable binning with temporal stability diagnostics for credit risk, PD, and scorecard workflows.

Project description

RiskBands

Binning para risco de credito com foco em robustez temporal, comparacao entre candidatos e racional auditavel.

Documentacao oficial | Benchmark PD vintage | Quickstart | API


O que e o RiskBands

O RiskBands e uma biblioteca para construir, comparar e auditar candidatos de binning quando o problema real nao e apenas maximizar uma metrica estatica, mas tambem defender o resultado ao longo do tempo.

Ele foi pensado especialmente para contextos como:

  • modelos de PD
  • scorecards de credito
  • variaveis com drift temporal
  • leitura relevante por safra ou vintage
  • estruturas com bins raros, baixa cobertura ou reversoes de ranking

A pergunta central do projeto e simples:

Um binning que parece otimo no agregado continua defensavel quando voce abre o comportamento por safra?

Onde o projeto se diferencia

O OptimalBinning ja resolve muito bem o problema de corte estatico. O RiskBands nao tenta negar isso.

No fluxo supervisionado numerico do repositorio atual, o projeto reaproveita optbinning.OptimalBinning no backend do corte estatico. O diferencial esta no que vem depois:

  • diagnostico temporal por variavel, bin e periodo
  • penalizacoes estruturais para fragilidade, baixa cobertura e volatilidade
  • comparacao entre candidatos via BinComparator
  • score objetivo mais alinhado a trade-offs de risco de credito
  • resumos auditaveis para explicar por que um candidato venceu

Em outras palavras:

  • OptimalBinning puro ajuda a encontrar um bom corte estatico
  • RiskBands ajuda a decidir se esse corte continua sendo a melhor resposta para credito quando o tempo entra na analise

Instalacao

Instalacao base:

pip install riskbands

Extra opcional para graficos Plotly e export HTML dos benchmarks:

pip install "riskbands[viz]"

Para desenvolvimento, testes e notebooks:

git clone https://github.com/joaaomaia/RiskBands.git
cd RiskBands
pip install -e .[dev]

Como comecar

Porta tecnica:

Porta metodologica:

Quickstart minimo

import numpy as np
import pandas as pd

from riskbands import Binner

rng = np.random.default_rng(0)
n = 800

X = pd.DataFrame({"score": rng.normal(size=n)})
X["month"] = rng.choice([202301, 202302, 202303, 202304], size=n)

proba = 0.20 + 0.15 * X["score"] + 0.02 * (X["month"] - 202301)
proba = np.clip(proba, 0.01, 0.99)
y = pd.Series((rng.random(n) < proba).astype(int), name="target")

binner = Binner(
    strategy="supervised",
    check_stability=True,
    monotonic="ascending",
    min_event_rate_diff=0.03,
)

binner.fit(X, y, time_col="month")
summary = binner.temporal_variable_summary(
    diagnostics=binner.temporal_bin_diagnostics(
        X,
        y,
        time_col="month",
        dataset_name="train",
    ),
    time_col="month",
)

Benchmark principal do repositorio

O benchmark mais importante hoje compara tres lentes:

  1. OptimalBinning puro como baseline externa
  2. RiskBands estatico como baseline interna
  3. RiskBands balanceado/temporal como abordagem orientada a credito

Materiais principais:

O que o projeto nao tenta ser

O foco do RiskBands e binning. Ele nao tenta, sozinho, ser:

  • pipeline completo de modelagem de PD
  • framework de monitoramento de carteira
  • solucao completa de MLOps para credito

A proposta e ser uma camada especializada e forte de decisao sobre binning.

Mensagem principal

O RiskBands nao tenta substituir a forca do OptimalBinning.

Ele tenta responder melhor a pergunta que aparece no mundo real de credito:

Entre os candidatos que parecem bons no agregado, qual continua mais defensavel quando o tempo entra na decisao?

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

riskbands-1.0.0.tar.gz (47.1 kB view details)

Uploaded Source

Built Distribution

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

riskbands-1.0.0-py3-none-any.whl (44.3 kB view details)

Uploaded Python 3

File details

Details for the file riskbands-1.0.0.tar.gz.

File metadata

  • Download URL: riskbands-1.0.0.tar.gz
  • Upload date:
  • Size: 47.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for riskbands-1.0.0.tar.gz
Algorithm Hash digest
SHA256 9751e47bbc4f19e26af81adc75f95374736ad3c138377074665f3a2d69d30553
MD5 f89106527b343c7ef4977515e667ee75
BLAKE2b-256 03f2f1d0a6187a8a9bf4c25cbd6f10fddbbe9670c5656e0c89cf67779e7491ff

See more details on using hashes here.

Provenance

The following attestation bundles were made for riskbands-1.0.0.tar.gz:

Publisher: publish-pypi.yml on joaaomaia/RiskBands

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file riskbands-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: riskbands-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 44.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for riskbands-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 61d67eb66bfb1bdb84aa2ec73f3c1e2dfcca66b76795615599e7601e55a66eba
MD5 59c17dda5f338ddf51fae00c5d2fee20
BLAKE2b-256 9db979051c4f5b388255ec0630d9c49b9c9a0def0129c5d95adff64c8fc7d11f

See more details on using hashes here.

Provenance

The following attestation bundles were made for riskbands-1.0.0-py3-none-any.whl:

Publisher: publish-pypi.yml on joaaomaia/RiskBands

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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