/

Transparantie & methodologie

CivicStat maakt het stemgedrag van de Tweede Kamer transparant en vergelijkt het met verkiezingsbeloften. Hieronder leggen we uit hoe onze data wordt verzameld, verwerkt en gepresenteerd.

1

Datapipeline

Alle parlementaire gegevens komen uit de officiële Tweede Kamer OData API. Er wordt geen data handmatig aangepast of gefilterd.

Stap 1
Ingest

Moties, stemmingen, Kamerleden en fracties worden opgehaald via de OData REST-feed van de Tweede Kamer.

Stap 2
Matching

Beloften uit verkiezingsprogramma's worden automatisch gekoppeld aan moties via trefwoordanalyse en semantische AI-matching (Claude).

Stap 3
Scoring

Per belofte berekenen we de Mandate Consistency Score op basis van het stemgedrag bij gerelateerde moties.

2

Hoe gebruikt CivicStat AI?

CivicStat gebruikt AI (Anthropic Claude) op twee plekken in de analysepipeline: bij het extraheren van beloften uit verkiezingsprogramma’s, en bij het koppelen van beloften aan Kamermoties. In beide gevallen werkt de AI als een gestructureerde analysator — niet als beoordelaar. Het model geeft geen oordeel over partijen en wordt expliciet geïnstrueerd politiek neutraal te werken.

Belofte-extractie

Verkiezingsprogramma’s (PDF’s van het DNPP Repository, Rijksuniversiteit Groningen) worden verwerkt door Claude om individuele, toetsbare beloften te extraheren.

Input: Ruwe tekstpassages uit officiële verkiezingsprogramma’s.

Opdracht aan het model: Extraheer concrete, toetsbare toezeggingen. Classificeer elk op thema (17 thema’s), specificiteit (SPECIFIEK / GEMIDDELD / VAAG) en toetsbaarheid.

Wat het model niet doet: Het model beoordeelt niet of beloften wenselijk, haalbaar of verstandig zijn. Het extraheert alleen wat er staat.

Kwaliteitscontrole: Geëxtraheerde beloften worden opgeslagen met het label LLM_EXTRACTED. Het totale aantal per partij wordt gemonitord op inflatie.

Semantische koppeling

Voor elke verkiezingsbelofte zoekt CivicStat relevante Kamermoties. Dit gebeurt in twee stappen:

Stap 1 — Voorselectie

Kandidaat-moties worden geselecteerd op basis van gedeelde trefwoorden en thema. Dit levert per belofte 30–80 kandidaat-moties op uit het totaal van 26.086+ moties.

Stap 2 — AI-beoordeling

Een AI-model (Claude Sonnet) beoordeelt elke kandidaat-motie op relevantie voor de belofte. Per motie geeft het model een classificatie, betrouwbaarheidsscore, voorspelde stemrichting en een beknopte motivatie in het Nederlands.

Wat het model te zien krijgt

Belofte (VVD)

“Defensie-uitgaven structureel naar NAVO-norm van 2% bbp”

Kandidaat-motie

“Motie over structurele verhoging defensiebudget naar 2% bbp”

Explicietconfidence 0.94·VOOR

“Motie roept expliciet op tot structurele verhoging naar 2% bbp — identiek aan de belofte van de VVD.”

Classificatie-uitleg

TypeBetekenisVoorbeeldGewicht
ExplicietMotie gaat over exact hetzelfde punt als de belofte“2% bbp defensie” ↔ “NAVO-norm 2% bbp”1.0
ImplicietMotie valt in hetzelfde thema maar niet over exact hetzelfde punt“F-35 onderhoud” ↔ “defensie versterken”0.5
TegengesteldMotie druist in tegen de belofte“defensiebudget korten” ↔ “defensie naar 2% bbp”1.0 (omgekeerd)
Geen matchGeen relevante verbindingNiet opgeslagen

Neutraliteitsinstructie aan het model

“Je bent een neutrale politieke analist. Je beoordeelt of moties relevant zijn voor een belofte. Je geeft geen oordeel over de wenselijkheid van beloften of moties. Gebruik EXPLICIET alleen als de motie echt over hetzelfde concrete punt gaat.”

Betrouwbaarheidsindicator: Niet elke koppeling is even sterk. CivicStat toont bij elke score hoeveel beloften daadwerkelijk gekoppeld konden worden aan moties. Een score op basis van 35 van 210 beloften is minder betrouwbaar dan een score op basis van 150 van 200 beloften. Deze informatie is altijd zichtbaar naast de MCS-score.

Wat CivicStat niet doet

Geen ranking of oordeel — CivicStat rangschikt partijen niet van “betrouwbaar” tot “onbetrouwbaar”. Scores zijn feitelijke consistentie-metingen, geen waardeoordelen.

Geen campagneadvies — CivicStat zegt niet op welke partij je moet stemmen.

Geen AI-gegenereerde conclusies — Het AI-model beoordeelt individuele belofte-motie koppelingen. De MCS-score wordt berekend met een vaste formule op basis van die koppelingen — niet door het AI-model.

Geen verborgen weging — Elke koppeling is traceerbaar. Gebruikers kunnen doorklikken van score → belofte → motie → stemuitslag → bron.

AI-beperkingen

Trefwoord-voorselectie — De voorselectie op trefwoorden kan relevante moties missen als ze over hetzelfde onderwerp gaan maar andere woorden gebruiken. De semantische beoordeling (stap 2) vangt dit gedeeltelijk op.

Model-bias — Hoewel Claude geïnstrueerd wordt neutraal te werken, kan elk AI-model subtiele bias bevatten. Daarom publiceert CivicStat de exacte instructie en is elke koppeling individueel controleerbaar.

Belofte-kwaliteit — De kwaliteit van de MCS hangt af van de kwaliteit van de geëxtraheerde beloften. Vage beloften leveren vagere koppelingen op.

CivicStat gebruikt Claude Sonnet (Anthropic) voor semantische analyse. Het model draait met API-toegang en verwerkt uitsluitend publieke parlementaire data.

3

Huidige data

CivicStat bevat momenteel de volgende gegevens uit de lopende parlementaire periode (TK2023 & TK2025).

26.086
Moties
21.723
Stemmingen
18.149
Beloften
271.554
Koppelingen
80
Partijen
544
Kamerleden
150
Programma's
106.648
Stemrecords

Data wordt elk uur automatisch bijgewerkt via de Tweede Kamer API. Laatste update: 21 april 2026 om 03:03.

4

Databronnen

Bron
Tweede Kamer OData API (v4.0)

Besluiten, stemmingen, personen en fracties. Officiële bron van alle parlementaire data.

gegevensmagazijn.tweedekamer.nl
Bron
DNPP Repository

Documentatiecentrum Nederlandse Politieke Partijen, Rijksuniversiteit Groningen. Academisch archief van alle verkiezingsprogramma's.

dnpprepo.ub.rug.nl
Bron
Kiesraad

Officiële verkiezingsuitslagen en fractiezetels voor verificatie.

www.kiesraad.nl
5

Scores & berekeningen

Mandate Consistency Score (MCS)

Meet hoe consistent een partij stemt ten opzichte van de eigen verkiezingsbeloften. 100% = altijd consistent. Berekend per thema en als totaalcijfer. Elke match weegt mee op basis van type en betrouwbaarheid.

MCS = Σ(typeGewicht × confidence × stemuitlijn) / Σ(typeGewicht × confidence) × 100

Belofte-kloof

Het verschil tussen het verwachte stemresultaat (op basis van verkiezingsbeloften × zetels) en het werkelijke stemresultaat. Een positief getal betekent meer steun dan verwacht; een negatief getal minder.

Belofte-kloof = werkelijke stemmen 'voor' − verwachte stemmen 'voor'

Betrouwbaarheidsscore

Geeft aan hoe goed onderbouwd een voorspelling is. Gebaseerd op het aantal partijen waarvoor een beloftematch beschikbaar is ten opzichte van het totaal. Hoog (≥70%) = veel matches. Laag (<40%) = grotendeels afgeleid.

Betrouwbaarheid = partijen met voorspelling / totaal partijen × 100

Matchtype-gewichten: EXPLICIET = 1.0, TEGENGESTELD = 1.0, IMPLICIET = 0.5. Elke match weegt mee op basis van zowel het type als de betrouwbaarheidsscore.

Minimum drempel: Beloften met minder dan 3 gekoppelde moties worden uitgesloten van de scoring en gerapporteerd als “onvoldoende data”.

Steekproefweging: Partijen met meer gekoppelde moties krijgen stabielere scores.

Consistent: ≥70% van de gewogen stemuitlijning is in lijn met de belofte.

Niet in lijn: ≤30% van de gewogen stemuitlijning is in lijn.

Gemengd: tussen 30% en 70%.

6

Periodes & koersvastheid

CivicStat vergelijkt verkiezingsbeloften over meerdere parlementaire periodes. Momenteel ondersteunen we TK2023 en TK2025.

Periode-filtering

Elk verkiezingsprogramma heeft een parlementaire periode waarbinnen stemmingen worden meegeteld. TK2023: 6 december 2023 t/m 29 oktober 2025. TK2025: 29 oktober 2025 t/m einde volgende parlementaire periode. Stemmingen buiten deze vensters worden uitgesloten van de MCS-berekening.

Periodevergelijking

De periodevergelijking meet hoe stabiel een partij scoort over verschillende parlementaire periodes, met een richting-correctie. Verbetering wordt niet bestraft, verslechtering wel. Een hoge score betekent stabiel en consistent stemgedrag op een hoog niveau.

Periodevergelijking

Richting-gecorrigeerde stabiliteitsscore. Verbetering wordt niet bestraft, verslechtering wel. Houdt rekening met zowel het niveau als de trend.

Score = gemiddeld MCS + (delta/2 als verbeterend, delta als verslechterend)
7

Matching-algoritme

Moties worden automatisch gekoppeld aan beloften via een trefwoordalgoritme in drie stappen.

Stap 1 — Motiefilter

Procedurele moties worden uitgefilterd vóór de matching. Dit omvat: moties van wantrouwen, moties van afkeuring, moties van orde, ordedebatverzoeken, schorsing/sluiting, regeling van werkzaamheden en spreektijdverzoeken. Dit voorkomt foutieve matches wanneer procedurele taal overlapt met beleidstrefwoorden.

Stap 2 — Trefwoordmatching

Elke belofte heeft een set vooraf gedefinieerde thematische trefwoorden (vastgesteld tijdens extractie, niet algoritmisch afgeleid). Een motie wordt gekoppeld wanneer de titel en tekst voldoende overlap vertonen met de trefwoorden van een belofte.

Stap 3 — Betrouwbaarheidsscore

Elke match krijgt een betrouwbaarheidsscore (0–1) op basis van het aantal en de specificiteit van trefwoordhits. Matches onder 0.3 worden verworpen.

EXPLICIET

De motie adresseert direct dezelfde concrete toezegging als de belofte. Weegt mee met factor 1.0.

IMPLICIET

De motie valt binnen hetzelfde thema maar is geen directe vertaling. Weegt mee met factor 0.5.

TEGENGESTELD

De motie druist in tegen de belofte. De voorspelde stemrichting wordt omgekeerd. Factor 1.0.

Koppelingen worden gemaakt via drie methodes: trefwoordanalyse, semantische AI-matching en handmatige validatie.

Matchmethoden

Trefwoord
keyword-overlap-v2
0
0% van totaal
Semantisch
semantic-claude
271.554
100% van totaal
Handmatig
manual
0
0% van totaal
8

Specificiteit van beloften

Elke belofte krijgt een specificiteitsclassificatie die aangeeft hoe concreet en toetsbaar de toezegging is.

SPECIFIEK

Meetbare, concrete toezegging met een duidelijk toetsbaar doel. Bijv. '100.000 woningen per jaar', 'defensie naar 2% bbp'.

GEMIDDELD

Duidelijke richting, maar geen exact meetbaar doel. Bijv. 'stikstofregels versoepelen', 'eigen risico verlagen'.

VAAG

Abstracte toezegging die moeilijk objectief toetsbaar is. Bijv. 'investeren in onderwijs', 'de economie versterken'.

9

Neutraliteit & onpartijdigheid

CivicStat is politiek onafhankelijk en ontvangt geen financiering van politieke partijen, bedrijven of belangengroepen.

Alle partijen worden op dezelfde manier behandeld: dezelfde algoritmes, dezelfde drempelwaarden, dezelfde weergave. We publiceren geen rankings of “beste partij”-scores. Elke berekening is reproduceerbaar en fouten en beperkingen worden expliciet benoemd.

10

Beperkingen

Moties ≠ al het beleid. Wetsvoorstellen, amendementen en begrotingsbesluiten worden nog niet meegenomen.

Automatische matching is imperfect. Versie 2 bevat een procedureel motiefilter dat foutieve matches vermindert, en gebruikt vooraf gedefinieerde trefwoorden per belofte in plaats van automatische extractie. Aanvullend wordt semantische matching met Claude AI ingezet voor diepere inhoudelijke beoordeling.

Coalitiedwang. Partijen in een coalitie stemmen soms mee met het regeerakkoord, ook als dit afwijkt van hun verkiezingsprogramma. Dit nuanceren we nog niet automatisch.

TK2023 & TK2025. CivicStat richt zich op de Tweede Kamerverkiezingen van 2023 en 2025. Oudere parlementaire periodes worden nog niet meegenomen.

Beloften zijn LLM-ondersteund geëxtraheerd. Beloften worden geëxtraheerd uit verkiezingsprogramma’s met behulp van LLM-analyse (Claude, Anthropic) en vervolgens handmatig gevalideerd op volledigheid en correctheid.

11

AI-logboek

Elke AI-aanroep die CivicStat doet wordt gelogd in Langfuse, een open-source observability-platform. Alle traces zijn publiek toegankelijk zodat journalisten, onderzoekers en geïnteresseerden exact kunnen zien welke AI-modellen worden gebruikt, wat ze te zien krijgen, en wat ze terugsturen.

1.199.186
AI-aanroepen
€8066.03
Totale kosten
635.9M
Input tokens
434.6M
Output tokens

Recente AI-aanroepen

DatumTaakTagsTokensLatentieKosten
21 apr, 02:50OpenRouter Request
4401.1s$0.0015Bekijk trace →
20 apr, 23:52OpenRouter Request
2.4915.8s$0.0102Bekijk trace →
20 apr, 23:52OpenRouter Request
3.18029.5s$0.0216Bekijk trace →
20 apr, 23:52OpenRouter Request
3.18030.0s$0.0216Bekijk trace →
20 apr, 23:51OpenRouter Request
3.26211.8s$0.0129Bekijk trace →
20 apr, 23:51OpenRouter Request
3.26212.6s$0.0129Bekijk trace →
20 apr, 23:47OpenRouter Request
4381.3s$0.0016Bekijk trace →
20 apr, 23:46OpenRouter Request
4565.5s$0.0016Bekijk trace →
20 apr, 23:44OpenRouter Request
4410.9s$0.0015Bekijk trace →
20 apr, 23:42OpenRouter Request
4451.2s$0.0015Bekijk trace →
20 apr, 23:40OpenRouter Request
4441.4s$0.0015Bekijk trace →
20 apr, 21:45OpenRouter Request
4281.4s$0.0015Bekijk trace →
20 apr, 21:45OpenRouter Request
4431.2s$0.0015Bekijk trace →
20 apr, 21:42OpenRouter Request
4572.0s$0.0016Bekijk trace →
20 apr, 21:40OpenRouter Request
4542.4s$0.0016Bekijk trace →
20 apr, 21:38OpenRouter Request
4571.1s$0.0017Bekijk trace →
18 apr, 15:41OpenRouter Request
1.8963.0s$0.0082Bekijk trace →
18 apr, 15:41OpenRouter Request
1.9824.0s$0.0091Bekijk trace →
18 apr, 15:39OpenRouter Request
2.60627.5s$0.0199Bekijk trace →
18 apr, 15:39OpenRouter Request
2.57312.1s$0.0120Bekijk trace →
Alle traces bekijken in Langfuse →
12

Begrippenlijst

Motie
Een verzoek van een of meer Kamerleden aan de regering. Moties worden ingediend tijdens een debat en in stemming gebracht. Ze zijn niet juridisch bindend maar politiek zwaarwegend.
Stemming
De formele beslissing van de Kamer over een voorstel. Er zijn twee vormen: 'met handopsteken' (partijniveau) en 'hoofdelijk' (individueel per Kamerlid).
Hoofdelijke stemming
Stemming waarbij elk individueel Kamerlid per naam stemt. Vindt plaats op verzoek van minstens 30 leden. Alleen hierbij zijn individuele stemrecords beschikbaar.
Met handopsteken
De standaard stemmethode. De voorzitter telt de stemmen per fractie. Alleen partijstandpunten worden geregistreerd, geen individuele stemmen.
Fractie
Een groep Kamerleden die samen een partij vertegenwoordigen. De fractiegrootte bepaalt het aantal zetels bij stemmingen met handopsteken.
Indiener
Het Kamerlid dat een motie indient. Medeindieners ondersteunen de motie formeel. Geregistreerd als ZaakActor in de TK API.
Belofte
Een concrete of directionele toezegging uit een verkiezingsprogramma, gekoppeld aan een specifiek thema.
MCS (Mandate Consistency Score)
Een percentage dat aangeeft in hoeverre een partij stemt in lijn met haar beloften. 100% = volledig consistent.
Belofte-kloof
Het verschil in zetels tussen de verwachte uitslag (op basis van beloften) en de werkelijke stemming.
Match confidence
Betrouwbaarheidsscore (0–100%) van de automatische koppeling tussen een motie en een belofte.
Verwachte stemrichting
Of een partij naar verwachting voor of tegen een gerelateerde motie zou stemmen, gebaseerd op de belofte.
Koersvastheid
Score (0–100) die aangeeft hoe stabiel de MCS van een partij is over meerdere parlementaire periodes (TK2023 vs TK2025). 100 = identiek, 0 = maximaal verschil.
Parlementaire periode
Het tijdvenster waarbinnen stemmingen worden meegeteld voor een verkiezingsprogramma. TK2023: 6 december 2023 t/m 29 oktober 2025. TK2025: vanaf 29 oktober 2025.