In aanloop naar de Tweede Kamerverkiezingen zijn er diverse online stemhulpen verschenen om te assisteren bij het maken van een keuze. Deze stemhulpen zijn doorgaans gebaseerd op een korte reeks van standpunten, die door de makers geselecteerd zijn.

Met de opkomst van de datawetenschappen, kunstmatige intelligentie en slimme zoekmachines is er ook een nieuwe manier denkbaar: een algoritme dat de inhoud van partijprogramma’s op een objectieve manier analyseert en vergelijkt met jouw eigen mening. Dit is de Stemradar.

Hieronder kun je invullen welke maatschappelijke onderwerpen jij belangrijk vindt. Je hoeft hierbij geen rekening te houden met leestekens, synoniemen, of het bedenken van de juiste sleutelwoorden. Je kunt gewoon hele zinnen invoeren. De Stemradar berekent vervolgens bij welk partijprogramma jouw verhaal het beste past. Vervolgens kun je deze uitkomsten gebruiken om de best passende programma’s nog eens gericht door te lezen om te kijken of ze overeenkomen met je mening. Nieuwsgierig? Probeer het eens!

De Stemradar na afloop van de verkiezingen 2017 niet meer live. Beneden kun je nog wel lezen hoe hij werkt.

Probeer het anders ook eens met wat tweets van partijen en lijsttrekkers (gebruik kopiëren-plakken):

Hoe werkt het?

De Stemradar is ontwikkeld door de Data Scientists en Data Engineers van BigData Republic. Hiervoor hebben we Natural Language Processing (NLP) technieken gebruikt, die computers in staat stellen om tekst te interpreteren. Deze technieken worden ook gebruikt door zoekmachines, zoals Google Search, en diverse spamfilters voor e-mail. Het Stemradar algoritme bestaat uit de volgende stappen:

  1. De PDF-bestanden van de partijprogramma’s worden ingelezen en in kleine stukjes geknipt ter grootte van ongeveer één paragraaf.
  2. De woorden en woordcombinaties, die in elke stukje voorkomen, worden bijgehouden in een grote tabel. Elk stukje is nu gereduceerd tot een zogenaamde “zak met woorden”.
  3. Deze tellingen worden gewogen naar mate een woord specifiek is voor een stukje tekst ten opzichte van alle andere stukjes tekst. Op deze manier kan het algoritme sleutelwoorden beter herkennen.
  4. Op deze data passen we een text-data-mining techniek toe, die de 100 belangrijkste onderwerpen uit de stukjes tekst haalt. Deze zogenaamde “topic extraction” stap helpt het algoritme om synoniemen en woordbetekenissen te leren.
  5. Elk stukje wordt vervolgens automatisch gescoord op de 100 onderwerpen.
  6. Met behulp van machine learning wordt het verband tussen de losse stukjes en de partijen geleerd. Deze stap is vergelijkbaar met een spamfilter, maar in plaats van spam/geen spam wordt nu de partijnaam geleerd door het algoritme. Dit heet “supervised learning”, omdat wij het algoritme de waarheid -welk stukje hoort bij welke partij- meegeven.
  7. Het resulterende algoritme kan vervolgens voorspellen bij welke partij een willekeurig stukje tekst hoort, waaronder ook jouw eigen tekst.

Het eindresultaat is te vergelijken met een Google-achtige zoekmachine, die gespecialiseerd is in politieke partijprogramma’s. In essentie beantwoordt het algoritme de volgende vraag: Hoe groot is de kans dat jouw stukje tekst uit het programma van partij X afkomstig is?

Het is belangrijk om te beseffen dat het algoritme niet dezelfde capaciteiten als een mens heeft, en dus ook niet alle nuances van onze taal helemaal correct verwerkt. Daarom dienen de resultaten van de Stemrader gebruikt te worden als hulpmiddel om je te wijzen op de meest relevante partijprogramma’s. Volgens de uitkomsten van de data-analyse besteden deze programma’s de meeste aandacht aan de onderwerpen die jij belangrijk vindt, en zou je deze vervolgens gericht kunnen bekijken om je keuze te bepalen.

Voor data scientists

Het algoritme is gemaakt met behulp van Python en de scikit-learn library. De eerste stap bestaat uit een TF-IDF bag-of-words representatie van de partijprogrammastukjes (600 karakters), die als input dienen voor een Latent Semantic Analysis (singular value decomposition). De resulterende laag-dimensionale vectorrepresentaties van de stukjes (scores voor de 100 componenten) zijn gebruikt om een Logistic Regression classifier te trainen, die de bijbehorende partij voorspelt, met daarbij een gelijk gewicht voor elke partij. We hebben het model gevalideerd met een cross-validatieprocedure en vergeleken met een “dummy” classifier, die telkens de partij met de meeste stukjes (dus het langste programma) voorspelt. Uiteindelijk hebben we het model geëxporteerd en online beschikbaar gesteld via een Flask webservice met REST API, hierboven met Javascript wordt aangeroepen om de data te visualiseren. Alle interactieve analyselogboeken (Jupyter notebooks) en source code is beschikbaar op Github.

De Stemradar is ontwikkeld door Bertjan Broeksema en Alexander Backus
Vragen? Stuur een email naar info@bigdatarepublic.nl