Configuratie
Kolomtypes in de app
edu-synth detecteert kolomtypes automatisch via SDV's detect_from_dataframe. In de UI kun je dit per kolom overschrijven:
| App-label | SDV-type | Gebruik voor |
|---|---|---|
| Categorisch | categorical |
Codes, geslacht, opleiding |
| Numeriek (geheel) | numerical |
Jaren, aantallen |
| Numeriek (decimaal) | numerical |
Cijfers, ratio's |
| Datum | datetime |
Datumkolommen |
| ID / vrije tekst | id |
Sleutels, studentnummers |
Primaire sleutel
Markeer een kolom als primaire sleutel als die unieke rij-identifiers bevat. SDV genereert dan nieuwe unieke waarden in plaats van bestaande te kopiëren.
Geavanceerd: YAML-schema
Voor batchverwerking via de CLI kun je een schema-bestand meegeven:
name: naam_van_dataset
columns:
student_id:
dtype: string
role: primary_key
inschrijvingsjaar:
dtype: integer
inschrijfdatum:
dtype: date
datetime_format: "%Y%m%d"
geslacht:
dtype: categorical
categories: ["1", "2"]
edu-synth synthesize data.csv output.csv --schema schema.yaml --rows 1000
Zonder --schema detecteert de CLI kolomtypes automatisch, net als de app.
Cross-kolom constraints
SDV bewaakt per kolom al de range en het type, maar leidt geen logische verbanden tussen kolommen af. Die dwing je af tijdens de synthese (geen correctie achteraf), op twee manieren:
- In de app — bij stap 2 (Genereren) onder Logische regels (optioneel): kies via dropdowns een volgorde tussen twee kolommen (≤, <, ≥, >) of selecteer kolommen die alleen in bestaande combinaties mogen voorkomen. Geen YAML nodig.
- In de CLI/batch — via een optioneel
constraints-blok in het schema.
Beide paden vertalen naar dezelfde SDV-constraints. Het schema-blok ziet er zo uit:
constraints:
- type: inequality # low ≤ high
low: inschrijvingsjaar
high: uitschrijvingsjaar
strict: false # optioneel; false = gelijk mag (standaard), true = strikt <
- type: fixed_combinations # alleen combinaties die in de data voorkomen
columns: [instellingscode, opleidingscode]
| Type | Wat het afdwingt | Verplichte sleutels |
|---|---|---|
inequality |
low ≤ high (of strikt < met strict: true) |
low, high |
fixed_combinations |
Alleen in de data voorkomende combinaties van de kolommen | columns |
Botsen de regels met de data of bestaat een kolom niet, dan stopt de synthese met een duidelijke melding.
Datumkolommen (datetime_format)
Geef bij een date-kolom het formaat mee in strftime-notatie. Zonder datetime_format gaat SDV uit van ISO 8601 (YYYY-MM-DD) en mislukt het parsen van DUO-datums (YYYYMMDD). Veelgebruikte waarden: "%Y%m%d" (20190101), "%Y-%m-%d" (2019-01-01), "%d-%m-%Y" (01-01-2019).
In de app is een schema niet nodig: zodra je een kolom op Datum zet, detecteert de app het formaat uit de data en geeft het automatisch door aan SDV.
Domein van numerieke kolommen
SDV houdt numerieke waarden automatisch binnen de range van je trainingsdata en respecteert gehele getallen (geen 1,2 aanmeldingen) — dit staat standaard aan. Categorische kolommen kunnen per definitie geen waarde buiten de bestaande categorieën krijgen.
Cross-kolom-logica zoals inschrijvingsjaar ≤ uitschrijvingsjaar of geldige categorie-combinaties dwing je af via cross-kolom constraints — in de app (Logische regels) of in het schema (CLI/batch). Een vast domein strakker dan de data staat nog op de roadmap.
Verdeling per numerieke kolom (distribution)
GaussianCopula modelleert elke numerieke kolom met een marginale verdeling. De standaard (norm) past slecht op scheve of zero-inflated kolommen — denk aan een bedrag dat bij de meeste rijen 0 is met een lange staart. De gefitte normaal trekt daar onmogelijke waarden en de afstand tot de echte data loopt op.
edu-synth detecteert zulke kolommen automatisch (hoge scheefheid of één dominante waarde, met genoeg unieke waarden) en zet daar gaussian_kde op, die de echte vorm volgt. De overige kolommen blijven op norm.
- In de app — bij stap 2 onder Verdelingen: aanbevolen kolommen staan met ⭐ en hebben
gaussian_kdevoorgeselecteerd. Pas per kolom aan of laat staan. - In de CLI/batch — geef per kolom een
distributionmee in het schema. Dit overschrijft de auto-detectie.
columns:
capital_gain:
dtype: integer
distribution: gaussian_kde
Geldige waarden: norm, beta, truncnorm, uniform, gamma, gaussian_kde. gaussian_kde is het meest flexibel maar kost meer rekentijd en geheugen; daarom past edu-synth het gericht toe in plaats van overal.
Reproduceerbaarheid (--seed)
Geef --seed <getal> mee om reproduceerbare output te krijgen: dezelfde seed met dezelfde inputdata levert een identieke synthetische dataset.
edu-synth synthesize data.csv output.csv --seed 42
Zonder --seed is elke run anders. In de app staat dezelfde optie onder Geavanceerd — reproduceerbaarheid.
Bekende schema's
Voorgeconfigureerde schema's voor CEDA-datasets (1CHO, CROHO) staan in schemas/ zodra ze beschikbaar zijn.