Proxima Alpha - Powered by Santander

Santander

Últimos 7 días

chat_bubble_outlineActúa como quantitative c...
chat_bubble_outlineActúa como quantitative c...
chat_bubble_outlineEx 28.- Top Cheflabel
chat_bubble_outlineEx 27.- top 25 Q-Alabel
chat_bubble_outlineEx 26.- Panel estructurado de ...label
chat_bubble_outlineEx 25.- Optimización regulator...label
chat_bubble_outlineEx 24.- WWRlabel
chat_bubble_outlineEx 23.- Insurance 1label
chat_bubble_outlineEx 25.- Counterparty Credit Ri...label
chat_bubble_outlineEx 24.- VaR Backtesting Workfl...label
chat_bubble_outlineEx 23.- VaR 2label
chat_bubble_outlineEx 22.- Merton - Credit Risklabel
chat_bubble_outlineEx 21.- Framework de análisis ...label
chat_bubble_outlineEx 20.- Claims, reserveslabel
chat_bubble_outlineEx 19.- credit card scoringlabel
chat_bubble_outlineEx 18.- credit scoring mediant...label
chat_bubble_outlineEx 17.- Mortality, Lee Carterlabel
chat_bubble_outlineEx 16.- business cycle analysi...label
chat_bubble_outlineEx 15.- Portfolio Optimizationlabel
chat_bubble_outlineEx 14.- First-to-Defaultlabel
chat_bubble_outlineEx 13.- Bond Optimizationlabel
chat_bubble_outlineEx 12.- Brinson-Fachler Attrib...label
chat_bubble_outlineEx 11.- Forecasting de tasas d...label
chat_bubble_outlineEx 10.- Asian Basketlabel
chat_bubble_outlineEx 9.- Price a Swaption Using ...label
chat_bubble_outlineEx 8.- Black-Karasinskilabel
chat_bubble_outlineEx 7.- Weather derivativeslabel
chat_bubble_outlineEx 6.- pricing sobre electrici...label
chat_bubble_outlineEx 5.- Option chainlabel
chat_bubble_outlineEx 4.- Semiconductorlabel
chat_bubble_outlineEx 3.- Hurricane Natural Catas...label
chat_bubble_outlineEx 2.- Catastrophe Risklabel
chat_bubble_outlineEx 1 .- Geopolitical risklabel
chat_bubble_outlineUnderstant it first: You ...
chat_bubble_outlineQuiero que entiendas en d...
chat_bubble_outlineQuiero que entiendas en d...
chat_bubble_outlinedibuja el precio de BBVA....
chat_bubble_outlinedibuja el precio de BBVA....
chat_bubble_outlinedime que hay en Movement4...
chat_bubble_outlinedile a quant_calculations...
chat_bubble_outlinedile a quant que haga una...
chat_bubble_outlinellama a quant_calculation...
chat_bubble_outlineDibuja el precio de Santa...
chat_bubble_outlineDibuja el precio de Santa...
chat_bubble_outlineDibuja el precio de Santa...
chat_bubble_outlineDibuja el precio de Santa...
chat_bubble_outlineQuiero que entiendas en d...
chat_bubble_outlinedile a quant que me diga ...
chat_bubble_outlinedile a quant que haga una...
chat_bubble_outlinedile a quant que haga una...
settings Ajustes
help_outlineAyuda
chevron_right
📗
CreditCardData.xlsx64.2 KB
OBJETIVO Construir un workflow completo de bias mitigation para un modelo de credit scoring usando: CreditCardData.xlsx La idea es replicar el flujo conceptual del ejemplo: 1. cargar datos de tarjeta...

Blackmont

Informe del workflow de bias mitigation en credit scoring (edad como atributo sensible)

1. Revisión del fichero y del flujo implementado

Revisión del Excel

He revisado cuidadosamente el fichero CreditCardData.xlsx (id interno file-K9QexjqiRphzHaN25tF4bs):

  • Hoja principal: Sheet1.
  • Columnas presentes (todas usadas en el workflow):
    • CustID, CustAge, TmAtAddress, ResStatus, EmpStatus, CustIncome, TmWBank, OtherCC, AMBalance, UtilRate, status.
  • status es binaria (0/1) y se ha validado que solo hay dos clases.
  • Se han eliminado duplicados por CustID y filas con NaN en variables del modelo.

Esto es consistente con la especificación que diste y permite usar el dataset directamente en el pipeline.


2. Archivos y outputs generados

El workflow completo ha generado:

Gráficos interactivos (HTML, Plotly)

Cada uno se puede abrir en el navegador:

Ficheros de resultados

  • Excel con todos los datos y tablas clave: Download file

  • HTML resumen con enlaces a los gráficos: Download file


3. Performance del modelo base vs modelo mitigado

Métricas en test (resumen)

MétricaBaseMitigado
Accuracy0.5780.575
Precision0.4180.416
Recall (TPR)0.7060.706
ROC AUC0.6640.663
KS0.2460.246
  • El cutoff de PD se seleccionó por índice de Youden en train: cutoff_PD ≈ 0.3021 y se reutiliza idéntico para el modelo mitigado, cumpliendo tu requisito de comparación justa.

Interpretación

  • La capacidad predictiva (AUC ~0.66, KS ~0.25) es moderada, típica de modelos de scoring iniciales.
  • El modelo mitigado mantiene prácticamente la misma performance:
    • AUC pasa de 0.664 a 0.663 (variación despreciable).
    • Accuracy y precision bajan mínimamente (0.578 → 0.575, 0.418 → 0.416).
    • Recall (sensibilidad a defaults) se mantiene constante.

En términos de trade-off performance vs fairness, se ha logrado aplicar reweighting sin degradar sustancialmente la calidad predictiva.


4. Fairness por grupo de edad (modelo base)

Definición del atributo sensible:

  • AgeGroup = 'Young' si CustAge < 30 (grupo protegido).
  • AgeGroup = 'Other' si CustAge ≥ 30 (grupo de referencia).

En el conjunto de test:

Distribución de aprobaciones y errores – modelo base

  • Número de clientes:
    • Other: 340
    • Young: 20
  • Approval rate (base):
    • Other: 0.465
    • Young: 0.050
  • Rejection rate (base):
    • Other: 0.535
    • Young: 0.950
  • Bad rate entre aprobados (base):
    • Other: 22.15 % aprox.
    • Young: 0 % (muy pocas aprobaciones, muestra muy pequeña).
  • Error rates (base):
    • FPR:
    • Other: 0.468
    • Young: 0.900
    • FNR:
    • Other: 0.321
    • Young: 0.000
    • TPR:
    • Other: 0.679
    • Young: 1.000

Conclusión:

  • El modelo base rechaza casi siempre a los jóvenes (95 % de rechazo), mientras que aprueba al 46 % del resto.
  • La FPR de Young es muy alta (0.9) pero esto hay que tomarlo con cautela por el tamaño muestral muy pequeño en el grupo joven en test (20 observaciones).

Métricas de sesgo (base, test)

  • Demographic parity difference (Young − Other): dp_diff_base ≈ -0.415 → la tasa de aprobación de jóvenes es 41.5 puntos porcentuales inferior a la de Other.
  • Demographic parity ratio: dp_ratio_base ≈ 0.108 → los jóvenes son aprobados a un ~10.8 % de la tasa de Other (disparate impact muy fuerte).
  • Equal opportunity difference (TPR Young − TPR Other): eod_diff_base ≈ 0.321 → TPR de jóvenes es 32 p.p. superior, pero insisto: estimado con muy poca muestra.
  • Disparate impact ratio: coincide con dp_ratio_base ≈ 0.108.

Desde el punto de vista regulatorio/ético, el modelo base presenta un fuerte desbalance de approvals contra el grupo joven.


5. Efecto del reweighting (modelo mitigado)

Mecanismo de reweighting

  • Se calcularon pesos en train con la fórmula conceptual que indicaste: w(g,y)=P(g) P(y)P(g,y)w(g, y) = \frac{P(g)\,P(y)}{P(g, y)}w(g,y)=P(g,y)P(g)P(y)​ para g∈{Young,Other}g \in \{\mathrm{Young, Other}\}g∈{Young,Other} y y∈{0,1}y \in \{0, 1\}y∈{0,1}.
  • Luego se normalizaron para que el peso medio fuera aproximadamente 1:
    • sample_weight_min ≈ 0.981
    • sample_weight_max ≈ 1.040
  • En test se fijó peso = 1 (no se mitiga el conjunto de evaluación).

Esto garantiza:

  • Pesos positivos y no extremos (muy importante para estabilidad del entrenamiento).
  • Una corrección relativamente suave de la dependencia entre AgeGroup y status en el entrenamiento.

Fairness del modelo mitigado (test)

  • Approval rate (mitigated):
    • Other: 0.462
    • Young: 0.050
  • Rejection rate (mitigated):
    • Other: 0.538
    • Young: 0.950
  • Bad rate approved (mitigated):
    • Other: 22.29 %
    • Young: 0 %
  • Error rates (mitigated):
    • FPR:
    • Other: 0.472
    • Young: 0.900
    • FNR:
    • Other: 0.321
    • Young: 0.000
    • TPR:
    • Other: 0.679
    • Young: 1.000

Métricas de sesgo (mitigated, test)

  • Demographic parity difference: dp_diff_mit ≈ -0.412 (vs -0.415 en base).
  • Demographic parity ratio: dp_ratio_mit ≈ 0.108 (vs 0.108 en base, ligero aumento).
  • Equal opportunity difference: eod_diff_mit ≈ 0.321 (igual).
  • Disparate impact ratio: di_ratio_mit ≈ 0.108.

Conclusión clave:

  • El reweighting apenas mueve la tasa de aprobación del grupo joven en test (0.05 → 0.05).
  • Las métricas de fairness mejoran de forma mínima (dp_diff pasa de -0.415 a -0.412; ratio pasa de 0.1076 a 0.1083).
  • La performance permanece prácticamente idéntica.

Esto es coherente con que:

  • El grupo joven es muy pequeño en los datos (20 en test), y también minoritario en train.
  • Los pesos calculados resultan muy cercanos a 1 (rango 0.98–1.04), por lo que el efecto de la mitigación vía reweighting es intencionadamente “suave”.

6. Trade-off performance–fairness y análisis avanzado

Gráfico 9 – Performance vs fairness

  • Muestra un scatter con:
    • Eje X: ROC AUC.
    • Eje Y: ∣|∣demographic parity difference∣|∣.
  • Los puntos de base y mitigado están casi solapados: AUC ~0.664 vs 0.663; ∣|∣dp_diff∣|∣ ~0.415 vs 0.412.

Interpretación:

  • Este primer experimento de reweighting no desplaza la frontera performance–fairness de forma significativa.
  • Sirve como prueba de concepto del pipeline completo, pero no como mitigación fuerte y efectiva en el sentido de reducir disparidad.

Gráficos 10 y 11 – Score bands y calibración por grupo

  • Score bands:
    • Se definen deciles de PD_base en test y se analizan por banda y AgeGroup:
    • n_customers, bad_rate, approval_rate_base, approval_rate_mit, avg_PD_base, avg_PD_mit.
    • Se observa que:
    • En las bandas de menor riesgo (PD baja), ambos modelos aprueban casi todo.
    • En bandas de riesgo medio-alto, los approval rates bajan y el bad rate sube conforme esperado.
    • Los jóvenes aparecen muy poco en casi todas las bandas, lo que dificulta evaluar fairness por banda.
  • Calibración por grupo (Gráfico 11):
    • Para cada AgeGroup se crean deciles de PD_base, y se compara PD media vs default rate observado para base y mitigado.
    • Las curvas muestran una calibración razonable, con alguna oscilación debida al tamaño muestral reducido en Young.
    • Base y mitigado prácticamente se solapan: el reweighting casi no altera la calibración global.

7. Decisiones cambiadas por la mitigación

En el conjunto de test se identifican los casos con cambio de decisión:

  • change_type = 'rescued': base rechaza, mitigado aprueba.
  • change_type = 'harmed': base aprueba, mitigado rechaza.

En la cabeza de la tabla de cambios (changed_decisions_head) aparece, por ejemplo:

  • Un caso CustID = 1025 (AgeGroup = Other) clasificado como:
    • decision_base = approve
    • decision_mit = reject
    • change_type = 'harmed'
    • status = 0 (Good) Esto muestra un ejemplo en el que la mitigación perjudica a un cliente concreto (aunque no del grupo protegido).

En resumen:

  • Hay muy pocos cambios de decisión entre base y mitigado (el reweighting es suave).
  • Los cambios se concentran más en el grupo Other que en el grupo Young (de nuevo, por tamaño muestral).

Toda la tabla está disponible en la hoja changed_decisions del Excel de resultados:

  • Download file

8. Validaciones clave del framework

Se han verificado explícitamente:

  • Status binario: solo 0/1 tras limpieza.
  • AgeGroup correctamente definido con el umbral CustAge < 30.
  • Pesos de reweighting:
    • Todos positivos.
    • Rango muy acotado (0.98–1.04), sin pesos extremos.
  • Mismo split train/test para ambos modelos.
  • Mismo cutoff de PD para base y mitigado.
  • PD en [0,1] en todos los conjuntos.
  • Todas las métricas de comparación principales se han calculado en test.

9. Conclusiones y próximos pasos

Conclusiones del experimento actual

  1. Framework completo: Has conseguido exactamente lo que pedías:

    • Pipeline de datos, definición del target y atributo sensible.
    • Modelo base de credit scoring (logistic regression).
    • Métricas de performance y fairness.
    • Cálculo de pesos de reweighting y reentrenamiento del modelo mitigado.
    • Comparación cuantitativa base vs mitigado.
    • Análisis por score bands y calibración por grupo.
    • Identificación de decisiones cambiadas.
  2. Sesgo inicial fuerte:

    • El modelo base muestra muy baja aprobación para jóvenes (5 %) frente a Other (~46 %), con un disparate impact ratio ~0.108, lo que evidencia un problema serio de equidad si la edad se considera atributo protegido en el contexto.
  3. Mitigación suave:

    • El reweighting aplicado apenas modifica la tasa de aprobación de jóvenes y las métricas de fairness, pero sí demuestra que:
    • Es posible introducir mitigación sin perder prácticamente performance.
    • El pipeline matemático y de ingeniería de datos funciona correctamente.

Recomendaciones y siguientes pasos

Si quieres ir más allá del “POC” y realmente reducir el sesgo, sugeriría:

  1. Explorar reweighting más agresivo:

    • Ajustar manualmente los pesos (por ejemplo, multiplicar por un factor > 1 en combinaciones Young–Good, Younger–Bad, etc.) en lugar de usar solo la fórmula proporcional a las probabilidades.
    • Introducir una restricción explícita sobre demographic parity o equal opportunity en el objetivo.
  2. Probar otras técnicas de mitigación:

    • Pre-procesamiento:
    • Rebalancing/oversampling de jóvenes en train.
    • Técnicas como “repairing” de variables correlacionadas con edad.
    • In-process:
    • Penalizar diferencias de TPR o approval rate por grupo en la función de pérdida.
    • Post-procesamiento:
    • Ajustar el cutoff por grupo (por ejemplo, cutoff más bajo para Young), manteniendo un control global de bad rate.
  3. Ampliar la muestra del grupo joven:

    • Con tan pocos clientes jóvenes, es difícil estimar métricas de fairness robustas.
    • Si es posible, incorporar más datos históricos para incrementar el tamaño del grupo protegido.
  4. Documentar el uso en producción:

    • Con el Excel/HTML que ya tienes puedes construir un informe regulatorio:
    • Evidencia de sesgo inicial.
    • Metodología de reweighting.
    • Comparativa cuantitativa base vs mitigado.
    • Impacto en tasas de aprobación y métricas de riesgo.

Si lo deseas, en el siguiente paso puedo:

  • Ayudarte a modificar el esquema de pesos para forzar una mejora más visible de fairness.
  • O ayudarte a redactar un documento de reporting final (en formato presentación o memo) basado en los ficheros generados.
como llamarias a este estudio?

Blackmont

Posibles títulos para el estudio

Te propongo varias opciones, en orden de más técnico a más “executive”:

  1. “Mitigación de sesgo por edad en modelos de credit scoring mediante reweighting”
  2. “Framework de credit scoring justo: detección y mitigación de sesgo etario con reweighting”
  3. “Análisis del trade-off entre precisión y fairness en un modelo de credit scoring con atributo sensible edad”
  4. “Evaluación y mitigación de sesgo en credit scoring: aplicación práctica de reweighting por grupos de edad”

Si quieres, puedo ayudarte a adaptar el título a un paper académico, a un informe interno de riesgo o a una presentación para comité.

se ha estimado alguna red neuronal? que modelos ha usado?

Blackmont

Modelos estimados en el estudio

No se ha estimado ninguna red neuronal en este workflow.

Los modelos utilizados han sido:

  1. Modelo base de credit scoring

    • Tipo: Regresión logística (LogisticRegression)
    • Entrenado sin pesos (class_weight=None) sobre el conjunto de entrenamiento.
    • Integrado en un Pipeline con:
    • StandardScaler para variables numéricas.
    • OneHotEncoder (con drop='first') para las categóricas.
    • ColumnTransformer para combinar ambos tipos de variables.
  2. Modelo mitigado (bias mitigation)

    • Mismo tipo de modelo: regresión logística con la misma especificación.
    • Misma matriz de features y mismo preprocesamiento.
    • Diferencia clave: se ha entrenado pasando sample_weight con los pesos de reweighting calculados por grupo sensible (AgeGroup) y target (status).

En resumen: solo se han usado regresiones logísticas (modelo lineal), una sin mitigación y otra con reweighting; no se han entrenado modelos de tipo red neuronal ni otros algoritmos más complejos en esta versión del estudio.

Nuestro Asistente es una herramienta de inteligencia artificial. La información generada no debe considerarse asesoramiento oficial