Zo maken programmeurs software slim (en nu weet jij het ook)

Yoeri Nijs  | Deel:  
Artikel-plaatje

Wie tegenwoordig het nieuws leest, hoort regelmatig de term ‘slimme software’ voorbij komen. Als we de krantenkoppen moeten geloven helpt de software ons tot voor kort onzichtbare patronen herkennen en voorspellen wat er gaat gebeuren. Maar hoe werkt dat eigenlijk, slimme software?

Stel je voor dat we werken voor de Wereldgezondheidsorganisatie. Deze organisatie van de Verenigde Naties houdt zich bezig met de gezondheidszorg in de wereld. Eén van de taken is het indammen van pandemieën, oftewel gigantische virusuitbraken die iedereen in de wereld kunnen treffen.

Wij, als medewerkers van de Wereldgezondheidsorganisatie, willen weten wat de gevolgen zijn van een specifieke pandemie. Bijvoorbeeld als er een virus is dat zich met enige snelheid van mens op mens verspreidt.

We zijn slimme medewerkers, dus we kunnen de virusverspreiding best wel uitrekenen. Erg snel gaat dat overigens niet, omdat we met tal van mogelijkheden rekening moeten houden. Wat we daarentegen misschien beter kunnen doen, is het maken van een computersimulatie. Deze simulatie bootst de wereld na en kan geautomatiseerd schattingen maken.

De ingrediënten
Wat hebben we nodig voor onze simulatie? Nou, mensen natuurlijk. En verder? Een virus, dat deze mensen kan infecteren. En ten slotte doktoren, die deze mensen weer kunnen genezen als er een vaccinatie is. Dit klinkt als een plan!

Als heuse wetenschappers maken we ons computerprogramma. In een Word-documentje werken we onze hoofdrolspelers verder uit. Dit doen we aan de hand van een paar regeltjes, die overeenkomen met de werkelijkheid.

Mensen. We hebben mensen, die zich over de wereld voortbewegen. We leven in een modern tijdperk, met auto’s, vliegtuigen en boten. Dit betekent dat de mensen van hot naar her gaan. Hier hebben we dus geen controle over.

Net als in de echte wereld zijn een paar van deze mensen ziek. Zodra gezonde mensen in aanraking komen met zieke mensen, kunnen ze ook worden geïnfecteerd. Of dit gebeurt is afhankelijk van hoe we ons virus maken.

Virus. Het virus dus, want daar draait onze simulatie om. Het virus infecteert mensen als ze in de buurt komen van iemand die al is geïnfecteerd.

Natuurlijk zijn sommige virussen makkelijker over te dragen dan andere. Dus we bouwen in onze simulatie in dat er een bepaalde kans is om het virus te krijgen.

Daarnaast duurt het even voordat een virus dodelijk is; er is namelijk een incubatietijd (de tijd dat iemand ziek wordt tot het moment dat hij er ook echt iets van merkt). Dus ook hier houden we rekening mee.

Doktoren. Dan zijn er tot slot de doktoren. Deze slimme mannen en vrouwen in witte pakken hebben dankzij de medische wereld een vaccin. Ze moeten het vaccin wel toedienen aan een zieke patiënt om die te genezen.

Om de zieke te vaccineren, moet de dokter op dezelfde plek zijn als de patiënt.

Met onze regeltjes kunnen we onze simulatie bouwen. We zijn geïnteresseerd in de data, dus hoe onze software eruit ziet maakt voor ons, de mensen van de Wereldgezondheidsorganisatie, nu even niet zoveel uit.

Een paar variabelen
We hebben dus een paar variabelen nodig, die we als wetenschappers zelf kunnen instellen. Zo kunnen we zien wat er gebeurt als we een bepaalde wereldbevolking hebben, waarbij er een virus is dat al een vastgesteld aantal mensen heeft getroffen. Deze variabelen zijn (inclusief kleur, waar we zo op terugkomen):

  • Het aantal mensen (
     
    );
  • Het aantal mensen van de totale bevolking dat ziek is (
     
    );
  • Het aantal doktoren (
     
    );
  • Hoe groot de kans is dat een gezonde man of vrouw geïnfecteerd raakt als die persoon op dezelfde plek komt als een ziek mens;
  • Wat de incubatietijd is.

Met onze variabelen ziet onze simulatie er zo uit:

In bovenstaand plaatje staan groene blokjes voor gezonde mensen, rode blokjes voor zieke mensen en blauwe blokjes voor doktoren.

Cycli
Met onze regeltjes kunnen we onze simulatie draaien. We hebben onze software zo gemaakt dat er verschillende cycli zijn. In één cyclus zetten alle mensen op de wereld een willekeurige stap.

Als een gezond mens plots op dezelfde plek staat als een ziek mens, raakt hij mogelijk geïnfecteerd. Of dit gebeurt, is afhankelijk van de kans op infectie die wij hebben ingesteld. Als een ziek mens niet wordt genezen door een dokter met het vaccin tijdens de incubatietijd, dan sterft die persoon na die tijd.

'The real stuff'
Nu kunnen we met onze simulatie zien hoeveel mensen er naar schatting dood gaan bij een virusuitbraak. Dit is waardevolle informatie voor de Wereldgezondheidsorganisatie, zodat de organisatie beter kan inschatten hoe een pandemie moet worden tegengegaan.

 

Uit het bovenstaande filmpje blijkt dat er vijftien mensen doodgaan. We hebben alleen één probleem. Onze simulatie geeft niet altijd hetzelfde resultaat. We hebben onze software namelijk zo gemaakt dat de mensen willekeurige stappen zetten. Dit maakt onze schatting niet zo nauwkeurig. Hoe kunnen we hier iets aan doen?

Niet schrikken...
Gelukkig heeft de mensheid statistici en computerwetenschappers uitgevonden. Zij hebben verschillende methoden bedacht om een nauwkeurigere schatting te maken. Eén van die methoden is het algoritme dat de illustere naam Naive Bayes draagt. Dat is gebaseerd op de stelling van Bayes.

Schrik niet: we laten je de stelling nu zien. Je hoeft niet te begrijpen wat er staat. We leggen het je zo uit.


Ben je er nog? Super, we hadden niet anders verwacht! Het belangrijkste wat je moet begrijpen is dat de stelling van Bayes niets anders dan een kansberekening. Dus: hoe groot is de kans dat er iets gebeurt op basis van een paar voorwaarden.

In ons geval: het aantal mensen dat naar schatting doodgaat met onze ingestelde waarden. Hierbij houden we rekening met het aantal mensen dat in eerdere simulaties met dezelfde waarden stierf.

In detail
In de formule die we net hebben gezien, staat de letter P voor kans. Als je naar het deel boven de streep kijkt, zie je dat we willen weten wat de kans is op (x|c) en de kans op (c). Als je niet zo wiskundig bent aangelegd, klinken die x en c gauw als gebakken lucht in je oren. Dus we maken het snel concreet.

Laten we x vervangen door onze variabelen. We zijn niet zo moeilijk, dus gooien alles op een hoop. Bij ons staat 'x' dan ook voor:

  • Het aantal mensen;
  • Het aantal zieke mensen;
  • Het aantal doktoren;
  • De kans op infectie;
  • De incubatietijd.

Vervolgens vervangen we c door het aantal mensen dat is eerder stierf toen we deze waarden hadden ingesteld.

En nu in normaal Nederlands
Als we dit vertalen naar normaal Nederlands, dan betekent P(x|c) niet anders dan: wat is de kans op overlijden met onze variabelen als we kijken naar de resultaten van oudere simulaties? Lees deze zin rustig nog een keertje door, want dit was het moeilijkste.

P(c) betekent niets anders dan de kans dat er een bepaald aantal mensen overlijdt. Voor onder de streep geldt hetzelfde. P(x) betekent namelijk de kans dat onze variabelen, die we hebben ingesteld, nu weer van toepassing zijn.

Het mooie van statistiek is dat, als je de boel een beetje hebt ontrafeld, het slechts een kwestie is van lijmen. Dus met het uitrekenen van deze deelsommetjes hebben we ons antwoord gevonden!

Hoe meer, hoe beter
Zoals we net hebben uitgelegd, houden we rekening met de resultaten van vorige simulaties. Dit betekent dat, als er in de vorige simulatie bijvoorbeeld vijftien mensen zijn overleden, we dit meenemen in onze berekening. Hoe meer simulaties we hebben gedraaid met dezelfde variabelen, hoe nauwkeuriger onze voorspelling wordt.

In de praktijk betekent dit dat wetenschappers simulaties meerdere keren draaien om beter te kunnen schatten wat een uitkomst is. Een simulatie duizenden keren draaien is in die situatie niet vreemd. Dus als wij als medewerkers van de Wereldgezondheidsorganisatie ook een goede schatting willen, moeten we dit ook doen.

Ben je er klaar voor? Start de simulatie.

LEES OOK: Zo kun je Naive Bayes ook gebruiken

Tal van andere algoritmen
Hopelijk heb je aan de hand van dit voorbeeldje een beetje geleerd hoe slimme software werkt en hoe dit in te zetten is. Behalve Naive Bayes zijn er nog tal van andere methoden te bedenken, die veel complexer kunnen zijn door bijvoorbeeld de inzet van een neuraal netwerk. Naive Bayes is echter het makkelijkst te begrijpen en vat in de kern samen hoe machine learning werkt.

Weet je nog niet wat machine learning precies is? Lees dan ons artikel over het verschil tussen kunstmatige intelligentie, machine learning en deep learning.

LEES MEER: Hoe zit dat: het verschil tussen kunstmatige intelligentie, machine learning en deep learning

Vond je dit artikel interessant? Deel hem alsjeblieft met je volgers op sites als Facebook, Twitter en Linkedin! Je kunt hiervoor de knoppen bovenaan de pagina gebruiken.

De simulatie kan je hier uitproberen. Ben je ontwikkelaar en wil je meer weten? De software is geschreven in Angular. Check deze Github-repository voor meer informatie.


Wil je deelnemen aan dit gesprek? Log in of meld je aan.