12  Auditoría de Fair Lending

12.1 Checkpoint de Fair Lending

El CRPTO defiende auditabilidad como diferencia editorial frente a SPO+ y otros métodos decision-focused. Auditabilidad no es sólo cobertura conformal verificable — incluye también la auditoría de fair lending sobre el funded set efectivo. Esta página documenta la prueba completa y muestra que el champion oficial pasa los seis tests definidos en el fairness_policy.yaml del proyecto, incluyendo tres tests intersectional que son la evidencia más exigente de la auditoría.

12.1.1 Marco de medición

La política aplicada al champion sigue tres métricas estándar de fair lending, alineadas con el lenguaje regulatorio (CRA, ECOA, GDPR Art. 22) y con la literatura de fairlearn:

Tabla 12.1: Las tres métricas estándar de fair lending, con umbrales conservadores aplicados al champion.
Métrica Definición Umbral Lectura operativa
Demographic Parity Difference (DPD) \(\max_{g,g'} \|P(\hat{y}=1\|g) - P(\hat{y}=1\|g')\|\) DPD ≤ 0.05 Diferencia máxima en tasa de aprobación entre grupos.
Equalized Odds Gap (EO) \(\max(\text{TPR gap}, \text{FPR gap})\) entre grupos EO ≤ 0.10 Asegura que TPR y FPR no diverjan entre grupos.
Disparate Impact Ratio (DIR) \(\min_g \text{rate}_g / \max_g \text{rate}_g\) DIR ≥ 0.80 Regla del “four-fifths” del EEOC.

outcome_mode = approval (no umbral interno PD): la auditoría se hace sobre la decisión de aprobación que el portafolio realmente toma — el funded set —, no sobre la probabilidad PD interna que el modelo escupe antes del optimizador. Esa elección semántica fue una decisión deliberada del proyecto y aparece documentada en DECISION_CHANGES_AND_LEARNINGS.md porque cambia significativamente el diagnóstico (auditar el output que el cliente experimenta, no un score interno).

12.1.2 Resultado: 6/6 PASS sobre 3 atributos base + 3 intersectional

TipLectura editorial

Los seis tests pasan con mucho margen de los umbrales:

  • DPD máximo observado: 0.0344 (atributo home_ownership × verification_status); el umbral es 0.05.
  • EO gap máximo observado: 0.0637 (mismo atributo); el umbral es 0.10.
  • DIR mínimo: 0.9656 (mismo atributo); el umbral es 0.80.

El atributo “intersectional” más restrictivo es home_ownership × verification_status, lo que tiene sentido económico: la combinación de tipo de vivienda (proxy de wealth) con verificación de ingresos (proxy de calidad de información) sí concentra heterogeneidad de riesgo. Aún así, las tres métricas pasan con el doble del margen del umbral.

12.1.3 Por qué Lending Club no permite auditoría sobre raza/género — y qué sí prueba esta auditoría

Lending Club no publica raza, género ni edad de los solicitantes en los datos abiertos. Por eso esta auditoría no debe leerse como certificación legal de no discriminación sobre clases protegidas directas. Lo que sí prueba es más acotado y útil para el paper: sobre los atributos disponibles que funcionan como proxies socioeconómicos y de calidad de información (home_ownership, annual_inc_quartile, verification_status) y sobre sus cruces, la decisión de aprobación/funding del champion no concentra disparidad por encima del umbral definido en fairness_policy.yaml.

La auditoría intersectional cumple además una función específica que la auditoría base por atributo no captura: detecta concentraciones de adverse selection que aparecen sólo cuando dos atributos se cruzan. Que home_ownership × verification_status tenga el peor DPD pero aún pase con margen es la evidencia clave disponible en este dataset: el funded set no concentra rechazos en una intersección particular de atributos proxy. La extensión natural para tesis o validación externa sería repetir el checkpoint con atributos protegidos observados y con monitoreo temporal prospectivo.

12.1.4 Comparación con la auditoría sobre el modelo PD crudo

La diferencia entre auditar el funded set (outcome_mode=approval) versus auditar el score PD interno es importante porque el LP robusto suaviza asimetrías que existirían sobre el score puro. Por construcción, el LP robusto:

  1. Pone una restricción de PD ponderada \(\sum_i w_i p_i^H \leq \tau\) que actúa uniformemente sobre todos los segmentos.
  2. Selecciona préstamos por retorno relativo, lo que tiende a equilibrar la composición.
  3. Hereda la cobertura mínima por grupo del conformal Mondrian (91.90%, ver Sección 10.1), evitando que un segmento concentre incertidumbre.

El resultado es que la decisión de portafolio es naturalmente más uniforme entre grupos que la decisión de score puro, lo que se refleja en los DPD/EO gaps observados.

12.1.5 Estado en models/fairness_audit_status.json

12.1.6 Limitaciones honestas

  • Atributos proxy no equivalen a atributos protegidos directos. Un test sobre raza/género observada podría revelar problemas que estos proxies no capturan. Esa limitación es propia del dataset, no del método.
  • DPD/EO/DIR son métricas estáticas. No detectan adverse selection dinámico (e.g., grupo X siendo cada vez más rechazado a lo largo del tiempo). Un análisis temporal de fairness queda como future work.
  • El test es por preferencia del comité de riesgo. Una jurisdicción con regla más estricta (e.g., DPD ≤ 0.01) podría requerir tightening adicional del LP. El proyecto documenta umbrales en configs/fairness_policy.yaml y el comité podría ajustar.

12.1.7 Conexión con el argumento del paper

La auditoría fair lending es uno de los tres pilares de auditabilidad que CRPTO ofrece y SPO+ no:

  1. Cobertura conformal verificable — auditable empíricamente periodo a periodo (Sección 11.1).
  2. Robust region completa — 45/45 policies pasan el bound exacto (Capítulo 5).
  3. Fair lending pasa intersectional — esta página.

Esos tres pilares juntos justifican la posición editorial del paper: CRPTO no compite por menor regret; compite por una decisión defendible ante un comité de riesgo o un regulador.

12.1.8 Reproducibilidad

uv run python scripts/run_fairness_audit.py
uv run pytest tests/ -k "fairness"

Artefactos:

  • models/fairness_audit_status.json — resumen ejecutivo (overall pass, conteo de atributos).
  • data/processed/fairness_audit.parquet — métricas detalladas por atributo (base + intersectional).
  • data/processed/fairlearn_group_metrics.parquet — métricas group-by-group para diagnóstico.
  • data/processed/fairness_threshold_frontier.parquet — frontera de threshold para tradeoffs operacionales.
  • configs/fairness_policy.yaml — umbrales y atributos auditados.