Skip to main content

Librería de riesgo de crédito: scoring, ML, provisiones CMF e IFRS 9/ECL, forward-looking y stress testing.

Project description

Nikodym RiskLib

PyPI Python License: Apache-2.0 CI

Librería Python open-source (Apache-2.0) de riesgo de crédito integral: scoring/scorecards, backends ML, provisiones CMF (Chile) e IFRS 9/ECL, forward-looking y stress testing. Todo en un motor reproducible por construcción y con gobernanza (model card + audit-trail) automática. Paquete: nikodym.

Estado: pre-1.0 (0.9.x). El motor V1 está completo y verde; la API pública sigue versionada como 0.x honesto (SemVer): puede cambiar hasta la 1.0. Las superficies que aún crecen (resultados/overlay/métricas/orquestación) están marcadas como experimentales.

Qué hace

  • Scorecard (F1): binning/WoE con monotonía (optbinning), selección, regresión logística, scorecard escalado, calibración y métricas de desempeño (AUC/KS/Gini) y estabilidad (PSI/CSI).
  • Backends ML (F2): XGBoost, LightGBM, CatBoost y tuning (Optuna) como extras selectivos, con explicabilidad (SHAP) opcional.
  • Provisiones: motores CMF (Chile) e IFRS 9/ECL separados; la provisión es el máximo de ambos (piso prudencial).
  • Forward-looking & stress testing: proyección macroeconómica y escenarios.
  • Reproducibilidad total: (datos + config + semilla) → resultado idéntico, con lineage bundle (git SHA + hash de datos + config + semilla + uv.lock) en cada corrida.

Instalación

pip install nikodym                 # núcleo base (config, Study, lineage)
pip install 'nikodym[scoring]'      # MVP scorecard (optbinning + statsmodels + sklearn>=1.6)
pip install 'nikodym[all]'          # todo lo redistribuible (sin copyleft)

Requiere Python ≥ 3.11. El núcleo base es liviano: import nikodym no arrastra el stack ML; los backends pesados viven tras extras opcionales con import perezoso.

Quickstart

El experimento es un NikodymConfig declarativo; nikodym.run(config) lo ejecuta de extremo a extremo (binning → selección → modelo → scorecard → calibración → desempeño → estabilidad) y devuelve un Study reproducible. Este ejemplo usa el preset estándar F1 sobre un dataset sintético de consumo, así corre sin rellenar ningún campo:

from pathlib import Path
from tempfile import mkdtemp

import nikodym
from nikodym.core.config import NikodymConfig
from nikodym.ui.datasets import materialize
from nikodym.ui.presets import standard_preset

# 1. Materializa el dataset sintético de consumo (determinista) en un workdir temporal.
workdir = Path(mkdtemp(prefix="nikodym-quickstart-"))
preset = standard_preset()
data_path = materialize(preset["dataset_id"], workdir=workdir)

# 2. Toma el config F1 curado y apúntalo al archivo de datos recién materializado.
cfg_dict = preset["config"]
cfg_dict["data"]["load"]["source"] = str(data_path)
config = NikodymConfig.model_validate(cfg_dict)

# 3. Ejecuta la corrida completa y verifica el estado.
study = nikodym.run(config)
assert study.run_context.status == "done"

# 4. Accede a los resultados namespaced por dominio/clave.
scorecard = study.artifacts.get("scorecard", "scorecard")             # tabla del scorecard
metrics = study.artifacts.get("performance", "discriminant_metrics")  # AUC/KS/Gini por partición
print(metrics)

nikodym.run es fail-loud pero no explosivo: ante un fallo devuelve el Study parcial con study.run_context.status == "failed" (el error vive en el audit-trail y el lineage, no se silencia). El consumidor por código debe chequear study.run_context.status antes de usar los resultados.

Principios de diseño

  • Reproducibilidad total: misma entrada → resultado byte-idéntico, con lineage completo.
  • Gobernanza por construcción (SR 11-7): model card y audit-trail automáticos.
  • Config declarativo (Pydantic v2): el config ES el experimento.
  • Núcleo liviano: los backends pesados van tras extras con import perezoso.
  • CMF ≠ IFRS 9: dos motores separados; la provisión es el máximo (piso prudencial).

Documentación

Guía completa (conceptos, referencia de run/Study/NikodymConfig) en el sitio de documentación. El CHANGELOG.md registra los cambios por versión.

Desarrollo

El proyecto usa uv + hatchling, con layout src/.

uv sync                              # entorno completo (grupo dev: test/lint/docs)
uv run ruff check . && uv run ruff format --check .
uv run mypy                          # type-check estricto de todo el paquete
uv run pytest                        # suite de tests

Licencia

Apache-2.0. Sin dependencias copyleft (GPL/LGPL/AGPL) en el wheel.

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

nikodym-0.9.0.tar.gz (1.3 MB view details)

Uploaded Source

Built Distribution

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

nikodym-0.9.0-py3-none-any.whl (860.5 kB view details)

Uploaded Python 3

File details

Details for the file nikodym-0.9.0.tar.gz.

File metadata

  • Download URL: nikodym-0.9.0.tar.gz
  • Upload date:
  • Size: 1.3 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for nikodym-0.9.0.tar.gz
Algorithm Hash digest
SHA256 456dbf501ee81305b6b5c4726ea15c4d2692e992b3f3dc91bccde890543bde27
MD5 bd7f07efc4d2129504c2224f282f3e44
BLAKE2b-256 03238f8b7110397d51ac65c666452ec619840524b32bea166bbe0ce486ca3891

See more details on using hashes here.

Provenance

The following attestation bundles were made for nikodym-0.9.0.tar.gz:

Publisher: release.yml on nexolabs-gh/nikodym

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

File details

Details for the file nikodym-0.9.0-py3-none-any.whl.

File metadata

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

File hashes

Hashes for nikodym-0.9.0-py3-none-any.whl
Algorithm Hash digest
SHA256 807205a79e58815304c07d1a36fc286d3c05c1b779f6dc442ddc898f88be799d
MD5 d12bb5a9c518d29aad977b32b34a8c30
BLAKE2b-256 f9f734537dfd5385c34448b670f4f6d864e112e2d21dd2792de954a61f069eed

See more details on using hashes here.

Provenance

The following attestation bundles were made for nikodym-0.9.0-py3-none-any.whl:

Publisher: release.yml on nexolabs-gh/nikodym

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