Skip to main content

Studentprognose tool voor het voorspellen van eerstejaars instroom in het hoger onderwijs

Project description

Studentprognose

Voorspel je studentinstroom maanden vooruit — met je eigen data, op je eigen machine.

Radboud Universiteit CEDA Contributors GitHub License PyPI
Python GitHub Last Commit Windows macOS Linux

[!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.


📦 Aan de slag

pip install studentprognose
studentprognose init

init maakt de benodigde mapstructuur aan en legt uit welke bestanden je moet aanleveren. Daarna:

studentprognose -w 6 -y 2024

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 aan configuration/configuration.json. Zie Configuratie voor uitleg en voorbeelden.


🛠️ 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 2020 t/m -y 2024 en -w 1 t/m -w 52.


🗃️ Studielink Data

[!IMPORTANT] Dit model werkt met Studielink-telbestanden. Je hebt deze data nodig om voorspellingen te maken voor jouw instelling. Demodata is meegeleverd zodat je het model eerst kunt uitproberen.


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

✨ Gebruik

Jaren en weken

Specificeer jaar en week met -y en -w:

uv run main.py -w 6 -y 2024
uv run main.py -W 1 2 3 -Y 2024
uv run main.py -year 2023 2024
uv run main.py -week 40 41

Gebruik slicing voor een reeks weken:

uv run main.py -w 10 : 20 -y 2023

Datasets

Er zijn twee datasets beschikbaar: individual (per student) en cumulative (geaggregeerd per opleiding/herkomst/jaar/week). Standaard worden beide gebruikt.

uv run main.py -d individual
uv run main.py -D cumulative
uv run main.py -dataset both

Datakwaliteitscontrole

Bij elke run wordt de ruwe inputdata automatisch gevalideerd voordat de ETL start. Zo weet je zeker dat je nooit 20 minuten wacht voor een prognose op basis van corrupte data.

Er zijn drie soorten bevindingen:

Type Voorbeeld Wat er gebeurt
Fout Ontbrekend bestand, ontbrekende kolom Pipeline stopt direct
Probleem Negatieve waarden, onbekende herkomstcode Prompt: doorgaan of stoppen?
Waarschuwing Klein percentage ontbrekende waarden, weekgaten Gelogd, pipeline loopt door
Validatie gevonden problemen die prognoses kunnen beïnvloeden:
  [PROBLEEM] telbestandY2025W10.csv: meercode_V = 0 voor 1 opleiding(en): B Opleiding X

Als je doorgaat, kunnen sommige opleidingen worden overgeslagen of
onbetrouwbare prognoses opleveren.

Wil je doorgaan met de pipeline? [j/N]

Gebruik --yes om de prompt te omzeilen in geautomatiseerde runs (bijv. CI/CD):

studentprognose -w 6 -y 2025 --yes

[!NOTE] Met --noetl worden ETL én validatie overgeslagen. Gebruik dit alleen als de ruwe data al eerder succesvol verwerkt en gevalideerd is.

Validatie-instellingen aanpassen

De standaardwaarden (jaarbereiken, NaN-drempels, toegestane categorische waarden) staan in de broncode. Je kunt ze overschrijven door een "validation"-blok toe te voegen aan je configuration.json. Vermeld alleen de waarden die afwijken:

{
    "validation": {
        "nan_error_threshold": 0.20,
        "telbestand": {
            "herkomst_allowed": ["N", "E", "R", "ONBEKEND"]
        }
    }
}

Configuratie

Het standaard configuratiebestand is configuration/configuration.json. Dit kan worden overschreven:

uv run main.py -c pad/naar/configuration.json
uv run main.py -configuration langer/pad/naar/config.json

Uitgebreid voorbeeld

Voorspel eerstejaars voor 2023 en 2024, weken 10 t/m 20, met beide datasets:

uv run main.py -y 2023 2024 -w 10 : 20 -d b

Voorspel eerstejaars voor collegejaar 2025/2026, week 5, alleen cumulatief:

uv run main.py -y 2025 -w 5 -d c

Syntax overzicht

Instelling Korte notatie Lange notatie Opties
Voorspellingsjaren -y of -Y -year Eén of meer jaren, bijv. 2023 2024
Voorspellingsweken -w of -W -week Eén of meer weken, bijv. 10 11 12
Slicing Gebruik : voor reeksen, bijv. 10 : 20
Dataset -d of -D -dataset i/individual, c/cumulative, b/both
Configuratie -c of -C -configuration Pad naar configuratiebestand

📁 Beschrijving van bestanden

Input

Bestand Beschrijving
individual Individuele (voor)aanmeldingen per student. Wordt gebruikt voor de SARIMA_individual voorspelling.
cumulative Aantal aanmeldingen per opleiding, herkomst, jaar, week en herinschrijving/hogerejaars. Wordt gebruikt voor de SARIMA_cumulative voorspelling. Verkregen via Studielink.
latest Per opleiding, herkomst, jaar en week: aanmeldingen, voorspellingen en foutwaarden (MAE/MAPE). Wordt gebruikt voor volume- en hogerjaarsvoorspellingen.
student_count_first-years Werkelijk aantal eerstejaars studenten per jaar, opleiding en herkomst.
student_count_higher-years Werkelijk aantal hogerjaars studenten per jaar, opleiding en herkomst.
student_volume Werkelijk totaal aantal studenten (eerstejaars + hogerjaars) per jaar, opleiding en herkomst.
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_higher-years.xlsx Volledige output met voorspellingen voor hogerjaars 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 loaderpreprocessing/add_zero_weeks
6 CI subset (indien --ci) utils/ci_subset

Modus-specifieke stappen:

Stap Fase Individual (-d i) Cumulative (-d c) Both (-d b)
6 Preprocessing strategies/individual strategies/cumulative individual → cumulative
7 Filtering strategies/base strategies/base strategies/base
8 Classificatie xgboost_classifier xgboost_classifier
9 Transformatie transforms transforms
10 SARIMA sarima (individual) sarimatransforms sarima (both)
11 XGBoost regressor xgboost_regressor xgboost_regressor
12 Ratio model ratio ratio
13 Postprocessing + Opslaan postprocessor postprocessor postprocessor

Zie de Technische README voor meer details over de architectuur.


🤝 Bijdragen

Dit project wordt actief onderhouden door CEDA. Wil je bijdragen of meedenken? Sluit je aan bij de werkgroep.

🆘 Ondersteuning

Voor vragen of problemen:


Gebouwd met ❤️ door de CEDANL community

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

studentprognose-1.2.0.tar.gz (575.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

studentprognose-1.2.0-py3-none-any.whl (92.6 kB view details)

Uploaded Python 3

File details

Details for the file studentprognose-1.2.0.tar.gz.

File metadata

  • Download URL: studentprognose-1.2.0.tar.gz
  • Upload date:
  • Size: 575.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for studentprognose-1.2.0.tar.gz
Algorithm Hash digest
SHA256 6a2382dd906bb6a2517a4cb3a79c1efa5d7fb587788689623ccb2ad0845343b4
MD5 9ef4722735a8009c2503c15500867ef8
BLAKE2b-256 0821c109c0350977a4d6821e98114495158f3be84cdf5fbf9c2a04670682a32e

See more details on using hashes here.

Provenance

The following attestation bundles were made for studentprognose-1.2.0.tar.gz:

Publisher: pypi-publish.yml on cedanl/studentprognose

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file studentprognose-1.2.0-py3-none-any.whl.

File metadata

  • Download URL: studentprognose-1.2.0-py3-none-any.whl
  • Upload date:
  • Size: 92.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for studentprognose-1.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 734ac754524e16daf90fcf2c18f7735bc39836a27ca4d63b30a135137995c41f
MD5 5d6586e3ed4d7b6223bfd6940fd8f4b1
BLAKE2b-256 deaef0e7e1e6c49190dbd91dc79b344bfd8c94f7c40afd4ee7bfc02a1f81cbb8

See more details on using hashes here.

Provenance

The following attestation bundles were made for studentprognose-1.2.0-py3-none-any.whl:

Publisher: pypi-publish.yml on cedanl/studentprognose

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page