A árvore-mundo · ciência de dados de crédito

Yggdrasil

estatística · machine learning · tutoriais

Uma biblioteca Python de sete módulos isolados para o ciclo completo do crédito, da concessão à recuperação e do escore ao capital. O núcleo é pandas puro: roda no seu notebook e no Databricks, com ou sem pip install.

pip install yggdrasil-project
PyPI v0.0.11 Python ≥ 3.9 MIT 7 módulos 12 tutoriais MLflow · PySpark · SHAP
“Três raízes sustentam a Yggdrasil, e por elas correm as águas que dão vida aos mundos.”
eda feature selection decision tree machine learning ml flow capital econométricos URÐR estatística MÍMIR machine learning HVERGELMIR tutoriais

As três raízes

De onde a árvore bebe

Na cosmologia nórdica, três fontes sagradas alimentam Yggdrasil. Aqui elas viram os três alicerces do repositório, cada um apoiando o outro, todos no mesmo lugar.

Poço de Urðr · das normas e do destino

Estatística

O rigor que torna um número defensável: teste de hipótese, estabilidade no tempo e o porquê de cada métrica.

  • KS, AUC/Gini, Brier, log loss
  • PSI/CSI por safra e por bin
  • WoE/IV e binning monotônico
  • ADF/KPSS, Ljung-Box, VIF, Chow
Poço de Mímir · da sabedoria

Machine learning

Modelos que entram em produção com governança: rastreados no MLflow, explicáveis e versionados.

  • Esteira de avaliação orquestrada
  • Boosting, florestas e lineares
  • Tuning bayesiano com Optuna
  • SHAP, ratings e relatórios
Hvergelmir · de onde brotam os rios

Tutoriais

Doze notebooks passo a passo, prontos para Jupyter e Databricks. A lógica de produção nunca mora neles.

  • Do zero à esteira completa
  • UIs interativas ao vivo
  • Capital econômico e satélites
  • Dados sintéticos inclusos

Escopo aplicado

Um ciclo, não um modelo

O foco é crédito de forma ampla. Os mesmos módulos atendem as três frentes, porque o contrato de dados é o mesmo em todas elas.

01

Concessão

Aprovação, definição de limites e precificação. Escore, régua de corte e política que dá para explicar linha a linha.

02

Recuperação

Cobrança e renegociação. Alvos contínuos em [0,1], propensão de acordo e priorização de fila.

03

Risco de crédito

Parâmetros PD/LGD/EAD, provisão prospectiva, capital econômico e teste de estresse por cenário.

Os sete ramos

Sete módulos que
não se atrapalham

Cada módulo é isolado e importável sozinho. Esteira de ML, EDA e seleção compartilham o contrato feat_* / dt_ref / amostra / target; os de risco de crédito têm contratos próprios.

RAMO 01

Esteira de ML governada

Avaliação completa de um modelo já treinado, orquestrada por MLflow. As amostras DES e OOT recebem análise completa; SIMUL e BACKTEST são scoring-only. Registra métricas, shifts, ratings em quatro metodologias, PSI e SHAP.

MLPipelineColumnConfigratings/monitoring/psimlflow_logger
mlflow · /Shared/Yggdrasil/pd_pf
métricaDESOOTshift
KS0.3500.362+3,6%
AUC0.7220.722+0,1%
Gini0.4430.444+0,3%
PSIref.0.043estável
✓ ratings: decis · quantil · arvore · optbin
✓ 4 artefatos SHAP registrados
RAMO 02

EDA de features

Missing global e por safra, percentis no tempo, relação com o alvo, WoE/IV, importância univariada e surrogate multivariada, PSI por feature, monotonicidade, outliers, VIF e detecção de leakage. Tudo consolidado num feature_profile com veredito.

run_feature_edaEDAConfigfeature_profile
feature_profile · 1 linha por feature
featureIVPSIveredito
feat_renda0.3120.021manter
feat_atraso_max0.6880.017manter
feat_util_lim0.1040.183revisar
feat_dias_pgto0.9410.009leakage
RAMO 03

Triagem de features por book

run_feature_selection peneira o universo de features agrupadas por book (grupo por prefixo ou palavra-chave): missing e variância, importância (RandomForest e univariadas), redundância (Pearson e Spearman), Boruta e consenso. Entrega shortlist por book, ranking global e auditoria de leakage, antes de escolher o modelo. Aceita pandas ou Spark — o backend sai do tipo do DataFrame, sem flag, e a chamada e o relatório são idênticos; só os percentis mudam, exatos no pandas e aproximados no Spark.

bookborutaconsensoranking global
funil · book “bureau”
candidatas412
missing + variância287
importância (IV/KS/AUC)96
redundância ρ > 0.8541
boruta (shadows)18
consenso · selecionada12
RAMO 04

Árvore de segmentação

TreeSegmenter é uma régua sequencial com UI de cinco abas que atende classificação e regressão pelo mesmo task_type: binning ótimo ou manual, faltantes em bin própria, notas por folha, IV, PSI/CSI, bootstrap, calibração e backtest. Exporta CASE WHEN, PDF e Spark.

fit_autosuggest_splitsto_sqldiff_treesapply_spark
TreeSegmenterUI · régua de 6 folhas, monotônica em DES e OOT
Árvore de segmentação real construída na TreeSegmenterUI: raiz com toda a carteira, split por feat_atraso_max e depois por feat_util_lim, resultando em seis folhas coloridas pela inadimplência média, de 5,60% na folha 1 a 48,20% na folha 6.
RAMO 05

Segmentador orientado a modelo

ModelSegmenter vai da análise univariada (logodds/WoE, IV, inversão de bins entre safras) à seleção de variáveis, ao ajuste, às métricas com fórmula e p-valor, ao SHAP e ao escore que vira ratings. Persistência em JSON mais .model.joblib.

tune_optunaset_modelreport_pdfALGORITHMS
beeswarm SHAP · lightgbm · AUC(OOT) 0,808
Beeswarm SHAP do modelo LightGBM: cada ponto é um contrato, a posição no eixo x é a contribuição da variável para o escore e a cor é o valor da variável. feat_util_lim alta empurra o risco para cima; feat_renda alta empurra para baixo.
Um ponto por contrato. À direita, empurra o escore para cima; util_lim alta agrava, renda alta protege.
RAMO 06

Capital econômico de carteira

O capital para absorver perdas inesperadas em um ano, no nível do apetite de risco. ASRF/Vasicek analítico, Monte Carlo multifatorial com severidade estocástica, CreditRisk+ por recursão de Panjer e CreditMetrics, mais alocação de Euler e RAROC.

PortfolioSegmentasrf_capitalsimulateeuler_allocation
distribuição de perdas · q = 99,9%
EL VaR 99,9%
ELperda esperadaR$ 1,08 mi
VaR99,9%R$ 4,62 mi
CEVaR menos ELR$ 3,54 mi
Div.benefício18,3%
RAMO 07

Modelos econométricos satélite

O eixo temporal, complementar ao transversal: liga as séries agregadas de PD, LGD e CCF às variáveis macro e projeta por cenário. ARDL, ARIMAX, fator Z de Vasicek, beta e fractional logit, VAR/VECM e painel, com champion-challenger, filtro de sinal econômico e walk-forward.

RiskSeriesARDLVasicekZScenarioSetrun_study
projeção por cenário · leque 90%
observado projetado
adverso base otimista
ARDL(2,1) · desemprego + · renda · VIF máx 2,4 · DM p=0,03

A interface em ação

A árvore, aba por aba

A TreeSegmenterUI constrói a régua dentro do notebook, sem sair do Jupyter nem do Databricks. Os três GIFs abaixo são saídas reais da biblioteca sobre uma carteira sintética de 24 mil contratos, com 18 safras e amostras DES e OOT.

ABA CONSTRUÇÃO

A régua crescendo

Cada split é uma decisão sua. A árvore parte da carteira inteira e ganha um nível por vez.

  • raiz: 24.000 contratos, 14,1% de inadimplência
  • split 1: feat_atraso_max, corte ótimo em 1,5
  • split 2: feat_util_lim, faltantes em bin própria
  • prune: folhas pouco representativas removidas
  • auto_merge: 6 folhas, de 5,6% a 48,2%
ConstruçãoVariáveisDiagnósticoValidarAvançado
Animação da árvore de segmentação crescendo: raiz, três splits sucessivos, poda e fusão automática de folhas.
ABA DIAGNÓSTICO

Métricas da régua pronta

Discriminação, ordenação e calibração, sempre com DES e OOT lado a lado.

  • curva ROC por amostra
  • KS e o ponto de corte ótimo
  • taxa de default por folha, com IC de Wilson
  • distribuição do escore
  • previsto contra observado
ConstruçãoVariáveisDiagnósticoValidarAvançado
Animação alternando entre curva ROC, gráfico de KS, taxa de default por folha, distribuição do escore e curva de calibração.
ABA VARIÁVEIS

Antes de cortar, entender

A análise univariada dentro da folha, para decidir o corte com evidência e não por intuição.

  • distribuição por faixa e risco de cada faixa
  • logodds/WoE e leitura de monotonicidade
  • inversão de ordem entre DES e OOT
  • PSI da variável safra a safra
ConstruçãoVariáveisDiagnósticoValidarAvançado
Animação da análise univariada: distribuição com taxa de risco por faixa, logodds, inversão entre amostras e PSI por safra.

Personalize à sua vontade

Os Nove Mundos

Yggdrasil sustenta nove reinos. Clique em um deles para recolorir esta página inteira. A escolha fica salva no seu navegador; o padrão é Ásgard, escuro.

Sete escuros e dois claros. As UIs da biblioteca (TreeSegmenterUI e ModelSegmenterUI) também têm toggle de tema 🌙.

Instalação

Núcleo enxuto,
extras sob demanda

No PyPI a distribuição chama yggdrasil-project, porque o nome yggdrasil já estava tomado. O nome de import continua yggdrasil.

# do PyPI (versão publicada)
pip install yggdrasil-project

# do GitHub (versão de desenvolvimento)
pip install git+https://github.com/richardguilhermeds/Yggdrasil-Project.git

# ou clonando, em modo editável
git clone https://github.com/richardguilhermeds/Yggdrasil-Project.git
cd Yggdrasil-Project
pip install -e ".[dev]"

# uso mínimo
from yggdrasil import MLPipeline, ColumnConfig

cfg  = ColumnConfig()   # feat_, dt_ref, amostra, target
pipe = MLPipeline(cfg, problem_type="classification",
                  ratings=["decis", "quantil", "arvore", "optbin"])
res  = pipe.run(df, model=modelo, experiment="/Shared/Yggdrasil/pd_pf")

res.metrics_by_sample   # métricas por DES/OOT
res.shifts              # shifts DES -> OOT
res.reports             # relatório por grupo homogêneo
extrapara quê
[dev]núcleo mais pytest, jupyter e nbconvert
[ui]UIs interativas (ipywidgets, anywidget)
[spark]backend Spark da triagem de features fora do Databricks (em pandas, dispensável)
[econometric]satélites: statsmodels e arch
[catboost]CatBoost (LightGBM e XGBoost já no core)
[pycaret]treino automatizado via PyCaret

O layout é flat: o pacote vive na raiz do repositório, então import yggdrasil funciona mesmo sem instalar, rodando da raiz do clone ou no Databricks Repos, que já põe a raiz do repo no sys.path.

Localmente o MLflow 3.x exige MLFLOW_ALLOW_FILE_STORE=true para o backend ./mlruns. Os notebooks já definem isso. No Databricks, use o tracking do workspace.

Ragnarök é opcional

Suba na árvore

Código aberto sob licença MIT. Issues, ideias e pull requests são bem-vindos: a árvore cresce mais rápido com mais raízes.