bayesrisk

Informe de validación de modelos

Informe de Validación de Scorecard

USO INTERNO — CONFIDENCIAL

Modelo
Entidad
Cartera
Responsable del desarrollo
Versión del informe
Fecha de emisión
2026-10-19

Trazabilidad de la corrida (lineage)

config_hash=3e2f2965984fe19f97f205ced60c9ea7aac6611884b2a12a49f5bcf07f803d01
data_hash=74c5d9ddeca8ff71853623d20ace015d0788564549339d61bfb66f24dfadfcc8
git_sha=—
root_seed=20240706

Desarrollo

Nombre y fecha

Validación independiente

Nombre y fecha

Aprobación

Nombre y fecha

Resumen de la corrida

Lo que cuenta la corrida al terminar, con la misma fuente que la puerta guiada y la pestaña Resultados: el estado de la ejecución y de la validación técnica, las cifras clave, qué revisar, las decisiones humanas con su motivo y dónde queda cada archivo. El veredicto lo firma el validador en el resumen ejecutivo.

Las rutas son las que el informe escribió al generarse: si la corrida se copia o se archiva después —desde la interfaz, o al apartar una corrida anterior—, los archivos se buscan en su carpeta de destino, y el registro de auditoría deja constancia de cada uno que se escribió.

Ejecución
corrieron sin fallos Datos y muestras, Análisis exploratorio, Tramos y WoE, Selección de variables, Modelo, Tarjeta de puntuación, Calibración, Desempeño, Estabilidad, Validación formal y Escala maestra; este informe es la última etapa de la corrida
Validación técnica
Falla — lo decide Hosmer-Lemeshow en Fuera de tiempo (OOT) (p-valor 0,013; PD media agregada 23,34 % frente a 23,71 % observada; la mayor diferencia, en el grupo 7 de 10: 16,83 % observado frente a 26,54 % predicho)

Cifras clave

AUC en Fuera de tiempo (OOT)0,656
Gini en Fuera de tiempo (OOT)0,312
KS en Fuera de tiempo (OOT)0,252
Caída del AUC Desarrollo → Fuera de tiempo (OOT)-0,056 (-7,9 %)
Peor PSI entre score y PD0,0132 (Desarrollo vs. Holdout) → Estable

Qué revisar

  • ⚠ Tramos y WoE: antiguedad_meses: la tasa de malos invierte la tendencia en Holdout
  • ⚠ Tramos y WoE: deuda_ingreso: la tasa de malos invierte la tendencia en Fuera de tiempo (OOT)
  • ⚠ Tramos y WoE: ingreso_mensual: la tasa de malos invierte la tendencia en Fuera de tiempo (OOT)
  • ⚠ Tramos y WoE: mora_max_12m: la tasa de malos invierte la tendencia en Holdout y Fuera de tiempo (OOT)
  • ⚠ Validación formal: Estado técnico «Falla»: revisar Hosmer-Lemeshow en Fuera de tiempo (OOT) (p-valor 0,013; PD media agregada 23,34 % frente a 23,71 % observada; la mayor diferencia, en el grupo 7 de 10: 16,83 % observado frente a 26,54 % predicho)
  • ⚠ Escala maestra: En Fuera de tiempo (OOT), el tramo 1 subestima su PD (rojo).

Decisiones humanas registradas

Ninguna decisión humana registrada; lo que se decidió vive en el config de la corrida.

Dónde quedó cada archivo

Informe HTML
artifacts/consumo_comportamiento_sin_stepwise/reports\scorecard_report.html
Informe Word
artifacts/consumo_comportamiento_sin_stepwise/reports\scorecard_report.docx (se escribe si el extra docx está instalado)
Registro de auditoría
audit_trail.jsonl, en la carpeta de evidencia de la corrida

Resumen ejecutivo

Veredicto de validación
  • Aprobado
  • Aprobado con observaciones
  • Rechazado

Campo estructural: lo marca y firma el validador independiente; no es un resultado calculado por el motor.

MétricaAlcanceValorEstado
AUC Desarrollo 0,7123 Sin alertas
Gini Desarrollo 0,4247 Sin alertas
KS Desarrollo 0,3201 Sin alertas
AUC Holdout 0,6946 Sin alertas
Gini Holdout 0,3893 Sin alertas
KS Holdout 0,3119 Sin alertas
AUC Fuera de tiempo (OOT) 0,6561 Sin alertas
Gini Fuera de tiempo (OOT) 0,3122 Sin alertas
KS Fuera de tiempo (OOT) 0,2519 Sin alertas
Peor PSI entre score y PD · PD calibrada Desarrollo vs. Holdout 0,0132 Estable
Peor PSI entre score y PD · score Desarrollo vs. OOT 0,0068 Estable
Estado técnico de validación formal consumo_comportamiento_sin_stepwise 1 de 3 pruebas fallidas Falla

No se configuraron umbrales de discriminación, de modo que el motor no puede levantar alertas sobre AUC, Gini ni KS: «sin alertas» significa que no había umbral contra el cual comparar, no que la métrica sea satisfactoria.

Las bandas de PSI usan los umbrales configurados: estable por debajo de 0,10, revisión desde 0,10 y redesarrollo desde 0,25.

La validación formal ejecutó discriminación, calibración y estabilidad. Su estado es una síntesis técnica del motor y no sustituye el veredicto que debe firmar un validador humano.

Alcance: scorecard y validación formal de las familias configuradas. El capítulo «Validación formal» reproduce el resultado que publicó el motor; el veredicto permanece bajo responsabilidad humana. Todos los valores provienen de la corrida trazada en la portada: no se completan con supuestos.

Índice

1Introducción

POR COMPLETAR — Introducción

Declara el propósito del informe y qué decisión habilita: ¿es una validación inicial previa a la puesta en producción, una revisión periódica o un recalibrado?

Delimita el alcance (qué modelo y qué cartera cubre, qué queda fuera) e identifica la audiencia: Validación independiente, Comité de Riesgo, regulador.

2Contexto del modelo y de la cartera

La población procesada contiene 6.000 observaciones, 8 variables de entrada y una tasa de incumplimiento de 23,45 %. Los conteos por estado, partición y motivo de exclusión se reproducen literalmente en las tablas de esta sección.

La columna objetivo de esta corrida es «target».

La tasa de incumplimiento observada en la población analizada es de 23,33 %, la tasa se agrupó por cohorte en 5 cohortes y se describieron 6 variables frente al incumplimiento.

El perfilado de calidad de datos levantó alertas sobre 1 variable con la marca «casi única». El detalle por variable está en el Anexo B.

La estabilidad temporal de la tasa de incumplimiento no se evaluó: eje de cohorte, sin orden cronológico. El indicador configurado era variación relativa.

La variable objetivo del ejercicio es «target», construida por las reglas de incumplimiento declaradas en el config (Anexo C). La definición de negocio que justifica esas reglas —p. ej. 90+ días de mora— debe explicitarla el analista: el motor aplica la regla, no la fundamenta.

La población se particionó por cohorte sobre «cohorte», reservando como OOT la cohorte «2024Q2», y un Holdout de 20,00 % del resto.

POR COMPLETAR — Contexto del modelo

Describe la cartera sobre la que se construyó el modelo: producto, segmento, volumen y período.

Explicita la definición de incumplimiento utilizada (p. ej. 90+ días de mora) y por qué; declara las exclusiones aplicadas a la población y su justificación.

2.1Población, particiones y exclusiones

Las tablas siguientes reproducen lo que dejó la preparación de datos de esta corrida. Estados, tamaños y tasas por partición, y exclusiones se copian literalmente; el informe no recalcula ni completa valores ausentes.

Estados de la población
EstadoObservaciones
bueno4.593
malo1.407
indeterminado0
excluido0
Particiones de modelamiento
ParticiónObservacionesTasa de incumplimiento
Desarrollo3.9610,2333
Holdout1.0310,2367
Fuera de tiempo (OOT)1.0080,2371
Fuera del ajuste00,0000
Exclusiones aplicadas
MotivoExclusiones

2.2Población y calidad de datos

A continuación se reproducen la tasa de incumplimiento por cohorte, graficada y en su tabla, el perfil por tramo de 6 variables descritas y la calidad de datos por columna.

Tasa de incumplimiento observada en el tiempo image/svg+xml 2023Q1 2023Q2 2023Q3 2023Q4 2024Q1 0,000 0,050 0,100 0,150 0,200 0,250 Tasa de incumplimiento Tasa de incumplimiento observada en el tiempo
Tasa de incumplimiento por tramo de cada variable descrita image/svg+xml > 1 y ≤ 13 > 13 y ≤ 26 > 26 y ≤ 38 > 38 y ≤ 50 > 50 y ≤ 62 > 62 y ≤ 73 > 73 y ≤ 85 > 85 y ≤ 97 > 97 y ≤ 108 > 108 y ≤ 120 0,00 0,05 0,10 0,15 0,20 0,25 0,30 antiguedad_meses > 0,0032 y ≤ … > 0,0919 y ≤ … > 0,1487 y ≤ … > 0,202000000… > 0,2525 y ≤ … > 0,3088 y ≤ … > 0,3661 y ≤ … > 0,4454 y ≤ … > 0,5362 y ≤ … > 0,6925 y ≤ … 0,00 0,10 0,20 0,30 0,40 deuda_ingreso > 74.032,56 y… > 287.183,36 … > 353.839,8 y… > 409.923,63 … > 460.844,97 … > 526.601,82 … > 600.699,29 … > 689.809,83 … > 810.582,2 y… > 1.017.997,7… 0,00 0,10 0,20 0,30 ingreso_mensual > 0 y ≤ 3 > 3 y ≤ 4 > 4 y ≤ 5 > 5 y ≤ 6 > 6 y ≤ 7 > 7 y ≤ 8 > 8 y ≤ 9 > 9 y ≤ 17 0,00 0,05 0,10 0,15 0,20 0,25 mora_max_12m asalariado independiente pensionado 0,00 0,05 0,10 0,15 0,20 0,25 segmento > 0,0041 y ≤ … > 0,1384 y ≤ … > 0,216 y ≤ 0… > 0,2795 y ≤ … > 0,3346 y ≤ … > 0,3881 y ≤ … > 0,443100000… > 0,5066 y ≤ … > 0,5755 y ≤ … > 0,6618 y ≤ … 0,00 0,05 0,10 0,15 0,20 0,25 0,30 utilizacion_linea Tasa de incumplimiento por tramo de cada variable descrita
Tasa de incumplimiento observada por período o cohorte
periodn_totaln_eligiblen_baddefault_ratelow_confidence
2023Q17857852010,2561no
2023Q27897891700,2155no
2023Q38388381880,2243no
2023Q47777771740,2239no
2024Q17727721910,2474no
Calidad de datos por columna
coldtypemissing_ratecardinalitynear_constantnear_uniquehigh_cardinality
ingreso_mensualfloat640,00003.961nosíno
deuda_ingresofloat640,00003.076nonono
utilizacion_lineafloat640,00003.064nonono
mora_max_12mint640,000018nonono
antiguedad_mesesint640,0000120nonono
segmentoobject0,00003nonono
cohorteobject0,00005nonono
bad_flagint640,00002nonono

3Metodología

Este capítulo describe el procedimiento realmente ejecutado por el motor en esta corrida, con los parámetros efectivos que constan en el config trazado en el Anexo A. No es una descripción genérica de la técnica: cada cifra citada aquí es la que produjo este modelo.

3.1Tratamiento de datos y particiones

El dataset se validó contra un esquema declarado de 8 columnas, con tipos y nulabilidad explícitos; una desviación del esquema detiene la corrida en vez de propagarse.

En el tratamiento de faltantes se reporta para revisión toda variable con más de 99,00 % de valores faltantes, sin eliminarla automáticamente.

3.2Binning WoE

Se discretizó cada variable con OptBinning, resolviendo el problema óptimo por programación entera mixta (MIP), partiendo de un máximo de 20 pre-bins, con un máximo de 6 bins por variable y un tamaño mínimo de bin de 5,00 % de la población.

La tendencia monótona exigida al WoE es automática (ascendente o descendente): el riesgo debe comportarse de forma coherente entre tramos contiguos, sin quiebres que un analista no pueda defender.

De 6 variables candidatas, 6 quedaron binificadas.

Los valores especiales se agrupan en un bin propio y los faltantes reciben el tratamiento «empirical» (OptBinning 0.20.0).

3.3Selección de variables

Se descartaron las variables con IV inferior a 0,02; las de IV igual o superior a 0,50 se marcaron para revisión, porque un poder predictivo tan alto suele indicar fuga de información más que señal legítima.

Se eliminó la redundancia entre pares de variables con correlación (pearson) sobre 0,75 y se acotó la multicolinealidad exigiendo un VIF bajo 5,0.

El filtro dejó 5 de 6 variables candidatas; el motivo de exclusión de cada variable descartada consta en la tabla de selección.

3.4Estimación del modelo PD

La probabilidad de incumplimiento se modeló mediante regresión logística (logit) sobre las variables transformadas a WoE, con un nivel de significancia de 0,05.

La construcción del modelo usó sin stepwise: se ajustó con todas las variables seleccionadas.

Se exige que el coeficiente de cada variable en WoE tenga el signo esperado (negativo): cuando se invierte, se marca la variable sin excluirla. Un signo invertido significa que la variable contradice la relación de riesgo que su binning declara.

El modelo final retiene 5 de 5 variables de entrada.

3.5Escalado del scorecard

El modelo se escaló a puntaje con la convención PDO: un puntaje de 600 corresponde a odds de 50:1, y cada 20 puntos adicionales duplican esas odds.

De esa convención se derivan los parámetros efectivos de la escala: factor 28,8539 y offset 487,1229.

Un puntaje más alto indica menor riesgo y los puntajes se emiten con redondeo al entero más cercano.

3.6Calibración de la PD

La PD se calibró por desplazamiento del intercepto (intercept offset), ajustando sobre la partición de Desarrollo contra la tasa de incumplimiento observada en Desarrollo, que resultó ser 23,33 %. El ancla es a través del ciclo (TTC).

El desplazamiento aplicado al intercepto es -2,7e-16, lo que preserva el ordenamiento del score: la calibración corrige el nivel de la PD, no su ranking.

El ajuste se realizó sobre 3961 observaciones de Desarrollo.

4Resultados

Los resultados se presentan por etapa, con las tablas que sostienen el juicio de validación. El detalle exhaustivo —todas las tablas y todos los parámetros de cada paso— no se pierde: vive en los Anexos B y C, que son parte de este mismo informe.

4.1Binning WoE y poder predictivo

El poder predictivo univariado (IV) de las 6 variables binificadas lo encabezan «ingreso_mensual» (0,305), «deuda_ingreso» (0,164) y «utilizacion_linea» (0,061). El IV de cada variable consta en la tabla siguiente y su binning completo, bin a bin, en el Anexo B.

La monotonía efectiva del WoE resultó en 3 variables con tendencia ascendente y 2 variables con tendencia descendente, y 1 sin tendencia monótona resuelta, lo que debe revisarse.

Resumen de binning — IV por variable
namedtypestatusselectedn_binsivjsginiquality_scoreiv_bandis_suspicious_ivis_zero_ivmonotonic_trendskipped_reason
ingreso_mensualnumericalOPTIMALsí60,30480,03670,29460,8181strongnonodescending—
deuda_ingresonumericalOPTIMALsí60,16350,01990,20480,1712mediumnonoascending—
utilizacion_lineanumericalOPTIMALsí50,061030,00760,13150,1732weaknonoascending—
mora_max_12mnumericalOPTIMALsí60,02190,00270,07970,0031weaknonoascending—
antiguedad_mesesnumericalOPTIMALsí60,04140,00510,09550,00504weaknonodescending—
segmentocategoricalOPTIMALsí30,00290,000370,02920,0027—nono——

4.2Selección de variables

Las 5 variables que pasaron el filtro son «antiguedad_meses», «deuda_ingreso», «ingreso_mensual», «mora_max_12m» y «utilizacion_linea».

Las exclusiones se reparten en 1 por IV insuficiente.

Tras la selección, la correlación absoluta máxima entre las variables finales es 0,0303 y el VIF máximo es 1,002.

Criterios de selección por variable
featurewoe_columnincludedreasoniviv_bandaucginiksmax_abs_corrmax_corr_withvifmax_csiforceddetail
antiguedad_mesesantiguedad_meses__woesíincluded0,0414weak0,54770,09550,06095——1,0011———
deuda_ingresodeuda_ingreso__woesíincluded0,1635medium0,60240,20480,1601——1,0001———
ingreso_mensualingreso_mensual__woesíincluded0,3048strong0,64730,29460,2118——1,0006———
mora_max_12mmora_max_12m__woesíincluded0,0219weak0,53990,07970,0641——1,0016———
segmentosegmento__woenolow_iv0,0029—0,51460,02920,0234—————IV 0,0029 < mínimo 0,02
utilizacion_lineautilizacion_linea__woesíincluded0,06103weak0,56580,13150,0978——1,0006———
Factor de inflación de varianza (VIF)
iterationfeaturewoe_columnvifremovedreason
0ingreso_mensualingreso_mensual__woe1,0006no—
0deuda_ingresodeuda_ingreso__woe1,0001no—
0utilizacion_lineautilizacion_linea__woe1,0006no—
0antiguedad_mesesantiguedad_meses__woe1,0011no—
0mora_max_12mmora_max_12m__woe1,0016no—

4.3Modelo PD

El modelo final incluye 5 variables: «antiguedad_meses», «deuda_ingreso», «ingreso_mensual», «mora_max_12m» y «utilizacion_linea».

En el ajuste in-sample, el optimizador convergió, el ajuste usó 3961 observaciones de Desarrollo, de las cuales 924 son incumplimientos y el pseudo-R² de McFadden es 0,0968.

Coeficientes del modelo (β, IC 95 %) image/svg+xml -1,40 -1,20 -1,00 -0,80 -0,60 -0,40 -0,20 0,00 Coeficiente β (IC 95 %) mora_max_12m ingreso_mensual deuda_ingreso antiguedad_meses utilizacion_linea Coeficientes del modelo (β, IC 95 %)
Coeficientes del modelo PD
featurewoe_columnbetastandard_errorwald_zp_valueconf_lowconf_highexpected_signsign_okiviv_contribution
interceptconst-1,19210,0405-29,4199< 0,001-1,2715-1,1127————
antiguedad_mesesantiguedad_meses__woe-1,081040,2101-5,1461< 0,001-1,4928-0,6693negativesí0,04140,0698
deuda_ingresodeuda_ingreso__woe-1,07830,0971-11,1025< 0,001-1,2687-0,88796negativesí0,16350,27596
ingreso_mensualingreso_mensual__woe-1,05170,0772-13,6215< 0,001-1,20299-0,9003negativesí0,30480,5143
mora_max_12mmora_max_12m__woe-0,96780,2715-3,5645< 0,001-1,49999-0,4357negativesí0,02190,0369
utilizacion_lineautilizacion_linea__woe-1,11540,1632-6,8335< 0,001-1,4353-0,7955negativesí0,061030,102998

4.4Scorecard

El scorecard asigna puntajes a los tramos de 5 variables.

Scorecard — puntajes por atributo
featurewoe_columnbin_labelbin_indexwoebetaintercept_shareraw_pointspointsrounding_deltasource
antiguedad_mesesantiguedad_meses__woe< 12,50-0,3152-1,08104-0,238494,472894-0,4728binning_table
antiguedad_mesesantiguedad_meses__woe≥ 12,5 y < 36,51-0,1345-1,08104-0,2384100,10796100-0,10796binning_table
antiguedad_mesesantiguedad_meses__woe≥ 36,5 y < 43,52-0,0185-1,08104-0,2384103,72571040,2743binning_table
antiguedad_mesesantiguedad_meses__woe≥ 43,5 y < 89,530,0051-1,08104-0,2384104,4633104-0,4633binning_table
antiguedad_mesesantiguedad_meses__woe≥ 89,5 y < 114,540,1349-1,08104-0,2384108,51091090,4891binning_table
antiguedad_mesesantiguedad_meses__woe≥ 114,550,7505-1,08104-0,2384127,71341280,2866binning_table
antiguedad_mesesantiguedad_meses__woeValores especiales60,0000-1,08104-0,2384104,30403104-0,30403binning_table
antiguedad_mesesantiguedad_meses__woeFaltantes70,0000-1,08104-0,2384104,30403104-0,30403binning_table
deuda_ingresodeuda_ingreso__woe< 0,0779500007629394500,7138-1,0783-0,2384126,51181270,4882binning_table
deuda_ingresodeuda_ingreso__woe≥ 0,07795000076293945 y < 0,156599998474121110,27202-1,0783-0,2384112,76751130,2325binning_table
deuda_ingresodeuda_ingreso__woe≥ 0,1565999984741211 y < 0,37409999966621420,2179-1,0783-0,2384111,0843111-0,0843binning_table
deuda_ingresodeuda_ingreso__woe≥ 0,374099999666214 y < 0,51164999604225163-0,1035-1,0783-0,2384101,0839101-0,0839binning_table
deuda_ingresodeuda_ingreso__woe≥ 0,5116499960422516 y < 0,85049998760223394-0,3902-1,0783-0,238492,163292-0,1632binning_table
deuda_ingresodeuda_ingreso__woe≥ 0,85049998760223395-1,0825-1,0783-0,238470,6238710,3762binning_table
deuda_ingresodeuda_ingreso__woeValores especiales60,0000-1,0783-0,2384104,30403104-0,30403binning_table
deuda_ingresodeuda_ingreso__woeFaltantes70,0000-1,0783-0,2384104,30403104-0,30403binning_table
ingreso_mensualingreso_mensual__woe< 242.795,88281250-0,9022-1,0517-0,238476,92602770,07398binning_table
ingreso_mensualingreso_mensual__woe≥ 242.795,8828125 y < 354.256,51-0,5825-1,0517-0,238486,6294870,3706binning_table
ingreso_mensualingreso_mensual__woe≥ 354.256,5 y < 464.805,093752-0,2536-1,0517-0,238496,6098970,3902binning_table
ingreso_mensualingreso_mensual__woe≥ 464.805,09375 y < 631.639,4687530,0364-1,0517-0,2384105,4087105-0,4087binning_table
ingreso_mensualingreso_mensual__woe≥ 631.639,46875 y < 913.196,9687540,4278-1,0517-0,2384117,2845117-0,2845binning_table
ingreso_mensualingreso_mensual__woe≥ 913.196,9687551,2099-1,0517-0,2384141,0186141-0,0186binning_table
ingreso_mensualingreso_mensual__woeValores especiales60,0000-1,0517-0,2384104,30403104-0,30403binning_table
ingreso_mensualingreso_mensual__woeFaltantes70,0000-1,0517-0,2384104,30403104-0,30403binning_table
mora_max_12mmora_max_12m__woe< 2,500,3607-0,9678-0,2384114,3763114-0,3763binning_table
mora_max_12mmora_max_12m__woe≥ 2,5 y < 3,510,2141-0,9678-0,2384110,2823110-0,2823binning_table
mora_max_12mmora_max_12m__woe≥ 3,5 y < 5,520,09102-0,9678-0,2384106,84581070,1542binning_table
mora_max_12mmora_max_12m__woe≥ 5,5 y < 7,53-0,0752-0,9678-0,2384102,2033102-0,2033binning_table
mora_max_12mmora_max_12m__woe≥ 7,5 y < 9,54-0,1264-0,9678-0,2384100,77451010,2255binning_table
mora_max_12mmora_max_12m__woe≥ 9,55-0,2065-0,9678-0,238498,5386990,4614binning_table
mora_max_12mmora_max_12m__woeValores especiales60,0000-0,9678-0,2384104,30403104-0,30403binning_table
mora_max_12mmora_max_12m__woeFaltantes70,0000-0,9678-0,2384104,30403104-0,30403binning_table
utilizacion_lineautilizacion_linea__woe< 0,1025499999523162800,6119-1,1154-0,2384123,99721240,0028binning_table
utilizacion_lineautilizacion_linea__woe≥ 0,10254999995231628 y < 0,2512999922037124610,2496-1,1154-0,2384112,3364112-0,3364binning_table
utilizacion_lineautilizacion_linea__woe≥ 0,25129999220371246 y < 0,448350012302398720,0619-1,1154-0,2384106,2969106-0,2969binning_table
utilizacion_lineautilizacion_linea__woe≥ 0,4483500123023987 y < 0,67790001630783083-0,1648-1,1154-0,238499,001199-0,0011binning_table
utilizacion_lineautilizacion_linea__woe≥ 0,67790001630783084-0,46599-1,1154-0,238489,306589-0,3065binning_table
utilizacion_lineautilizacion_linea__woeValores especiales50,0000-1,1154-0,2384104,30403104-0,30403binning_table
utilizacion_lineautilizacion_linea__woeFaltantes60,0000-1,1154-0,2384104,30403104-0,30403binning_table

4.5Calibración

En Desarrollo, la PD media calibrada es 23,33 %, frente a 23,33 % antes de calibrar, contra una tasa de incumplimiento observada de 23,33 %.

La calibración preservó el ordenamiento de las observaciones: la capacidad discriminante del modelo no se altera.

Curva de calibración (confiabilidad) por partición image/svg+xml 0,00 0,20 0,40 0,60 0,80 1,00 PD predicha (media por bin) 0,00 0,20 0,40 0,60 0,80 1,00 Tasa de default observada Curva de calibración (confiabilidad) por partición Calibración perfecta desarrollo (Brier=0,1602, ECE=0,0113) holdout (Brier=0,1643, ECE=0,0277) oot (Brier=0,1713, ECE=0,0426)

4.6Desempeño y discriminación

Las métricas de discriminación se calcularon sobre la PD calibrada.

En Desarrollo el modelo alcanza AUC 0,7123, Gini 0,4247 y KS 0,3201.

En Holdout el modelo alcanza AUC 0,6946, Gini 0,3893 y KS 0,3119.

En Fuera de tiempo (OOT) el modelo alcanza AUC 0,6561, Gini 0,3122 y KS 0,2519.

La tabla de desempeño usa hasta 10 tramos de riesgo configurados, ordenados por la PD calibrada. Los tramos efectivos por partición fueron Desarrollo: 10, Holdout: 10 y Fuera de tiempo (OOT): 10, y permiten verificar la evolución de la tasa de incumplimiento observada entre tramos.

Curva de ganancia acumulada por partición image/svg+xml 0,00 0,20 0,40 0,60 0,80 1,00 Fracción acumulada de población 0,00 0,20 0,40 0,60 0,80 1,00 Fracción de malos capturada Curva de ganancia acumulada por partición Aleatorio desarrollo holdout oot
Discriminación (AUC/Gini/KS) por partición image/svg+xml desarrollo holdout oot 0,00 0,20 0,40 0,60 0,80 1,00 Valor de la métrica Discriminación (AUC/Gini/KS) por partición AUC GINI KS
Métricas de discriminación por partición
partitionn_totaln_badn_goodaucginiksks_cutoff_risk_scoreks_cutoff_scoretpr_at_ksfpr_at_kssourcestatus
desarrollo3.9619243.0370,71230,42470,32010,2255—0,70670,3866pd_calibratedok
holdout1.0312447870,69460,38930,31190,2633—0,59020,2783pd_calibratedok
oot1.0082397690,65610,31220,25190,3037—0,45610,2042pd_calibratedok
Desempeño por tramo de riesgo
partitiondecilen_totaln_badn_goodbad_rategood_ratemean_pdmin_pdmax_pdmean_scoremin_scoremax_scorecum_totalcum_badcum_goodcum_bad_capture_ratecum_good_capture_rateliftks_at_decile
desarrollo13972031940,51130,48870,51720,420970,8104484,8741446,0000497,00003972031940,21970,06392,191990,1558
desarrollo23961542420,38890,61110,37650,34060,42097501,5581496,0000507,00007933574360,38640,14361,66710,2428
desarrollo33961292670,32580,67420,31410,28860,3406509,4343505,0000514,00001.1894867030,525970,23151,39650,2945
desarrollo4396992970,25000,75000,26810,24740,2886515,8586512,0000520,00001.5855851.0000,63310,32931,07170,3038
desarrollo5396933030,23480,76520,22830,21030,2474521,9571518,0000526,00001.9816781.3030,73380,429041,00670,3047
desarrollo6396673290,16920,83080,19250,17760,2103528,0707524,0000532,00002.3777451.6320,80630,53740,72530,2689
desarrollo7396653310,16410,83590,16120,14570,1776534,3157530,0000539,00002.7738101.9630,87660,64640,70360,2303
desarrollo8396543420,13640,86360,12790,10980,1457542,1389538,0000548,00003.1698642.3050,93510,758970,58460,1761
desarrollo9396443520,11110,88890,09350,07520,1097552,5101546,0000560,00003.5659082.6570,98270,87490,47630,1078
desarrollo10396163800,04040,95960,05270,01050,0752571,5859558,0000618,00003.9619243.0371,00001,00000,17320,0000
holdout110452520,50000,50000,53310,42060,7728482,9423452,0000496,000010452520,21310,06612,11270,14704
holdout210341620,39810,60190,38250,34660,4206500,7379496,0000506,0000207931140,38110,14491,681960,2363
holdout310334690,33010,66990,31950,29350,3466508,6893504,0000513,00003101271830,52050,23251,39480,28796
holdout410325780,24270,75730,265980,24260,2935516,1553511,0000520,00004131522610,622950,33161,02560,2913
holdout510322810,21360,78640,22390,20750,2425522,5922519,0000526,00005161743420,71310,43460,90250,2786
holdout610313900,12620,87380,19450,18260,2075527,6699525,0000531,00006191874320,76640,54890,53330,2175
holdout710323800,22330,77670,16650,15050,1823533,2233530,0000538,00007222105120,86070,65060,94350,2101
holdout810315880,14560,85440,12940,11010,1501541,8641536,0000547,00008252256000,92210,76240,61540,1597
holdout910310930,09710,90290,093020,07320,1098552,6602546,0000560,00009282356930,96310,88060,41020,0826
holdout101039940,08740,91260,05410,01780,0732570,4466560,0000603,00001.0312447871,00001,00000,36920,0000
oot110145560,44550,55450,5329960,42940,7728482,9208452,0000496,000010145560,18830,07281,87910,1155
oot210138630,37620,62380,37920,33910,4291501,1881494,0000507,0000202831190,34730,15471,58680,1925
oot310132690,31680,68320,31040,28480,33805509,9307506,0000514,00003031151880,48120,24451,33630,2367
oot410117840,16830,83170,26460,24090,2844516,4059513,0000520,00004041322720,55230,35370,70990,1986
oot510126750,25740,74260,21990,20180,2406523,2772519,0000527,00005051583470,66110,45121,08570,2099
oot610123780,22770,77230,18820,17390,2018529,0693526,0000533,00006061814250,75730,55270,96040,2047
oot710115860,14850,85150,15920,14570,1739534,7327532,0000538,00007071965110,82010,66450,62640,1556
oot810120810,198020,801980,12970,11230,1448541,5743538,0000547,00008082165920,90380,76980,83520,1339
oot910013870,13000,87000,093030,07530,11104552,6100546,0000559,00009082296790,95820,882960,54830,0752
oot1010010900,10000,90000,05350,00940,0752571,2500558,0000622,00001.0082397691,00001,00000,42180,0000

4.7Estabilidad

El peor PSI entre score y PD en Desarrollo vs. Holdout es 0,0132 (banda «Estable»); corresponde a la PD calibrada. La distribución de la magnitud ganadora se mantiene, de modo que no hay desplazamiento poblacional.

El peor PSI entre score y PD en Desarrollo vs. OOT es 0,0068 (banda «Estable»); corresponde al score. La distribución de la magnitud ganadora se mantiene, de modo que no hay desplazamiento poblacional.

A nivel de variable, el mayor CSI corresponde a «mora_max_12m__points» con 0,0102.

Se configuraron hasta 10 tramos por magnitud para el PSI, definidos en Desarrollo.

Estabilidad PSI/CSI por comparación image/svg+xml 0,00 0,05 0,10 0,15 0,20 0,25 PSI / CSI csi·dev_vs_oot·antiguedad_meses__points csi·dev_vs_holdout·antiguedad_meses__points csi·dev_vs_holdout·ingreso_mensual__points csi·dev_vs_holdout·deuda_ingreso__points csi·dev_vs_oot·utilizacion_linea__points pd_psi·dev_vs_oot·pd_calibrated score_psi·dev_vs_oot·score csi·dev_vs_oot·mora_max_12m__points csi·dev_vs_holdout·utilizacion_linea__points csi·dev_vs_oot·deuda_ingreso__points csi·dev_vs_oot·ingreso_mensual__points csi·dev_vs_holdout·mora_max_12m__points temporal_score·cohort·score score_psi·dev_vs_holdout·score pd_psi·dev_vs_holdout·pd_calibrated Estabilidad PSI/CSI por comparación Revisión: 0,10 ≤ índice < 0,25 Redesarrollo: índice ≥ 0,25
Métricas de estabilidad (PSI/CSI)
metriccomparisonfeaturevaluestable_thresholdreview_thresholdbandaction
score_psidev_vs_holdoutscore0,01270,100,25stable—
score_psidev_vs_ootscore0,00680,100,25stable—
pd_psidev_vs_holdoutpd_calibrated0,01320,100,25stable—
pd_psidev_vs_ootpd_calibrated0,00650,100,25stable—
csidev_vs_holdoutantiguedad_meses__points0,00260,100,25stable—
csidev_vs_ootantiguedad_meses__points0,00150,100,25stable—
csidev_vs_holdoutdeuda_ingreso__points0,00330,100,25stable—
csidev_vs_ootdeuda_ingreso__points0,00820,100,25stable—
csidev_vs_holdoutingreso_mensual__points0,002990,100,25stable—
csidev_vs_ootingreso_mensual__points0,00980,100,25stable—
csidev_vs_holdoutmora_max_12m__points0,01020,100,25stable—
csidev_vs_ootmora_max_12m__points0,00690,100,25stable—
csidev_vs_holdoututilizacion_linea__points0,00720,100,25stable—
csidev_vs_ootutilizacion_linea__points0,003970,100,25stable—
temporal_scorecohortscore0,01050,100,25stable—
PSI por tramo de score
metriccomparisonfeaturebin_labelexpected_countactual_countexpected_pctactual_pctcomponent_valuetotal_valueband
score_psidev_vs_holdoutscorebin_00376990,09490,096020,0000130,0127stable
score_psidev_vs_holdoutscorebin_013931130,09920,10960,001030,0127stable
score_psidev_vs_holdoutscorebin_023881020,097960,09890,00000970,0127stable
score_psidev_vs_holdoutscorebin_03412850,104010,08240,005010,0127stable
score_psidev_vs_holdoutscorebin_04368970,09290,09410,0000150,0127stable
score_psidev_vs_holdoutscorebin_054091290,10330,12510,00420,0127stable
score_psidev_vs_holdoutscorebin_064001050,100980,10180,00000730,0127stable
score_psidev_vs_holdoutscorebin_07405900,10220,08730,00240,0127stable
score_psidev_vs_holdoutscorebin_083901010,09850,097960,00000250,0127stable
score_psidev_vs_holdoutscorebin_094201100,106030,10670,00000410,0127stable
score_psidev_vs_ootscorebin_003761020,09490,10120,00040040,0068stable
score_psidev_vs_ootscorebin_01393930,09920,09230,000510,0068stable
score_psidev_vs_ootscorebin_02388960,097960,09520,0000760,0068stable
score_psidev_vs_ootscorebin_03412940,104010,09330,00120,0068stable
score_psidev_vs_ootscorebin_04368860,09290,08530,000650,0068stable
score_psidev_vs_ootscorebin_054091120,10330,11110,000580,0068stable
score_psidev_vs_ootscorebin_064001140,100980,11310,00140,0068stable
score_psidev_vs_ootscorebin_074051150,10220,11410,00130,0068stable
score_psidev_vs_ootscorebin_08390910,09850,09030,000710,0068stable
score_psidev_vs_ootscorebin_094201050,106030,10420,0000330,0068stable
pd_psidev_vs_holdoutpd_calibratedbin_003951070,09970,10380,000160,0132stable
pd_psidev_vs_holdoutpd_calibratedbin_01397980,10020,09510,000270,0132stable
pd_psidev_vs_holdoutpd_calibratedbin_02393910,09920,08830,00130,0132stable
pd_psidev_vs_holdoutpd_calibratedbin_03397990,10020,096020,000180,0132stable
pd_psidev_vs_holdoutpd_calibratedbin_043971290,10020,12510,00550,0132stable
pd_psidev_vs_holdoutpd_calibratedbin_053901040,09850,10090,0000580,0132stable
pd_psidev_vs_holdoutpd_calibratedbin_06401830,10120,08050,00480,0132stable
pd_psidev_vs_holdoutpd_calibratedbin_073961050,099970,10180,0000350,0132stable
pd_psidev_vs_holdoutpd_calibratedbin_083961130,099970,10960,000890,0132stable
pd_psidev_vs_holdoutpd_calibratedbin_093991020,10070,09890,0000320,0132stable
pd_psidev_vs_ootpd_calibratedbin_00395990,09970,09820,0000230,0065stable
pd_psidev_vs_ootpd_calibratedbin_01397960,10020,09520,000250,0065stable
pd_psidev_vs_ootpd_calibratedbin_023931060,09920,10520,000350,0065stable
pd_psidev_vs_ootpd_calibratedbin_033971120,10020,11110,00110,0065stable
pd_psidev_vs_ootpd_calibratedbin_043971130,10020,11210,00130,0065stable
pd_psidev_vs_ootpd_calibratedbin_05390890,09850,08830,00110,0065stable
pd_psidev_vs_ootpd_calibratedbin_06401980,10120,09720,000160,0065stable
pd_psidev_vs_ootpd_calibratedbin_07396970,099970,09620,000140,0065stable
pd_psidev_vs_ootpd_calibratedbin_08396890,099970,08830,00150,0065stable
pd_psidev_vs_ootpd_calibratedbin_093991090,10070,10810,000520,0065stable
csidev_vs_holdoutantiguedad_meses__points94 puntos384930,09690,09020,000490,0026stable
csidev_vs_holdoutantiguedad_meses__points100 puntos7632110,19260,20470,000730,0026stable
csidev_vs_holdoutantiguedad_meses__points104 puntos1.7694530,44660,43940,000120,0026stable
csidev_vs_holdoutantiguedad_meses__points109 puntos8382270,21160,22020,000340,0026stable
csidev_vs_holdoutantiguedad_meses__points128 puntos207470,05230,04560,000910,0026stable
csidev_vs_ootantiguedad_meses__points94 puntos384900,09690,08930,000630,0015stable
csidev_vs_ootantiguedad_meses__points100 puntos7632030,19260,20140,000390,0015stable
csidev_vs_ootantiguedad_meses__points104 puntos1.7694460,44660,44250,0000390,0015stable
csidev_vs_ootantiguedad_meses__points109 puntos8382200,21160,21830,000210,0015stable
csidev_vs_ootantiguedad_meses__points128 puntos207490,05230,04860,000260,0015stable
csidev_vs_holdoutdeuda_ingreso__points71 puntos205520,05180,05040,0000340,0033stable
csidev_vs_holdoutdeuda_ingreso__points92 puntos6741950,17020,18910,002010,0033stable
csidev_vs_holdoutdeuda_ingreso__points101 puntos6541560,16510,15130,00120,0033stable
csidev_vs_holdoutdeuda_ingreso__points111 puntos1.5774100,39810,39775,3e-070,0033stable
csidev_vs_holdoutdeuda_ingreso__points113 puntos5581440,14090,13970,00001030,0033stable
csidev_vs_holdoutdeuda_ingreso__points127 puntos293740,073970,07180,0000660,0033stable
csidev_vs_ootdeuda_ingreso__points71 puntos205580,05180,05750,000610,0082stable
csidev_vs_ootdeuda_ingreso__points92 puntos6741860,17020,18450,00120,0082stable
csidev_vs_ootdeuda_ingreso__points101 puntos6541490,16510,14780,00190,0082stable
csidev_vs_ootdeuda_ingreso__points111 puntos1.5774130,39810,40970,000330,0082stable
csidev_vs_ootdeuda_ingreso__points113 puntos5581440,14090,14290,0000280,0082stable
csidev_vs_ootdeuda_ingreso__points127 puntos293580,073970,05750,00410,0082stable
csidev_vs_holdoutingreso_mensual__points77 puntos210630,053020,06110,00110,00299stable
csidev_vs_holdoutingreso_mensual__points87 puntos5871540,14820,14940,00000930,00299stable
csidev_vs_holdoutingreso_mensual__points97 puntos8062020,20350,19590,000290,00299stable
csidev_vs_holdoutingreso_mensual__points105 puntos9172230,23150,21630,001030,00299stable
csidev_vs_holdoutingreso_mensual__points117 puntos8762380,22120,23080,000420,00299stable
csidev_vs_holdoutingreso_mensual__points141 puntos5651510,14260,14650,0001010,00299stable
csidev_vs_ootingreso_mensual__points77 puntos210610,053020,06050,000990,0098stable
csidev_vs_ootingreso_mensual__points87 puntos5871440,14820,14290,0001960,0098stable
csidev_vs_ootingreso_mensual__points97 puntos8061700,20350,16870,00650,0098stable
csidev_vs_ootingreso_mensual__points105 puntos9172390,23150,23710,000130,0098stable
csidev_vs_ootingreso_mensual__points117 puntos8762390,22120,23710,00110,0098stable
csidev_vs_ootingreso_mensual__points141 puntos5651550,14260,15380,000840,0098stable
csidev_vs_holdoutmora_max_12m__points99 puntos349940,08810,09120,0001050,0102stable
csidev_vs_holdoutmora_max_12m__points101 puntos6781620,17120,15710,00120,0102stable
csidev_vs_holdoutmora_max_12m__points102 puntos1.1663400,29440,32980,004020,0102stable
csidev_vs_holdoutmora_max_12m__points107 puntos1.1732730,29610,26480,00350,0102stable
csidev_vs_holdoutmora_max_12m__points110 puntos355900,08960,08730,0000610,0102stable
csidev_vs_holdoutmora_max_12m__points114 puntos240720,06060,06980,00130,0102stable
csidev_vs_ootmora_max_12m__points99 puntos349970,08810,09620,000720,0069stable
csidev_vs_ootmora_max_12m__points101 puntos6781740,17120,17260,0000120,0069stable
csidev_vs_ootmora_max_12m__points102 puntos1.1662960,29440,29370,00000180,0069stable
csidev_vs_ootmora_max_12m__points107 puntos1.1733070,29610,30460,000240,0069stable
csidev_vs_ootmora_max_12m__points110 puntos355690,08960,06850,00570,0069stable
csidev_vs_ootmora_max_12m__points114 puntos240650,06060,06450,000240,0069stable
csidev_vs_holdoututilizacion_linea__points89 puntos3431130,08660,10960,00540,0072stable
csidev_vs_holdoututilizacion_linea__points99 puntos1.2123080,305980,29870,000170,0072stable
csidev_vs_holdoututilizacion_linea__points106 puntos1.3853380,34970,32780,00140,0072stable
csidev_vs_holdoututilizacion_linea__points112 puntos7882080,19890,20170,0000390,0072stable
csidev_vs_holdoututilizacion_linea__points124 puntos233640,05880,06210,000180,0072stable
csidev_vs_ootutilizacion_linea__points89 puntos3431010,08660,10020,001990,00397stable
csidev_vs_ootutilizacion_linea__points99 puntos1.2122980,305980,29560,000360,00397stable
csidev_vs_ootutilizacion_linea__points106 puntos1.3853350,34970,33230,000880,00397stable
csidev_vs_ootutilizacion_linea__points112 puntos7882120,19890,21030,000630,00397stable
csidev_vs_ootutilizacion_linea__points124 puntos233620,05880,06150,000120,00397stable
PSI del puntaje por período contra Desarrollo
PeríodoOperacionesPuntaje medioMediana del puntajePD mediaPSIBanda
2023Q11.005526,0667526,000023,44 %0,0056Estable
2023Q21.002526,51397526,000023,12 %0,0034Estable
2023Q31.011525,4164524,000023,83 %0,0043Estable
2023Q4992526,5897525,000023,04 %0,0105Estable
2024Q1982525,9389525,000023,55 %0,0074Estable
2024Q21.008526,2252526,500023,34 %0,0068Estable

4.8Escala maestra y puntos de corte

5 tramos de puntaje, del 1, de menor riesgo, al 5; cada uno con al menos el 5 % de Desarrollo y una tasa de malos distinta de la de sus vecinos.

PD del tramo de 4,77 % a 53,52 %; su promedio en Desarrollo es el ancla de la calibración, 23,33 %.

En Holdout y Fuera de tiempo (OOT) hay tramos que revisar (ver «Qué revisar»).

El tramo mayor tiene el 35,3 % de Desarrollo (tramo 2); índice de concentración 0,244.

Sin corte declarado: la tabla de cortes muestra, para cada límite, cuánto se aprueba, la tasa de malos, los malos evitados y los buenos rechazados.

La PD de cada tramo es su tasa de malos de Desarrollo llevada al ancla de la calibración; en una cartera de aprobados, la tabla mide a quien pasó la política anterior.

Qué revisar: En Fuera de tiempo (OOT), el tramo 1 subestima su PD (rojo).

Escala maestra — los tramos y su PD
TramoPuntajePD del tramoParticipación DesarrolloTasa de malos DesarrolloSemáforo DesarrolloParticipación HoldoutTasa de malos HoldoutSemáforo HoldoutParticipación Fuera de tiempo (OOT)Tasa de malos Fuera de tiempo (OOT)Semáforo Fuera de tiempo (OOT)
1desde 556 puntos4,77 %12,40 %4,68 %Verde12,71 %9,16 %Ámbar13,39 %11,85 %Rojo
2de 527 a 555 puntos13,96 %35,27 %13,96 %Verde34,72 %15,36 %Verde36,61 %17,07 %Ámbar
3de 512 a 526 puntos24,89 %24,14 %24,90 %Verde23,28 %22,08 %Verde22,42 %22,12 %Verde
4de 494 a 511 puntos36,85 %19,72 %36,88 %Verde20,66 %36,62 %Verde18,85 %34,74 %Verde
5hasta 493 puntos53,52 %8,48 %53,57 %Verde8,63 %51,69 %Verde8,73 %50,00 %Verde
Tabla de puntos de corte
MuestraAprobarPuntajeAprobadosTasa de malos de los aprobadosPD esperada de los aprobadosMalos evitadosBuenos rechazados
DesarrolloTramos 1 a 1desde 556 puntos12,40 %4,68 %4,77 %97,51 %84,59 %
DesarrolloTramos 1 a 2desde 527 puntos47,66 %11,55 %11,57 %76,41 %45,01 %
DesarrolloTramos 1 a 3desde 512 puntos71,80 %16,03 %16,05 %50,65 %21,37 %
DesarrolloTramos 1 a 4desde 494 puntos91,52 %20,52 %20,53 %19,48 %5,14 %
DesarrolloTodos los tramostodos los puntajes100,00 %23,33 %23,33 %0,00 %0,00 %
HoldoutTramos 1 a 1desde 556 puntos12,71 %9,16 %4,77 %95,08 %84,88 %
HoldoutTramos 1 a 2desde 527 puntos47,43 %13,70 %11,50 %72,54 %46,38 %
HoldoutTramos 1 a 3desde 512 puntos70,71 %16,46 %15,91 %50,82 %22,62 %
HoldoutTramos 1 a 4desde 494 puntos91,37 %21,02 %20,64 %18,85 %5,46 %
HoldoutTodos los tramostodos los puntajes100,00 %23,67 %23,48 %0,00 %0,00 %
Fuera de tiempo (OOT)Tramos 1 a 1desde 556 puntos13,39 %11,85 %4,77 %93,31 %84,53 %
Fuera de tiempo (OOT)Tramos 1 a 2desde 527 puntos50,00 %15,67 %11,50 %66,95 %44,73 %
Fuera de tiempo (OOT)Tramos 1 a 3desde 512 puntos72,42 %17,67 %15,64 %46,03 %21,85 %
Fuera de tiempo (OOT)Tramos 1 a 4desde 494 puntos91,27 %21,20 %20,02 %18,41 %5,72 %
Fuera de tiempo (OOT)Todos los tramostodos los puntajes100,00 %23,71 %22,95 %0,00 %0,00 %

5Validación formal

La validación formal del modelo «consumo_comportamiento_sin_stepwise» ejecutó discriminación, calibración y estabilidad. El estado técnico agregado publicado por el motor es «Falla».

El resultado registra 3 pruebas, de las cuales 1 quedó fallida. Las tablas se copian del resultado que publicó la validación, sin recalcular métricas ni decisiones.

Este estado es evidencia técnica; el veredicto de aprobación, aprobación con observaciones o rechazo corresponde al validador humano y queda POR COMPLETAR.

POR COMPLETAR — Veredicto de validación formal

Emite el juicio humano sobre la aptitud del modelo para su uso previsto: aprobar, aprobar con observaciones o rechazar.

Documenta observaciones, responsables, plazos y la fecha de la próxima revisión; el estado técnico del motor no sustituye este veredicto.

5.1Discriminación

La tabla reproduce por partición AUC, Gini y KS, junto con población, fuente y estado de evaluabilidad. Filas evaluadas: 3.

Validación formal — discriminación
partitionn_totaln_badaucginikssourcestatus
Desarrollo3.9619240,71230,42470,3201Reusada de la etapa de desempeñoEvaluada
Holdout1.0312440,69460,38930,3119Reusada de la etapa de desempeñoEvaluada
Fuera de tiempo (OOT)1.0082390,65610,31220,2519Reusada de la etapa de desempeñoEvaluada

5.2Calibración

La tabla reúne Hosmer-Lemeshow, Brier y, cuando fue configurado, el contraste por grado con sus decisiones y semáforo publicados. Filas evaluadas: 6.

Validación formal — calibración
partitiontestgradenobserved_defaultsexpected_pdobserved_drstatisticdegrees_of_freedomp_valuealphadecisiontraffic_light
DesarrolloHosmer-Lemeshow—3.9619240,23330,23336,007980,6460,05Pasa—
DesarrolloPuntaje de Brier—3.9619240,23330,23330,1602———Sin veredicto—
Fuera de tiempo (OOT)Hosmer-Lemeshow—1.0082390,23340,237119,451180,0130,05Falla—
Fuera de tiempo (OOT)Puntaje de Brier—1.0082390,23340,23710,1713———Sin veredicto—
HoldoutHosmer-Lemeshow—1.0312440,23650,236710,120680,2570,05Pasa—
HoldoutPuntaje de Brier—1.0312440,23650,23670,1643———Sin veredicto—
Hosmer-Lemeshow por grupo · Desarrollo
GrupoObservacionesMalos observadosMalos esperadosTasa observada (%)PD media (%)Diferencia (pp)O/EContribución al estadístico
13971621,00004,03005,2800-1,25000,76401,2400
23964437,100011,11009,36001,75001,18701,4300
33965350,700013,380012,80000,59001,04600,1200
43966763,900016,920016,12000,79001,04900,1800
53966676,300016,670019,2600-2,59000,86501,7100
63969390,400023,480022,84000,65001,02800,0900
739699106,200025,000026,8200-1,82000,93200,6700
8396130124,400032,830031,43001,40001,04500,3600
9396153149,200038,640037,67000,96001,02600,1600
10396203204,900051,260051,7500-0,49000,99100,0400
Hosmer-Lemeshow por grupo · Fuera de tiempo (OOT)
GrupoObservacionesMalos observadosMalos esperadosTasa observada (%)PD media (%)Diferencia (pp)O/EContribución al estadístico
1101105,40009,90005,37004,53001,84304,0800
2101139,500012,87009,36003,51001,37501,4700
31012013,200019,800013,04006,77001,51904,0800
41011516,100014,850015,9700-1,12000,93000,0900
51012419,100023,760018,88004,88001,25901,5700
61012522,300024,750022,07002,69001,12200,4200
71011726,800016,830026,5400-9,71000,63404,8800
81013231,500031,680031,14000,54001,01700,0100
91003838,100038,000038,0500-0,05000,99900,0000
101004553,400045,000053,4000-8,40000,84302,8400
Hosmer-Lemeshow por grupo · Holdout
GrupoObservacionesMalos observadosMalos esperadosTasa observada (%)PD media (%)Diferencia (pp)O/EContribución al estadístico
1104105,70009,62005,43004,18001,77003,5400
210399,60008,74009,3400-0,60000,93600,0400
31031513,400014,560012,98001,58001,12200,2300
41032317,200022,330016,68005,65001,33802,3600
51031320,100012,620019,4700-6,85000,64803,0800
61032223,100021,360022,4300-1,07000,95200,0700
71032527,400024,270026,6500-2,38000,91100,3000
81033433,000033,010032,00001,01001,03200,0500
91034139,500039,810038,33001,48001,03900,1000
101035255,000050,490053,4200-2,93000,94500,3600

5.3Estabilidad

La tabla reproduce PSI/estabilidad, umbrales, banda, acción y la decisión que dejó la validación. Filas evaluadas: 15.

Validación formal — estabilidad
metriccomparisonfeaturevaluestable_thresholdreview_thresholdbandactionsourcestatusdecision
PSI del scoreDesarrollo vs. Holdoutscore0,01270,100,25Estable—Reusado de la etapa de estabilidadEvaluadaPasa
PSI del scoreDesarrollo vs. OOTscore0,00680,100,25Estable—Reusado de la etapa de estabilidadEvaluadaPasa
PSI de la PDDesarrollo vs. Holdoutpd_calibrated0,01320,100,25Estable—Reusado de la etapa de estabilidadEvaluadaPasa
PSI de la PDDesarrollo vs. OOTpd_calibrated0,00650,100,25Estable—Reusado de la etapa de estabilidadEvaluadaPasa
CSIDesarrollo vs. Holdoutantiguedad_meses__points0,00260,100,25Estable—Reusado de la etapa de estabilidadEvaluadaPasa
CSIDesarrollo vs. OOTantiguedad_meses__points0,00150,100,25Estable—Reusado de la etapa de estabilidadEvaluadaPasa
CSIDesarrollo vs. Holdoutdeuda_ingreso__points0,00330,100,25Estable—Reusado de la etapa de estabilidadEvaluadaPasa
CSIDesarrollo vs. OOTdeuda_ingreso__points0,00820,100,25Estable—Reusado de la etapa de estabilidadEvaluadaPasa
CSIDesarrollo vs. Holdoutingreso_mensual__points0,002990,100,25Estable—Reusado de la etapa de estabilidadEvaluadaPasa
CSIDesarrollo vs. OOTingreso_mensual__points0,00980,100,25Estable—Reusado de la etapa de estabilidadEvaluadaPasa
CSIDesarrollo vs. Holdoutmora_max_12m__points0,01020,100,25Estable—Reusado de la etapa de estabilidadEvaluadaPasa
CSIDesarrollo vs. OOTmora_max_12m__points0,00690,100,25Estable—Reusado de la etapa de estabilidadEvaluadaPasa
CSIDesarrollo vs. Holdoututilizacion_linea__points0,00720,100,25Estable—Reusado de la etapa de estabilidadEvaluadaPasa
CSIDesarrollo vs. OOTutilizacion_linea__points0,003970,100,25Estable—Reusado de la etapa de estabilidadEvaluadaPasa
PSI temporalCohortescore0,01050,100,25Estable—Reusado de la etapa de estabilidadEvaluadaPasa

6Conclusiones y recomendación

Discriminación (AUC): Desarrollo 0,7123, Holdout 0,6946 y Fuera de tiempo (OOT) 0,6561.

Estabilidad (peor PSI entre score y PD): Desarrollo vs. Holdout 0,0132 («Estable»; PD calibrada) y Desarrollo vs. OOT 0,0068 («Estable»; score).

Calibración: la PD media calibrada en Desarrollo (23,33 %) se contrasta con la tasa observada (23,33 %).

Estos hallazgos son los que el motor puede sostener con los números de la corrida. La recomendación —aprobar, aprobar con observaciones o rechazar— es un juicio humano y no se deriva automáticamente de ellos.

POR COMPLETAR — Conclusiones y recomendación

Emite el juicio: ¿el modelo es apto para el uso previsto? La recomendación (aprobar, aprobar con observaciones o rechazar) la firma un humano, no el motor.

Enumera las observaciones y condiciones de uso, con responsable y plazo para cada una, y fija la fecha de la próxima revisión.

7Limitaciones y supuestos

El alcance de este informe es la construcción y evaluación del scorecard. La validación formal ejecutó discriminación, calibración y estabilidad y se documenta en su capítulo propio; el estado técnico no sustituye el veredicto humano.

Todas las métricas provienen de la corrida trazada en el Anexo A. El informe no completa ningún hueco con supuestos: lo que no se pudo calcular aparece declarado como no disponible.

Caveats de reproducibilidad declarados por la corrida: git no disponible: la corrida no tiene SHA de origen.

No hay secciones obligatorias ausentes en esta corrida.

Anexo A —Lineage y reproducibilidad

La corrida queda identificada por los hashes de configuración y de datos, el commit del código y la semilla raíz. Con estos cuatro valores el resultado es reproducible.

Parámetros y payload

config_hash
3e2f2965984fe19f97f205ced60c9ea7aac6611884b2a12a49f5bcf07f803d01
created_at
2026-10-19T14:05:58.042622Z
data_hash
74c5d9ddeca8ff71853623d20ace015d0788564549339d61bfb66f24dfadfcc8
determinism_caveats
[
  "git no disponible: la corrida no tiene SHA de origen"
]
git_dirty
no
git_sha
—
library_versions
{
  "PyYAML": "6.0.3",
  "bayesrisk": "2.16.0",
  "numpy": "1.26.4",
  "pandas": "2.3.3",
  "pydantic": "2.14.1"
}
root_seed
20240706
runtime_environment_hash
1e4e5c376bed6a330dfaf0da715d45ad30bd08f7bd80a20a342243ff2e4dfb7b
schema_version
1.0.0
uv_lock_hash
6c446c2ad040ff52262caae544ea32b26af36b8abebe5f10d5d276f49e967322

Anexo B —Tablas detalladas

Este anexo reproduce íntegras todas las tablas que produjo la corrida, incluidas las que el cuerpo del informe ya mostró. Es la trazabilidad completa: nada de lo que el motor calculó queda fuera del documento.

Parámetros y payload

figure_keys
[
  "eda.figures"
]
table_keys
[
  "eda.default_rate.by_period",
  "eda.univariate.profiles.antiguedad_meses",
  "eda.univariate.profiles.deuda_ingreso",
  "eda.univariate.profiles.ingreso_mensual",
  "eda.univariate.profiles.mora_max_12m",
  "eda.univariate.profiles.segmento",
  "eda.univariate.profiles.utilizacion_linea",
  "eda.quality.by_column",
  "binning.tables.antiguedad_meses",
  "binning.tables.deuda_ingreso",
  "binning.tables.ingreso_mensual",
  "binning.tables.mora_max_12m",
  "binning.tables.segmento",
  "binning.tables.utilizacion_linea",
  "binning.summary",
  "binning.woe_frame",
  "selection.selected_woe_frame",
  "selection.selection_table",
  "selection.correlation_matrix",
  "selection.vif_table",
  "selection.stability_table",
  "model.coefficients",
  "model.raw_pd_frame",
  "scorecard.scorecard",
  "scorecard.score",
  "calibration.calibrated_pd_frame",
  "performance.performance_table",
  "performance.discriminant_metrics",
  "stability.psi_table",
  "stability.stability_metrics",
  "master_scale.grades",
  "master_scale.grade_table",
  "master_scale.cutoff_table",
  "data.states",
  "data.partitions",
  "data.exclusions",
  "validation.discrimination",
  "validation.calibration",
  "validation.stability",
  "validation.hosmer_lemeshow_groups.desarrollo",
  "validation.hosmer_lemeshow_groups.oot",
  "validation.hosmer_lemeshow_groups.holdout",
  "master_scale.scale",
  "master_scale.cutoffs",
  "stability.psi_by_period"
]
Tabla de binning WoE — variable «antiguedad_meses»
BinCountCount (%)Non-eventEventEvent rateWoEIVJS
< 12,53840,09692711130,2943-0,31520,01040,0013
≥ 12,5 y < 36,57630,19265661970,2582-0,13450,00360,00045
≥ 36,5 y < 43,52240,0566171530,2366-0,01850,00001950,0000024
≥ 43,5 y < 89,51.5450,39011.1863590,23240,00510,00001020,0000013
≥ 89,5 y < 114,58380,21166621760,210020,13490,00370,00046
≥ 114,52070,0523181260,12560,75050,02360,0029
Valores especiales00,0000000,00000,00000,00000,0000
Faltantes00,0000000,00000,00000,00000,0000
3.9611,00003.0379240,23330,04140,0051
Tabla de binning WoE — variable «deuda_ingreso»
BinCountCount (%)Non-eventEventEvent rateWoEIVJS
< 0,077950000762939452930,07397255380,12970,71380,03060,0037
≥ 0,07795000076293945 y < 0,15659999847412115580,14094531050,18820,272020,00970,0012
≥ 0,1565999984741211 y < 0,3740999996662141.5770,39811.2673100,19660,21790,01780,0022
≥ 0,374099999666214 y < 0,51164999604225166540,16514891650,2523-0,10350,00180,00023
≥ 0,5116499960422516 y < 0,85049998760223396740,17024652090,3101-0,39020,02850,0035
≥ 0,85049998760223392050,0518108970,4732-1,08250,07510,00896
Valores especiales00,0000000,00000,00000,00000,0000
Faltantes00,0000000,00000,00000,00000,0000
3.9611,00003.0379240,23330,16350,0199
Tabla de binning WoE — variable «ingreso_mensual»
BinCountCount (%)Non-eventEventEvent rateWoEIVJS
< 242.795,88281252100,05302120900,4286-0,90220,05220,0063
≥ 242.795,8828125 y < 354.256,55870,14823802070,3526-0,58250,05760,0071
≥ 354.256,5 y < 464.805,093758060,20355792270,2816-0,25360,013950,0017
≥ 464.805,09375 y < 631.639,468759170,23157092080,22680,03640,0003040,000038
≥ 631.639,46875 y < 913.196,968758760,22127311450,16550,42780,03580,0044
≥ 913.196,968755650,1426518470,08321,20990,14480,0171
Valores especiales00,0000000,00000,00000,00000,0000
Faltantes00,0000000,00000,00000,00000,0000
3.9611,00003.0379240,23330,30480,0367
Tabla de binning WoE — variable «mora_max_12m»
BinCountCount (%)Non-eventEventEvent rateWoEIVJS
< 2,52400,0606198420,17500,36070,00710,00089
≥ 2,5 y < 3,53550,0896285700,19720,21410,00390,00048
≥ 3,5 y < 5,51.1730,29619182550,21740,091020,00240,000299
≥ 5,5 y < 7,51.1660,29448782880,246998-0,07520,00170,00021
≥ 7,5 y < 9,56780,17125041740,2566-0,12640,00280,00035
≥ 9,53490,0881254950,2722-0,20650,003960,00049
Valores especiales00,0000000,00000,00000,00000,0000
Faltantes00,0000000,00000,00000,00000,0000
3.9611,00003.0379240,23330,02190,0027
Tabla de binning WoE — variable «segmento»
BinCountCount (%)Non-eventEventEvent rateWoEIVJS
independiente1.3530,34161.0523010,22250,06140,00130,00016
asalariado1.3030,328961.0013020,23180,00840,0000230,0000029
pensionado1.3050,32959843210,24598-0,06970,00160,000204
Valores especiales00,0000000,00000,00000,00000,0000
Faltantes00,0000000,00000,00000,00000,0000
3.9611,00003.0379240,23330,00290,00037
Tabla de binning WoE — variable «utilizacion_linea»
BinCountCount (%)Non-eventEventEvent rateWoEIVJS
< 0,102549999952316282330,0588200330,14160,61190,01840,0023
≥ 0,10254999995231628 y < 0,251299992203712467880,19896371510,19160,24960,01160,0014
≥ 0,25129999220371246 y < 0,44835001230239871.3850,34971.0773080,22240,06190,00130,00016
≥ 0,4483500123023987 y < 0,67790001630783081.2120,305988923200,26403-0,16480,00870,0011
≥ 0,67790001630783083430,08662311120,3265-0,465990,021040,0026
Valores especiales00,0000000,00000,00000,00000,0000
Faltantes00,0000000,00000,00000,00000,0000
3.9611,00003.0379240,23330,061030,0076
Perfil frente al incumplimiento — variable «antiguedad_meses»
tramoncoveragedefault_rate
> 1 y ≤ 134220,10650,2844
> 13 y ≤ 263990,10070,2281
> 26 y ≤ 383830,09670,2872
> 38 y ≤ 503930,09920,2239
> 50 y ≤ 624160,105020,2308
> 62 y ≤ 733710,09370,2264
> 73 y ≤ 854070,10280,2555
> 85 y ≤ 974160,105020,2163
> 97 y ≤ 1083700,09340,2135
> 108 y ≤ 1203840,09690,1615
Perfil frente al incumplimiento — variable «deuda_ingreso»
tramoncoveragedefault_rate
> 0,0032 y ≤ 0,09193970,10020,1562
> 0,0919 y ≤ 0,14873980,10050,1859
> 0,1487 y ≤ 0,202000000000000073940,09950,1954
> 0,20200000000000007 y ≤ 0,25253970,10020,1914
> 0,2525 y ≤ 0,30883970,10020,2191
> 0,3088 y ≤ 0,36613950,09970,1797
> 0,3661 y ≤ 0,44543960,099970,2424
> 0,4454 y ≤ 0,53623950,09970,2684
> 0,5362 y ≤ 0,69253960,099970,30303
> 0,6925 y ≤ 1,79733960,099970,3914
Perfil frente al incumplimiento — variable «ingreso_mensual»
tramoncoveragedefault_rate
> 74.032,56 y ≤ 287.183,363970,10020,3753
> 287.183,36 y ≤ 353.839,83960,099970,3687
> 353.839,8 y ≤ 409.923,633960,099970,2778
> 409.923,63 y ≤ 460.844,973960,099970,2828
> 460.844,97 y ≤ 526.601,823960,099970,2172
> 526.601,82 y ≤ 600.699,293960,099970,2298
> 600.699,29 y ≤ 689.809,833960,099970,1894
> 689.809,83 y ≤ 810.582,23960,099970,1742
> 810.582,2 y ≤ 1.017.997,743960,099970,1237
> 1.017.997,74 y ≤ 3.524.342,263960,099970,0934
Perfil frente al incumplimiento — variable «mora_max_12m»
tramoncoveragedefault_rate
> 0 y ≤ 35950,15020,1882
> 3 y ≤ 45470,13810,2139
> 4 y ≤ 56260,158040,2204
> 5 y ≤ 66360,16060,2516
> 6 y ≤ 75300,13380,2415
> 7 y ≤ 83900,09850,2641
> 8 y ≤ 92880,07270,2465
> 9 y ≤ 173490,08810,2722
Perfil frente al incumplimiento — variable «segmento»
tramoncoveragedefault_rate
asalariado1.3030,328960,2318
independiente1.3530,34160,2225
pensionado1.3050,32950,24598
Perfil frente al incumplimiento — variable «utilizacion_linea»
tramoncoveragedefault_rate
> 0,0041 y ≤ 0,13843970,10020,1763
> 0,1384 y ≤ 0,2163970,10020,1965
> 0,216 y ≤ 0,27953950,09970,2025
> 0,2795 y ≤ 0,33463960,099970,2500
> 0,3346 y ≤ 0,38813960,099970,20202
> 0,3881 y ≤ 0,443100000000000053960,099970,20202
> 0,44310000000000005 y ≤ 0,50663970,10020,2997
> 0,5066 y ≤ 0,57553950,09970,23797
> 0,5755 y ≤ 0,66183960,099970,2551
> 0,6618 y ≤ 0,97243960,099970,3106
Puntos de corte por muestra
samplegrades_approvedcutoff_scoredeclaredn_scoredn_with_outcomen_approvedn_approved_with_outcomen_badn_goodapproved_shareapproved_bad_rateapproved_expected_pdbads_avoided_sharegoods_rejected_share
desarrollo1555,50no3.9613.9614914919243.0370,123960,04680,04770,97510,8459
desarrollo2526,50no3.9613.9611.8881.8889243.0370,47660,11550,11570,76410,4501
desarrollo3511,50no3.9613.9612.8442.8449243.0370,7180010,16030,16050,50650,2137
desarrollo4493,50no3.9613.9613.6253.6259243.0370,91520,20520,20530,19480,0514
desarrollo5—no3.9613.9613.9613.9619243.0371,00000,23330,23330,00000,0000
holdout1555,50no1.0311.0311311312447870,12710,09160,04770,95080,8488
holdout2526,50no1.0311.0314894892447870,47430,137010,114990,72540,4638
holdout3511,50no1.0311.0317297292447870,70710,16460,15910,50820,2262
holdout4493,50no1.0311.0319429422447870,91370,21020,20640,18850,0546
holdout5—no1.0311.0311.0311.0312447871,00000,23670,23480,00000,0000
oot1555,50no1.0081.0081351352397690,13390,11850,04770,93310,8453
oot2526,50no1.0081.0085045042397690,50000,15670,1149960,66950,4473
oot3511,50no1.0081.0087307302397690,72420,17670,15640,46030,2185
oot4493,50no1.0081.0089209202397690,91270,211960,20020,18410,0572
oot5—no1.0081.0081.0081.0082397691,00000,23710,22950,00000,0000
Tramos de la escala por muestra
samplegradensharen_with_outcomen_badbad_ratepdjeffreys_p_valuetraffic_light
desarrollo14910,12396491230,04680,04770,522green
desarrollo21.3970,35271.3971950,13960,13960,498green
desarrollo39560,24149562380,248950,24890,495green
desarrollo47810,19727812880,36880,36850,493green
desarrollo53360,08483361800,53570,53520,492green
holdout11310,1271131120,09160,04770,015amber
holdout23580,3472358550,15360,13960,2199green
holdout32400,2328240530,22080,24890,843green
holdout42130,2066213780,36620,36850,525green
holdout5890,086389460,51690,53520,636green
oot11350,1339135160,11850,0477< 0,001red
oot23690,3661369630,17070,13960,045amber
oot32260,2242226500,22120,24890,831green
oot41900,1885190660,34740,36850,726green
oot5880,087388440,50000,53520,746green
Tramos de la escala maestra
gradescore_minscore_maxlabelpdn_developmentshare_developmentn_bad_developmentbad_rate_developmentsource
1555,50—desde 556 puntos0,04774910,12396230,0468formed
2526,50555,50de 527 a 555 puntos0,13961.3970,35271950,1396formed
3511,50526,50de 512 a 526 puntos0,24899560,24142380,24895formed
4493,50511,50de 494 a 511 puntos0,36857810,19722880,3688formed
5—493,50hasta 493 puntos0,53523360,08481800,5357formed
Matriz de correlación entre variables
ingreso_mensual__woedeuda_ingreso__woeutilizacion_linea__woeantiguedad_meses__woemora_max_12m__woe
1,00000,0049-0,00820,01420,0168
0,00491,00000,009980,000780,0025
-0,00820,009981,00000,00310,01996
0,01420,000780,00311,00000,0303
0,01680,00250,019960,03031,0000
Estabilidad de las variables candidatas
featurewoe_columnsamplecsicsi_bandsmoothing

Detalle por observación

Esta corrida produjo tablas con una fila por operación que no se reproducen en el informe (son datos, no evidencia de validación) y que no se exportaron: añada csv o xlsx a report.formats para obtenerlas completas.

  • Dataset transformado a WoE — 6.000 filas
  • PD calibrada por observación — 6.000 filas
  • PD sin calibrar por observación — 6.000 filas
  • Puntaje por observación — 6.000 filas
  • Dataset WoE de las variables seleccionadas — 6.000 filas

Anexo C —Parámetros completos

Este anexo reproduce el payload completo de cada etapa: los parámetros efectivos y las métricas estructuradas tal como las publicó cada step, sin resumir.

C.1Población, particiones y exclusiones

Artefacto de origen: data.data_card

Parámetros y payload

bad_rate
0,2345
class_counts
{
  "bueno": 4593,
  "excluido": 0,
  "indeterminado": 0,
  "malo": 1407
}
data_hash
74c5d9ddeca8ff71853623d20ace015d0788564549339d61bfb66f24dfadfcc8
effective_config
{
  "load": {
    "backend": "pandas",
    "csv_options": {
      "decimal": ".",
      "encoding": "utf-8",
      "sep": ","
    },
    "file_format": "auto",
    "source": "prepared/consumo_comportamiento/input.parquet"
  },
  "missing": {
    "max_missing_rate": "0,99",
    "special_values": []
  },
  "partition": {
    "min_bads_per_partition": 30,
    "strategy": {
      "cohort_col": "cohorte",
      "holdout_fraction": "0,20",
      "oot_cohorts": [
        "2024Q2"
      ],
      "type": "cohort"
    },
    "ttd_includes_excluded": true
  },
  "schema_": {
    "columns": [
      {
        "coerce": false,
        "dtype": "float",
        "ge": null,
        "isin": null,
        "le": null,
        "name": "ingreso_mensual",
        "nullable": false,
        "required": true,
        "unique": false
      },
      {
        "coerce": false,
        "dtype": "float",
        "ge": null,
        "isin": null,
        "le": null,
        "name": "deuda_ingreso",
        "nullable": false,
        "required": true,
        "unique": false
      },
      {
        "coerce": false,
        "dtype": "float",
        "ge": null,
        "isin": null,
        "le": null,
        "name": "utilizacion_linea",
        "nullable": false,
        "required": true,
        "unique": false
      },
      {
        "coerce": false,
        "dtype": "int",
        "ge": null,
        "isin": null,
        "le": null,
        "name": "mora_max_12m",
        "nullable": false,
        "required": true,
        "unique": false
      },
      {
        "coerce": false,
        "dtype": "int",
        "ge": null,
        "isin": null,
        "le": null,
        "name": "antiguedad_meses",
        "nullable": false,
        "required": true,
        "unique": false
      },
      {
        "coerce": false,
        "dtype": "str",
        "ge": null,
        "isin": null,
        "le": null,
        "name": "segmento",
        "nullable": false,
        "required": true,
        "unique": false
      },
      {
        "coerce": false,
        "dtype": "str",
        "ge": null,
        "isin": null,
        "le": null,
        "name": "cohorte",
        "nullable": false,
        "required": true,
        "unique": false
      },
      {
        "coerce": false,
        "dtype": "int",
        "ge": null,
        "isin": null,
        "le": null,
        "name": "bad_flag",
        "nullable": false,
        "required": true,
        "unique": false
      }
    ],
    "index_col": "loan_id",
    "ordered": false,
    "strict": false,
    "unique_keys": null
  },
  "target": {
    "bad_rule": {
      "all_of": [
        {
          "col": "bad_flag",
          "op": "==",
          "value": 1
        }
      ],
      "any_of": []
    },
    "exclusion_rules": [],
    "good_rule": {
      "all_of": [
        {
          "col": "bad_flag",
          "op": "==",
          "value": 0
        }
      ],
      "any_of": []
    },
    "indeterminate_rule": {
      "all_of": [
        {
          "col": "bad_flag",
          "op": "isna",
          "value": null
        }
      ],
      "any_of": []
    },
    "target_col": "target",
    "window": null
  },
  "type": "standard"
}
exclusions_by_reason
{}
n_features
8
n_rows
6.000
partition_bad_rates
{
  "desarrollo": "0,2333",
  "fuera_de_modelo": "0,0000",
  "holdout": "0,2367",
  "oot": "0,2371"
}
partition_sizes
{
  "desarrollo": 3961,
  "fuera_de_modelo": 0,
  "holdout": 1031,
  "oot": 1008
}
performance_window_months
—
source
data-68164c7a2a160d24.parquet
target_col
target

C.2Población y calidad de datos

Artefacto de origen: eda.eda_card

Parámetros y payload

axis
cohort
axis_inferred
no
default_rate_not_evaluable_reason
—
effective_config
{
  "analysis_partition": "desarrollo",
  "default_rate": {
    "axis": "cohort",
    "cohort_col": "cohorte",
    "date_col": null,
    "min_obs_per_period": 50,
    "period_freq": "M"
  },
  "quality": {
    "high_cardinality_threshold": 50,
    "near_constant_threshold": "0,99"
  },
  "sampling": {
    "enabled": false,
    "max_rows": 500000
  },
  "stability": {
    "metric": "cv",
    "threshold": "0,25"
  },
  "type": "standard",
  "univariate": {
    "columns": [
      "ingreso_mensual",
      "deuda_ingreso",
      "utilizacion_linea",
      "mora_max_12m",
      "antiguedad_meses",
      "segmento"
    ],
    "compute_descriptive_iv": false,
    "n_quantile_bins": 10,
    "rare_level_threshold": "0,01"
  }
}
failed_analyses
{}
n_columns_profiled
6
n_figures
6
n_periods
5
overall_default_rate
0,2333
quality_flag_counts
{
  "high_cardinality": 0,
  "near_constant": 0,
  "near_unique": 1
}
stability_flagged
no
stability_metric_used
cv
stability_not_evaluable_reason
eje_cohorte
stability_threshold
0,25
stability_value
—

C.3Binning WoE y poder predictivo

Artefacto de origen: binning.binning_card

Parámetros y payload

assigned_bins
[]
effective_config
{
  "cat_cutoff": "0,01",
  "cat_unknown": null,
  "categorical_columns": [
    "segmento"
  ],
  "exclude_columns": [],
  "fail_on_non_binnable": false,
  "feature_columns": [
    "ingreso_mensual",
    "deuda_ingreso",
    "utilizacion_linea",
    "mora_max_12m",
    "antiguedad_meses",
    "segmento"
  ],
  "keep_structural_columns": true,
  "max_n_bins": 6,
  "max_n_prebins": 20,
  "max_pvalue": null,
  "max_pvalue_policy": "consecutive",
  "metric_missing": "empirical",
  "metric_special": "empirical",
  "min_bin_n_event": 1,
  "min_bin_n_nonevent": 1,
  "min_bin_size": "0,05",
  "min_event_rate_diff": "0,00",
  "min_n_bins": null,
  "min_prebin_size": "0,05",
  "mip_solver": "bop",
  "monotonic_trend": "auto_asc_desc",
  "n_jobs": null,
  "output_suffix": "__woe",
  "require_optimal": true,
  "solver": "mip",
  "special_handling": "separate",
  "split_digits": null,
  "time_limit": 10,
  "type": "standard",
  "variable_overrides": []
}
excluded_by_target_rule
[]
iv_by_variable
{
  "antiguedad_meses": "0,0414",
  "deuda_ingreso": "0,1635",
  "ingreso_mensual": "0,3048",
  "mora_max_12m": "0,0219",
  "segmento": "0,0029",
  "utilizacion_linea": "0,06103"
}
missing_handling
empirical
monotonicity_by_variable
{
  "antiguedad_meses": "descending",
  "deuda_ingreso": "ascending",
  "ingreso_mensual": "descending",
  "mora_max_12m": "ascending",
  "segmento": null,
  "utilizacion_linea": "ascending"
}
n_variables_binned
6
n_variables_requested
6
n_variables_skipped
0
optbinning_version
0.20.0
rare_category_regroupings
{}
special_handling
separate

C.4Selección de variables

Artefacto de origen: selection.selection_card

Parámetros y payload

dependency_versions
{
  "numpy": "1.26.4",
  "pandas": "2.3.3",
  "scikit-learn": "1.7.2",
  "scipy": "1.17.1",
  "statsmodels": "0.15.0"
}
effective_config
{
  "compute_univariate_metrics": true,
  "correlation": {
    "clustering_method": "none",
    "enabled": true,
    "method": "pearson",
    "threshold": "0,75"
  },
  "exclude_columns": [],
  "fail_if_no_features": true,
  "feature_columns": "*",
  "force_exclude": [],
  "force_include": [],
  "keep_structural_columns": true,
  "max_iv": "0,50",
  "max_iv_action": "flag",
  "min_auc": null,
  "min_gini": null,
  "min_iv": "0,02",
  "min_ks": null,
  "priority_order": [
    "iv",
    "auc",
    "ks",
    "name"
  ],
  "stability": {
    "action": "report_only",
    "enabled": false,
    "review_threshold": "0,25",
    "smoothing": "0,000001",
    "stable_threshold": "0,10"
  },
  "type": "standard",
  "vif": {
    "add_intercept": true,
    "enabled": true,
    "max_iterations": null,
    "threshold": "5,00"
  }
}
excluded_by_reason
{
  "low_iv": 1
}
high_iv_flags
[]
max_abs_correlation_after_selection
0,0303
max_vif_after_selection
1,0016
n_candidates
6
n_excluded
1
n_selected
5
selected_features
[
  "antiguedad_meses",
  "deuda_ingreso",
  "ingreso_mensual",
  "mora_max_12m",
  "utilizacion_linea"
]
stability_flags
[]
thresholds
{
  "correlation.clustering_method": "none",
  "correlation.method": "pearson",
  "correlation.threshold": "0,75",
  "max_iv": "0,50",
  "max_iv_action": "flag",
  "min_auc": null,
  "min_gini": null,
  "min_iv": "0,02",
  "min_ks": null,
  "stability.action": "report_only",
  "stability.review_threshold": null,
  "stability.stable_threshold": null,
  "vif.threshold": "5,00"
}

C.5Modelo PD

Artefacto de origen: model.model_card

Parámetros y payload

dependency_versions
{
  "numpy": "1.26.4",
  "pandas": "2.3.3",
  "scikit-learn": "1.7.2",
  "scipy": "1.17.1",
  "statsmodels": "0.15.0"
}
effective_config
{
  "alpha": "0,05",
  "engine": "logit",
  "fail_if_no_features": true,
  "fit_intercept": true,
  "fit_maxiter": 100,
  "force_exclude": [],
  "force_include": [],
  "iv_contribution": {
    "action": "flag",
    "threshold": "0,90"
  },
  "optimizer": "newton",
  "sign_policy": {
    "action": "flag",
    "expected_beta_sign": "negative",
    "fail_on_forced_inverted": false
  },
  "stepwise": {
    "criterion": "wald_pvalue",
    "direction": "bidirectional",
    "enabled": false,
    "entry_p_value": "0,05",
    "exit_p_value": "0,05",
    "max_iter": 100,
    "min_features": 1
  },
  "tol": "0,00000001",
  "type": "standard"
}
engine
logit
final_features
[
  "antiguedad_meses",
  "deuda_ingreso",
  "ingreso_mensual",
  "mora_max_12m",
  "utilizacion_linea"
]
fit_statistics
{
  "aic": "3.898,72",
  "bic": "3.936,42",
  "converged": true,
  "llr": "416,53602",
  "llr_p_value": "< 0,001",
  "log_likelihood": "-1.943,36",
  "n_events_dev": 924,
  "n_iterations": 6,
  "n_nonevents_dev": 3037,
  "n_obs_dev": 3961,
  "null_log_likelihood": "-2.151,63",
  "optimizer": "newton",
  "pseudo_r2_mcfadden": "0,0968"
}
iv_contribution_flags
[]
n_candidates
5
n_final_features
5
sign_flags
[]
thresholds
{
  "alpha": "0,05",
  "engine": "logit",
  "entry_p_value": "0,05",
  "exit_p_value": "0,05",
  "fail_if_no_features": "true",
  "fit_intercept": "true",
  "fit_maxiter": "100,00",
  "iv_contribution.action": "flag",
  "iv_contribution.threshold": "0,90",
  "optimizer": "newton",
  "sign_policy.action": "flag",
  "sign_policy.expected_beta_sign": "negative",
  "stepwise.criterion": "wald_pvalue",
  "stepwise.direction": "none",
  "stepwise.max_iter": "100,00",
  "stepwise.min_features": "1,00"
}

C.6Scorecard

Artefacto de origen: scorecard.card

Parámetros y payload

dependency_versions
{
  "numpy": "1.26.4",
  "pandas": "2.3.3"
}
effective_config
{
  "clip": false,
  "intercept_allocation": "uniform",
  "max_score": null,
  "min_score": null,
  "output_suffix": "__points",
  "pdo": "20,00",
  "point_overrides": [],
  "rounding_method": "nearest_integer",
  "score_column": "score",
  "score_direction": "higher_is_lower_risk",
  "target_odds": "50,00",
  "target_score": "600,00",
  "type": "standard"
}
factor
28,8539
max_score
—
min_score
—
n_variables
5
offset
487,1229
overrides_count
0
pdo
20,0000
points_columns
[
  "antiguedad_meses__points",
  "deuda_ingreso__points",
  "ingreso_mensual__points",
  "mora_max_12m__points",
  "utilizacion_linea__points"
]
rounding_method
nearest_integer
score_column
score
score_direction
higher_is_lower_risk
target_odds
50,0000
target_score
600,0000

C.7Calibración

Artefacto de origen: calibration.card

Parámetros y payload

anchor_kind
through_the_cycle
anchor_source
development_observed
calibrated_mean_pd_dev
0,2333
dependency_versions
{
  "numpy": "1.26.4",
  "pandas": "2.3.3",
  "scipy": "1.17.1"
}
effective_config
{
  "anchor_kind": "through_the_cycle",
  "anchor_source": "development_observed",
  "fit_partition": "desarrollo",
  "linear_predictor_calibrated_column": "linear_predictor_calibrated",
  "linear_predictor_column": "linear_predictor",
  "max_abs_offset": null,
  "max_iter": 100,
  "method": "intercept_offset",
  "min_fit_rows": 30,
  "partition_column": "partition",
  "pd_calibrated_column": "pd_calibrated",
  "pd_raw_column": "pd_raw",
  "require_both_classes_for_supervised": true,
  "target_column": "target",
  "target_pd": null,
  "target_tolerance": "0,000000000001",
  "type": "standard"
}
fit_partition
desarrollo
intercept
—
method
intercept_offset
n_fit
3.961
observed_default_rate_dev
0,2333
offset
-2,7e-16
pd_calibrated_column
pd_calibrated
pd_raw_column
pd_raw
ranking_preserved
sí
raw_mean_pd_dev
0,2333
slope
—
target_pd
0,2333
ties_created
0

C.8Desempeño y discriminación

Artefacto de origen: performance.card

Parámetros y payload

bands_by_partition
{
  "desarrollo": "ok",
  "holdout": "ok",
  "oot": "ok"
}
dependency_versions
{
  "numpy": "1.26.4",
  "pandas": "2.3.3",
  "scikit-learn": "1.7.2"
}
effective_config
{
  "evaluation_source": "pd_calibrated",
  "min_events_per_partition": 1,
  "min_rows_per_partition": 30,
  "n_deciles": 10,
  "optional_thresholds": {},
  "partition_column": "partition",
  "partitions": [
    "desarrollo",
    "holdout",
    "oot"
  ],
  "pd_column": "pd_calibrated",
  "schema_version": "1.0.0",
  "score_column": "score",
  "score_direction": "higher_is_lower_risk",
  "target_column": "target",
  "type": "standard"
}
evaluation_source
pd_calibrated
max_metrics_by_partition
{
  "desarrollo": {
    "auc": "0,7123",
    "gini": "0,4247",
    "ks": "0,3201"
  },
  "holdout": {
    "auc": "0,6946",
    "gini": "0,3893",
    "ks": "0,3119"
  },
  "oot": {
    "auc": "0,6561",
    "gini": "0,3122",
    "ks": "0,2519"
  }
}
n_deciles
10
partitions
[
  "desarrollo",
  "holdout",
  "oot"
]
score_direction
higher_is_lower_risk
thresholds
{}

Métricas estructuradas

discrimination
{
  "effective_deciles_by_partition": {
    "desarrollo": 10,
    "holdout": 10,
    "oot": 10
  },
  "not_evaluable_reasons_by_partition": {},
  "threshold_flags_by_partition": {}
}

C.9Estabilidad

Artefacto de origen: stability.card

Parámetros y payload

bands_by_comparison
{
  "dev_vs_holdout": "stable",
  "dev_vs_oot": "stable"
}
comparisons
[
  "dev_vs_holdout",
  "dev_vs_oot"
]
csi_source
score_points
dependency_versions
{
  "numpy": "1.26.4",
  "pandas": "2.3.3",
  "pandera": "0.34.1"
}
effective_config
{
  "comparisons": [
    "dev_vs_holdout",
    "dev_vs_oot"
  ],
  "csi_bins": 10,
  "csi_source": "score_points",
  "include_pd_stability": true,
  "partition_column": "partition",
  "pd_column": "pd_calibrated",
  "psi_bins": 10,
  "psi_review_threshold": "0,25",
  "psi_stable_threshold": "0,10",
  "schema_version": "1.0.0",
  "score_column": "score",
  "score_direction": "higher_is_lower_risk",
  "smoothing": "0,000001",
  "temporal_axis": "cohort",
  "temporal_column": "cohorte",
  "temporal_freq": "M",
  "type": "standard"
}
max_psi_by_comparison
{
  "dev_vs_holdout": "0,0132",
  "dev_vs_oot": "0,0068"
}
psi_bins
10
psi_metric_by_comparison
{
  "dev_vs_holdout": "pd_psi",
  "dev_vs_oot": "score_psi"
}
review_threshold
0,25
score_direction
higher_is_lower_risk
stable_threshold
0,10
worst_csi_feature
mora_max_12m__points
worst_csi_value
0,0102

Métricas estructuradas

stability
{
  "csi_features": [
    "antiguedad_meses__points",
    "deuda_ingreso__points",
    "ingreso_mensual__points",
    "mora_max_12m__points",
    "utilizacion_linea__points"
  ],
  "include_pd_stability": true,
  "n_periods": 6,
  "temporal_axis": "cohort"
}

C.10Validación formal

Artefacto de origen: validation.card

Parámetros y payload

dependency_versions
{
  "numpy": "1.26.4",
  "pandas": "2.3.3",
  "scipy": "1.17.1"
}
effective_config
{
  "backtesting": {
    "alpha": "0,05",
    "enabled": false,
    "one_sided": true,
    "parameters": [
      "pd",
      "lgd",
      "ead"
    ],
    "pd_test": "jeffreys",
    "realised_ead_col": "realised_ead",
    "realised_lgd_col": "realised_lgd",
    "realised_pd_col": "realised_default",
    "segment_col": "portfolio"
  },
  "calibration": {
    "alpha": "0,05",
    "binomial_by_grade": false,
    "brier": true,
    "grade_col": "grade",
    "hl_grouping": "deciles",
    "hl_n_groups": 10,
    "hosmer_lemeshow": true,
    "min_rows_per_group": 30,
    "partition_column": "partition",
    "pd_column": "pd_calibrated",
    "pd_test": "jeffreys",
    "target_column": "target",
    "traffic_light_green_alpha": "0,05",
    "traffic_light_red_alpha": "0,01"
  },
  "discrimination": {
    "consume_performance": true,
    "partitions": [
      "desarrollo",
      "holdout",
      "oot"
    ]
  },
  "fail_on_falta_dato": true,
  "families": [
    "discrimination",
    "calibration",
    "stability"
  ],
  "schema_version": "1.0.0",
  "stability": {
    "consume_stability": true,
    "psi_review_threshold": "0,25",
    "psi_stable_threshold": "0,10"
  },
  "type": "standard"
}
falta_dato
[]
families_run
[
  "discrimination",
  "calibration",
  "stability"
]
model_ref
consumo_comportamiento_sin_stepwise
n_failed
1
n_tests
3
overall_status
fail

Métricas estructuradas

validation
{
  "families_run": [
    "discrimination",
    "calibration",
    "stability"
  ],
  "min_rows_per_group": 30,
  "n_failed": 1,
  "n_tests": 3,
  "not_evaluable_grades": [],
  "not_evaluable_partitions": [],
  "overall_status": "fail",
  "stability_recompute": null,
  "stability_source": "stability_artifact",
  "traffic_light": {
    "amber": 0,
    "green": 0,
    "red": 0
  },
  "traffic_light_cuts": null
}

C.11Escala maestra y puntos de corte

Artefacto de origen: master_scale.card

Parámetros y payload

anchor
0,2333
anchor_source
development_observed
approval_cutoff
—
cutoff_out_of_range
no
cuts
[
  "493,50",
  "511,50",
  "526,50",
  "555,50"
]
delta
-0,0018
diagnostics
{
  "desarrollo": {
    "amber_grades": [],
    "hhi": "0,2441",
    "inversions": [],
    "max_share": "0,3527",
    "max_share_grade": 2,
    "monotonic": true,
    "not_evaluable_grades": [],
    "red_grades": []
  },
  "holdout": {
    "amber_grades": [
      1
    ],
    "hhi": "0,24104",
    "inversions": [],
    "max_share": "0,3472",
    "max_share_grade": 2,
    "monotonic": true,
    "not_evaluable_grades": [],
    "red_grades": []
  },
  "oot": {
    "amber_grades": [
      2
    ],
    "hhi": "0,2454",
    "inversions": [],
    "max_share": "0,3661",
    "max_share_grade": 2,
    "monotonic": true,
    "not_evaluable_grades": [],
    "red_grades": [
      1
    ]
  }
}
effective_config
{
  "approval_cutoff": null,
  "grade_edges": null
}
equalized_grades
[]
formation_cause
—
integer_card
sí
n_grades
5
neighbours_not_distinct
[]
pd
[
  "0,0477",
  "0,1396",
  "0,2489",
  "0,3685",
  "0,5352"
]
samples
[
  "desarrollo",
  "holdout",
  "oot"
]
score_direction
higher_is_lower_risk
solver_status
OPTIMAL
source
formed