Varför denna benchmark finns och vad den testar
AI-assisterad tolkning av blodprov används allt oftare i konsument- och kliniska arbetsflöden, men reproducerbara utvärderingsramverk anpassade för laboratoriemedicin är fortfarande ovanliga. De frågor som betyder mest i detta sammanhang är inte de som täcks av generella riktmärken för medicinsk frågesvar: kan en engine skilja järnbrist från talasemi-egenskap när den genomsnittliga korpuskulära volymen är identisk, ställer den felaktigt diagnosen Gilberts syndrom som hepatit, och skapar den patologi i en helt normal screeningpanel?
En enskild blodprovs-panel innehåller vanligtvis tillräckligt med signal för att stödja flera konkurrerande tolkningar, och den tolkande klinikerns uppgift är att väga dessa tolkningar mot varandra snarare än att hämta ett facit från en lärobok. En motor som klarar sig bra på läroboksfall kan ändå misslyckas på de fall som betyder mest: fallgroparna i differentialdiagnostiken, de godartade varianter som ser alarmerande ut var för sig och de helt normala panelerna som frestar självsäkra assistenter att tillverka patologi.
Detta benchmark byggdes exakt kring dessa typer av fel. Var och en av de femton fallen valdes ut för en specifik diagnostisk egenskap: en järnbristanemi med mikrocytos som måste hållas tydligt skild från en betatalassemi-egenskap med identiskt medelkorpuskelvolym, en presentation som vid GIlberts syndrom där den enda avvikelsen är en isolerad indirekt hyperbilirubinemi, och en screeningpanel med femton parametrar där varje analytsubstans ligger inom sitt referensintervall. Bedömningsmallen belönar motorer som läser varje fall utifrån dess egna villkor och straffar motorer som försöker nå en självsäker diagnos när en sådan diagnos inte är motiverad.
Som Thomas Klein, MD, valde jag fallpanelen eftersom det är de mönster jag oftast ser att laboratoriemedicinska assistenter får fel. Den dyra feltypen är inte att "missar en sällsynt sjukdom" — det är att hitta på rutinmässig patologi hos patienter som inte har den. Vår Medicinsk validering hub beskriver det bredare ramverket; den här sidan beskriver den initiala V11 proof-of-concepten och V11 andra uppdateringen som skalade den till 100 000 syntetiska fall hämtade från en syntetisk falluppsättning som spänner över 127 landsbeteckningar — med samma poängsättningsmall, byte-identisk, utan tillåten efterhandsjustering.
Senaste referenskörning — V11 Second Update (26 april 2026)
V11 Second Update-referenskörningen den 26 april 2026 gav en sammanvägd poäng på 99.80% på samma förhandsregistrerade bedömningsmall som användes i V11 första lansering, utvärderad på 100 000 syntetiska fall hämtade från Kantesti:s syntetiska falluppsättning och spänner över 127 landsbeteckningar och 75+-språk. Varje fall slutfördes på motorns primära sökväg; aktiveringar av flaggor för hyperdiagnostik i trap-fall låg kvar på 0 / 87,412. Den ursprungliga V11-körningen den 23 april 2026 omfattade 15 handkuraterade fall (sammanvägd 99.12%) och validerade bedömningsmallen; Second Update behåller samma bedömningsmall byte-identisk och utökar utvärderingen till en kohort i populationsskala.
Den sammanlagda formeln kombinerar tre komponenter: strukturell överensstämmelse med de sju obligatoriska rapportsektionerna och sexton obligatoriska undersektionerna, innehållsnoggrannhet mätt som nyckelords-återkallning plus återkallning i poängsystemet plus en kontroll av giltighet för sannolikhetsfördelning, och svarslatens mot målet för servicenivå på primär sökväg. Den exakta uppdelningen visas i bedömningsmallsformeln nedan — inga av dessa vikter eller delbedömningsmallar ändrades för Second Update.
De återstående 0,20 procentenheterna av marginalen bryts nästan helt ned i den kliniska delpoängen — en liten andel av fallen (främst inom hepatologi och reumatologi) hade ett förväntat nyckelord i poängsystemet som saknades i motorns tolkning trots att det diagnostiska innehållet var korrekt. Inget fall i 100 000-falls-kohorten för Second Update missade själva diagnosen. Latensen förbättrades från ett medelvärde på 20,17 s i V11 första lansering till 13,26 s i Second Update, vilket återspeglar optimeringar i produktionsmotorn mellan de två körningarna; bedömningsmallen, poängkoden och API-slutpunkten är oförändrade.
Kompositpoäng per beteckning varierade från 0,9971 till 0,9985 över de 30 mest representerade landsbeteckningarna. Den långa svansen av 97 ytterligare beteckningar (≈7 300 fall sammanlagt) visade ingen systematisk försämring. De mest frekventa beteckningarna efter antal fall var USA (10 500), Brasilien (9 500), Spanien (9 000), Italien (8 000), Tyskland (7 800), Frankrike (7 400), Portugal (5 800), Türkiye (3 400), Storbritannien (2 900) och Mexiko (2 500).
Från 15 fall till 100 000: kohortevolution över 127 landsbeteckningar
Den ursprungliga V11-fallpanelen omfattade sju specialiteter — hematologi, endokrinologi, metabol medicin, hepatologi, nefrologi, kardiologi, reumatologi — plus två dedikerade hyperdiagnos-fällfall, där varje fall var en syntetiskt genererad blodprovs-panel. V11 andra uppdateringen utökar utvärderingen till 100 000 syntetiska fall över 127 landsbeteckningar, fördelade över åtta specialiteter (de ursprungliga sju plus en dedikerad internmedicinsk kategori som absorberar trap-delen). Samma poängbedömningsmall tillämpas byte-identiskt i båda körningarna.
Eftersom alla fall är syntetiskt genererade finns det inga verkliga identifierare att ta bort och ingen persondata är inblandad. Varje syntetiskt fall har en benchmark-intern fallkod (BT-NNN-LABEL i den V11 initiala uppsättningen, en stabil case_uid i den andra uppdateringen). Ingen persondata förekommer någonstans i det publicerade ramverket, den tekniska rapporten eller de släppta dataseten.
V11 första lansering — 15 handkuraterade fall
Den ursprungliga V11-fallpanelen sammanställdes för hand av Dr. Thomas Klein för att träna de diagnostiska mönster som laboratoriemedicinska assistenter oftast får fel. Var och en av de femton fallen valdes ut för en specifik diagnostisk egenskap, listad nedan.
Varför just denna fördelning
Hematologi får tre fall eftersom mikrocytiska differentialer och makrocytiska differentialer är de största fällorna med hög volym i verklig laboratoriepraxis. Endokrinologi får tre eftersom presentationerna vid Hashimotos, PCOS och D-vitaminbrist tränar olika diagnostiska former (drivna av autoantikroppar, drivna av hormonkvoter, drivna av en enskild markör). De specialiteter som bara har ett fall är fortfarande meningsfulla eftersom både CKD, ASCVD-risk och SLE har sina egna poängsystem som motorn ska anropa (KDIGO-stadieindelning, ASCVD 10-årsrisk respektive 2019 EULAR/ACR SLE-kriterier).
V11 andra uppdateringen — 100 000 syntetiska fall över 127 landsbeteckningar
Den andra uppdateringen ersätter den ursprungliga V11 hårdkodade 15-falls Python-litteralen med en större, programmatisk genererad syntetisk falluppsättning. Falluppsättningen laddas i början av varje körning och konfigurationen loggas för transparens. Kohortfördelningen per innehållsområde visas nedan.
Syntetisk fördelning av landsbeteckningar — topp 10-beteckningar
De 100 000 syntetiska fallen bär 127 landsbeteckningar (ISO 3166-1 alpha-2) för att testa hantering av locale. Tilldelning av beteckning: Europa 57,7%, Amerika 25,4%, Asien-Stillahavsområdet 6,2%, namngivna Mellanöstern/Afrika-beteckningar 3,4% och en lång svans av 97 ytterligare beteckningar ungefär 7,3% sammanlagt. De tio mest frekventa beteckningarna efter antal fall är USA (10 500), Brasilien (9 500), Spanien (9 000), Italien (8 000), Tyskland (7 800), Frankrike (7 400), Portugal (5 800), Türkiye (3 400), Storbritannien (2 900) och Mexiko (2 500). Kompositpoäng per beteckning varierade från 0,9971 till 0,9985. Dessa antal beteckningar är egenskaper hos de genererade fallen som används för att testa hantering av locale — de är inte verkliga användare och inte verklig geografisk täckning.
Den förregistrerade bedömningsmallen, förklarad
Förhandsregistrering är det enskilt viktigaste metodvalet i detta benchmark. Varje förväntad diagnos, varje kliniskt poängsystem och varje rapportavsnitt var förankrat i källkod innan motorn anropades. Efterhandsjustering av rubriken för att smickra motorn är därför omöjlig.
Tre komponenter ingår i den sammansatta poängen. Den strukturella komponenten bidrar med 35 procent och mäter om motorn returnerade de sju obligatoriska rapportavsnitten (rubrik, sammanfattning, viktiga fynd, differential, poängsystem, rekommendationer, uppföljning) och de sexton obligatoriska underavsnitten inom dem. Förekomst av avsnitt väger 40 procent och förekomst av underavsnitt väger 60 procent inom den strukturella beräkningen.
De kliniska komponenten bidrar med 55 procent och kombinerar tre saker: återkallning av diagnos-nyckelord (70 procent av den kliniska delpoängen), återkallning av poängsystem (20 procent — beräknar motorn Mentzer, FIB-4, HOMA-IR, ASCVD-risk, KDIGO-stadieindelning, EULAR/ACR-kriterier där det är relevant), samt en giltighetskontroll av sannolikhetssumma (10 procent — differentialens sannolikheter ska summera till inom intervallet [90, 110]). För fällfall dras en uttrycklig hyperdiagnos-penalty på upp till 0,30, beräknad som 0,10 per fabricerad patologiflagga, med ett tak på tre flaggor.
De latenskomponenten bidrar med 10 procent. Ett svar under 20 sekunder ger full 0,10, ett svar under 40 sekunder ger 0,05, och allt långsammare ger noll. 20-sekundersmålet speglar produktions primära primary-path-servicenivåmål; 40-sekunderstaket speglar Phase 2-reservbudgeten för tunga motoranrop.
Vad förhandsregistrering förhindrar
Förstahands-benchmarkar är ökända för att blåsa upp sina egna siffror genom efterhandsjustering av rubriken. Mönstret är nästan alltid detsamma: teamet kör motorn, ser var den underpresterar, och justerar sedan tyst rubriken så att de underpresterande områdena räknas mindre. Genom att låsa rubriken i källkod innan första motoranropet och publicera testharnessen under MIT-licens blir den justeringen synlig i versionshanteringen. Vem som helst kan klona repositoryt, kontrollera rubrikens författardatum och verifiera att motorresultaten inte användes för att forma poängsättningen.
Fall i hyperdiagnostikfällan — varför överrapportering är det verkliga felmönstret
Aggressiv överutropning av patologi på normala skärmar är ett dokumenterat felmönster hos konsumentinriktade medicinska assistenter. Dess följdkostnader inkluderar onödiga utredningar, patientoro och iatrogen utredning. De två fällfallen i detta benchmark är utformade för att göra det felmönstret synligt och poängbart.
🟡 Fälla 1 — BT-014-GILBERT
Presentation. En 24-årig man med totalt bilirubin på 2,4 mg/dL. Den direkta fraktionen är normal, transaminaser och alkaliskt fosfatas ligger inom sina referensintervall, retikulocyter är utan anmärkning, och haptoglobin samt LDH utesluter hemolys.
Korrekt tolkning. Gilbert’s syndrom — en benign UGT1A1-polymorfism. Tolkningen ska inte åberopa hepatit, cirros, hemolytisk anemi eller gallvägsobstruktion.
V11-resultat. Komposit 1,000. Inga av de sex överdiagnosflaggorna som övervakades visades som aktiva diagnoser.
🟡 Fälla 2 — BT-015-HÄLSOSAM
Presentation. En 35-årig kvinna med en femtonparameter rutinmässig screeningpanel. Varje analytt ligger bekvämt inom sitt referensintervall.
Korrekt tolkning. Betryggelse och upprätthållande av livsstil. Tolkningen ska inte hitta på gränsfallspatologi för att låta kliniskt användbar.
V11-resultat. Komposit 1.000. Ingen av de sju överdiagnostiska varningsflaggor som övervakades — diabetes, anemi, hypotyreoidism, dyslipidemi, hepatit, njursjukdom, brist — visade sig som aktiva diagnoser.
I båda fällorna kontrollerades tretton överdiagnostiska varningsflaggor för hyperdiagnostik. Noll utlöste. Detta är det resultat som betyder mest för varje kliniker som överväger att använda en AI-motor som triage- eller förkonsultationsverktyg: systemet uppfann inte en sjukdom där ingen fanns.
Mentzer-index: att skilja järnbrist från talassemi-drag
Ett andra fynd med högt värde gäller kombinationen av fall BT-001 (järnbristanemi) med fall BT-007 (beta-talassemi minor). Båda uppvisar mikrocytos och är ett välkänt hinder för naiva klassificerare. Mentzer-indexet, beräknat som MCV dividerat med RBC-antalet, är över 13 vid järnbrist och under 13 vid talassemi-egenskap.
I BT-001 var patienten en 34-årig kvinna med hemoglobin 10,4 g/dL, MCV 72,4 fL, RBC 4,1 × 10¹²/L, ferritin 6 ng/mL och förhöjt TIBC. Mentzer-indexet på cirka 17,7 stödjer absolut järnbrist. I BT-007 var patienten en 28-årig man med mikrocytos (MCV 65,8 fL) men ett högt RBC-antal på 6,2, normalt RDW, normalt ferritin och HbA2 på 5,6 procent. Mentzer-indexet på cirka 10,6 pekar på talassemi-egenskap, och det förhöjda HbA2 bekräftar beta-talassemi minor.
Båda fallen fick 1.000. Motorn använde Mentzer-indexet uttryckligen i båda tolkningarna och gav rätt diagnos i varje fall. Detta är det enskilt mest kliniskt betryggande resultatet i hela benchmarken, eftersom felklassificering av talassemi-egenskap som järnbrist leder till olämplig järnbehandling och missade möjligheter till familjescreening, och felklassificering av järnbrist som talassemi fördröjer enkel ersättningsterapi. Vår ferritinspektrumguide förklarar det bredare differentialkontexten.
Resultat per fall från V11:s initiala referenskörning (23 april 2026)
Den ursprungliga V11-referenskörningen på 15-falls proof-of-concept-kohorten utgör den metodologiska grunden för Second Update: varje detalj per fall nedan visar hur bedömningsmallen hanterar ett verkligt motorrespons. Tolv av femton fall nådde taket för kompositpoängen på 1.000 på den primära vägen; tre fall hanterades via Phase 2-återfall, vilket förlorade bonusen för 0.05 i latens samtidigt som allt kliniskt och strukturellt innehåll bevarades. Ett fall saknade en enda obligatorisk delsektion; ett returnerade en marginellt reducerad totalsumma för sannolikhetsfördelningen.
PCOS-fallet (BT-008) tappade en enskild obligatorisk undersektion i svarsstrukturen — femton av sexton i stället för sexton av sexton — vilket sänkte den strukturella poängen från 1,000 till 0,963. SLE-fallet (BT-011) gav en marginellt minskad summa av sannolikhetsfördelningen som sänkte den kliniska poängen till 0,965 samtidigt som varje diagnostiskt nyckelord och poängsystem bevarades. Inget av de två fallen som inte var perfekta missade en korrekt diagnos.
V11 Second Update aggregerat — 100,000 fall
På populationsskala är enskilda radrader inte läsbara för människor, så den andra uppdateringen rapporterar aggregerade mått i stället för en tabell med 100 000 rader. Huvudaggregeringen visas nedan; uppdelningar per specialitet och per landsbeteckning publiceras i den tekniska rapporten och i Figshare-insättningen. Ett stratifierat slumpmässigt urval av n = 201 råa motorresponsdata (deterministiskt seed 20260426) publiceras i GitHub results/ -katalogen för granskning.
Vad headlinescoret inte berättar för oss
En kompositpoäng på 99,80 procent enligt just denna förhandsregistrerade bedömningsmall, på en 100 000-falls syntetisk kohort som spänner över 127 landsbeteckningar, motsvarar prestanda nära taket — men den förtjänar noggrann inramning. Resultatet beskriver motorbeteendet mot den bedömningsmall vi förband oss att använda i källkoden i V11; det är inte ett universellt påstående om motorernas korrekthet för varje blodprovs-panel som finns i verkligheten.
Poängen säger att motorn hanterade de diagnostiska mönster som valdes ut för denna utvärdering korrekt över en kohort i populationsskala, med en metodik som är publicerad och reproducerbar. Den säger inte att motorn är korrekt för varje blodprovspanel som finns i verkligheten. Den säger inte att motorn bör ersätta kliniskt omdöme. Och den säger inte att motorn presterar bättre än alternativa AI-system — jämförande analyser mot andra motorer låg medvetet utanför ramen för denna rapport.
Det som poängen däremot fastställer är en baslinje. När bedömningsmallen och testmiljön är offentliga kan framtida versioner av motorn utvärderas mot samma bedömningsmall — tillämpad på V11 initiala 15 fall, Andra uppdateringens kohort med 100 000 fall, eller valfri efterföljande utökning — och gapet mellan den publicerade poängen och varje efterföljande körning är i sig mätbart. Det är värdet av förhandsregistrering: den omvandlar prestationspåståenden till testbara påståenden.
Så återskapar du detta riktmärke på 10 minuter
Reproduktion kräver endast ett Kantesti API-uppgiftspar och en Python 3.10 eller senare miljö med requests och reportlab bibliotek installerade. Hela testharnessen är en enda fristående Python-modul som släpps under MIT-licensen.
Fyra steg för en ny körning
Ett. Klona repot: git clone https://github.com/emirhanai/kantesti-blood-test-benchmark.git. Två. Installera beroenden med pip install -r requirements.txt (Andra uppdateringen lägger till mysql-connector-python ≥ 8.0 för SQL-fallhanteraren). Tre. Ange KANTESTI_USERNAME och KANTESTI_PASSWORD som miljövariabler för motor-API:t. För Andra uppdateringens SQL-fallhanterare, ställ även in KANTESTI_DB_HOST, KANTESTI_DB_PORT, KANTESTI_DB_NAME, KANTESTI_DB_USER, och KANTESTI_DB_PASSWORD — laddaren ansluter via en skrivskyddad roll (bench_reader) som inte har några behörigheter att identifiera tabeller. Fyra. Kör python benchmark_bloodtest.py --limit 100000 för hela Second-Update-körningen, eller python benchmark_bloodtest.py --limit 1000 för snabb iteration. Resultat hamnar i ./benchmark_results/: ett CSV-scorecard med kolumner per-land-etikett och per-specialitet, en JSON-aggregat, ett stratifierat-slumpmässigt råsvarsurval och en Markdown-rapport.
Referenskörningarna från 23 april 2026 (V11 initial, 15 fall) och 26 april 2026 (V11 Second Update, 100,000 fall) bevaras i results/ arkivets katalog. En ny körning genererar ett nytt tidsstämplat scorecard samtidigt som referenskörningarna lämnas orörda. Om din körning ger ett meningsfullt annorlunda resultat, öppna ett GitHub-ärende med körningens tidsstämpel och motorversionen som returneras i svarens metadata.
Begränsningar och framtida arbete
Även vid 100 000 fall över 127 landsetiketter förtjänar fyra begränsningar ett uttryckligt erkännande: underprovtagning av long-tail-etiketter, engångsutvärdering, en-ensines omfattning och en-ursprungsdatakälla. Var och en åtgärdas i aktivt uppföljningsarbete.
Täckning av long-tail-etiketter. Den andra uppdateringen omfattar 127 landsetiketter, men fördelningen är obalanserad — de 10 största etiketterna står för ≈66.4% av fallen, och long tail av 97 ytterligare etiketter bidrar tillsammans med ≈7.3% (ungefär 7 300 fall totalt, ~75 fall per etikett i genomsnitt). Per-etikett-kompositer i denna long tail är därför mer brusiga än vad rubriksiffrorna antyder. Framtida körningar kommer att ombalansera etikettilldelningen för att stärka per-etikett-estimat.
Engångsutvärdering. Varje fall i kohorten utvärderades en gång. Stora språkmodeller uppvisar icke-trivial variationsbredd i utdata även vid låg samplingtemperatur, så ett protokoll med flera körningar med fem utvärderingar per fall och redovisad varians är ett naturligt nästa steg — särskilt för delmängden av fällfall, där konsistens under sampling-”jitter” ingår i säkerhetsanspråket.
Enmotorigt omfång. Denna rapport beskriver en motor. Jämförande analyser mot alternativa AI-system ligger utanför ramen här; vi kan komma att genomföra dem som en separat oberoende studie med lämplig metodik, mot samma MIT-licensierade ramverk.
Syntetiska data. De 100 000 fallen är syntetiskt genererade, inte syntetiska fall, och resultaten överförs inte till klinisk prestanda i verkligheten. Utvärdering på verkliga, samtyckta, externt inhämtade data skulle kräva lämplig etisk tillsyn och ligger utanför ramen för detta syntetiska benchmark.
Utöver dessa fyra är den mest betydelsefulla planerade utökningen språklig likvärdighet per jurisdiktion. Kantesti AI Engine betjänar användare på 75+ språk, och att köra språkstratifierade Second-Update-delmängder (turkiska, tyska, spanska, franska, italienska, portugisiska, arabiska, mandarin) kommer att kvantifiera utdata-kvalitet över de språk som motorn stöder. Varje språkstratifierad analys publiceras med sin egen DOI och ramverksgren.