Perché esiste questo benchmark e cosa testa

L’analisi del sangue con IA assistita è sempre più utilizzata in contesti consumer e clinici, tuttavia restano rare le framework di valutazione riproducibili adattate alla medicina di laboratorio. Le domande che contano di più in questo contesto non sono quelle coperte dai benchmark generali di medical question-answering: un motore può distinguere la carenza di ferro dalla caratteristica talassemica quando il volume corpuscolare medio è identico, sovradiagnostica la sindrome di Gilbert come epatite e produce patologia in un pannello di screening completamente normale?

Diagramma di flusso della rubrica pre-registrata che mostra come il motore di IA Kantesti venga valutato rispetto a criteri di punteggio congelati
Figura 1: L’architettura del benchmark — ogni caso, ogni parola chiave, ogni sistema di scoring è fissato nel codice sorgente prima che il motore veda anche un solo PDF. La sintonizzazione della rubrica post-hoc è impossibile per progettazione.

Un singolo pannello di analisi del sangue contiene in genere abbastanza segnale da supportare diverse interpretazioni concorrenti e il compito del clinico che interpreta è valutare tali interpretazioni tra loro, piuttosto che recuperare una risposta da manuale. Un motore che va bene nei casi da manuale può comunque fallire proprio nei casi che contano di più: le insidie della diagnosi differenziale, le varianti benigne che da sole sembrano allarmanti e i pannelli pienamente normali che inducono assistenti sicuri a fabbricare patologia.

Questo benchmark è stato costruito proprio attorno a queste modalità di fallimento. Ciascuno dei quindici casi è stato selezionato per una specifica proprietà diagnostica: una microcitosi da carenza di ferro che deve essere tenuta distinta da una forma portatrice di beta-talassemia con identico volume corpuscolare medio, una presentazione di sindrome di Gilbert in cui l’unica anomalia è un’iperbilirubinemia indiretta isolata e un pannello di screening di quindici parametri in cui ogni analita si trova all’interno del suo intervallo di riferimento. La rubrica premia i motori che leggono ogni caso secondo i suoi termini e penalizza i motori che arrivano a una diagnosi sicura quando non è giustificata alcuna diagnosi di questo tipo.

Come Thomas Klein, MD, ho selezionato questo pannello di casi perché sono i pattern che vedo gli assistenti di medicina di laboratorio sbagliare più spesso. La modalità di fallimento costosa non è "mancare una malattia rara": è fabbricare patologia di routine in pazienti che non ce l’hanno. Nostro Validazione medica hub descrive il quadro più ampio; questa pagina descrive il suo risultato applicato sul motore V11.

Ultima esecuzione di riferimento — V11 (aprile 2026)

L’esecuzione di riferimento di aprile 2026 del motore AI Kantesti V11 ha prodotto un punteggio composito di 99.12% nella rubrica pre-registrata a quindici casi. Entrambi i casi-trappola di iperdiagnosi hanno ottenuto il punteggio massimo. L’indice di Mentzer è stato applicato correttamente nella differenziale tra carenza di ferro e talassemia.

Composito 99.12% 15 su 15 casi hanno ottenuto
0.998 Punteggio strutturale
0.998 Punteggio clinico
20,17 s Latenza media
0 / 13 Falsi positivi nelle trappole

La formula del composito combina tre componenti: conformità strutturale con le sette sezioni di report obbligatorie e le sedici sottosezioni obbligatorie, accuratezza clinica misurata come richiamo delle parole chiave più richiamo del sistema di punteggio più un controllo di validità della distribuzione di probabilità e latenza della risposta rispetto all’obiettivo primario di livello di servizio di 20 secondi. La scomposizione esatta è mostrata nella formula della rubrica qui sotto.

Composito = 0.35 × Strutturale + 0.55 × Clinico + 0.10 × Latenza

I restanti 0,88 punti percentuali di margine disponibile si scompongono quasi interamente in perdita di latenza — tre invocazioni di ripiego di Fase 2 ciascuna a -0,05 compositi hanno contribuito circa 0,60 dei 0,88 punti di deficit — invece che in contenuti clinici. Il motore non ha mancato alcuna diagnosi corretta in nessuna delle quindici casistiche; dove è stato carente, lo è stato prendendo leggermente più tempo rispetto all’obiettivo primario di 20 secondi in una piccola minoranza di invocazioni.

Quindici casi in sette specialità mediche

Il pannello di casi copre sette specialità — ematologia, endocrinologia, medicina metabolica, epatologia, nefrologia, cardiologia, reumatologia — più due casi dedicati di trappola per iperdiagnosi. Ogni caso è una cartella clinica reale anonimizzata di un paziente, tratta dal repository di dati clinici Kantesti, con consenso informato scritto.

Mappa di copertura di quindici casi di analisi del sangue anonimizzati distribuiti tra sette specialità mediche, più casi trappola di iperdiagnosi
Figura 2: Distribuzione dei casi tra ematologia, endocrinologia, medicina metabolica, epatologia, nefrologia, cardiologia, reumatologia, più due casi trappola — sindrome di Gilbert e un pannello di screening completamente normale.

La de-identificazione è stata eseguita con l’approccio Safe Harbor: tutti gli identificativi diretti sono stati rimossi o sostituiti e a ciascun record è stato assegnato un codice interno di caso di riferimento nel formato BT-NNN-LABEL. L’elaborazione è stata condotta in conformità con GDPR Articolo 9(2)(j) per la ricerca scientifica con adeguate salvaguardie e con le disposizioni equivalenti del GDPR del Regno Unito. Nessuna informazione personale identificativa compare in nessun punto del dispositivo pubblicato, della relazione tecnica o dei dataset rilasciati.

Ematologia (3) BT-001, BT-006, BT-007 Anemia sideropenica · Carenza di B12 · Beta-talassemia minore
Endocrinologia (3) BT-002, BT-008, BT-012 Tiroidite di Hashimoto · PCOS con resistenza insulinica · Grave carenza di vitamina D
Metabolica (2) BT-003, BT-013 T2DM con sindrome metabolica · Iperuricemia con rischio di gotta
Epatologia (2) BT-004, BT-009 NAFLD / NASH · Epatite virale acuta
Nefrologia · Cardiologia · Reumatologia (3) BT-005, BT-010, BT-011 CKD stadio 3 · Dislipidemia aterogena · Lupus eritematoso sistemico
Casi trappola (2) BT-014, BT-015 Sindrome di Gilbert (iperbilirubinemia indiretta isolata) · Screening adulto completamente normale

Perché questa particolare distribuzione

L’ematologia ottiene tre casi perché le differenziali microcitiche e le differenziali macrocitiche sono le trappole a più alto volume nella pratica di laboratorio reale. L’endocrinologia ottiene tre casi perché le presentazioni di Hashimoto, PCOS e carenza di vitamina D esercitano forme diagnostiche diverse (guidate da autoanticorpi, guidate da rapporti ormonali, guidate da un singolo marcatore). Le specialità a caso singolo restano comunque significative perché ciascuna tra CKD, rischio ASCVD e LES ha il proprio sistema di punteggio che il motore dovrebbe richiamare (rispettivamente stadiazione KDIGO, rischio a 10 anni ASCVD, criteri LES 2019 EULAR/ACR).

La rubrica pre-registrata, spiegata

La preregistrazione è la scelta metodologica singola più importante in questo benchmark. Ogni diagnosi attesa, ogni sistema di punteggio clinico e ogni sezione di report sono stati impegnati nel codice sorgente prima che il motore fosse invocato. La messa a punto post-hoc della rubrica per compiacere il motore è quindi impossibile.

Tre componenti costituiscono il punteggio composito. La componente strutturale contribuisce per il 35% e misura se il motore ha restituito le sette sezioni obbligatorie del report (intestazione, riepilogo, risultati chiave, differenziale, sistemi di punteggio, raccomandazioni, follow-up) e le sedici sottosezioni obbligatorie al loro interno. La presenza della sezione pesa il 40% e la presenza della sottosezione pesa il 60% nel calcolo strutturale.

IL componente clinica contribuisce per il 55% e combina tre elementi: richiamo delle parole chiave della diagnosi (70% della sottopunteggio clinico), richiamo del sistema di punteggio (20% — se il motore calcola Mentzer, FIB-4, HOMA-IR, rischio ASCVD, stadiazione KDIGO, criteri EULAR/ACR quando pertinenti) e un controllo di validità della somma delle probabilità (10% — le probabilità del differenziale devono sommarsi entro l’intervallo [90, 110]). Per i casi trappola, viene sottratta una penalità esplicita per iperdiagnosi fino a 0,30, calcolata come 0,10 per ogni flag di patologia fabbricato, con un limite massimo di tre flag.

IL componente di latenza contribuisce per il 10%. Una risposta sotto i 20 secondi ottiene il punteggio pieno di 0,10, una risposta sotto i 40 secondi ottiene 0,05 e qualsiasi risposta più lenta ottiene zero. L’obiettivo dei 20 secondi riflette l’obiettivo di livello di servizio del servizio di produzione primary-path; il tetto dei 40 secondi riflette il budget di ripiego della Fase 2 per invocazioni pesanti del motore.

Screenshot terminale dell’harness di benchmark Kantesti con licenza MIT in esecuzione che emette punteggi per caso
Figura 3: Il collaudo in esecuzione. Ogni caso viene renderizzato in un PDF A4, pubblicato sull’endpoint di produzione v11 e valutato rispetto alla rubrica congelata. Ogni risposta grezza viene archiviata insieme alla scorecard aggregata.

Cosa impedisce la preregistrazione

I benchmark di prima parte sono notoriamente inclini a gonfiare i propri numeri tramite messa a punto post-hoc della rubrica. Il modello è quasi sempre lo stesso: il team esegue il motore, vede dove sottoperforma, quindi regola in silenzio la rubrica affinché le aree che sottoperformano contino di meno. Impegnando la rubrica nel codice sorgente prima della prima chiamata al motore e pubblicando il collaudo con licenza MIT, questa modifica diventa visibile nel version control. Chiunque può clonare il repository, controllare le date di creazione della rubrica e verificare che i risultati del motore non siano stati usati per modellare il punteggio.

Casi “trappola” di iperdiagnosi — perché la sovrastima è la vera modalità di fallimento

Chiamate aggressive di patologia su schermate normali è una modalità di fallimento documentata degli assistenti medici per consumatori. I costi a valle includono indagini non necessarie, ansia del paziente e workup iatrogeno. I due casi trappola in questo benchmark sono progettati per rendere visibile e valutabile questa modalità di fallimento.

Confronto affiancato tra un’IA ingenua che fabbrica un’epatite su un pannello per la sindrome di Gilbert e il motore Kantesti che identifica correttamente la variante benigna di UGT1A1
Figura 4: Il design dei casi trappola. Un motore che etichetta con sicurezza la sindrome di Gilbert come epatite, oppure che fabbrica patologia borderline su una schermata completamente normale, viene penalizzato — non premiato per sembrare clinico.

🟡 Trappola 1 — BT-014-GILBERT

Presentazione. Un uomo di 24 anni con una bilirubina totale di 2,4 mg/dL. La frazione diretta è normale, le transaminasi e la fosfatasi alcalina sono all’interno dei rispettivi intervalli di riferimento, i reticolociti sono nella norma e l’aptoglobina e la LDH escludono l’emolisi.

Interpretazione corretta. Sindrome di Gilbert — una polimorfismo benigno di UGT1A1. L’interpretazione non dovrebbe richiamare epatite, cirrosi, anemia emolitica o ostruzione biliare.

Risultato v11. Composito 1,000. Nessuno dei sei flag di sovradiagnosi monitorati è comparso come diagnosi attiva.

🟡 Trappola 2 — BT-015-HEALTHY

Presentazione. Una donna di 35 anni con un pannello di screening di routine a quindici parametri. Ogni analita si trova comodamente all’interno del proprio intervallo di riferimento.

Interpretazione corretta. Rassicurazione e mantenimento dello stile di vita. L’interpretazione non dovrebbe inventare patologie borderline per sembrare clinicamente utile.

Risultato v11. Composito 1.000. Nessuno dei sette segnali di sovradiagnosi monitorati — diabete, anemia, ipotiroidismo, dislipidemia, epatite, malattia renale, carenza — è comparso come diagnosi attiva.

In entrambe le prove, sono stati controllati tredici segnali di iperdiagnosi monitorati. Nessuno è stato attivato. Questo è il risultato che conta di più per qualsiasi clinico che stia valutando l’uso di un motore di IA come strumento di triage o pre-consultazione: il sistema non ha inventato una malattia laddove non ne esisteva alcuna.

Indice di Mentzer: distinguere la carenza di ferro dalla talassemia caratteristica

Un secondo riscontro ad alto valore riguarda l’abbinamento del caso BT-001 (anemia da carenza di ferro) con il caso BT-007 (beta-talassemia minor). Entrambi si presentano con microcitosi e rappresentano un ostacolo ben noto per i classificatori inesperti. L’indice di Mentzer, calcolato come MCV diviso per il conteggio di RBC, supera 13 nella carenza di ferro e scende sotto 13 nella caratteristica talassemica.

In BT-001, la paziente era una donna di 34 anni con emoglobina 10,4 g/dL, MCV 72,4 fL, RBC 4,1 × 10¹²/L, ferritina 6 ng/mL e TIBC elevata. L’indice di Mentzer di circa 17,7 supporta una carenza assoluta di ferro. In BT-007, il paziente era un uomo di 28 anni con microcitosi (MCV 65,8 fL) ma un alto conteggio di RBC di 6,2, RDW nella norma, ferritina nella norma e HbA2 del 5,6%. L’indice di Mentzer di circa 10,6 indica la caratteristica talassemica e l’HbA2 elevato conferma la beta-talassemia minor.

Anemia da carenza di ferro Mentzer > 13 Ferritina bassa, TSAT bassa, TIBC alta, RDW elevato
Caratteristica beta-talassemica Mentzer < 13 Ferritina nella norma, RDW nella norma, HbA2 elevato (>3,5%), alto conteggio di RBC

Entrambi i casi hanno ottenuto 1.000. Il motore ha richiamato esplicitamente l’indice di Mentzer in entrambe le interpretazioni e ha restituito la diagnosi corretta in ogni occasione. Questo è il risultato singolo più rassicurante dal punto di vista clinico nell’intero benchmark, perché classificare erroneamente la caratteristica talassemica come carenza di ferro porta a una supplementazione di ferro inappropriata e a opportunità mancate di screening familiare, mentre classificare erroneamente la carenza di ferro come talassemia ritarda una terapia sostitutiva semplice. Il nostro guida per l’intervallo della ferritina spiega il contesto più ampio della diagnosi differenziale.

Risultati per caso dell’esecuzione di aprile 2026

Dodici dei quindici casi hanno raggiunto il punteggio composito massimo di 1.000 nel percorso primario. Tre casi sono stati gestiti tramite il ripiego della Fase 2, perdendo il bonus di latenza di 0,05 pur mantenendo tutto il contenuto clinico e strutturale. Un caso mancava di una singola sottosezione obbligatoria; uno ha restituito una somma di distribuzione di probabilità ridotta in modo marginale.

ID caso Specialità Composito Latenza Percorso
BT-001-IDAEmatologia1.00017,8 sprimario
BT-006-B12Ematologia1.00018,4 sprimario
BT-007-THALEmatologia1.00017,0 sprimario
BT-002-HASHEndocrinologia0.95037,0 sfallback
BT-008-PCOSEndocrinologia0.98718,6 sprimario
BT-003-T2DMMetabolic1.00019,1 sprimario
BT-013-GOUTMetabolic1.00019,4 sprimario
BT-004-NAFLDEpatologia1.00019,6 sprimario
BT-009-VIRHEPEpatologia0.95023,4 sfallback
BT-014-GILBERTTrap1.00018,9 sprimario
BT-005-CKDNefrologia1.00017,4 sprimario
BT-010-ASCVDCardiologia1.00019,7 sprimario
BT-011-SLEReumatologia0.98118,2 sprimario
BT-012-VITDEndocrinologia1.00019,3 sprimario
BT-015-SANOTrap1.00018,7 sfallback

Il caso di PCOS (BT-008) ha perso una singola sottosezione obbligatoria nella struttura della risposta — quindici su sedici invece di sedici su sedici — il che ha ridotto il punteggio strutturale da 1,000 a 0,963. Il caso di SLE (BT-011) ha restituito una somma della distribuzione di probabilità marginalmente ridotta che ha abbassato il punteggio clinico a 0,965, preservando ogni parola chiave diagnostica e sistema di punteggio. Nessuno dei due casi non perfetti ha mancato una diagnosi corretta.

Cosa non ci dice il punteggio in evidenza

Un punteggio composito del 99,12% in questa specifica rubrica pre-registrata rappresenta prestazioni quasi al limite massimo, ma merita un inquadramento accurato. Il risultato descrive il comportamento del motore rispetto a quindici casi anonimi selezionati con cura, valutati una sola volta ciascuno, secondo una singola rubrica. Siamo espliciti su ciò che il numero fa e non stabilisce.

Il punteggio indica che il motore V11 ha gestito correttamente i pattern diagnostici selezionati per questa valutazione, con una metodologia pubblicata e riproducibile. Non dice che il motore sia corretto su ogni pannello di analisi del sangue esistente nel mondo reale. Non dice che il motore debba sostituire il giudizio del clinico. E non dice che il motore superi sistemi AI alternativi — analisi comparative con altri motori sono state deliberatamente escluse da questo report.

Ciò che il punteggio stabilisce è una linea di base. Con rubrica e harness resi pubblici, le versioni future del motore possono essere valutate sugli stessi quindici casi e lo scarto tra il punteggio pubblicato e qualsiasi esecuzione successiva è, a sua volta, misurabile. Questo è il valore della pre-registrazione: converte affermazioni sulle prestazioni in affermazioni verificabili.

Come riprodurre questo benchmark in 10 minuti

La riproduzione richiede solo una coppia di credenziali API Kantesti e un ambiente Python 3.10 o successivo con la libreria requests E reportlab installate. L’harness completo è un singolo modulo Python autosufficiente rilasciato con licenza MIT.

Diagramma di rete della riproducibilità che mostra il benchmark replicato su Figshare, ResearchGate, Academia.edu e GitHub con il DOI di Figshare come ancoraggio canonico
Figura 5: Il benchmark è replicato su quattro piattaforme di ricerca. Il DOI di Figshare è l’identificatore accademico canonico; ResearchGate, Academia.edu e GitHub ospitano copie parallele con codice e dati grezzi.

Quattro passaggi per una nuova esecuzione

Uno. Clona il repository: git clone https://github.com/emirhanai/kantesti-blood-test-benchmark.git. Due. Installa le dipendenze con pip install -r requirements.txt. Tre. Imposta KANTESTI_USERNAME E KANTESTI_PASSWORD come variabili d’ambiente — le credenziali vengono lette a runtime e nulla è codificato in modo statico nello script. Quattro. Esegui python benchmark_bloodtest.py e ispeziona i quattro artefatti emessi nella directory di lavoro: una scorecard CSV, una scorecard JSON, un dump JSON completo incluso le risposte grezze del motore e un report Markdown leggibile dall’uomo.

L’esecuzione di riferimento del 23 aprile 2026 è conservata in results/ nella directory del repository. Una nuova esecuzione produrrà una nuova scorecard con timestamp, lasciando l’esecuzione di riferimento intatta. Se la tua esecuzione produce un risultato significativamente diverso, apri un issue su GitHub con il timestamp dell’esecuzione e la versione del motore restituita nei metadati della risposta.

Limitazioni e lavori futuri

Quattro limitazioni meritano un riconoscimento esplicito: dimensione del campione, valutazione a singolo passaggio, ambito di un singolo motore e origine dei dati da una singola fonte. Ciascuna di esse è affrontata in lavori di follow-up in corso.

Dimensione del campione. Quindici casi distribuiti in otto categorie specialistiche sono sufficienti per una prova di concetto ma non per l’analisi per sottogruppi all’interno di una specialità. È prevista l’espansione a cinquanta casi e includerà pannelli di coagulazione, screening di malignità ematologiche, pannelli per la gravidanza e presentazioni pediatriche.

Valutazione a singolo passaggio. Ogni caso è stato valutato una sola volta. I modelli di linguaggio di grandi dimensioni mostrano una varianza dell’output non trascurabile anche a temperature di campionamento basse, quindi un protocollo multi-run con cinque valutazioni per caso e la varianza riportata è il passo successivo naturale.

Ambito di un singolo motore. Questo report descrive un singolo motore. Le analisi comparative rispetto ad altri sistemi AI sono fuori ambito qui; potremmo perseguirle come uno studio indipendente separato con metodologia adeguata.

Origine dei dati da una singola fonte. I quindici casi sono cartelle cliniche reali anonimizzate di pazienti, tratte da un singolo repository clinico. Rappresentano un campione selezionato e non un prelievo casuale rappresentativo della popolazione. Estendere la valutazione a dati multi-centro è nella roadmap.

L’estensione pianificata più impattante è la parità multi-lingua. Il motore AI Kantesti serve utenti in 75+ lingue e l’esecuzione dello stesso harness su quindici casi in turco, tedesco, spagnolo, francese e arabo quantificherà la qualità dell’output tra le lingue supportate dal motore. Pubblicheremo ogni esecuzione specifica per lingua con il suo DOI e il relativo branch dell’harness.