Steeds vaker lees ik over aandacht voor AI en algoritmes bij de politiek. Een goeie ontwikkeling, zeker omdat AI software steeds vaker ingezet wordt om bestuur te ondersteunen. Bijvoorbeeld het selecteren van cold cases waar potentie in zit of herkennen van potentiële onrust zodat je de geweldprotesten voor kunt zijn. Steeds vaker lees ik daarbij ook dat men inzicht wil in de algoritmes, en dát voelt voor mij als de verkeerde insteek. It’s the data, stupid.
Om een of andere reden is het woord ‘algoritme’ recent populair geworden als korte omschrijving voor computeranalyses waarmee dit soort zaken worden geregeld. Van het customizen van een newsfeed tot het detecteren van criminaliteit in historische politiegegevens, het heet allemaal “algoritme”. Ergens klopt dat ook wel: een algoritme is “een eindige reeks instructies die vanuit een gegeven begintoestand naar een beoogd doel leidt” (Wikipedia), en al die systemen gebruiken een serie instructies om gegeven een bak met data te komen tot het beoogde doel van een voorspelling.
Alleen: die stappenplannen of reeksen instructies zijn op zichzelf helemaal niet zo spannend of bijzonder. Meestal gaat het om machine learning algoritmes, die op zoek gaan naar samenhang tussen factoren in een groot databestand om zo tot voorspellingen te komen. We zien dat terechte klachten over partnermishandeling samengaan met het wonen in een rijtjeshuis, deze klacht komt uit een rijtjeshuis dus grote kans dat ie terecht is, ga er maar heen. (De achterliggende factor is dan dat buren het horen en bellen, wat meer zekerheid geeft.)
Het algoritme dat dit doet, is echter volstrekt niet ontworpen of aangepast om specifiek die samenhang te zoeken. Gooi je er honderdduizend telecomcontracten in inclusief opzegdatum, dan kan hij met dezelfde instructies uitrekenen welke klanten waarschijnlijk gaan verlengen en welke niet. Het algoritme hoef je daarvoor niet aan te passen, meer dan aangeven wat de uitvoervariabele moet zijn is het in de praktijk eigenlijk niet.
Het gaat om de data. Wat erin gaat, bepaalt wat eruit komt. Daar hebben we het al vaker over gehad: foute data erin is natuurlijk foute data eruit, of dat nu vooringenomenheid is, kortzichtige selectiviteit of typefouten doet er dan verder niet toe. Maar als je als politiek wat wilt doen aan de betrouwbaarheid en vooral de eerlijkheid van AI, dan moet je het niet hebben over de algoritmes maar over de data. De data bepaalt voor 100% wat het systeem gaat zeggen. Je wilt dus inzicht in de data, en regels over de data.
Arnoud
35 jaar geleden al (1983) zei mijn hoogleraar Geografische Informatiesystemen (GIS) al, dat de nauwkeurigheid van een GIS staat of valt met de betrouwbaarheid van de opgeslagen gegevens. Verder dat zo’n 80% van de kosten van zo’n systeem ging zitten in het waarborgen van de actualiteit en de betrouwbaarheid van die gegevens. Kennelijk is er in al die jaren niets veranderd.
Het waanbeeld heerst dat als je maar meer data hebt, je betere beslissingen krijgt.
De overheid maakt in een streven naar meer rechtvaardigheid veel regelingen fijnmaziger, waarvoor meer en meer informatie nodig is. Dat kan nu door de automatisering het verwerken van die data veel sneller gaat dan 35 jaar geleden. En het wordt voor de overheid ook makkelijker door koppelingen met externe bronnen en het wordt nog versterkt doordat burgers al die gegevens zelf invoeren middels allerlei websites en apps, zodat er geen dure ambtenaar meer aan te pas komt.
Nu de informatiehoeveelheid zo groot geworden is, wordt het steeds lastiger om besluiten op basis van die veelheid aan inputs te formuleren: de beslisbomen zijn gewoonweg te complex geworden. De oplossing daarvoor wordt gezocht in het gebruik van AI, omdat je daarmee geen beslisboom meer hoeft te vast te stellen.
Als AI daar een bruikbare methode voor blijkt te zijn, zal het er ongetwijfeld toe leiden, dat de burger nog meer gedetailleerdere informatie moet verstrekken. We zijn dan in een data-spiraal beland.
Het probleem dat niet erkend wordt is dat datasets altijd fouten bevatten. En hoe groter de datasets, hoe meer fouten er in zitten. Hieruit blijkt dat de premisse dat meer data tot betere besluiten leidt incorrect is.
Zoals Kwetal terecht opmerkt is het actueel en schoon houden van data sets een enorme en kostbare klus. Wanneer strijdigheden tussen gegevens uit verschillende datasets geconstateerd wordt ontstaat er een zwartepietenspel over wiens data de juiste is en bij wie de bevoegdheid tot en de kosten van correctie komen te liggen. Het gevaar dreigt dat de oplossing gevonden wordt in het beschuldigen van de burger op wie die data betrekking heeft van fraude, want die heeft natuurlijk aan een of meerdere partijen (opzettelijk) verkeerde gegevens verstrekt.
Informatie waarom er een bepaalde uitkomst is is wel handig. En eventueel ook het effect als je 1 van de elementen om een keus op te baseren verwijderd.
Maar op het eind is het heel simpel. Als je er slechte data instopt is de kans op een goede uitkomst niet bepaald groot.
De term “algoritme” is wellicht niet helemaal correct, maar ik neem aan dat men inzicht zoekt in hoe het systeem verbanden legt en tot conclusies komt.
Op dit blog is het voorbeeld van de AI die foto’s van russische en amerikaanse tanks kon onderscheiden al eens voorbij gekomen. Deze AI bleek uiteindelijk te kijken wat voor weer het was op de foto. Het “algoritme” was dus: goed weer is amerikaanse tank, slecht weer is russische tank. Lijkt me dus een zeer terechte wens om de “algoritmes” te begrijpen.
Misschien is zo-ie-zo beter dat overheid geen systemen inzet die men niet begrijpt. (Hoewel: personeel is wellicht net zo onbegrijpelijk …) Als dit soort systemen wel wordt ingezet, hoort m.i zoveel mogelijk daarvan publiekelijk beschikbaar gemaakt te worden. (Bijvoorbeeld trainingsdata zelf zal vaak niet kunnen, maar dan kan nog wel bron en structuur daarvan worden aangegeven).
Dat voorbeeld gaat niet over het algoritme, maar ook weer over de data. De Amerikaanse foto’s waren showfoto’s bij mooi weer, de Russische foto’s stiekem door spionnen bij divers weer en slechte kwaliteit. Daar zat dus een flinke onbedoelde correlatie tussen weer en tanksoort in de dataset. Er is geen machine learning algoritme dat bij zulke beeldherkenning zo’n correlatie zou missen.
Wat Alex denk ik bedoelt is dat je inzicht wil in het uiteindelijke model wat je getraind hebt. Dat is uiteindelijk wat de beslissingen gaat nemen en dus veel beter om inzichtelijk te hebben dan je data of het trainingsalgoritme.
Ik denk dat je model ook prima past in de definitie van algoritme.
Het algoritme bepaald vooral hoe de AI leert. Een belangrijke parameter is daarbij de mate van verandering van gewichten (AI’s werken vaak als neuronen, waarbij de ene knoop een negatief of positief effect heeft op de volgende knoop, en dat verschillende sterktes kan hebben). Sneller betekent vaak resultaat in minder training, maar ook minder accurate resultaten.
De reden waarom, zeker in dit voorbeeld, de data het meest van belang is, is omdat elk leermechanisme ervoor zal zorgen dat fotokwaliteit en weersomstandigheden een hoog gewicht meekrijgen om te bepalen om welk soort tank het gaat, en daarom per ongeluk dat de indicatieve factoren zullen zijn.
Je kunt het dan ook vergelijken met hersenen. De knopen en gewichten zijn de neuronen en hun verbindingen in de hersenen. Het algoritme is de manier waarop hersenen leren. We weten daar niet super veel over, en proberen dat slechts te emuleren in Kunstmatige Intelligentie. De data zijn dingen als scholing. Als je tegen een Rus spreekt, kun je aan de hersenen of hoe hersenen leren niet zien dat hij Russisch spreekt. Dat weet je alleen doordat je weet wat zijn scholing is, of door hem aan te spreken.
Aan het algoritme zou je dus alleen kunnen zien of de methode van leren toereikend is. Je kunt eventueel zien wat ze meenemen als input. Dat is relevant, maar uiteindelijk is het belangrijkste hoe je het traint. Er kan per ongeluk insluipen dat het weer wordt gezien als belangrijkste factor (zoals bij het voorbeeld), maar er kan ook een gevaar zijn op bias in de trainingsset. Het is daarom belangrijk om juist de trainingsset te zien, zodat je dit soort issues kunt opsporen, met name als een systeem wordt ingezet die beslissingen neemt, of een factor is in het nemen van beslissingen, vooral als dit een impact heeft op individuen.
Mijn punt is, dat je eigenlijk 2 algoritmes hebt. De eerste gebruik je om je model te maken (trainen) en je model is je algoritme wat je toepast op je uiteindelijke data.
Je kan best de data bekijken die je hebt gebruikt om je model te trainen maar dan nog weet je niet precies waarom het model het in X of Y in deelt. Misschien kijkt het naar het weer of het aantal personen rond de tank of het type bomen, of…. Kortom je wilt het algoritme weten wat gebruikt wordt om van foto A naar klasse X te gaan.
Aan alleen de trainingsdata heb je m.i. net zo weinig als aan alleen het trainingsalgoritme.
Dat is het neurale netwerk en is eigenlijk gewoon een matrix, geen algoritme. Algoritmes kunnen zichzelf meestal ook niet aanpassen, tenzij je op heel laag niveau code zit te programmeren (laag niveau als in, praktisch processor niveau, niet als in simpel). Algoritmes zijn bijvoorbeeld het leeralgoritme, of het algoritme waarmee je het neurale netwerk uitvoert.
Daarbij, de matrix is maar matig interessant. Het voorbeeld liet duidelijk het probleem zien, maar meestal is het niet zo overduidelijk een fout, en dus is het vaak nog veel interessanter en belangrijker om de trainingsset te bekijken.
Ik benader het “Neurale Netwerk” toch op de manier van NP: twee algoritmen:
Het “trainingsalgoritme” wat uit de trainings-dataset een “matrix” genereert,
Het “evaluatiealgoritme” dat een “voorspelling” doet aan de hand van de “matrix”.
Dat betekent wel dat de trainings-dataset invloed heeft op het evaluatieresultaat, maar ook het trainingsalgoritme. (Ik weet genoeg van AI om te weten dat in theorie het trainingsalgoritme moet compenseren voor gaten in het evaluatiealgoritme, maar in de praktijk blijkt dat vaak anders te zijn.)
Ik zou graag van een aantal AI-experts willen weten hoe de keuze van trainingsset invloed heeft op de uitkomst (vals-positief/vals-negatief) van het evaluatie-algoritme. Laten we aannemen dat 10% fraude normaal is, hoe vaak zal je neurale netwerk dan alarm slaan als het getraind is met 50% fraudegevallen, 10% fraudegevallen of 2% fraudegevallen?
Die twee algoritmen bestaan wel, maar zijn niet meer dan het uitvoeren van de matrix. Je matrix is het daadwerkelijke neurale netwerk. Dat is de AI.
De trainingsset moet vooral de verschillende opties kennen. Je moet dus een zo breed mogelijk spectrum aanbieden in de trainingsset. Als je bijvoorbeeld een AI wil leren wat het verschil is tussen een geschreven 5 en geschreven 6, dan biedt je zoveel mogelijk verschillende 5-en en 6-en aan. Zelfs als in de werkelijkheid dan veel vaker 5 voorkomt (bijvoorbeeld omdat je het gebruikt in een omgeving waar op halven wordt afgerond), wil je dat de AI vooral leert wat het verschil is. Idealiter heb je dus ongeveer evenveel van elk geval (het kan zijn dat 5 verschillende soorten fraude bestaan, en dan train je dus die 5, en geen fraude), of eigenlijk wil je graag een minimum aantal. Hoe meer je traint, hoe beter het werkt (hoewel wel met “diminishing returns”).
Als je niet precies weet waar het verschil in zit, maar wel wat de uitkomst zou moeten zijn, probeer je het te houden op zo’n 50-50
Ik ken de principes van neurale netwerken en hun training. (Coëfficiënten in het netwerk aanpassen naar het gewenste resultaat.) Er worden bij het toepassen van neurale netwerk ook ontwerpkeuzes gemaakt: hoeveel lagen kies je voor je netwerk en hoeveel nodes per laag? Maar ook: hoe codeer je je invoerdata? (Heel relevant, want je kunt in die codering informatie weggooien.)
Vrijwel elk ML model is simpelweg een functie f(X, p) -> y. Met f de functie, X de data, p de initialisatie parameters, y de gewenste output.
y kan een harde ja/nee zijn, maar is vaak een score of een waarschijnlijkheid. Daarop maakt een besliskundige/domeinexpert een policy/beleid: f(y, p) -> d, met d de uiteindelijke beslissing (start vooronderzoek, geef lening ja/nee, voer invasieve kijkoperatie uit, koop alvast nieuwe hardware in voor toekomstige vervanging)
Dit doet men aan de hand van een kostenbaten – en accuraatheid analyse (hoe veel kost een vals positief? Voor een drone strike: een onschuldig mensenleven, voor een foto tagging app: soms wat negatieve publiciteit: https://www.theverge.com/2015/7/1/8880363/google-apologizes-photos-app-tags-two-black-people-gorillas ). In het bedrijfsleven worden de thresholds op y volledig bepaald door profijt (vinden we een paar vals positives belangrijk?). Je kan echter de threshold zo instellen, dat het eerlijker wordt voor minderheden en omgang met beschermde status (die vaak af te leiden is uit de data).
Om een systeem te controleren op bias is allen f(X, p), y, f(y, p) en d relevant. Beleidsmakers krijgen y en maken zich dus vooral zorgen om y. Modelmakers krijgen X en maken zich dus vooral zorgen om X. Arnoud stelt terecht dat beleidsmakers een stapje terug moeten naar de werkelijke input van deze functieketen.
Dit hangt af van het evaluatie-algoritme. Sommige, zoals logaritmic loss, houden rekening met de distributie van de voorspellingen (een model getrained op 50%-50% fraude/non-fraude zal slechte logloss evaluatie krijgen op een test set met een 10%-90% distributie). Andere evaluaties, zoals ROC AUC, kijken puur naar rank/volgorde. Deze worden dan ook vaker gebruikt voor beslismodelen. Welke evaluatie methode je gebruikt bepaald ook de mate van leerstraf voor bepaalde fouten (soms wordt je zo hard gestraft voor een grove fout, dat je nog beter alle andere gevallen een beetje fout had kunnen doen).
Als je kennis hebt van de test set uitkomst distributie y, dan kun je gericht je model afstellen om correcter te voorspellen in die data distributie (postprocessing van de voorspelling). Of je herbalanceerd de data (0.995/0.005 -> 50/50) Vaak heb je die niet, of kan dit niet en vormt dit een enorm probleem: Je model dat 6 maanden geleden nog perfect werkte, is nu ingehaald door de realiteit, en voorspeld nu slechter. (Bijvoorbeeld, omdat fraudeurs een nieuwe techniek hebben gevonden, je een populairder fraude target bent geworden, de database sinds de laatste update alleen maar NaNs geeft voor bepaalde features, etc.). Vooral complexe algoritmes getrained op big data zijn gevoelig voor dit fenomeen (noemt men concept drift).
Bias in X: Er is niet genoeg data verzameld van minderheden. Hierdoor is het model minder zeker in haar voorspellingen voor deze groep en prefereert het meerderheden.
Bias in p: Het model heeft niet genoeg regularisatie. Hierdoor is het heel goed in voorspellingen op de train set, maar slecht en grillig voor nieuwe data (de belangrijkste taak in ML).
Bias in y: De fraude ja/nee uitkomst is aangemaakt door onkundige mensen met zo’n hekel aan Friezen, dat ze alleen in Drente naar fraudeurs hebben gezocht. De overige data is als non-fraudeur bestempeld.
Bias in f(y, p) -> d: Het model is afgesteld om alleen beslissingen over meerderheden die 100% zeker zijn door te laten. De onwaarschijnlijk goede voorspellingen op de train set maken een onrealistische threshold wanneer het model slecht werkt in de praktijk (maar dit wordt niet goed getest).
ML is in essentie wiskunde en geeft solide garanties. Maar deze garanties tellen alleen als aan stricte statistische voorwaarden wordt voldaan. En dat is in de echte wereld vaker uitzondering dan regel.
Inderdaad vreemd, en ook nog met een verkeerde klemtoon: ALgoritme. Maar dat is Engels. Veel mensen hadden het woord (dat al vele eeuwen bestaat) kennelijk nooit eerder gehoord voor ze het in het Engels tegenkwamen. In het Nederlands zeggen we algoRITme. Al mijn hele leven en lang daarvoor.