ISMS Copilot
Engineering

El cero silencioso: cuando una puntuación faltante de juez se convierte en una medición

En nuestra ablación del 17 de julio de 2026 sobre estrategias de generación de documentos GRC (GLM-5.2 y Claude Opus 4.8 como escritores y jueces con rúbrica de 1-10), el pase 2 tuvo 79 de 446 filas de juicio registradas sin una puntuación general. El agregador contó cada una como 0. El mismo relleno con ceros había fabricado un efecto de 3.25 puntos en el pase 1, y cuando desapareció, escribimos una teoría sobre el sesgo del juez para explicar por qué. El desplazamiento emparejado entre los dos jueces en los mismos documentos fue de 0.12.

por ISMS Copilot··16 min read
El cero silencioso: cuando una puntuación faltante de juez se convierte en una medición

El número más peligroso en una evaluación juzgada por LLM no es una puntuación sesgada. Es una ausente, porque un agregador permisivo la convierte en un cero sin avisarte, y luego construyes una teoría para explicar ese cero. Lo sabemos porque lo hicimos dos veces en la misma evaluación. En una ablación offline concluida el 17 de julio de 2026, comparamos diez estrategias de generación para entregables de GRC (paquetes de políticas, un RoPA de procesador, un análisis de brechas SOC 2, una política de IA ISO/IEC 42001, una clasificación según el Reglamento de IA de la UE), puntuados a ciegas por dos modelos jueces con una rúbrica de 1-10. El pase 1 reportó que renderizar un entregable completo en un solo paso superaba al renderizado paso a paso en 3.25 puntos. El pase 2 observó que ese efecto se desplomó a 0.66, y nuestra propia nota metodológica diagnosticó el colapso como un artefacto del juez: un modelo juez era "1.5-2 puntos más indulgente" que el otro. Ambos hallazgos eran el mismo error. Setenta y nueve de las 446 filas de juez en el pase 2 no tenían un campo overall, el reductor hacía Number(r[d]) || 0, y cada media general en la tarjeta de puntuación del informe, además de ambas cifras principales relacionadas con marcos normativos, se reproduce exactamente al promediar esas 79 filas como ceros. Llamamos a esto el cero silencioso, y esta publicación explica lo que nos costó y qué verificamos ahora.

La evaluación y lo que reportó

El diseño fue ordinario para este tipo de trabajo. Nueve escenarios congelados, todos sintéticos y construidos alrededor de una ficticia empresa SaaS berlinesa de 20 personas (un décimo, un memorándum de diligencia debida de proveedores, se incluyó en el archivo de fixtures pero no se renderizó en los pases analizados aquí), extraídos de las formas más difíciles de redacción de cumplimiento que vemos: un informe de auditoría interna de múltiples secciones, un paquete de políticas de múltiples documentos, un registro de procesadores según el Art. 30 del GDPR, tareas intensivas en marcos normativos sobre SOC 2, ISO/IEC 42001 y el Reglamento de IA de la UE, una política basada en el espacio de trabajo, una ejecución de doce documentos, un brief con alcance ambiguo. Diez variantes variaron la estrategia de generación: renderizar un brief preaprobado sección por sección paso a paso, renderizar el mismo brief en un solo paso, regenerar el brief con un planificador más estricto primero, escribir libremente a partir de la tarea del cliente sin brief, añadir un bucle de reflexión de crítica y revisión del borrador, y cambiar el modelo escritor. Los dos modelos escritores fueron z-ai/glm-5.2 y anthropic/claude-opus-4.8, ambos llamados a través de OpenRouter en julio de 2026. Hasta tres pruebas por escenario y variante en el pase 2; dos variantes solo estaban parcialmente pobladas (la variante de brief regenerado con 18 renders y la rerun fuera de línea por pasos con 17, frente a 27 para las otras variantes recién renderizadas), y la línea base capturada es un conjunto de referencia único de nueve documentos.

El juicio era ciego y absoluto: cada juez veía la tarea del cliente y un documento, nunca la variante ni el modelo escritor, e instrucciones para devolver JSON estricto con cinco subpuntuaciones (correctitud, completitud, profundidad, citas, honestidad), un overall, una lista de banderas de fabricación, y un veredicto en una línea. Dos modelos jueces, los mismos que los escritores. El pase 1 usó una asignación anti-autopreferencia: el juez GLM para variantes escritas por Claude y el juez Claude para variantes escritas por GLM, porque la autopreferencia en evaluadores LLM está documentada: Panickssery, Bowman y Feng demostraron que los evaluadores LLM reconocen y favorecen sus propias generaciones (arXiv:2404.13076, 15-04-2024), y Zheng et al. catalogaron sesgos de autopromoción, posición y verbosidad en configuraciones de juez LLM (arXiv:2306.05685, 09-06-2023). El pase 2 aplicó ambos jueces a cada variante y promedió sus puntuaciones, lo cual es un diseño mejor.

El titular del pase 1, de la tarjeta de puntuación: el renderizado enfocado en un solo paso obtuvo 7.56 en general frente a 4.31 para el renderizado paso a paso del mismo brief en el mismo modelo. Un efecto topológico de 3.25 puntos. El titular del pase 2: ese efecto fue 0.66, la escritura libre a partir de la tarea fue la mejor variante, y el diseño paso a paso quedó cerca del fondo en calidad y fue el peor en honestidad y fabricación. La nota metodológica del informe explicó la brecha entre los pases: juzgar variantes diferentes con jueces diferentes había hecho incomparables las puntuaciones absolutas, porque el juez GLM era aproximadamente 1.5-2 puntos más indulgente que el juez Claude. "Nunca compares puntuaciones absolutas de jueces LLM entre variantes juzgadas por modelos diferentes" fue la lección anotada. Sonaba correcto. No era lo que decían los datos.

Lo que contenían realmente las filas

El 19 de agosto de 2026 releímos el archivo crudo de juicios, fila por fila, en lugar de la tarjeta de puntuación. De las 446 filas únicas (escenario, variante, prueba, juez) registradas en el pase 2 (de 466 planeadas; 20 juicios planeados no tienen fila alguna, que el arnés registró como fallos y correctamente excluyó de cada media), 79 no tenían clave overall, el 18%. Se dividían en dos grupos. Sesenta y cinco filas eran juicios completos menos un campo: todas las cinco subpuntuaciones presentes, banderas de fabricación presentes, el veredicto en una línea presente, y sin overall. El juez había devuelto el JSON que pedíamos con una clave caída, la clave que casualmente estaba entre honesty y fabrication_flags en el esquema solicitado. Catorce filas eran objetos JSON sin campos de rúbrica en absoluto, que el analizador aceptó porque aceptaba cualquier objeto JSON. La ausencia no estaba distribuida uniformemente entre jueces: en nuestra ejecución, 56 de las 229 filas del juez Claude (24%) no tenían overall, todas del tipo parcial, y 23 de las 217 filas del juez GLM (11%) no tenían ninguna, 9 parciales y las 14 objetos vacíos. No investigamos el porqué; nuestro prompt de juez, el manejo en modo JSON en la ruta que usamos, y el límite de 1,200 tokens de salida son todos candidatos, y la tasa es una propiedad de nuestra llamada, no una afirmación sobre ningún proveedor.

El agregador entonces hizo lo natural en TypeScript:

for (const d of dims) out[d] = Number(mean(js.map((r) => Number(r[d]) || 0)).toFixed(2));

Una fila sin overall se convertía en un 0 en una columna donde cada valor real estaba entre 1 y 10, y la distribución válida estaba fuertemente agrupada en la parte superior (de 367 puntuaciones overall válidas, 299 eran 8 o más). Un cero en una celda de dieciséis mueve la media en aproximadamente medio punto en los niveles de puntuación que observamos. Ocho ceros en una celda de dieciséis la reducen a la mitad.

Aquí está la tarjeta de puntuación del pase 2 tal como se publicó, junto a las mismas filas con puntuaciones faltantes tratadas como ausentes. Ambos jueces, todos los escenarios, puntuación general en 1-10:

VariantePuntuación general publicadaPuntuación general con filas válidasn de juez válido / filas de juez
Renderizado paso a paso del brief, salidas de línea base capturadas6.567.5014 / 16
Renderizado paso a paso del brief, rerun offline (GLM-5.2)6.128.0825 / 33
Renderizado en un solo paso del brief (GLM-5.2)6.788.0742 / 50
Renderizado en un solo paso del brief + reflexión (GLM-5.2)7.028.1444 / 51
Brief regenerado + renderizado en un solo paso (GLM-5.2)6.327.6828 / 34
Escritura libre a partir de la tarea (GLM-5.2)6.388.3040 / 52
Escritura libre + reflexión (GLM-5.2)6.087.7141 / 52
Renderizado en un solo paso del brief (Claude Opus 4.8)7.458.5946 / 53
Renderizado en un solo paso del brief + reflexión (Claude Opus 4.8)6.568.5340 / 52
Escritura libre a partir de la tarea (Claude Opus 4.8)7.538.4947 / 53

Toda puntuación general publicada en esta tabla es la media rellena con ceros hasta dos decimales. Las diez variantes que parecían abarcar de 6.08 a 7.53 en realidad abarcan de 7.50 a 8.59, una banda de aproximadamente un punto, y las cuatro primeras variantes están dentro de 0.3 entre sí. El resultado principal relacionado con marcos normativos, el que el informe destacó más ("Claude libre 8.06 versus brief 6.59; GLM libre 7.19 versus brief 6.40"), se convierte en 9.06 versus 8.62 (16 y 13 filas válidas) y 8.85 versus 8.73 (13 y 11). Un efecto de 1.47 puntos se reduce a 0.44; un efecto de 0.79 puntos se reduce a 0.12.

El pase 1 es el caso más contundente. Los 4.31 de la variante paso a paso provenían de dieciséis filas del juez Claude, de las cuales ocho no tenían overall; las ocho que sí tenían promediaban 8.62. Los 7.56 de la variante enfocada provenían de dieciocho filas con dos faltantes; las dieciséis válidas promediaban 8.50. El efecto topológico de 3.25 puntos que desencadenó toda la investigación fue, en las filas que llevaban una puntuación, de -0.12.

La teoría que construimos sobre el error

Esta es la parte que merece internalizarse, porque el error en sí es aburrido. Cuando el pase 2 no logró reproducir el pase 1, hicimos lo que hacen las personas cuidadosas: buscamos un mecanismo. El diseño anti-autopreferencia significaba que las variantes escritas por Claude y GLM en el pase 1 habían sido puntuadas por jueces diferentes, los sesgos documentados de los jueces LLM hacían plausible que "los jueces difirieran en severidad", y una tarjeta de puntuación donde las variantes juzgadas por Claude estaban bajas y las juzgadas por GLM estaban altas lo hacía parecer medido. Así que anotamos un desplazamiento de indulgencia de 1.5-2 puntos y una regla sobre no comparar puntuaciones absolutas entre jueces.

Las filas crudas nos permiten probar esa teoría directamente, porque el pase 2 tenía ambos jueces puntuando el mismo documento. Entre las 148 pares (escenario, variante, prueba) donde ambos jueces devolvieron un overall, la diferencia media GLM-menos-Claude fue de +0.12. Setenta y tres pares eran idénticos, 41 tenían al GLM un punto más alto, 17 tenían al Claude un punto más alto, y 17 diferían en dos o más. En los datos del pase 1, el mismo desplazamiento emparejado era de -0.06 sobre 72 pares. Entre los 148 pares completos no hay señal de un desplazamiento de indulgencia de 1.5 puntos. Lo que sí hubo: ausencia de datos, en dos capas. Entre jueces, el 24% de las filas de un juez no tenían overall frente al 11% del otro, y la asignación anti-autopreferencia puso al juez con la tasa más alta en cada variante escrita por GLM, así que como familia esas variantes recolectaron más ceros, lo que empujó sus puntuaciones a la baja en comparaciones entre familias. Dentro de un juez, la ausencia variaba por variante: las dos variantes en el titular del pase 1 eran ambas escritas por GLM y ambas juzgadas por Claude, y tenían ocho versus dos filas sin overall. El efecto "topológico" de 3.25 puntos nunca fue una comparación entre jueces en absoluto. Habíamos leído la ausencia como severidad, y la explicación fue lo suficientemente satisfactoria como para que nadie abriera el archivo.

Esa es la forma general del cero silencioso. Un valor faltante coercionado a un número no parece un error; parece una puntuación baja, y las puntuaciones bajas obtienen explicaciones. Un juez con un desplazamiento de severidad constante es un fallo mucho más benigno: el desplazamiento se cancela en cualquier comparación dentro del mismo juez y aparece inmediatamente en una verificación emparejada. Una celda rellena con ceros no es consistente. Escala con la frecuencia con la que el análisis falló en esa celda, y en nuestros datos esa tasa estaba correlacionada con la variante.

Lo que sobrevivió

No todo en el informe estaba equivocado, y la división es instructiva. Las sesenta y cinco filas parciales aún llevaban honesty y fabrication_flags, así que esas dos columnas solo perdieron las catorce filas vacías. Recalculadas sobre filas con un valor válido de honestidad, la línea base capturada de renderizado paso a paso sigue teniendo la honestidad más baja (5.81 en 16 juicios) y banderas de fabricación en 16 de 16, mientras que la variante de escritura libre de Claude tiene la honestidad más alta (9.75 en 52) y banderas en 1 de 52. Esa brecha es real. La clasificación de calidad se disolvió en gran parte en una banda de un punto, y la afirmación de que "la escritura libre supera al renderizado con brief" pasó de ser un titular a +0.23 en general para GLM-5.2 (8.30 frente a 8.07) y -0.10 para Claude Opus 4.8 (8.49 frente a 8.59). La afirmación de que "la reflexión perjudica" se mantuvo para la escritura libre de GLM (7.71 con reflexión frente a 8.30 sin ella) y fue un empate para el renderizado con brief de Claude (8.53 frente a 8.59). No hemos rerun la ablación; las conclusiones que extrajo el informe se están recalculando a partir de las filas válidas, y las lecciones metodológicas que realmente aprendimos están a continuación.

Hay una lectura de cumplimiento de esto también, y no es decorativa. La Cláusula 9.1 b) de la norma ISO/IEC 27001:2022 exige que una organización determine los métodos para el seguimiento, medición, análisis y evaluación de manera que asegure resultados válidos, y dice que los métodos seleccionados deben producir resultados comparables y reproducibles para considerarse válidos (ISO/IEC 27001:2022, Cláusula 9.1, edición 2022-10). Un auditor interno que encontrara que un panel de control de desempeño del SGSI había estado promediando celdas vacías como cero podría plantear una no conformidad contra esa cláusula. Una tarjeta de puntuación de evaluación que impulse una decisión arquitectónica es, por analogía, un método de medición en el mismo sentido, y nosotros la sometimos a un estándar más bajo que el que aplicaríamos a la de un cliente.

Límites

Esto es una reagregación de los juicios que ya teníamos, no una nueva ejecución, y los números de filas válidas heredan cada limitación de la original: nueve escenarios, hasta tres pruebas, puntuaciones enteras de dos jueces LLM agrupadas en 8-9, sin pruebas de significancia, y un juez que es en sí mismo un modelo. Las celdas de filas válidas van desde 14 hasta 47 juicios por variante sobre todos los escenarios y desde 4 hasta 16 en el subconjunto intensivo en marcos normativos; las puntuaciones válidas tienen una desviación estándar de 1.36, así que un error estándar ingenuo a nivel de fila de una media de variante completa (1.36 sobre la raíz cuadrada de n, ignorando que los jueces están emparejados y las pruebas se agrupan por escenario) es aproximadamente 0.2 a 0.4, y leemos diferencias menores a medio punto entre variantes como empates. Las tasas de caída de overall son lo que observamos en nuestro prompt a través de una ruta en julio de 2026, con un límite de 1,200 tokens y modo JSON solicitado; no aislamos la causa y no sabemos si es estable. El desplazamiento emparejado de jueces de 0.12 es específico de esta rúbrica y estos documentos. Nada de esto cambia el hecho central, que no depende de ninguna de esas salvedades: la columna overall publicada se calculó con el 18% de sus filas coercionadas a cero, y los dos hallazgos construidos sobre ella no sobreviven al eliminarlas.

El cero silencioso y una lista de verificación

La idea a llevar a cabo: en una evaluación juzgada por LLM, una llamada a un juez que no devuelve una puntuación no es un dato, y cualquier agregador que pueda convertirlo en uno lo hará eventualmente en la celda donde más importa. Las mitigaciones de sesgo de juez valen la pena, pero son inútiles hasta que hayas contado tus nulos. Si ejecutas una evaluación donde un modelo califica la salida de otro modelo, aplícale esto:

  • Nunca coerciones una puntuación faltante. Number(x) || 0, x ?? 0, fillna(0) en una columna de puntuación: todas convierten un juicio ausente en una puntuación por debajo del mínimo de la rúbrica, peor que cualquier juicio que la rúbrica permita. Trata lo faltante como faltante (pandas omite NaN por defecto en una media; nuestro reductor hecho a mano no lo hacía) y haz que la tarjeta de puntuación falle en voz alta si el conteo válido de cualquier celda está por debajo de lo que registraste previamente.
  • Imprime n válido junto a cada media. Una celda que dice "4.31" y una celda que dice "4.31 (8/16)" son afirmaciones diferentes. La nuestra imprimía n como el conteo de filas, lo que ocultaba que la mitad de una variante no tenía puntuación.
  • Valida la salida del juez contra el esquema y vuelve a intentarlo. Un objeto JSON no es un juicio. Exige cada campo puntuado, rechaza y vuelve a llamar en caso de error, y registra la tasa de errores por juez y por variante. Una tasa de errores que difiera por juez o por variante es en sí misma un hallazgo, y en nuestro caso lo fue.
  • Antes de teorizar sobre el sesgo del juez, calcula el desplazamiento emparejado. Si dos jueces puntuaron los mismos documentos, la diferencia en esos pares es el desplazamiento de puntuación entre ellos en esa tarea. El nuestro fue 0.12 en pares completos. Una historia de 1.5 puntos que no obtuviste de filas emparejadas es una historia.
  • Trata un tamaño de efecto inverosímil como un error de datos primero. Un cambio de 3.25 puntos entre dos renders del mismo brief en el mismo modelo, con puntuaciones agrupadas en 8-9 y dieciséis a dieciocho filas por variante, era inverosímilmente grande en relación con la distribución observada y debería habernos enviado a las filas antes de buscar un mecanismo.
  • Si cambias jueces por variante, también cambias sus modos de fallo. La asignación anti-autopreferencia es un diseño defendible, pero cualquier defecto específico del juez (fallos de análisis, truncamiento, negativas) queda entonces confundido con el tratamiento. Ejecutar cada juez en cada variante es más seguro, y ni siquiera eso te salva de los ceros.
  • Reelabora el titular a partir del archivo crudo antes de que el informe escriba una teoría. La tarjeta de puntuación es una vista. Las filas son la evidencia. Nuestro informe citó la tarjeta de puntuación, explicó su propio artefacto con un mecanismo, y anotó ese mecanismo como una lección. El mecanismo era una clave faltante.

Todas las cifras anteriores son nuestras propias mediciones en nuestros propios fixtures sintéticos de GRC (una empresa ficticia, sin datos de clientes), escritores y jueces z-ai/glm-5.2 y anthropic/claude-opus-4.8 servidos a través de OpenRouter tanto para renderizado como para juicio, ablación concluida el 17 de julio de 2026, reagregada a partir de los juicios registrados el 19 de agosto de 2026.

Artículos relacionados