El benchmark de extracción de extractos bancarios

Un benchmark del mundo real para la extracción de transacciones, y por qué un modelo que parece tener un 90% de precisión casi nunca devuelve un extracto completamente correcto.

H
Holofin Engineering · Engineering· 19 min de lectura·Jun 27, 2026
Read in English
BENCHMARK
98%
extractos de holofin con cero errores
1
fila con error de holofin en 44 docs
70–115
filas con errores por modelo de frontera
47
bancos · gold verificado a mano

En holofin, la extracción de extractos bancarios es uno de nuestros trabajos principales, y lo ejecutamos en producción. Prestamistas, contables y equipos financieros nos entregan extractos de cientos de bancos diferentes y esperan que cada transacción sea devuelta, exactamente, sin nada inventado y sin omitir nada.

La extracción se sitúa en la parte más frontal de ese pipeline, por lo que sus errores nunca se quedan ahí. Una fila faltante o inventada no solo resta un punto a la puntuación de precisión. Se convierte en un balance que no cuadra, una decisión de viabilidad económica basada en un número que nunca estuvo en la página, un libro mayor en el que nadie más adelante puede confiar. Un extracto bancario es booleano: o es completamente correcto, o es un riesgo.

Así que queríamos saber con qué fiabilidad hacen esto realmente los mejores modelos actuales, no en una demo seleccionada a mano, sino en extractos reales, evaluados de la forma en que los evalúa un equipo financiero, donde lo único que cuenta es si todo el extracto cuadra. Construimos un benchmark para averiguarlo.

El dataset

47 extractos reales, uno por banco

Cada extracto es real, luego anonimizado para que el diseño, las tablas y los totales sobrevivan, pero los nombres y números son sintéticos: grandes bancos franceses, bancos alemanes, neobancos y EMIs, cada uno con su propia idea de cómo debería ser una tabla de transacciones. Las etiquetas gold se verificaron a mano contra los PDFs de origen.

El corpus del benchmark · 47 bancos, 93 páginas

Cada extracto es real, luego anonimizado para que el diseño, las tablas y los totales sobrevivan pero los nombres y números son sintéticos. Haz clic en cualquier página para ampliar; cambia a Por banco para filtrar.

bami banque michel inchausp p1/4
bami banque michel inchauspp1/4
bami banque michel inchausp p2/4
bami banque michel inchauspp2/4
bami banque michel inchausp p3/4
bami banque michel inchauspp3/4
bami banque michel inchausp p4/4
bami banque michel inchauspp4/4
banque dupuy de parseval
banque dupuy de parseval
banque transatlantique p1/2
banque transatlantiquep1/2
banque transatlantique p2/2
banque transatlantiquep2/2
berliner sparkasse
berliner sparkasse
berliner volksbank
berliner volksbank
bnp paribas
bnp paribas
boursobank
boursobank
bred banque populaire p1/2
bred banque populairep1/2
bred banque populaire p2/2
bred banque populairep2/2
bunq p1/2
bunqp1/2
bunq p2/2
bunqp2/2
bwebank p1/2
bwebankp1/2
bwebank p2/2
bwebankp2/2
caisse d epargne p1/2
caisse d epargnep1/2
caisse d epargne p2/2
caisse d epargnep2/2
commerzbank p1/2
commerzbankp1/2
commerzbank p2/2
commerzbankp2/2
credit agricole brie picardie
credit agricole brie picardie
credit cooperatif p1/2
credit cooperatifp1/2
credit cooperatif p2/2
credit cooperatifp2/2
credit industriel et commercial p1/2
credit industriel et commercialp1/2
credit industriel et commercial p2/2
credit industriel et commercialp2/2
cr dit mutuel
cr dit mutuel
deutsche bank p1/2
deutsche bankp1/2
deutsche bank p2/2
deutsche bankp2/2
deutsche skatbank p1/2
deutsche skatbankp1/2
deutsche skatbank p2/2
deutsche skatbankp2/2
dkb deutsche kreditbank ag p1/3
dkb deutsche kreditbank agp1/3
dkb deutsche kreditbank ag p2/3
dkb deutsche kreditbank agp2/3
dkb deutsche kreditbank ag p3/3
dkb deutsche kreditbank agp3/3
fiducial banque
fiducial banque
finom
finom
grenke bank ag p1/3
grenke bank agp1/3
grenke bank ag p2/3
grenke bank agp2/3
grenke bank ag p3/3
grenke bank agp3/3
hsbc
hsbc
hypovereinsbank p1/2
hypovereinsbankp1/2
hypovereinsbank p2/2
hypovereinsbankp2/2
ibanfirst p1/3
ibanfirstp1/3
ibanfirst p2/3
ibanfirstp2/3
ibanfirst p3/3
ibanfirstp3/3
kontist p1/2
kontistp1/2
kontist p2/2
kontistp2/2
la banque postale p1/3
la banque postalep1/3
la banque postale p2/3
la banque postalep2/3
la banque postale p3/3
la banque postalep3/3
lcl banque et assurance
lcl banque et assurance
manager one p1/2
manager onep1/2
manager one p2/2
manager onep2/2
mein elba p1/3
mein elbap1/3
mein elba p2/3
mein elbap2/3
mein elba p3/3
mein elbap3/3
memo bank
memo bank
monabanq p1/2
monabanqp1/2
monabanq p2/2
monabanqp2/2
oberbank ag
oberbank ag
paypal p1/4
paypalp1/4
paypal p2/4
paypalp2/4
paypal p3/4
paypalp3/4
paypal p4/4
paypalp4/4
postbank
postbank
qonto
qonto
raiffeisenbank s dstormarn m lln eg p1/8
raiffeisenbank s dstormarn m lln egp1/8
raiffeisenbank s dstormarn m lln eg p2/8
raiffeisenbank s dstormarn m lln egp2/8
raiffeisenbank s dstormarn m lln eg p3/8
raiffeisenbank s dstormarn m lln egp3/8
raiffeisenbank s dstormarn m lln eg p4/8
raiffeisenbank s dstormarn m lln egp4/8
raiffeisenbank s dstormarn m lln eg p5/8
raiffeisenbank s dstormarn m lln egp5/8
raiffeisenbank s dstormarn m lln eg p6/8
raiffeisenbank s dstormarn m lln egp6/8
raiffeisenbank s dstormarn m lln eg p7/8
raiffeisenbank s dstormarn m lln egp7/8
raiffeisenbank s dstormarn m lln eg p8/8
raiffeisenbank s dstormarn m lln egp8/8
revolut business
revolut business
sg credit du nord p1/2
sg credit du nordp1/2
sg credit du nord p2/2
sg credit du nordp2/2
sg societe generale
sg societe generale
shine
shine
sparda bank p1/3
sparda bankp1/3
sparda bank p2/3
sparda bankp2/3
sparda bank p3/3
sparda bankp3/3
sumup p1/4
sumupp1/4
sumup p2/4
sumupp2/4
sumup p3/4
sumupp3/4
sumup p4/4
sumupp4/4
targox bank p1/4
targox bankp1/4
targox bank p2/4
targox bankp2/4
targox bank p3/4
targox bankp3/4
targox bank p4/4
targox bankp4/4
unicredit
unicredit
viva wallet
viva wallet
wise
wise
fig · 47 extractos anonimizados / 93 páginas · haz clic en cualquier página para ampliar
La conclusión

La precisión por fila es una métrica de vanidad

El número que le importa a un cliente no es "qué fracción de filas son correctas" sino "¿es correcto este extracto?". No son la misma métrica. Un extracto es correcto solo si cada fila lo es, por lo que una fila omitida o inventada hace fallar todo el documento.

  • Por extracto, no por fila. holofin extrae el 98% de los extractos con cero errores; el mejor modelo de frontera logra un 80%. En 44 documentos, holofin produjo una fila con error; los modelos de frontera produjeron 70–115 cada uno.
  • La brecha es la invención, no la lectura. Todos los sistemas leen bien la página (recall 0.88–1.00). holofin inventa una fila en 44 extractos (0.1%); los modelos de frontera inventan el 8–10% de cada fila que devuelven.
  • Una ventana más grande no es la solución. Pasar más páginas por llamada no sirve de nada; hacerlo por página es fiable porque limita la invención.
Resultados

Lo que encontramos

Cuatro lecturas del mismo benchmark. La primera sitúa a cada sistema en completitud (¿encontró las filas?) frente a precisión (¿son reales las filas que devolvió?). El resto sigue la aritmética a partir de ahí.

FIG.01
Lee todo, inventa una décima parte

Todos los sistemas encuentran las filas (completitud, x). Difieren en cuántas de las filas que devuelven existen realmente (precisión, y). holofin se sitúa en la esquina superior derecha; los modelos de frontera caen en el eje de precisión a medida que inventan. Modelos de frontera mostrados por página.

85%90%95%100%90%95%100%COMPLETITUD · RECALL →PREC ↑holofinR 1.000 · P 0.999GPT-5.5R 0.939 · P 0.917Claude Opus 4.8R 0.929 · P 0.908Gemini 3.1 ProR 0.931 · P 0.900
FIG.02
Leer el 90% de las filas no es acertar el 90% de los extractos

Un extracto es correcto solo si cada fila lo es. Porcentaje de extractos extraídos con cero errores (sin filas omitidas, sin filas inventadas) frente al gold verificado a mano. La sub-etiqueta es el total de filas con errores en los 44 documentos: holofin cometió uno; los modelos de frontera cometieron docenas.

holofin1 fila con error / 44 docs98%
Gemini 3.1 Pro115 filas con errores / 44 docs80%
GPT-5.584 filas con errores / 44 docs77%
Claude Opus 4.870 filas con errores / 44 docs75%
0%EXTRACTOS CON CERO ERRORES →100%
FIG.03
El error silencioso es la fila inventada

Porcentaje de transacciones devueltas que no existen en la página. Una fila inventada cuadra con un balance incorrecto y parece plausible: el fallo silencioso. Modelos de frontera mostrados en su mejor configuración (por página).

holofinproducción · por página0.1%
GPT-5.5por página8.3%
Claude Opus 4.8por página9.2%
Gemini 3.1 Propor página10.0%
0%TASA DE FILAS INVENTADAS →15%
FIG.04
Una ventana más grande no es la solución

holofin se ejecuta una página a la vez y lidera todos los ejes. Para los modelos de frontera, pasar más páginas por llamada no sirve de nada: el recall baja un poco, la precision sube un poco, dos páginas suele ser el punto óptimo. La brecha que importa es la que hay hasta la barra verde.

holofin1.000
GPT-5.5
por página0.939
dos páginas0.942
doc completo0.932
Gemini 3.1 Pro
por página0.931
dos páginas0.953
doc completo0.932
Claude Opus 4.8
por página0.929
dos páginas0.948
doc completo0.940
0.00MÁS ALTO ES MEJOR →1.00
FIG.05
Cada documento, cada error

Sin agregados tras los que esconderse. Este es el recuento bruto de filas con errores (omitidas + inventadas, vs gold) en cada extracto, por modelo, en la configuración por página. Lee la columna de holofin de arriba a abajo: está vacía. · = limpio; números = errores en ese documento.

bancofilasholofinGPT-5.5GEMINIOPUS 4.8
bami banque michel inchausp47·173117
banque dupuy de parseval2·1·1
banque transatlantique23····
berliner sparkasse1····
berliner volksbank3····
bnp paribas1····
boursobank4··9·
bred banque populaire2····
bunq36····
bwebank7·433
caisse d epargne1····
commerzbank7····
credit agricole brie picardie7····
credit industriel et commercial13·352929
cr dit mutuel11····
deutsche bank1····
dkb deutsche kreditbank ag9····
fiducial banque6····
finom1····
grenke bank ag4····
hsbc3····
hypovereinsbank2····
ibanfirst25····
kontist2····
lcl banque et assurance1···1
manager one4····
mein elba33·111
memo bank4···4
monabanq34····
oberbank ag1····
paypal2·464
postbank1····
qonto8·16··
raiffeisenbank s dstormarn m lln eg63·3323
revolut business1····
sg credit du nord4····
sg societe generale3····
shine13····
sparda bank23····
sumup39····
targox bank241235
unicredit1····
viva wallet1····
wise2·112
limpio1–23–56+TOTAL DE FILAS CON ERRORES   holofin 1GPT-5.5 84GEMINI 115OPUS 4.8 70
Dónde fallan los modelos

La destrucción silenciosa de la fila inventada

No es un fallo al leer la tinta en la página. Si una transacción está visiblemente impresa, todos los modelos la encuentran. El problema es lo que encuentran cuando la transacción no está ahí. Hay una diferencia operativa masiva entre una fila omitida y una inventada. Una fila omitida es molesta: el balance no cuadra y un operador detecta el hueco. Una fila inventada es un asesino silencioso. El modelo extrae un saldo acumulado, un subtotal o una fecha suelta y lo formatea como una transacción válida. Parece perfectamente plausible al hacerlo. Simplemente envenena la aritmética de forma lenta e invisible.

El gold es humano, no un modelo

No dejamos que un modelo evaluara a otros modelos. El ground truth se construyó a mano: en cada documento donde los sistemas discrepaban, una persona abría el PDF de origen y comprobaba las transacciones línea por línea. El benchmark puntúa frente a lo que está realmente impreso en la página, verificado por un humano, no frente a la opinión de otro modelo al respecto.

Metodología

Cómo está montado el benchmark

Los candidatos de frontera reciben imágenes de las páginas con un prompt de extracción genérico en tres tamaños de contexto. holofin es el pipeline de producción real (clasificar → OCR → extraer por página), operado a través de HTTP. Cada métrica es doc-macro: calculada por documento y luego promediada.

47 PDFs bancarios
uno por cada banco distinto
Anonimizar
pdf-holomask · tablas y totales preservados
Renderizar ventanas
por página · dos páginas · doc completo
Extraer
3 modelos de frontera + pipeline de holofin
Puntuar
vs gold verificado a mano
Gold = verificado por humanos
comprobado línea por línea contra cada PDF de origen
Regla de coincidencia
exacta (transaction_date, cantidad con signo) con precisión de centavos
¿Por qué no puntuar simplemente por la conciliación de saldos?

La comprobación obvia en producción es si las matemáticas de un extracto cuadran: saldo inicial + Σ transacciones = saldo final. Lo medimos, y es necesario pero no suficiente como métrica de verdad. Los extractos de GPT-5.5 cuadran 42/45 de las veces, y sin embargo sigue inventando ~8% de las filas frente a la página real; una fila inventada compensada por otro error sigue cuadrando, y un modelo que omite los saldos por completo (Gemini los dejó en blanco en 12 documentos) no se puede comprobar en absoluto. Un extracto puede pasar las matemáticas y seguir siendo incorrecto. Así que puntuamos cada transacción frente a un gold que fue verificado a mano contra el PDF de origen.

Rendimiento en producción

No necesitas una ventana más grande. Necesitas un arnés.

No resuelves la extracción pasando un PDF entero a un endpoint y pidiéndole a un modelo que tenga cuidado. En holofin esa es la descripción del trabajo. Construimos la jaula dentro de la cual corre la inteligencia:

  • Estructura antes que semántica. El OCR determinista y la geometría construyen primero el contexto de la página. Los prompts capturan bien el significado y mal la estructura visual.
  • Limitar el problema. Procesamos estrictamente por página, nunca pidiéndole a un modelo que mantenga un libro mayor entero en la memoria de trabajo.
  • Restricciones > intuición. Reglas contables estrictas deciden qué cuenta como una transacción antes de que un resultado se finalice.

Una vez que has escrito suficiente andamiaje para estar seguro (la redundancia del OCR, la geometría delimitadora, los parsers estrictos, las conciliaciones), el modelo ya no es el héroe. Es el especialista al que llamas para disputas y casos límite. El trabajo no es eliminar las partes aburridas; es construir cosas aburridas para que la magia tenga algo sólido sobre lo que sostenerse.

Artículos relacionados

Holofin