Ga naar inhoud

XGBoost

XGBoost wordt op twee plekken ingezet in de pipeline, met fundamenteel verschillende rollen: als classifier (individueel spoor) en als regressor (cumulatief spoor).

Uitgebreide versie — Jupyter notebook

Een uitvoerbare versie met feature-engineering stap voor stap (lagged features, acceleration, exclusivity ratio) en feature importance op de demodata staat in notebooks/03_xgboost.ipynb.

XGBoost Classifier (individueel spoor)

End-to-end uitleg van het individueel spoor

Deze sectie beschrijft de classifier zelf. Voor de volledige pipeline (preprocessing → classifier → aggregatie → SARIMA-extrapolatie) en de filterregels die bepalen welke aanmeldingen meedoen, zie Individueel model.

Wat doet het?

De classifier voorspelt per individuele student de kans dat deze zich uiteindelijk inschrijft, gegeven persoonskenmerken en het moment van vooraanmelding. De uitkomsten per student worden gesommeerd tot een verwacht cohortaantal.

Waarom XGBoost hier?

De inschrijfkans hangt af van meerdere interacterende factoren. XGBoost vangt niet-lineaire interacties op zonder expliciete feature engineering, en is robuust bij scheve klasseverdeling (de meeste vooraanmelders schrijven zich wel in — de klassen zijn ongelijk verdeeld).

Features

Type Features
Numeriek Collegejaar, Sleutel_count, is_numerus_fixus
Categorisch Examentype, Faculteit, Croho groepeernaam, Deadlineweek, Herkomst, Weeknummer, Opleiding, Type vooropleiding, Nationaliteit, EER, Geslacht, Plaats code eerste vooropleiding, School code/naam eerste vooropleiding, Land code eerste vooropleiding, Studieadres postcode/land/plaats
Cumulatief (optioneel) Gewogen vooraanmelders (ratio), Ongewogen vooraanmelders (ratio), Aanmelders met 1 aanmelding (ratio), Inschrijvingen (ratio)

Categorische features worden one-hot geëncodeerd. Onbekende categorieën in de testset worden genegeerd (handle_unknown="ignore").

Aannames

  • Historische inschrijfpatronen zijn representatief voor het huidige cohort.
  • Studenten die hun aanmelding hebben ingetrokken vóór de voorspelweek tellen als niet-ingeschreven (label 0).

XGBoost Regressor (cumulatief spoor)

Wat doet het?

De regressor voorspelt het totaal aantal inschrijvingen per opleiding/herkomst/examentype, op basis van het geaggregeerde wekelijkse vooraanmeldpatroon (tot en met week 38) en historische studentaantallen als target.

Features

Type Features
Numeriek Collegejaar, weekkolommen (week 1 t/m 38 als afzonderlijke kolommen)
Afgeleid — lagged Gewogen_t-2, Gewogen_t-5: gewogen vooraanmelders 2 en 5 weken vóór de voorspelweek
Afgeleid — dynamiek Gewogen_acceleration: tweede afgeleide van de aanmeldstroom — (huidig − t-2) − (t-2 − t-5). Positief = instroom versnelt, negatief = instroom vlakt af.
Afgeleid — commitment exclusivity_ratio: aandeel aanmelders dat exclusief voor deze opleiding kiest — Aantal aanmelders met 1 aanmelding / (Ongewogen vooraanmelders + ε). Hogere waarde = grotere commitment.
Categorisch Examentype, Faculteit, Croho groepeernaam, Herkomst

De lagged en afgeleide features worden per (opleiding × herkomst × examentype × jaar) berekend ten opzichte van de voorspelweek. Ontbreekt een referentieweek dan wordt als fallback week 1 gebruikt; is ook die afwezig dan wordt 0 ingevuld.

Waarom XGBoost hier?

De relatie tussen het cumulatieve vooraanmeldpatroon en het uiteindelijke inschrijvingsaantal is niet-lineair en varieert per opleiding, herkomst en jaar. XGBoost kan dit patroon leren zonder dat de wekelijkse curve expliciet gemodelleerd hoeft te worden.

Wanneer vertrouw je het niet?

  • Cohorten waarbij de samenstelling van vooraanmelders sterk verschilt van historisch (bijv. na een nieuwe marketingcampagne of gewijzigd instroombeleid).
  • Opleidingen met weinig historische observaties in de trainingsdata.

Feature importance

Na het trainen van elk XGBoost-model wordt de feature importance geëxtraheerd en gegroepeerd per oorspronkelijke feature. One-hot geëncodeerde categorieën worden teruggegroepeerd naar hun oorspronkelijke kolom (bijv. alle Herkomst_NL, Herkomst_EER, … worden samengevoegd tot Herkomst). Weeknummers worden weergegeven als Week 1, Week 2, etc.

De gegroepeerde importances worden getoond in het interactieve dashboard (zie Output begrijpen).

Feature importance — XGBoost classifier · individueel spoor: welke kenmerken zijn het meest bepalend voor de individuele inschrijfkans? (demodata)

Feature importance — XGBoost regressor · cumulatief spoor: welke features dragen het meest bij aan de voorspelling van het totale cohortaantal? (demodata)

Alternatieve regressiemodellen (cumulatief spoor)

Naast XGBoost zijn twee alternatieve regressiemodellen beschikbaar, configureerbaar via model_config.cumulative_regressor in configuration.json:

Model Config-waarde Beschrijving
Ridge Regression ridge L2-geregulariseerde lineaire regressie. Stabiel bij weinig trainingsdata en bij multicollineariteit (de weekkolommen zijn onderling sterk gecorreleerd). Interpreteerbare coëfficiënten.
Random Forest random_forest Ensemble van beslisbomen. Robuust bij kleine datasets, ingebouwde feature importance, minder gevoelig voor outliers dan gradient boosting.

Alle regressors delen dezelfde preprocessing-pipeline (OneHotEncoding voor categorische features, passthrough voor numerieke features). Dit garandeert een eerlijke vergelijking.

Gebruik studentprognose benchmark -w <week> om te vergelijken welk model het best presteert op jouw data.

Implementatie

Zie src/studentprognose/models/xgboost_classifier.py, src/studentprognose/models/xgboost_regressor.py, src/studentprognose/models/regressors.py en src/studentprognose/models/importance.py.