Anexo: Modelo de estadísticas — alineación XG / gnuBG / blunderDB

Esta página describe cómo blunderDB calcula los indicadores que muestra — PR (Performance Rating), Snowie Error Rate, pérdida de MWC, suerte y victorias/derrotas — y cómo se alinean con eXtreme Gammon (XG) y gnuBG (referencia abierta).

Definiciones formales

PR (Performance Rating)

El PR (también llamado «error rate per decision» en gnuBG) mide el coste medio de los errores por decisión contabilizada, en la escala de eXtreme Gammon y de gnuBG: el error medio de equidad, multiplicado por 500.

\[\mathrm{PR} = \frac{\sum_i |\mathrm{error}_i|}{\mathrm{N_{contado}}} \times 500\]
  • El numerador es la suma absoluta de los errores EMG (en equity cubeful) sobre todas las decisiones del ámbito.

  • El denominador \(N_\text{contado}\) es el número de decisiones contabilizadas (véase más abajo).

  • El factor 500 es la convención de XG y de gnuBG (cf. gnubg/formatgs.c:399–409). No es una conversión a milipuntos: un error medio de 0,010 de equidad — es decir, 10 milipuntos (mpt) — da un PR de 5,0. Los errores de una posición, en cambio, se leen directamente en milipuntos, es decir en milésimas de equidad: el umbral de blunder más abajo, los filtros de búsqueda e> y E>, el histograma de magnitudes del panel Stats.

Snowie Error Rate

El Snowie ER usa el mismo numerador que el PR, pero el denominador es el número total de jugadas de ambos jugadores, jugadas forzadas incluidas (todas las decisiones, sin filtro):

\[\mathrm{SnowieER} = \frac{\sum_i |\mathrm{error}_i|}{N_\text{P1} + N_\text{P2}} \times 500\]

Referencia: gnubg/formatgs.c:415–424.

El Snowie ER es más estable entre herramientas porque su denominador no depende del filtro de decisiones forzadas/triviales. Sirve como métrica de contraste entre XG, gnuBG y blunderDB.

Importante

El filtro «Jugador» solo se aplica al numerador. Seleccionar un jugador restringe los errores sumados a sus propias decisiones, pero el denominador sigue siendo el número de jugadas de fichas de ambos jugadores, sobre las partidas que retiene el filtro. Esto es lo que distingue el Snowie ER del PR, y la razón de la propiedad siguiente: en una base que solo contiene partidas entre dos jugadores, la suma de sus dos Snowie ER es exactamente el Snowie ER sin filtrar.

Nota

El Snowie ER de un jugador es normalmente alrededor de la mitad de su PR, porque el denominador incluye las jugadas de ambos jugadores mientras que el PR solo utiliza las decisiones de ese jugador.

Pérdida de MWC (Match Winning Chance)

La pérdida de MWC expresa en puntos porcentuales de probabilidad de ganar el match el efecto acumulado de los errores de un jugador. Para cada decisión, el error EMG se convierte en MWC mediante la tabla MET (Match Equity Table) al marcador actual:

\[\mathrm{MWCLoss} = \sum_i \mathrm{eq2mwc}(\mathrm{erreur}_i, \mathrm{score}_i)\]

Referencia: gnubg/analysis.c:1449–1464.

Suerte (luck)

La suerte de una tirada es la diferencia entre lo que dieron los dados y lo que dan en promedio:

\[\mathrm{luck} = \mathrm{eq}(\text{mejor jugada con la tirada obtenida}) - \frac{1}{36}\sum_{d} \mathrm{eq}(\text{mejor jugada con } d)\]

con la suma extendida a los 36 resultados de la tirada (30 tiradas no dobles para la jugada de apertura de la partida, que no puede ser doble). Un valor positivo significa una tirada favorable. Referencia: gnubg/analysis.c:199–269 (LuckNormal / LuckFirst, evaluación cubeful a 0 ply).

Importante

blunderDB nunca recalcula la suerte: el evaluador integrado no sirve para eso. Toma tal cual el valor escrito por la herramienta que analizó la partida — ErrLuck para eXtreme Gammon, la propiedad LU para gnuBG — tras comprobar que ambas comparten la misma convención (misma unidad, positivo = afortunado).

Consecuencias prácticas:

  • Los formatos que no transportan la suerte (BGF, Jellyfish .mat) no producen ningún valor.

  • Las partidas ya importadas tampoco la tienen: la suerte nunca se almacenó antes de la versión 2.15.0 del esquema, y nada en la base permite reconstruirla. Hay que reimportar los archivos de origen para obtenerla.

  • Un valor ausente significa desconocido, nunca nulo — cero es una tirada realmente neutra. Las medias de suerte solo dividen, pues, por el número de tiradas cuya suerte se conoce.

  • Una partida en la que todas las tiradas tuvieran una suerte exactamente nula se considera no analizada en este aspecto (eXtreme Gammon escribe 0 tanto para «neutro» como para «no calculado»): sus tiradas siguen siendo desconocidas. Del lado de gnuBG la distinción es explícita — una tirada no evaluada lleva LU[-inf] — y esas tiradas también siguen siendo desconocidas, en lugar de convertirse en un valor.

Victorias y derrotas

blunderDB no almacena un ganador a nivel de partida: solo se almacenan los puntos de cada juego. El resultado se deriva, pues, en el momento de mostrarlo, sumando los puntos por asiento:

  • Partida a N puntos — ganador = el jugador que alcanza N. Si nadie lo alcanza, la partida queda inacabada (registro truncado, abandono) y no cuenta ni victoria ni derrota, para nadie.

  • Partida de dinero (sin objetivo) — ganador = quien se llevó más puntos; en caso de empate, ni victoria ni derrota. Es la convención del resultado de sesión de gnuBG (+1 / 0 / −1, gnubg/relational.c).

Consecuencia que conviene conocer al leer la pestaña Jugadores: victorias + derrotas puede ser inferior al número de partidas. La diferencia son las partidas inacabadas.

Errores y blunders

Una decisión se cuenta como error en cuanto el error de equidad asociado alcanza el umbral de error de la biblioteca, y como blunder en cuanto alcanza su umbral de blunder. Ambos se ajustan en la pestaña Biblioteca de la configuración y valen por defecto 0,050 y 0,100 EMG (50 y 100 mpt). La comparación es inclusiva: un error de exactamente 0,100 es un blunder con el umbral por defecto, en todas las pantallas (reparto por acción de cubo, detalle de partido, tabla de jugadores), y el mismo par sirve al contador de la barra de estado y a la lista propuesta después de una importación.

Estos umbrales son propios de cada biblioteca, y los valores por defecto son propios de blunderDB: gnuBG clasifica las jugadas en tres niveles (0.03 dudosa, 0.06 mala, 0.12 muy mala — gnubg/gnubg.c:281–286) en lugar de en una categoría única, y eXtreme Gammon traza los suyos en 0,020 y 0,080. Ambos se proponen como preajustes.

Decisiones contabilizadas en el denominador del PR

blunderDB sigue las mismas reglas de exclusión que XG y gnuBG.

Jugadas de fichas — decisiones contabilizadas

Solo se contabilizan las jugadas no forzadas:

  • Una jugada es forzada si los dados solo ofrecen una jugada legal (cMoves == 1 en gnubg/analysis.c:458).

  • Las jugadas forzadas tienen error nulo por definición: el jugador no tenía elección. Incluirlas en el denominador rebajaría artificialmente el PR.

Decisiones de cubo — decisiones contabilizadas

Solo se contabilizan las decisiones de cubo ajustadas:

  • Una decisión de cubo es ajustada si se sitúa dentro de la ventana de equity [-0.16, +0.16] en torno al punto de redoble (predicado isCloseCubedecision en gnubg/eval.c:5088–5100).

  • Un «No Double» trivial (equity muy negativa o muy positiva) no es una verdadera decisión estratégica; incluirlo inflaría el denominador y deprimiría el PR.

Resumen del filtro

Tipo de decisión

Incluido en \(N_\text{contado}\) (PR)

Jugada no forzada

Sí

Jugada forzada

No

Cubo ajustado

Sí

No Double trivial

No

Take / Pass

Siempre (son respuestas a un doble)

Correspondencia blunderDB ↔ XG ↔ gnuBG

Las métricas están alineadas dentro de los límites indicados a continuación. Son límites verificados por la suite de pruebas, y no desviaciones medias: la prueba compara partido por partido las cifras de blunderDB con las registradas para los partidos de referencia del repositorio, y falla en cuanto una sola desviación supera el límite. Las referencias de XG abarcan dos partidos — uno completo (317 decisiones contabilizadas, 156 y 161 por jugador), el otro reducido a su único PR, con un límite ampliado a 0,15 a causa de un movimiento no emparejado; las referencias de gnuBG abarcan otros dos partidos. La versión de eXtreme Gammon que produjo estas cifras no está registrada.

Comparación XG ↔ blunderDB (mismo motor de análisis)

Métrica

Diferencia máxima

Decisiones totales

≤ 5

Jugadas no forzadas

≤ 7

PR

≤ 0.10

Pérdida de MWC

≤ 1.0 pp

Equity total (EMG)

≤ 0.05

Comparación gnuBG ↔ blunderDB (importación SGF — motores diferentes)

Métrica

Diferencia máxima

Causa principal

PR (checker)

≤ 0.20

diferencias de equity entre motores

Pérdida de MWC

≤ 3.5 pp

datos de cubo ajustado incompletos en SGF

Snowie ER

≤ 0.50

jugadas forzadas sin análisis (SGF)

Nota

Los archivos SGF (gnuBG) no incluyen las alternativas para las jugadas forzadas, lo que significa que blunderDB no puede detectar todas las jugadas forzadas al importar SGF. Esto crea una diferencia estructural en el Snowie ER (denominador ligeramente distinto).

Validar sus propias cifras

Si sus valores de PR o MWC difieren de las cifras de XG, comprobar los siguientes puntos:

  1. Análisis completos — El PR solo puede calcularse sobre las posiciones que disponen de un análisis. Las posiciones sin análisis se cuentan como error cero pero no entran en \(N_\text{contado}\).

  2. Versión de XG — XG puede cambiar sus cálculos entre versiones. blunderDB se alinea con el comportamiento observado en las versiones recientes.

  3. Formato de importación — Los archivos SGF de gnuBG producen diferencias mayores en el cubo (véase la tabla anterior) porque el archivo no incluye los análisis completos para todas las decisiones de cubo.

  4. Migración de base de datos — Tras actualizar blunderDB, las bases de datos existentes se migran automáticamente. Hacer una copia de seguridad antes de abrir una base de datos con una nueva versión.

Referencia gnuBG

Las fórmulas se han verificado en los siguientes archivos de código fuente (repositorio gnuBG):

  • gnubg/formatgs.c:399–409 — PR («Error rate per decision»).

  • gnubg/formatgs.c:415–424 — Snowie Error Rate.

  • gnubg/analysis.c:458–462 — Acumulación de checker, exclusión de las jugadas forzadas (cMoves > 1).

  • gnubg/analysis.c:1430–1474 — Conversión EMG → MWC por decisión.

  • gnubg/analysis.c:1449–1464 — Acumulación de la pérdida de MWC (eq2mwc).

  • gnubg/eval.c:5088–5100 — Predicado isCloseCubedecision (umbral 0.16).