Validar el juez contra humanos
validarás el juez de Aurora contra ≥100 etiquetas humanas reportando TPR/TNR/precision (no accuracy cruda), leerás su matriz de confusión y medirás el acuerdo con Cohen's κ sobre la escala de Landis-Koch. Sin esto, no sabes si tu juez juzga como tú o acierta por suerte del desbalanceo.
3.1El juez que sacó un 94 y no servía
Vuelves del fin de semana con el juez que diseñaste en L2. Es binario, pointwise, reference-free. Tiene una rúbrica clara de "fundamentado". Quieres saber si funciona.
Lo pasas sobre 200 respuestas reales del agente de Aurora —la tienda online ficticia que es tu banco de pruebas— y comparas su veredicto con tus etiquetas humanas. El notebook escupe un número: 94% de accuracy.
Suena a aprobado. Casi lo anotas en el informe.
Antes, mira los números crudos. De esas 200 respuestas, solo 12 eran fallos de fundamentación reales. Las otras 188 estaban bien fundamentadas. Ahora haz un experimento mental: imagina un "juez" que sea una sola línea.
1def juez_perezoso(respuesta, chunk):
2 return "pass" # nunca mira nada; siempre apruebaEse juez perezoso acertaría 188 de 200. Eso es 94% de accuracy. La misma cifra que tu juez cuidado, con prompt, rúbrica y llamada a un modelo grande.
Tu juez impresionante no demostró ser mejor que un trozo de cinta aislante sobre el problema. La accuracy te mintió porque el dataset está desbalanceado. La pregunta de esta lección: ¿qué métrica no te miente?
3.2Qué vas a poder hacer
Al terminar esta lección sabrás:
- Explicar por qué la accuracy cruda engaña al validar un juez sobre un dataset desbalanceado.
- Calcular TPR, TNR y precision desde una matriz de confusión y leer qué fix sugiere cada tasa.
- Medir el acuerdo juez-humano con Cohen's κ y situarlo en la escala de Landis-Koch.
- Emitir un veredicto razonado "listo / no listo" sobre un juez, con el número que lo respalda.
Necesitas saber antes:
- El juez binario que diseñaste en N2·L2 (modo, referencia, escala, modelo): es el artefacto que aquí validas.
- El dataset etiquetado por humanos que produjiste en N1: son el ground truth de esta lección.
- Aritmética de fracciones. No hace falta estadística previa; las fórmulas van a la vista.
3.3Recupera
Antes de seguir, responde mentalmente. No mires lo de abajo hasta tener una respuesta.
- Tu juez de L2 emite un veredicto
"pass"o"fail"por cada respuesta. ¿Qué tipo de modelo estadístico es eso, más allá de "un LLM"? - En N1 etiquetaste el dataset a mano. En la validación de hoy, ¿quién es la "verdad" y quién es el "examinado": el humano o el juez?
- Si un juez y un humano coinciden en el 94% de los casos, ¿basta con eso para confiar en el juez? ¿De qué depende?
La respuesta a la 1 es: tu juez es un clasificador binario. Emite una de dos clases. Y los clasificadores binarios se validan con las herramientas de la clasificación —matriz de confusión, TPR, TNR—, no con una vibe. La respuesta a la 2: el humano es la verdad; el juez es el examinado. La "métrica del juez" no es su score sobre Aurora —es su acuerdo con el humano. La 3 es justo lo que desmonta el §3.1: depende de cómo de balanceado esté el dataset.
3.4El concepto: por qué accuracy miente y qué medir en su lugar
Empecemos por lo concreto —tus 200 casos de Aurora— y subamos hacia las tasas que no se dejan engañar.
Por qué accuracy premia al juez perezoso
La accuracy es la fracción de aciertos sobre el total: aciertos / casos. En un dataset balanceado —50% fails, 50% pass— es informativa.
Tu dataset no está balanceado. De 200 casos, 12 son fails y 188 son pass. Cuando una clase domina así, aprobar siempre acierta casi siempre. La accuracy recompensa la pereza, no el criterio.
Por eso el campo usa TPR / TNR / precision / F1 para validar un clasificador binario desbalanceado, no accuracy cruda (Eugene Yan, eugeneyan.com/writing/llm-evaluators; Hamel Husain, hamel.dev/blog/posts/llm-judge, 2024). Son tasas que separan los dos tipos de error en vez de mezclarlos en un solo número.
La matriz de confusión, pegada a Aurora
Una matriz de confusión es una tabla 2×2 que cruza lo que dijo el juez con lo que dijo el humano. Para que las tasas tengan sentido, fijamos la clase positiva: aquí, positivo = fail (respuesta no fundamentada). Es lo que queremos cazar.
| Humano: fail (real) | Humano: pass (real) | |
|---|---|---|
| Juez dice: fail | VP (verdadero pos.) | FP (falso pos.) |
| Juez dice: pass | FN (falso neg.) | VN (verdadero neg.) |
Cada celda es un tipo de resultado:
- VP — el juez marcó fail y era fail. Cazó un fallo real.
- FN — el juez marcó pass pero era fail. Se le escapó un fallo. Una respuesta mala pasa a producción.
- FP — el juez marcó fail pero era pass. Falsa alarma. El juez grita sobre una respuesta buena.
- VN — el juez marcó pass y era pass. Dejó pasar correctamente una respuesta buena.
Las tres tasas que importan
Desde esas cuatro celdas salen las tasas. Las defino pegadas al caso:
- TPR (recall, sensibilidad) = VP / (VP + FN). De los fallos reales, ¿cuántos cazó el juez? Una TPR baja significa muchos FN: fallos que se le escapan.
- TNR (especificidad) = VN / (VN + FP). De las respuestas buenas, ¿cuántas dejó pasar bien? Una TNR baja significa muchos FP: falsas alarmas que te hacen perder confianza en el juez.
- Precision = VP / (VP + FP). De lo que el juez marcó como fail, ¿cuánto era fail de verdad?
El trade-off es una decisión de producto, no de matemáticas. ¿Qué error te duele más: que se te escape un fallo (FN) o que el juez grite sobre respuestas buenas (FP)? En soporte de Aurora, un FN deja que un cliente reciba información falsa —el reembolso fantasma de N0·L1—. Ese error suele doler más que una falsa alarma. Esa respuesta fija qué tasa vigilas de cerca.
Cohen's κ: el acuerdo descontando la suerte
Te falta una pieza. TPR y TNR miden tipos de error por separado. Para una sola cifra del acuerdo global —pero honesta— usamos Cohen's κ (kappa): mide el acuerdo entre dos anotadores corrigiendo el que ocurriría por azar.
La intuición: si una clase domina, dos jueces al azar coincidirán mucho de pura casualidad. κ resta ese acuerdo fortuito y mide solo el acuerdo genuino. Por eso es más honesto que el % de acuerdo bruto en datos desbalanceados. La analogía: el % bruto es la nota del examen; κ es la nota descontando lo que habrías acertado adivinando a ciegas. El límite de la analogía: κ no es lineal, así que un κ de 0.8 no es "el doble de bueno" que 0.4.
Un κ pelado no dice mucho. Necesita una escala. La escala de Landis & Koch (1977) la da:
| Cohen's kappa | Interpretación |
|---|---|
| 0.00 – 0.20 | slight (ínfimo) |
| 0.21 – 0.40 | fair (regular) |
| 0.41 – 0.60 | moderate (moderado) |
| 0.61 – 0.80 | substantial (sustancial) |
| 0.81 – 1.00 | almost perfect (casi perfecto) |
En NLP, κ ≥ 0.61 (substantial) es el mínimo aceptable habitual (Landis & Koch, 1977). Por debajo, el acuerdo es demasiado endeble para fiarte del veredicto del juez.
Un matiz de honestidad sobre la herramienta. Cohen's κ asume dos anotadores y una escala binaria. Con más de dos anotadores, datos faltantes o escalas no binarias, se prefiere Krippendorff's α, con umbral aceptable α > 0.67 (Krippendorff, 2004 — conocimiento estadístico estándar). Para tu juez binario contra un humano, κ es la herramienta correcta.
Cuánto acuerdo es "bueno" — la evidencia, con cuidado
Aquí hay que ir con pies de plomo. El campo está lleno de cifras que circulan transpuestas. Pego cada número a su fuente y su setup, no de memoria.
El ancla defendible viene de MT-Bench (Zheng et al., Judging LLM-as-a-Judge, arXiv:2306.05685, 2023). Un juez GPT-4 alcanza más del 80% de acuerdo con anotadores humanos —a la par del acuerdo entre humanos, que es del 81%—. Es decir: el techo no es el 100%; el techo es lo de acuerdo que están dos personas entre sí. Dos personas tampoco coinciden siempre.
Dos avisos sobre esa cifra. Primero: MT-Bench reporta % de acuerdo directo, no κ —no mezcles las dos escalas—. Segundo: el paper tiene cuatro setups (MT-Bench y Chatbot-Arena × pairwise y single-answer) y las cifras por setup van de ~85% a ~97%; circulan transpuestas a menudo. Si necesitas una cifra exacta por setup, sácala de la tabla del paper, no de memoria. El titular seguro es el de arriba: >80%, a la par del 81% humano-humano.
Para refuerzo en la escala de κ, "Judge's Verdict" (arXiv:2510.09738, 2025) midió 54 LLMs como jueces. Los mejores alcanzan κ ≈ 0.81 (almost perfect); el baseline humano-humano es κ = 0.801; y 27 de los 54 modelos llegan a κ ≥ 0.61. Te da un techo y un suelo realistas.
Y una dosis de humildad. Eugene Yan reporta que, en relevance assessment, un LLM-judge da κ de 0.3 a 0.5 (fair) pero Kendall/Spearman de 0.8 a 0.9 (eugeneyan.com/writing/llm-evaluators, 2024). κ es más conservador que las correlaciones de ranking. No esperes un κ perfecto. El umbral lo fijas tú, según el coste del error en tu dominio.
La meta-lección
Quédate con esto por encima de cualquier fórmula. La métrica de tu juez no es su score sobre Aurora; es su acuerdo con el humano cuyo criterio importa. Un juez con 0.95 de accuracy y κ de 0.1 es inútil. Te aprueba todo y no coincide contigo en nada que cueste.
3.5Míralo funcionar: una validación completa sobre Aurora
Vamos a validar el juez de groundedness de Aurora de punta a punta. Es la parte densa de la lección: lleva aritmética. Lee primero la tabla entera, luego sigue cada cálculo despacio. No memorices las fórmulas —léelas al lado del número.
Partimos de los 200 casos del §3.1: 12 fails reales, 188 pass reales. Corremos el juez y rellenamos la matriz con lo que realmente devolvió.
| Humano: fail | Humano: pass | total juez | |
|---|---|---|---|
| Juez: fail | VP = 6 | FP = 4 | 10 |
| Juez: pass | FN = 6 | VN = 184 | 190 |
| total humano | 12 | 188 | 200 |
Primero, la accuracy, para reproducir la cifra que nos engañó:
1VP, FP, FN, VN = 6, 4, 6, 184
2
3accuracy = (VP + VN) / (VP + FP + FN + VN)
4print(f"accuracy = {accuracy:.3f}") # accuracy = 0.950Un 95%. Casi idéntico al juez perezoso. Ahora las tasas que separan los errores:
1tpr = VP / (VP + FN) # de los fails reales, cuántos cazó
2tnr = VN / (VN + FP) # de los pass reales, cuántos dejó pasar bien
3precision = VP / (VP + FP) # de lo que marcó fail, cuánto era fail
4
5print(f"TPR = {tpr:.2f}") # TPR = 0.50
6print(f"TNR = {tnr:.2f}") # TNR = 0.98
7print(f"precision = {precision:.2f}") # precision = 0.60Aquí se cae la máscara. La TPR es 0.50: de los 12 fallos reales de fundamentación, el juez cazó 6 y dejó escapar 6. Se come la mitad de los fallos que más te importan. La accuracy del 95% escondía ese agujero porque la clase "pass" domina y el juez la borda (TNR 0.98).
Ahora el acuerdo descontando la suerte. Calculemos Cohen's κ a mano.
1n = 200
2po = (VP + VN) / n # acuerdo observado = accuracy = 0.95
3
4# acuerdo esperado por azar: probabilidad de coincidir adivinando
5p_fail = ((VP + FP) / n) * ((VP + FN) / n) # ambos dicen "fail" por azar
6p_pass = ((FN + VN) / n) * ((FP + VN) / n) # ambos dicen "pass" por azar
7pe = p_fail + p_pass
8
9kappa = (po - pe) / (1 - pe)
10print(f"po (observado) = {po:.3f}") # po = 0.950
11print(f"pe (azar) = {pe:.3f}") # pe = 0.896
12print(f"kappa = {kappa:.3f}") # kappa = 0.519Lee la pregunta de auto-explicación antes de seguir: ¿por qué el mismo juez tiene 95% de accuracy y κ de solo 0.52? Mira pe. El acuerdo esperado por azar ya es 0.896. Como la clase "pass" domina, dos anotadores cualesquiera coincidirían el 90% de las veces de pura casualidad. El juez solo aporta ~5 puntos de acuerdo por encima del azar. κ los aísla: 0.519, que en Landis-Koch es moderate, por debajo del 0.61 mínimo.
El veredicto se escribe solo, y cada número apunta a un fix distinto:
- Accuracy 95% → no lo reportes solo; engaña por el desbalanceo.
- TPR 0.50 → el juez no detecta la mitad de las no-fundamentaciones. El prompt no captura algún tipo de fallo (por ejemplo, las afirmaciones implícitas que el chunk no respalda). Ahí está el trabajo.
- κ = 0.52 (moderate) → por debajo del 0.61. El juez no está listo. Necesita iterar la rúbrica antes de confiar en su veredicto.
Fíjate en lo que acaba de pasar. La accuracy te decía "aprobado". Las tasas y κ te dicen "no listo, y aquí está por qué". Esa es la diferencia entre un número y un diagnóstico.
3.6Hazlo tú
Ejercicio 1 — andamiaje parcial
Otro juez candidato sobre un set distinto de Aurora. Te doy la matriz ya rellena y las fórmulas a la vista. Calcula TPR, TNR y precision, y di si lo aprobarías por TPR.
| Humano: fail | Humano: pass | |
|---|---|---|
| Juez: fail | VP = 18 | FP = 30 |
| Juez: pass | FN = 2 | VN = 150 |
- TPR = VP / (VP + FN) = ?
- TNR = VN / (VN + FP) = ?
- precision = VP / (VP + FP) = ?
Antes de mirar nada, una pregunta de interrogación elaborativa. Respóndela tú: este juez tiene TPR alta pero precision baja. ¿Qué le pasa en la práctica, y a quién molesta?
Pista para validar tu respuesta: TPR = 18/20 = 0.90 (caza casi todos los fallos), pero precision = 18/48 = 0.375 (de lo que marca como fail, menos de la mitad lo es). Este juez es un alarmista: caza casi todos los fallos reales, pero a costa de 30 falsas alarmas. Molesta a quien revisa sus veredictos: dos de cada tres "fail" son ruido. Cuál es peor —este o el del §3.5— depende de tu coste de FN frente a FP.
Ejercicio 2 — autónomo
Sin andamiaje. Te dan un set crudo: una lista de pares (veredicto_juez, etiqueta_humana) para 100 respuestas de Aurora.
1pares = [("fail", "fail"), ("pass", "pass"), ("pass", "fail"), ...] # 100 paresTu tarea, paso a paso:
- Construye la matriz de confusión (cuenta VP, FP, FN, VN) con
positivo = fail. - Calcula TPR, TNR y precision.
- Calcula Cohen's κ con la fórmula del §3.5.
- Sitúa κ en la escala de Landis-Koch.
- Emite un veredicto razonado de una línea: listo o no listo, y por qué, citando el número que lo respalda.
No declares victoria con la accuracy. Si tu veredicto empieza por "la accuracy es alta, así que…", reescríbelo mirando la TPR y κ.
3.7Comprueba
Sin pistas. Un compañero te trae este resultado de su juez y dice "está listo para producción":
"Validé mi juez sobre 500 respuestas de Aurora. De esas, 20 eran fails reales. La accuracy salió del 96%. Lo subo al pipeline."
Decide: ¿está listo? Justifica usando lo que sabes del desbalanceo, y nombra qué métrica le pedirías antes de aprobarlo.
Ver la respuesta razonada
No está listo —o, mejor dicho, no lo sabes todavía. La accuracy del 96% no demuestra nada sobre un dataset donde solo 20 de 500 casos son fails. Un juez que aprobara siempre acertaría 480/500 = 96%. Es la misma trampa del §3.1, a mayor escala.
Lo que le pides antes de aprobarlo:
- La matriz de confusión completa (VP, FP, FN, VN), para ver dónde caen los errores.
- La TPR: de los 20 fails reales, ¿cuántos cazó? Si la TPR es baja, el juez deja pasar respuestas no fundamentadas, justo lo que debía cazar.
- Cohen's κ sobre la escala de Landis-Koch, para el acuerdo descontando el azar. Con esa clase tan dominante, el κ será el juez de verdad, no la accuracy.
Feedback formativo:
- Si dijiste "no listo" y pediste TPR + κ: dominas el núcleo de la lección —la accuracy miente con clases desbalanceadas; la verdad está en las tasas y en κ—. Reutilizarás este criterio en el checkpoint C2, donde el informe de validación exige TPR/TNR explícitas. El siguiente paso: en L5 verás cómo subir esa TPR iterando la rúbrica.
- Si dudaste porque "96% suena bien": es la reacción esperada; casi todo el mundo la tiene la primera vez. La brecha concreta: te falta calcular qué acertaría un juez que aprueba siempre (480/500 = 96%). Vuelve al §3.1 y reproduce el juez perezoso con estos números.
- Si dijiste "está listo": confundiste un número alto con un buen juez. La diferencia: la accuracy mezcla los dos tipos de error en un solo valor que el desbalanceo infla. Releer §3.4, "Por qué accuracy premia al juez perezoso", cierra esa brecha. El siguiente paso: calcula la TPR del compañero asumiendo que solo cazó 8 de los 20 fails y mira qué cuenta distinta te da.
3.8Conecta
Vuelve al juez que sacó un 94 el lunes por la mañana.
Antes confiabas en una cifra que escondía un agujero: la mitad de los fallos reales se le escapaban. Ahora tienes el instrumental para ver ese agujero —matriz de confusión, TPR, TNR— y para medir el acuerdo honesto con κ sobre Landis-Koch. La accuracy era una opinión con decimales. TPR 0.50 y κ 0.52 son un diagnóstico.
Esto es lo que has añadido al método del nivel:
- En L1 decidiste que el fallo nº1 de Aurora necesita un juez.
- En L2 lo diseñaste: binario, pointwise, reference-free, juez ≥ capacidad del evaluado.
- En L3 —aquí— aprendiste a medir si juzga como tú.
Pero un κ bajo no siempre significa un prompt incompetente. A veces significa un sesgo sistemático escondido: el juez prefiere la primera opción, premia las respuestas largas, o se favorece a sí mismo. Tu κ puede estar hundido por una de estas trampas, no por mal criterio. L4 audita y doma esos sesgos. Un κ bajo no siempre significa mal prompt; a veces significa un sesgo escondido. Vamos a cazarlos.
¿Dónde lo aplicarías en tu trabajo? Piensa en cualquier juez o clasificador que tengas hoy en producción. Si solo reportas su accuracy, ¿sabes de verdad cuántos de los casos que importan está cazando? Si la respuesta es "no", ya sabes qué tasa calcular primero.
3.9Reflexiona
Tómate dos minutos. Estas preguntas consolidan más que releer.
- ¿Por qué un juez puede tener 95% de accuracy y κ de 0.52 a la vez? Explícalo con la palabra "azar".
- Para tu caso de uso real, ¿qué error te cuesta más: un FN (fallo que se escapa) o un FP (falsa alarma)? Esa respuesta debería fijar qué tasa vigilas más de cerca.
- ¿Qué sigue sin estar claro? Anótalo. Si es "cómo elijo el umbral de κ para mi dominio", es la pregunta correcta —el coste del error la responde, y la afinas en L5 y L6—.
Referencia rápida
- Accuracy miente en datasets desbalanceados: un juez que aprueba siempre saca la accuracy de la clase mayoritaria. Usa TPR/TNR/precision/F1 (Eugene Yan; Husain, 2024).
- Matriz de confusión (clase positiva =
fail): VP cazado · FN fallo que se escapa · FP falsa alarma · VN pass correcto. - TPR = VP/(VP+FN) · TNR = VN/(VN+FP) · precision = VP/(VP+FP).
- Cohen's κ = (po − pe)/(1 − pe): acuerdo descontando el azar. Escala Landis-Koch: ≥0.61 substantial = mínimo NLP habitual (Landis & Koch, 1977).
- Krippendorff's α (umbral >0.67) si hay >2 anotadores o escala no binaria (Krippendorff, 2004).
- Techo realista: GPT-4 juez >80% de acuerdo, a la par del 81% humano-humano en MT-Bench (Zheng et al., 2023; es % directo, NO κ). Mejores LLMs κ≈0.81; baseline humano-humano κ=0.801 (Judge's Verdict, 2025).
- No usar nunca: "el 85% de proyectos IA fallan (Gartner)" ni "el 80% (McKinsey)" — cifras sin fuente primaria trazable.