
Mijn knowledge-tracing-AI wilde een lerende certificeren die de cursus had gegamed. De code die ik schreef weigerde.
Twee medewerkers, twee identieke groene vinkjes, en een ervan is een leugen
De eerste keer dat ik de twee dossiers naast elkaar legde, leken de vinkjes identiek, en dat was precies het probleem. Een senior BSA-analist met acht jaar in de functie en een filiaalmanager zes maanden na een overplaatsing hadden beiden zojuist dezelfde vier uur durende anti-witwas-hercertificering "afgerond". Hun LMS rapporteerde voor elk van hen hetzelfde: een groen vinkje, "SCORM Completed," klaar. De een kon een onderzoek naar verdachte activiteiten in haar slaap uitvoeren. De ander had echte hiaten precies in de concepten waar een toezichthouder om geeft. Het systeem dat hen voor compliancewerk moest certificeren, kon hen niet van elkaar onderscheiden, omdat het nooit mat wat ze wisten. Het mat of de video was uitgespeeld.
Die kloof is niet academisch, en het bouwen van deze demo dwong me de inzet voor ogen te houden. Amerikaanse bedrijven geven ongeveer $102,8 miljard per jaar uit aan bedrijfstrainingen, ruwweg $874 per lerende (Training Magazine, 2025), en een vol kwart van de L&D-leiders zegt dat ze niet kunnen meten of iets ervan werkte. In gereguleerd werk heeft die kloof een prijs in het openbare register. TD Bank kreeg een AML-boete van $3,1 miljard die deels was gekoppeld aan een ontoereikend trainingsprogramma. Vanaf 2 augustus 2026 begint Artikel 4 van de EU AI Act rolgebaseerde AI-geletterdheid te handhaven, met boetes tot €35 miljoen of 7% van de wereldwijde omzet. In elk van die gevallen is het "Completed"-dossier waardeloos als bewijs, omdat afronding was nooit competentie.
Het systeem mat niet of ze hadden geleerd. Het mat of de video was uitgespeeld.
Ik bouwde een demo genaamd Attest om te zien of ik die kloof eerlijk kon dichten. Je kunt hem draaien op veriprajna.com/nl/demos/attest-adaptieve-leer-ai-die-competentie-certificeert-geen-voltooiing. Dit essay gaat over het deel van het bouwen dat me echt verraste, en dat was niet het model.

Wat ik eigenlijk wilde bouwen was een model dat wist wat elke persoon wist
Ik begon waar elke pitch over "adaptief leren" begint, en gooide toen het grootste deel ervan weg. De meeste producten die zichzelf adaptief noemen, draaien eronder collaborative filtering: "mensen zoals jij volgden daarna cursus X." Dat is een aanbevelingsengine in een diplomajapon. Het weet wat vergelijkbare lerenden deden. Het heeft geen idee wat jij, specifiek, begrijpt. Cornerstone lanceerde in maart 2026 een "Adaptive Learning Agent" die nog steeds zo werkt. Ik wilde geen betere aanbeveler. Ik wilde een model dat de ruwe interactiestroom van één persoon leest en, concept voor concept, afleidt wat die persoon daadwerkelijk beheerst.
Dat is een echt en oud onderzoeksprobleem genaamd knowledge tracing, en de eerlijke versie ervan is een transformer, geen toetsgemiddelde. Ik trainde een self-attentive knowledge-tracing-model, SAKT, ongeveer 119.809 parameters, klein genoeg om in negentig seconden op een CPU te trainen en daarna te cachen. Het speelt de interactiesequentie van elke lerende opnieuw af en geeft een beheersingskans voor elk van de achttien concepten in de cursus. Op onze geseede synthetische knowledge-tracing-benchmark bereikte het een held-out AUC van 0,8315, met een next-step-nauwkeurigheid van 0,771. De benchmarkdata wordt gegenereerd door een volledig andere modelfamilie (Performance Factors Analysis, een klassiek logistisch model), dus de transformer beoordeelt niet zijn eigen aannames. Ter externe context landen gepubliceerde SAKT-resultaten op de publieke ASSISTments-dataset rond 0,80 (Pandey en Karypis, 2019). Die van mij zat in dezelfde buurt.
Ik was trots op dat getal. Ik dacht dat het getal het product was. Er was precies één lerende nodig om me te laten zien dat het dat niet was.
Toen voerde ik iemand in die de hele cursus had gegamed
De lerende die mijn zelfvertrouwen brak was de derde in het cohort, een operations associate die een AI-assistent had gebruikt om de hele module automatisch te beantwoorden. Kijk wat mijn model met hem deed. Concept na concept kwam de SAKT-inferentie hoog terug: 0,927 op SAR-roodvlagidentificatie, 0,95 op handelsgerelateerd witwassen, 0,992 op correspondent banking risk, 0,994 op enhanced-due-diligence-triggers. Bijna perfect overal. Als ik het model had vertrouwd, had ik alle achttien concepten gecertificeerd en deze persoon een schoon, ondertekend compliancedossier gegeven.
Het probleem is dat de beheersing nep was. De antwoorden waren snel en perfect over achttien ongerelateerde concepten, een responstijdverdeling die niet strookt met echte herinnering. Een echte expert is snel op sommige dingen en traag op andere. Dit patroon was vlak en onmogelijk snel overal, de signatuur van een antwoordsleutel, niet van een geheugen. Mijn zorgvuldige 0,83-AUC-model keek naar een antwoordsleutel en zag een sterleerling.
Mijn model miste het gamen niet alleen. Het was het meest overtuigd precies daar waar het het meest fout zat.

Dat was het moment waarop dit essay voor mij waar werd. Een beter model had me hier niet gered. Een nauwkeurigere transformer getraind op schonere data had naar dezelfde snel-perfecte antwoorden gekeken en was nog meer zeker geweest dat deze persoon alles beheerste. Het falen was geen tekort aan nauwkeurigheid. Het was dat ik een probabilistisch model een beslissing had laten nemen die een model nooit zelf mag nemen.
Waarom het model niet gewoon trainen om het te vangen?
Mijn eerste instinct was het verkeerde, en ik wil eerlijk zijn over de dag die ik eraan verloor. Ik probeerde het model zelf robuust te maken tegen gamen. Responstijdkenmerken toevoegen, het trainen om onwaarschijnlijk snelle sequenties te wantrouwen, de transformer leren achterdochtig te zijn. Het is een verleidelijk plan omdat het alles binnen één elegant systeem houdt, en ik houd van elegante systemen. Het werkt ook niet, om een reden die ik langer nodig had om te accepteren dan zou moeten. Alles wat je een model leert te detecteren, heb je het ook geleerd om er zelfverzekerd fout over te zijn in de gevallen die je niet had voorzien. De hele taak van een model is generaliseren en gladstrijken. Een governancebeslissing heeft het tegenovergestelde nodig: die moet precies op de juiste plek breekbaar zijn, en weigeren.
Dus stopte ik, en verplaatste ik de beslissing volledig uit het model. Het model adviseert. Gewone deterministische code beslist. Nadat de SAKT-inferentie draait, maakt een stuk pure-Python-logica dat ik de competentiepoort noem de certificeer-of-niet-call, en het model kan die niet overrulen. De poort certificeert een concept alleen als drie dingen tegelijk waar zijn: beheersing is minstens 0,747, er zijn minstens drie echte interacties als bewijs erachter, en het responspatroon is niet afwijkend. Faal één van de drie en het concept wordt niet gecertificeerd. Het wordt gemarkeerd als "needs proof," en de lerende krijgt een verificatie-uitdaging in plaats van een vinkje.
Toen de poort naar de operations associate keek, deed ze wat mijn model niet kon. Ze markeerde het bewijs als afwijkend, weigerde elk concept, en certificeerde nul van achttien. Zittijd ingehouden, in afwachting van verificatie.

Ik wil voorzichtig zijn in hoe ik dat kader, omdat de brief die ik voor mezelf schreef daar voorzichtig over is. Dit is geen cheater-detector met een hitrate, en ik presenteer het nooit als een. Het is een governance-uitkomst op één illustratieve lerende: concepten ingehouden omdat het bewijs niet goed genoeg was om te certificeren. Het punt is niet "gotcha, je hebt valsgespeeld." Het punt is dat Attest alleen certificeert wat het kan bewijzen, en eerlijk blijft over de rest.
Agents adviseren, code beslist, en die lijn bleek dragend te zijn
Ik blijf terugkomen op die taakverdeling omdat het, tegen de tijd dat ik klaar was, de hele architectuur was in plaats van een slogan. Er zijn precies twee plekken in Attest waar iets intelligent en probabilistisch draait, en beide adviseren alleen. Een LLM-agent (gebouwd op Pydantic AI, standaard claude-opus-4-8) doet de concept-tagging, en ontleedt één platte "AML Training"-cursus tot een taxonomie van achttien concepten: CDD, SAR-narrative, structured-transaction detection, OFAC-screening, en de rest. Die taggingstap is wat het veld je zal vertellen de allerbelangrijkste reden is dat projecten voor adaptief leren sterven, en het is echt moeilijk, maar het is adviserend. Het SAKT-model leidt beheersing af, ook adviserend. Elke beslissing die er echt toe doet, welk pad een lerende bewandelt en wat wordt gecertificeerd, wordt genomen door deterministische code waar geen model zich langs kan praten.
De sequencer is de andere helft van die code, en daar zit het geld. Per concept: als beheersing minstens 0,67 is, slaat de lerende over of verifieert alleen; tussen 0,38 en 0,67 blijven ze in de flow-zone; onder 0,38 krijgen ze scaffolding. Die cut-points zijn geen getallen die ik op gevoel koos. Ze zijn cross-gevalideerd tegen het gelabelde cohort, en de repo levert een five-fold A/B-test die toont dat ze de handmatig ingestelde fallback verslaan terwijl de betekenis van de beslissing ongewijzigd blijft. Draai die logica over de senior analist en zij slaat bijna alles over wat ze al weet: zestien van achttien concepten gecertificeerd, zittijd dalend van 240 minuten naar 47,3, een reductie van 80,3%. Draai dezelfde code over de filiaalmanager die echte hiaten heeft, en die weigert hem dezelfde korting te geven: tien van achttien gecertificeerd, slechts 38,9% bespaard, omdat hij de training echt nodig heeft.
Dezelfde code geeft de expert een cursus van 47 minuten en de beginner een echte. Geen van beiden kan ertegenin gaan.
Die asymmetrie is het hele punt. Een systeem dat iedereen dezelfde tijd bespaart is gewoon een kortere cursus met betere branding. Een systeem dat tijd bespaart in strikte verhouding tot wat elke persoon kan bewijzen te weten, doet knowledge tracing, en het doet dat in code die ik regel voor regel kan lezen.
Wat je een toezichthouder overhandigt in plaats van een vinkje
Het artefact waar ik het meest trots op ben is datgene wat een groen vinkje nooit kan produceren. Wanneer de poort klaar is, exporteert Attest een ondertekend Competence Certificate, en ik bewaar twee echte samples op schijf. Voor de senior analist somt het alle achttien concepten op, elk met zijn beheersingskans, het aantal interacties achter die schatting, de certificeer-of-needs-proof-status, en de specifieke regelgeving waaraan het koppelt (31 CFR 1020.220, FATF Rec. 12, 31 USC 5318, en de rest). Het registreert de modelnaam, de versie, en de benchmark-AUC. Het draagt een eerlijke beperkingenvoettekst die noteert dat de AUC next-item-voorspelling meet in plaats van langetermijnretentie, omdat een beheersingskans bewijs is, geen garantie. En het hele document is ondertekend met een HMAC-SHA256-handtekening zodat het niet stilletjes achteraf kan worden bewerkt.

Dit is het duurzame antwoord op de echte vraag van de auditor, die nooit is "hebben ze afgerond?" Het is "bewijs welke interacties welke beheersingsclaim onderbouwden." Een vinkje kan dat niet beantwoorden. Evenmin een beter basismodel, hoe goed het ook wordt, omdat nauwkeurigheid geen provenance is. Een nauwkeuriger model kan een auditor nog steeds niet het bewijsspoor tonen achter een beslissing die het nam. Dat spoor moet met opzet als artefact worden gebouwd, buiten het model. Dat is wat het certificaat is, en het is het ding waardoor ik ophield het model als het product te zien.
Nauwkeurigheid is geen provenance. Een beter model kan nog steeds niet bewijzen welke interacties welke claim onderbouwden.
Je kunt dit alles inspecteren in de draaiende demo op veriprajna.com/nl/demos/attest-adaptieve-leer-ai-die-competentie-certificeert-geen-voltooiing, inclusief de twee concepten die het certificaat weigert te certificeren voor de analist, waar haar beheersing eerlijk onder de lijn van 0,747 ligt.
Het deel dat een beter model overleeft
Ik bouwde dit in de verwachting dat het model het moeilijke deel zou zijn, en ongelijk hebben daarover veranderde hoe ik over de hele categorie denk. Het model was het hanteerbare deel: negentig seconden op een CPU en een respectabele AUC. Het moeilijke deel, het deel dat de output daadwerkelijk betrouwbaar maakt, was alles wat ik rondom het model zette om te voorkomen dat het beslissingen nam die het niet mocht nemen: de deterministische poort, de regel voor bewijstoereikendheid, de anomalieweigering, het ondertekende spoor.
Dat is ook het deel dat niet veroudert. Wanneer ik de cohortcijfers toon (ongeveer 51,9% zittijdreductie over een gesimuleerd hercertificeringscohort van 500 personen, ruwweg $77.872 teruggewonnen op deze ene module, een geannualiseerd cijfer nabij $389.362 dat de app op het scherm als projectie labelt), is de kop bewust niet de AUC. De AUC bewijst alleen dat het een echt knowledge-tracing-model is en geen cijferlijst. De kop is het percentage bespaarde zittijd en het percentage concepten dat automatisch is gecertificeerd versus doorgestuurd naar bewijs, en beide houden stand hoe goed het onderliggende model ook wordt. Een slimmere transformer volgend jaar verandert niets aan het feit dat de beslissing, en het bonnetje, in code leven die je kunt auditen.
En als je het liever ziet dan mij het hoort beschrijven, hier is het hele ding end-to-end draaiend.
Dus hier is de vraag waar ik mee heb gezeten, en die ik zou stellen aan iedereen die in deze ruimte bouwt. Als de belangrijkste output van je systeem een beslissing is waarop een toezichthouder zal leunen, wil je die beslissing laten maken door het model, of door iets dat het model alleen mag adviseren? Ik had het een dag lang omgekeerd. Toen wandelde een nep-sterleerling binnen, snel en perfect op achttien dingen die hij niet wist, en zette me recht.


