Studentprognose tool voor het voorspellen van eerstejaars instroom in het hoger onderwijs
Project description
[!NOTE] Dit model is oorspronkelijk ontwikkeld door Radboud Universiteit en vervolgens samen met CEDA open source gemaakt zodat andere instellingen er ook van kunnen profiteren. Lees meer in het VOX-artikel.
[!TIP] Zie het in actie: bekijk een voorbeeld-dashboard en een uitgewerkte prognose op de documentatiesite — van vooraanmelders op een peilmoment naar het verwachte aantal inschrijvingen, met demodata.
📦 Aan de slag
Vereisten: Python 3.12
Installeer met uv:
uv tool install studentprognose
Heb je uv nog niet? Eenmalig installeren met
curl -LsSf https://astral.sh/uv/install.sh | sh(macOS/Linux) ofpowershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"(Windows). Voor pip-instructies, zie de documentatie.
Na installatie:
studentprognose init # mapstructuur + configuratie aanmaken
studentprognose -w 6 -y 2024
init maakt de benodigde mapstructuur aan en legt uit welke bestanden je moet aanleveren.
Voor geautomatiseerde runs (cron, taakplanner) — sla de interactieve prompt over:
studentprognose -w 6 -y 2024 --yes
[!NOTE] Heb je afwijkende kolomnamen in je Studielink-export? Voeg een
"columns"-blok toe aanconfiguration/configuration.json. Zie Configuratie voor uitleg en voorbeelden.
Zie de documentatie voor een complete walkthrough met uitleg over Python-installatie, data klaarzetten en veelvoorkomende fouten.
Waarom dit model?
Dit model is gebouwd voor data-analisten bij Nederlandse onderwijsinstellingen die werken met Studielink-data. Je hebt geen machine learning-expertise nodig.
| Bring Your Own Data | Je levert je eigen data aan — er wordt niets extern gedeeld |
| Privacy-vriendelijk | Draait volledig lokaal op je eigen machine |
| Open source | Transparant, aanpasbaar en gratis te gebruiken |
| Demo data inbegrepen | Direct uitproberen zonder eigen data — demobestanden zitten in data/input_raw/ |
📊 Presentatie
Een introductie tot Studentprognose (HOlink 2026): waarom instroomprognose lastig is, hoe het model werkt en hoe je ermee aan de slag gaat.
🛠️ Aan de slag voor ontwikkelaars
Via de broncode (met demodata):
# 1. Installeer uv (zie https://docs.astral.sh/uv/getting-started/installation/)
curl -LsSf https://astral.sh/uv/install.sh | sh
# 2. Clone de repository
git clone https://github.com/cedanl/studentprognose.git
cd studentprognose
# 3. Draai het model met demodata
uv run studentprognose -w 6 -y 2020
[!NOTE] Demodata is meegeleverd in
data/input_raw/, zodat je direct kunt starten. Gebruik-y 2020t/m-y 2024en-w 1t/m-w 52.
✨ Gebruik
[!IMPORTANT] Dit model werkt met Studielink-telbestanden. Je hebt deze data nodig om voorspellingen te maken voor jouw instelling; de meegeleverde demodata laat je het model eerst uitproberen. Zie Je data voorbereiden.
studentprognose -w 6 -y 2024 # specifieke week en jaar
studentprognose -w 10 : 20 -y 2023 # weekbereik
studentprognose -d c # alleen cumulatief spoor
studentprognose -d c --institution 21PC # scoop de teldata op je eigen instelling
studentprognose -y 2023 2024 -w 10 : 20 -d b # meerdere jaren, beide sporen
studentprognose benchmark -d c -w 12 # vergelijk alternatieve modellen
studentprognose tune -d c -w 12 # stem hyperparameters af (cumulatieve regressor)
| Vlag | Beschrijving | Opties |
|---|---|---|
-w |
Voorspelweek(en) | weeknummers of bereik, bijv. 10 : 20 |
-y |
Voorspeljaar(en) | bijv. 2024 of 2023 2024 |
-d |
Dataset | individual, cumulative, both (standaard) |
--institution |
Beperk teldata tot instelling(en) | Brincode(s), bijv. 21PC; standaard alle |
--noetl |
Sla ETL over | als je al verwerkte data in data/input/ hebt |
--yes |
Sla interactieve prompts over | voor CI/CD en cron |
Naast voorspellen kun je met het benchmark-subcommando alternatieve ML-modellen vergelijken op je eigen data:
studentprognose benchmark -d c # vergelijk cumulatieve modellen
Zie de documentatie voor alle vlaggen, configuratie, validatie-instellingen en uitgebreide voorbeelden, en Benchmarks voor de modelvergelijking.
📁 Beschrijving van bestanden
Input
| Bestand | Beschrijving |
|---|---|
| individual | Individuele (voor)aanmeldingen per student. Voedt het individueel model (XGBoost classifier + SARIMA) en levert de SARIMA_individual voorspelling. |
| cumulative | Aantal aanmeldingen per opleiding, herkomst, jaar, week en herinschrijving. Wordt gebruikt voor de SARIMA_cumulative voorspelling. Verkregen via Studielink. |
| latest | Per opleiding, herkomst, jaar en week: aanmeldingen, voorspellingen en foutwaarden (MAE/MAPE). |
| student_count_first-years | Werkelijk aantal eerstejaars studenten per jaar, opleiding en herkomst. |
| student_volume | Werkelijk totaal aantal ingeschreven studenten per jaar, opleiding en herkomst (alleen nodig bij -sy v). |
| weighted_ensemble | Gewichten per model voor de ensemble-voorspelling. |
Output
| Bestand | Beschrijving |
|---|---|
| output_prelim.xlsx | Voorlopige output met alle voorspellingen van de huidige run. |
| output_first-years.xlsx | Volledige output met voorspellingen voor eerstejaars studenten. |
| output_volume.xlsx | Volledige output met volume-voorspellingen (totaal). |
🏗️ Architectuur
Pipeline executievolgorde
Gedeelde stappen (alle modi):
| Stap | Fase | Bestand |
|---|---|---|
| 1 | CLI parsing | cli.py |
| 2 | Validatie ruwe data (skip met --noetl) |
data/validation |
| 3 | ETL (skip met --noetl) |
data/etl |
| 4 | Configuratie laden | config.py |
| 5 | Data laden | data/loader → data/preprocessing/add_zero_weeks |
| 6 | CI subset (indien --ci) |
utils/ci_subset |
Modus-specifieke stappen (vervolgen op de gedeelde stappen):
| Stap | Fase | Individual (-d i) |
Cumulative (-d c) |
Both (-d b) |
|---|---|---|---|---|
| 7 | Preprocessing | strategies/individual |
strategies/cumulative |
individual → cumulative |
| 8 | Filtering | strategies/base |
strategies/base |
strategies/base |
| 9 | Classificatie | models/xgboost_classifier |
— | models/xgboost_classifier |
| 10 | Transformatie | data/transforms |
— | data/transforms |
| 11 | SARIMA | models/sarima (individual) |
models/sarima → data/transforms |
models/sarima (both) |
| 12 | XGBoost regressor | — | models/xgboost_regressor |
models/xgboost_regressor |
| 13 | Ratio model | — | models/ratio |
models/ratio |
| 14 | Postprocessing + Opslaan | output/postprocessor |
output/postprocessor |
output/postprocessor |
Zie doc/PIPELINE.md voor de gedetailleerde end-to-end pipeline (inclusief Mermaid-diagrammen). Voor een uitleg van het individueel spoor, zie Individueel model in de methodologische documentatie.
🤝 Bijdragen
Dit project wordt actief onderhouden door CEDA. Wil je bijdragen of meedenken? Sluit je aan bij de werkgroep.
🆘 Ondersteuning
Voor vragen of problemen:
- GitHub Issues: Probleem melden
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file studentprognose-1.5.8.tar.gz.
File metadata
- Download URL: studentprognose-1.5.8.tar.gz
- Upload date:
- Size: 5.0 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6893873eda718cdc04857726b3b373670fe8cfc0c61dedd67e56ef2962534511
|
|
| MD5 |
99245f5dbf8728c44d9744d4a32586df
|
|
| BLAKE2b-256 |
594d4e8e172c88da9de63c9efdf46f860db3b4b690291d5c936e48665e3095b3
|
Provenance
The following attestation bundles were made for studentprognose-1.5.8.tar.gz:
Publisher:
pypi-publish.yml on cedanl/studentprognose
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
studentprognose-1.5.8.tar.gz -
Subject digest:
6893873eda718cdc04857726b3b373670fe8cfc0c61dedd67e56ef2962534511 - Sigstore transparency entry: 2207069254
- Sigstore integration time:
-
Permalink:
cedanl/studentprognose@2781d5bdc484be966c22eb38980c9b6a5c38676f -
Branch / Tag:
refs/tags/v1.5.8 - Owner: https://github.com/cedanl
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi-publish.yml@2781d5bdc484be966c22eb38980c9b6a5c38676f -
Trigger Event:
push
-
Statement type:
File details
Details for the file studentprognose-1.5.8-py3-none-any.whl.
File metadata
- Download URL: studentprognose-1.5.8-py3-none-any.whl
- Upload date:
- Size: 170.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
74d7a242a817636927399ca11c7fe2058219397a547294da3fcdccf70eabcb77
|
|
| MD5 |
35e07eaa713b5d04ff3ac0d7ea1ec818
|
|
| BLAKE2b-256 |
e6ce79679fbc098eb1bea00537604e67f1cbaf69d9c368fc824d5f94b0d64924
|
Provenance
The following attestation bundles were made for studentprognose-1.5.8-py3-none-any.whl:
Publisher:
pypi-publish.yml on cedanl/studentprognose
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
studentprognose-1.5.8-py3-none-any.whl -
Subject digest:
74d7a242a817636927399ca11c7fe2058219397a547294da3fcdccf70eabcb77 - Sigstore transparency entry: 2207069264
- Sigstore integration time:
-
Permalink:
cedanl/studentprognose@2781d5bdc484be966c22eb38980c9b6a5c38676f -
Branch / Tag:
refs/tags/v1.5.8 - Owner: https://github.com/cedanl
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi-publish.yml@2781d5bdc484be966c22eb38980c9b6a5c38676f -
Trigger Event:
push
-
Statement type: