Benchmark parcial de scorecards¶
German Credit, Taiwan como suplemento y dos carteras sintéticas, con cuatro recetas de bayesrisk y tres referentes Python por cartera: 28 combinaciones ejecutadas. Es evidencia exploratoria sobre estas muestras y esta partición. No acredita superioridad universal, no elige un modelo automáticamente y no completa el corpus previsto para H10/C6. LC, HC, PAKDD y los referentes R permanecen pendientes.
Paquete completo · Manifiesto externo y SHA-256 · Notebook mínimo · Anexo técnico
Los notebooks sueltos necesitan el paquete completo: auxiliares, fuentes UCI, datos preparados, índices, grupos, configs, predicciones, tablas, intervalos, locks e informes HTML/Word/Excel. No contiene objetos Python serializados; las fuentes públicas se identifican más abajo.
Empezar¶
Usa Python 3.12.10 en un entorno nuevo. Extrae el archivo en una carpeta nueva y conserva
su manifiesto externo. El mínimo tiene cinco conceptos: Scorecard, run, summary,
to_yaml, export_excel; el anexo separado explica el experimento.
La medición usa el candidato de CI de S53, commit
bf829d4b9f44008a46374676cf15edbc874f03d8, con la corrección de target de A. El número de
versión sigue siendo 2.16.0, pero el wheel publicado en PyPI no tiene esa corrección.
No basta instalarlo por versión. Descarga candidate-distributions-with-evidence del
run de CI de origen.
Los artifacts de GitHub pueden requerir iniciar sesión; los datos no exigen cuentas.
SHA-256 del wheel medido:
351bb71923d2f388639179cf0d190220b76a86d87f68445d3df6b59b27e4ebcc
Instala primero el lock con hashes y después el candidato exacto, comprobando antes su SHA. Desde la extracción, con el Python del entorno nuevo:
python -m pip install --require-hashes -r notebook-lock.txt
python -m pip install --no-deps --force-reinstall /ruta/al/candidato/bayesrisk-2.16.0-py3-none-any.whl
python -m pip check
python -m ipykernel install --sys-prefix --name python3 --display-name "Python 3 (H10)"
python -m jupyterlab
notebook-lock.txt incluye Jupyter; requirements-lock.txt fija el benchmark sin notebook.
Los .in y constraints.txt permiten resolver con uv; los hashes .txt identifican esta
medición. El entorno está separado del core; no se crea un extra de bayesrisk.
Abre primero anexo.ipynb para verificar la extracción intacta y leer las tablas; después
minimo.ipynb para ejecutar un scorecard. El mínimo escribe en la carpeta hermana h10-work.
Si modificaste archivos entregados, usa otra extracción para verificar integridad.
El índice del Word se actualiza al abrirlo en Word.
Para repetir todo el experimento, desde otra extracción intacta:
El script fija hash seed y threads antes de importar el stack, ejecuta calentamiento y tres
procesos independientes secuenciales, compara resultados y conserva fallos en el denominador.
No sobrescribe reproducciones. Una fuente alterada o una descarga fallida bloquea la ejecución.
Todo auxiliar está en h10_benchmark/; no se importa este repositorio.
Fuentes y frontera anterior al ajuste¶
Se contrastaron fichas y APIs oficiales UCI, archivos y
CC BY 4.0. La licencia consta en las fichas;
la API confirma metadatos/target, no una licencia explícita. sources.json conserva URLs,
fechas, estados HTTP y hashes. La licencia del software no autoriza los datos.
| Fuente | Atribución | Transformación |
|---|---|---|
| German | Hans Hofmann, UCI, DOI, CC BY 4.0 | 1 bueno/2 malo → 0/1; 20 predictores; índice original |
| Taiwan | I-Cheng Yeh, UCI, DOI, CC BY 4.0 | Target renombrado; SEX/EDUCATION/MARRIAGE categóricos; ID sólo procedencia; 23 predictores |
| Consumo/drift | Generadores bayesrisk, Apache-2.0 | IDs/cohortes conservados; seis predictores; OOT 2024Q2 |
Se redistribuyen las dos fuentes UCI originales con atribución y huellas, y los Parquet derivados con estas transformaciones. No se publica el archivo local Lending Club.
German/Taiwan se agrupan por X admisible exacto, excluyendo target/ID. No hay una entidad
personal adicional acreditada. GroupShuffleSplit separa 25% de grupos, semilla 20261016,
con índice/orden originales. Sólo el complemento entra a Scorecard(partition="random"),
con Holdout/semilla de fábrica. Referentes reciben idénticos Desarrollo/evaluación/orden.
| Cartera | Desarrollo (malos) | Holdout (malos) | Evaluación (malos) |
|---|---|---|---|
| German | 598 (168) | 152 (53) | 250 (79) |
| Taiwan | 18082 (3958) | 4418 (1003) | 7500 (1675) |
| Consumo | 3961 (924) | 1031 (244) | 1008 (239) |
| Drift | 3955 (1312) | 1000 (315) | 1045 (507) |
Cada muestra tiene al menos 30 malos y un bueno; no se buscaron semillas favorables. Holdout es diagnóstico. No se eligieron recetas mirando evaluación. Los grupos X son un proxy: no demuestran independencia de personas ni eliminan dependencias no observadas.
Recetas y lectura de cifras¶
Fábrica conserva todos los defaults. Las otras tres variantes cambian uno: stepwise=False,
max_bins=5 o monotonic="auto". Son recetas de investigación, no nuevos presets.
Referentes: OptBinning 0.20.0 MIP, seis bins, mínimo 5% y tendencia auto asc/desc;
scorecardpy 0.1.9.7 con árbol WoE, un core y positivo 1; skorecard 1.6.9 con prebinning
árbol/categórico y OptimalBucketer MIP. Logística sin penalización, lbfgs, 1000 iteraciones,
semilla 20261016; escala PDO 20 / odds 50 / puntos 600. Detalles en h10_benchmark/recipes.py.
Missing/special/intercepto tienen convenciones propias; no se fabrican Studies de terceros.
PD creciente de riesgo. AUC, Gini=2AUC−1, KS, Brier, log-loss, PD media, tasa observada y PSI
con deciles únicos de Desarrollo, extremos infinitos y piso 1e-6 renormalizado. Una referencia
degenerada falla. El anexo muestra las 28 filas; aggregate/metrics.csv y .json conservan precisión.
Los 24 contrastes AUC frente a fábrica usan 1000 bootstrap pareados de grupos completos, reemplazo y semilla 20261016. Una réplica monoclase impide publicar intervalo. Son exploratorios, condicionados al modelo/partición; no estiman variación de entrenamiento ni corrigen multiplicidad.
Tiempos: mediana/rango de tres procesos con calentamiento separado. fit_seconds comprende
el pipeline bayesrisk sin informe, o el fit del referente; apply_seconds incluye evaluación
y referencia Desarrollo; report_seconds mide el render original HTML/Word, excluye
Excel, verificador y presentación posterior de tablas anchas.
Los costes no son funcionalmente equivalentes entre herramientas.
Verificación y límites¶
Tres repeticiones Windows conservaron exactamente predicciones, métricas, variables, configs y 16 proyecciones/escala maestra. Sus invocaciones acreditan procesos separados; no se registraron PID ni pools efectivos originalmente. El runner distribuido sí exige y registra ese entorno.
Los 16 HTML/Word/Excel se reconciliaron con tablas originales; CSV/JSON con predicciones.
La descarga contiene derivados con rutas portables, hashes originales/derivados en
provenance.json, cifras y etiquetas intactas. Las tablas Word de más de ocho columnas
usan páginas apaisadas y fuente de nueve puntos; sobre quince columnas, A3. Es presentación
del benchmark, sin modificar el renderer del motor. Las cuatro carteras pasaron equivalencia
guiada/completa/backend de pantalla y permutación exclusiva de etiquetas Holdout: bins,
selección, coeficientes, calibración y scoring iguales; el hash de procedencia cambia.
Latencia visible: Chrome 155, Jupyter y pantalla reales, desde llamada/click hasta resumen visible tras dos frames. Tres pares, mismo candidato y entrada, calentamientos separados:
| Puerta | Mediana base (ms) | Mediana H10 (ms) |
|---|---|---|
| Guiada | 677,6 | 678,8 |
| Completa | 428,1 | 466,4 |
| Pantalla | 8902,5 | 8903,5 |
Los rangos se superponen; completa aumentó 38,3 ms en esta muestra pequeña. No demuestra igualdad estricta ni mejora. No se cambió código del motor o pantalla. Simplicidad: 37 marcas esenciales, 39 paths, 36 campos atómicos esenciales (denominadores distintos), 208 avanzados, 12 bloques, máximo 6 esenciales por sección. Cero perillas nuevas.
CI mínimo/censo/invariantes bloquea red tras instalar el candidato. Tags/despachos manuales exigen 28 recetas secuenciales Linux; cada recibo identifica el wheel exacto. Esto no publica una release. Los fallos CP/import históricos y el corpus pendiente se conservan separados de las 28 recetas admitidas y ejecutadas aquí.