Validatie
Na het genereren toont ceda-synth een validatierapport om te beoordelen hoe goed de synthetische data de echte data nabootst.
Statistische getrouwheid
Categorische kolommen — Total Variation (TV) afstand
Meet hoe ver de verhoudingen tussen categorieën afwijken. Bereik [0, 1], lager is beter.
| Score | Betekenis |
|---|---|
< 0.1 |
Uitstekend — distributies zijn nagenoeg identiek |
0.1 – 0.2 |
Goed — kleine afwijkingen |
> 0.2 |
Let op — de verdeling wijkt merkbaar af |
Numerieke kolommen — genormaliseerde Wasserstein-1 afstand
Meet de gemiddelde verschuiving tussen de twee verdelingen. De ruwe Wasserstein-afstand hangt af van de kolomschaal (een afstand van 5 betekent iets anders voor jaren dan voor euro's), daarom wordt de waarde gedeeld door de IQR (interkwartielafstand) van de echte kolom. Het resultaat — de score — ligt op dezelfde schaal als de TV-afstand, zodat alle kolommen vergelijkbaar zijn en even zwaar meetellen in het eindoordeel.
| Score | Betekenis |
|---|---|
< 0.1 |
Uitstekend |
0.1 – 0.2 |
Goed |
> 0.2 |
Let op — de verdeling wijkt merkbaar af |
Het rapport toont de score als primaire waarde en de ruwe Wasserstein-afstand ernaast.
Distributieplots
De app toont naast de scores ook histogrammen en staafdiagrammen van echte vs. synthetische data per kolom — zo zie je direct waar afwijkingen zitten.
Privacy — DCR / NNDR
De app schat het re-identificatierisico via een holdout-vergelijking:
- De echte data wordt gesplitst in een train- (80%) en holdout-set (20%).
- DCR (Distance to Closest Record): hoe dicht zit elke synthetische rij bij de dichtstbijzijnde trainingsrij?
- Als baseline wordt dezelfde afstand gemeten voor de holdout-set.
- Liggen synthetische rijen even ver van de trainingsdata als de holdout-set, dan gedragen ze zich als onbekende data — laag risico.
De DCR-ratio vat dit samen:
| DCR-ratio | Risico |
|---|---|
> 0.9 |
Laag — synthetisch gedraagt zich als onbekende data |
0.7 – 0.9 |
Matig — beoordeel quasi-identifiers vóór publicatie |
< 0.7 |
Hoog — synthetisch zit te dicht op de trainingsdata |
Welke kolommen tellen mee?
Zowel numerieke als categorische kolommen worden meegenomen. In onderwijsdata zijn de quasi-identifiers (geslacht, instellingscode, opleidingscode, woonplaats) juist categorisch — die mogen niet ontbreken in de berekening. Numerieke kolommen worden geschaald, categorische worden one-hot gecodeerd.
Kolommen met heel veel unieke waarden (vrije tekst, namen, identifiers) worden uitgesloten en de app waarschuwt erover — beoordeel die handmatig. De primary key telt nooit mee; die is vervangen door nieuwe anonieme ID's.
Geen formele privacygarantie
DCR/NNDR is een statistische schatting, geen formele garantie. Een DPIA blijft vereist vóór publicatie. Gebruik de synthetische data niet als privacyveilig zonder aanvullende beoordeling.
Zelf valideren met SDV
from sdmetrics.reports.single_table import QualityReport
report = QualityReport()
report.generate(real_df, synth_df, metadata.to_dict())
report.get_visualization(property_name="Column Shapes")