Proyectos / Model Regression Gate

Model Regression Gate

Control reproducible de promoción de modelos, con tareas versionadas, comparaciones pareadas de exactitud, tolerancias por segmento y un resultado separado que exige revisión.

Autor: · Python 3.15.0 · Licencia: MIT

Ficha publicada: · Ficha actualizada:

Repositorio · Metadatos y decisiones del experimento · Release v0.1.0

Problema y utilidad para agentes

Una puntuación agregada puede ocultar una regresión en un segmento de clientes. Las salidas inválidas, las comparaciones inciertas y la revisión humana pendiente también necesitan decisiones de publicación diferentes.

Un contrato explícito vincula las predicciones del candidato y del modelo de referencia con las mismas tareas, y evalúa cada segmento requerido antes de permitir la promoción.

Arquitectura

  1. Validar identidades y salidas. Antes de comparar se verifican versiones, hashes del contenido, identificadores únicos, etiquetas y cobertura exacta de las predicciones.
  2. Comparar resultados pareados. Las mejoras y pérdidas por segmento producen intervalos aproximados de diferencias a partir de límites de Wilson, con ajuste de Bonferroni y tolerancias congeladas.
  3. Conservar tres decisiones. Las regresiones respaldadas por el intervalo y las violaciones del contrato fallan. La incertidumbre, las muestras insuficientes o una marca de revisión humana exigen revisión. El fallo tiene prioridad y no se inventa ninguna aprobación humana.

Qué demuestra

  • Entrenamiento e inferencia locales reales de un clasificador bayesiano ingenuo multinomial para solicitudes de soporte.
  • Particiones congeladas de entrenamiento, desarrollo y evaluación, con resultados conservados de mejora, regresión deliberada y revisión requerida.
  • Reproducción sin conexión de 31 decisiones con 90 hashes de archivos verificados, además de 14 pruebas de regresión y contratos.

Resultados publicados

El experimento de CPU en un solo proceso usó Python 3.15.0, un Intel Xeon W-3223, 48 GiB de RAM y macOS 26.7.1.

El modelo de referencia se entrena con 60 ejemplos y el mejorado con 120. El modelo negativo rota las etiquetas de entrenamiento. La evaluación contiene 600 textos sintéticos en seis segmentos; cada uno usa una tolerancia de 0,10 y un mínimo de 50 observaciones. Diez controles reordenan el entrenamiento con semillas de 0 a 9.

Decisiones de promoción en la evaluación reservada

README y reproducción ·
Candidato evaluadoCorrectas / 600Decisión
Referencia contra sí misma400APROBADO
Vocabulario ampliado600APROBADO
Etiquetas de entrenamiento rotadas0FALLO
Diez controles con orden permutado400 cada unoAPROBADOS, los diez

Los casos comparten doce palabras de intención y plantillas correlacionadas. Las variantes numéricas de texto no son ejemplos semánticos independientes. La exactitud perfecta en estos casos y los controles aprobados no demuestran calidad ni una tasa de falsos positivos en producción.

Con 50 filas por segmento de desarrollo, el modelo de referencia y el mejorado exigen revisión. Los diez controles de desarrollo también exigen revisión sin fallar. Las salidas ausentes o inválidas fallan; la incertidumbre y los casos con revisión humana explícita se conservan por separado.

El tiempo transcurrido fue de 0,4965 s, el tiempo de CPU del proceso de 0,4056 s y el máximo de memoria residente de 25.161.728 bytes. Incluyen entrenamiento, inferencia, escritura de informes y consultas del equipo, no latencia aislada de inferencia. No se midieron costo ni energía.

Reproducir

Usá uv 0.8.23 y Python 3.15.0. El comando de preparación crea un entorno dentro del repositorio; uv debe poder encontrar el intérprete indicado. Instalá primero esa versión de Python si no está disponible en el catálogo de descargas de uv. La preparación inicial y las dependencias de pruebas pueden necesitar acceso a Internet. La reproducción y las pruebas con unittest solo usan la biblioteca estándar, sin descargas de modelos, credenciales, GPU ni inferencia hospedada.

Después de preparar el entorno, la reproducción de evidencia guardada verifica hashes y recalcula decisiones sin conexión y sin entrenar modelos. El segundo bloque ejecuta pruebas pequeñas de regresión, incluido el entrenamiento de modelos diminutos con casos de prueba. Para el experimento completo, seguí el README desde una copia limpia y ejecutalo con el bloqueo compartido en el equipo original. Conservá la evidencia publicada porque el experimento completo sobrescribe sus archivos de salida.

Verificar la evidencia guardada

git clone https://github.com/lucioduran/model-regression-gate.git
cd model-regression-gate
git checkout 1631dc59ad5037b8cf6c2dac5613af6d3255da4a
UV_CACHE_DIR="$PWD/.tools/uv-cache" UV_PYTHON_INSTALL_DIR="$PWD/.tools/python" uv venv --python 3.15.0 .venv
PYTHONPATH=src .venv/bin/python scripts/replay.py

Ejecutar las pruebas de regresión

PYTHONPATH=src .venv/bin/python -m unittest discover -s tests -v

Alcance y límites

  • El clasificador aprende enrutamiento léxico de ejemplos sintéticos propios; no evalúa un LLM ni tráfico natural de soporte, cambios de distribución o resistencia frente a ataques.
  • Los controles de invariancia al orden representan el mismo modelo efectivo y son dependientes. Sus conteos comprueban consistencia, no son ensayos independientes para estimar la probabilidad de falsos positivos.
  • Los intervalos de Wilson son aproximados, también después del ajuste por segmentos. Un modelo de referencia deficiente puede aprobar sin cambios; cada aplicación necesita requisitos separados de calidad absoluta.
  • Los hashes de modelos proporcionados por quien llama identifican afirmaciones, pero no autentican la inferencia. Los manifiestos verifican consistencia guardada, no firmas, certificación independiente de mediciones ni aprobación humana.

Fuentes y revisión

Las entradas y la política se congelaron en el commit c2fe489. El experimento registrado usó 2937f6b7efb3ec07f12ab2253d56a5610e3573c8 y comenzó en la fecha indicada abajo. La hora de finalización registrada corresponde al término de los casos, antes de consultar los datos del equipo; los temporizadores se leyeron después y antes de escribir el manifiesto. La release final conserva artefactos entrenados, predicciones, decisiones y hashes del código.