Educational data mining: hoe leren studenten programmeren?

Louise Deconinck Studentennummer: 01406820

Promotoren: prof. dr. Peter Dawyndt, Bart Mesuere

Masterproef ingediend tot het behalen van de academische graad van Master of Science in de informatica

Academiejaar 2018-2019 ii Educational data mining: hoe leren studenten pro- grammeren?

In deze thesis bekijken we hoe we de data uit het online leerplatform Dodona kunnen gebruiken om lesgevers en studenten meer inzicht te geven in het leerpro- ces. We willen ten eerste bekijken of het gedrag van studenten binnen Dodona een voorspellende waarde heeft: kan het gedrag in Dodona iets zeggen over de voortgang van een student in de cursus? Ten tweede willen we ook oefeningen aanraden aan de student. Om dit te doen moeten we in kaart brengen hoe goed de student bepaalde programmeerconcepten reeds onder de knie heeft.

Dodona

Dodona is een online leerplatform ontwikkeld aan de UGent waar studenten al oefenend leren programmeren. Het platform wordt voor 2 vakken reeds gebruikt sinds 26 september 2016, waardoor we voor die vakken reeds 3 jaar historische data hebben.

Educational Data Mining en Learning Analytics

Educational Data Mining en Learning Analytics zijn twee onderzoeksgebieden die door gebruik te maken van machine learning technieken proberen om meer inzicht te krijgen in educationele processen. Dit is zeer breed: aan de ene kant kan men studenten meer inzicht geven in hun leerproces: hen een inschatting gven of ze goed bezig zijn in een cursus of niet. Aan de andere kant is het ook mogelijk om lesgevers inzicht te geven in hoe studenten werken of welke stukken lesmateriaal voor een beter begrip bij de studenten zorgen.

Voorspelling voortgang van studenten in de cursus

Op basis van de gedragsdata van studenten in Dodona en de punten van hun tussentijdse evaluaties proberen we de voortgang van de student in de cursus te voorspellen. De gedragsdata houdt het volgende in: het tijdstip van de ingediende oplossingen, de reeks en de oefening waartoe deze ingediende oplossingen behoren en de status van de ingediende oplossingen. iii De vakken die we hier beschouwen zijn het vak Programmeren aan de faculteit Wetenschappen aan de UGent en het vak Informatica, aan de faculteit Ingenieurs- wetenschappen en Architectuur, ook aan de UGent. Op basis van die data is het mogelijk om reeds vroeg in het semester (voor de eerste tussentijdse evaluatie) met meer dan 70% accuraatheid te bepalen of een student zal slagen of falen voor dit vak.

Conceptextractie uit oefeningen

We splitsen eerst de overkoepelende programmervaardigheid op in kleinere concep- ten. Dit doen we op basis van een reeds bestaande lijst van concepten die gebruikt wordt om de oefeningen voor het vak Programmeren op te stellen. Om de vaardigheid van een student met een specifiek programmeerconcept te bepalen, moeten we een manier vinden om deze concepten uit de broncode van de ingediende oplossingen te halen. We defini¨eren voor ieder van de 62 concepten een methode die op basis van Abstract Syntax Trees (AST) de juiste concepten herkent. Door het gebruik van AST’s wordt enkel de structuur van het programma behouden en niet de syntax. Deze conceptextractie is onder andere nuttig om te achterhalen of bepaalde con- cepten waarvan gewenst is dat de studenten deze onder de knie hebben ook effectief aan bod komen in de oefeningen. Educational data mining: how do students learn to code? Louise Deconinck Supervisor(s): Prof. Dr. P. Dawyndt, Dr. B. Mesuere, D. Mourisse

Abstract— Dodona is an online learning platform tus of that submission. We specifically do not where students can learn to program by solving exer- take any personal data (such as gender, previous cises on which they receive automated feedback. In this paper we predict the performance of students in an intro- education or location) into account for privacy ductory programming course using historical behavioural reasons. This also means that we do not need to data from this platform. This shows that the behaviour question the students during the course and we of students is a good predictor for their performance in can use the historical data already collected as an introductory programming course. such. Keywords— educational data mining, learning analyt- ics, performance prediction, Dodona II. Related work I. Introduction Educational Data Mining and Learning Analyt- The Dodona project (dodona.ugent.be) was ics both want to solve educational problems using first launched on the 26th of September 2016. It data collected by online learning platforms. These is an online learning platform with which students research areas are very broad and contain a lot of can learn to program. A course within Dodona different aspects: this ranges from better support consists of several series of exercises. Students for students to plagiarism detection [2]. can submit solutions to these exercises. The plat- We look specifically at performance prediction: form automatically provides feedback to the stu- how to predict the probability that a student will dents regarding the correctness of their submis- succeed or fail at a course. In Liao et al. [1], sions, which the students can use to improve their clicker data from students was used to measure submissions. their progress in the course. This data consisted Two courses have used Dodona since its of answers from students during in-class ques- launch: a course on programming from the fac- tions. In week 3 (the course lasted 12 weeks) an ulty of Sciences and one from the faculty of Engi- accuracy of 70% was reached to determine which neering and Architecture. Both of these courses students were going to fail or succeed. are introductory computer sciences courses that It is also possible to use data from an instru- teach Python 3 to the students. The course in mented IDE to determine the eventual perfor- the Sciences faculty comprises of 160 to 400 stu- mance of a student with 75% accuracy [4]. Each dents per year. The combined number of submis- time a student compiled their code, an event con- sions lies between 130 000 and 200 000 per year. taining the compilation status and the possible The course of the Engineering faculty comprises error was logged. This data was then scored and of over 400 students per year, with about 480 000 used to perform Linear Regression. However, this - 500 000 submissions per year. Until now, the research was only performed on one cohort of stu- data collected through Dodona has never been dents. systematically analysed. We want to predict the Other research which specifically only uses data performance of students through the course and that is already generated by the students dur- see whether a student is on track to successfully ing their programming exercises was used in Vi- finish the course or not. havainen [3], where a an accuracy of 78% was We choose to only use behavioural data: this reached, using data from only one cohort of stu- includes the time of a submission and the sta- dents. III. Performance Prediction Abbreviation Explanation subm Total nr of submissions We want to use the behavioural data of stu- nosubm Total nr of exercises without dents, supplemented with the results of evalua- submissions tions held during the semester, to predict if the correct Total nr of correct submissions students will successfully finish the course. We after Total nr of submissions after also want to be able to detect failing students as correct early as possible. the first correct submission per exercise, summated over all exercises of a series A. Extracted Features before Total nr of submissions after correct We want to detect failing students early on in the before correct submission the semester. Because we work with 3 years of per exercise, summated over data, we need to consider certain points in the all exercises of a series semester where we want to predict the perfor- time series Difference in time between the mance of a student. We simply choose these last and first submission in a points as the deadline for each series in the series course. We can do this because the courses have time correct Difference in time between the not really changed in those 3 years: the same first correct submission and concepts are taught in the same series. If this is the first submission in a series. not the case, the prediction might suffer. wrong Nr of submissions with status For each year of data, we extract subdatasets. wrong These subdatasets contain only the submissions comp error Nr of submissions with status up to one of the deadlines. In the case of the compilation error course at the faculty of Sciences, there’s 10 dead- runtime Nr of submissions with status lines. This results in 10 subdatasets. error runtime error The raw data consists of per student a number correct Nr of exercises where the series containing exercises. These exercises then after 2h contain a number of submissions. We want to use first correct submission hap- these submissions to extract useful features for pens less than 2 hours after the machine learning model. Per series present in the first submission correct the subdataset we extract the features outlined Nr of exercises where the after 24h in Table 1. first correct submission hap- pens less than 24 hours after B. Machine Learning Models the first submission correct Nr of exercises where the We want to interpret the results of the machine after 5m learning models. This means that we want to first correct submission hap- know which features contributed to the decision pens less than 5 minutes after to classify the student as failing or succeeding. the first submission correct We consider four possible machine learning Nr of exercises where the after 15m models: Stochastic Gradient Descent, Logistic first correct submission hap- Regression, a Support Vector Machine and a Ran- pens less than 15 minutes after dom Forest. We consider all possible combina- the first submission tions of training and test sets. An example of this can be found in Table 2. We use a crossval- Table 1: Explanation of all features. These features are idated grid search to determine the best param- extracted for each series present in the dataset. eters for each of these machine learning models. The models are then tested on the test set. Training set Test set 2016-2017 2018-2019 2017-2018 2018-2019 2018-2019 2018-2019 2016-2017 & 2017-2018 2018-2019

Table 2: Example of all train/test configurations for test set 2018-2019

(a) SGD Classifier (b) Logistic Regression

(a) SGD Classifier (b) Logistic Regression

(c) Support Vector Machine (d) Random Forest

Figure 2: Range of the balanced accuracy of the differ- ent models during the semester, applied on the course of the faculty of Engineering and Archi- tecture. the semester the accuracy for this model ranges from 70% to 80% which means that early predic- tion of failing students is possible. (c) Support Vector Machine (d) Random Forest In Figure 2 we see the results of the classi- Figure 1: Range of the balanced accuracy of the differ- fiers on the course in the faculty of Engineer- ent models during the semester, applied on the ing and Architecture. All classifiers start with a course of the faculty of Sciences. slightly higher balanced accuracy: between 65% IV. Results and 75%. There is less of a rising trend present, which means that the classifiers end up with a A. Model Performance score between 70% and 85%. Again, Logistic In Figures 1 and 2 the results of the differ- Regression seems to be the winner. The final ent machine learning models on the two courses score of this classifier ends up being a couple are shown. The y-axis measures the balanced ac- percentages higher. Again, halfway through the curacy of each model, the x-axis represents the semester, the accuracy ranges between 70% and different deadlines throughout the semester. The 80%. The lack of a rising trend means that either grey range represents the aggregation of all ob- the behaviour of students in this course does not tained results. really change throughout the semester or that the In Figure 1 we see the results of the classifiers behaviour of the students changes in a predictable on the course in the faculty of Sciences. We see a way. clear rising trend as the time through the semester increases, which is exactly what we expect. All B. Feature Importances classifiers start with an accuracy between 50% The reason for choosing interpretable machine and 70$ and end up with an accuracy between learning methods is to be able to get an insight in 60% and 85%. We can clearly see that Logistic the reasons for the decisions made by the model. Regression performs best: it ends up with an ac- We look at a couple of features more in de- curacy between 75% and 85%. Halfway through tail. We specifically consider the weights of the features in the Logistic Regression model. in mind to ensure this tool gets used in a way In Figure 3 the features nr of submissions with that benefits the students. compilation errors for all the Logistic Regres- In this paper we only looked at classifying stu- sion models during the semester, using the data dents as failed or succeeded. It might be inter- from the course of the faculty of Engineering, are esting to explore regression for this problem: this shown. If a cell is red, the odds of succeeding way it might be possible to predict the actual re- in the course decrease if the corresponding fea- sults the students received. tures increases by one unit and all other features stay the same value. If a cell is grey, the odds of References succeeding in the course increase. [1] Soohyun Nam Liao et al. “Lightweight, early In Figure 4 the features nr of wrong submis- identification of at-risk CS1 students”. In: sions is shown. Proceedings of the 2016 ACM Conference We see that submitting more wrong submis- on International Computing Education Re- sions mostly increases the chance of a student search. ACM. 2016, pp. 123–131. succeeding in the course. This seems counter- [2] Cristobal Romero and Sebastian Ventura. intuitive: we expect that students who submit “Educational data mining: A survey from wrong submissions to not be very good at pro- 1995 to 2005”. In: Expert systems with ap- gramming. But if we actually think about it this plications 33.1 (2007), pp. 135–146. makes perfect sense: programming is a skill ac- [3] Arto Vihavainen. “Predicting Students’ Per- quired by practicing, and with that practice comes formance in an introductory programming a lot of mistakes. Submitting more wrong code course using data from students’ own pro- does not indicate an inability to program, but is gramming process”. In: 2013 IEEE 13th In- part of the process of learning how to code. ternational Conference on Advanced Learn- On the other hand, Figure 3, showing the fea- ing Technologies. IEEE. 2013, pp. 498–499. tures nr of submissions with compilation errors, [4] Christopher Watson, Frederick WB Li, and is largely red. This indicates that students that Jamie L Godwin. “Predicting performance submit more code containing compilation errors in an introductory programming course by have a lower chance of succeeding in the course. logging and analyzing student programming If we combine this with the insight gained with behavior”. In: 2013 IEEE 13th International regard to submitting wrong code, this means that Conference on Advanced Learning Technolo- there’s a difference in ability if a student submits gies. IEEE. 2013, pp. 319–323. a lot of code that does not compile vs code that produces a wrong result. We can explain this: if a student is more familiar with the syntax of the language, the student has more time to ac- tually think about the problem and learning how to program, as programming is about more than just syntax.

V. Future Work Currently, the data only takes behavioural data and evaluation scores into account. If we want to improve the results, it might be useful to actually model the students programming knowledge. This prediction is not built into the Dodona platform. None of the teachers have currently access to this tool to identify struggling students. If we want to enable teachers to use this tool, it would be necessary to keep pedagogical theories Figure 3: Importance of the features nr of submissions with compilation errors, originating from the course in the faculty of Engineering, using Logistic Regression. The training set is the combination of both years that is not the mentioned test set.

Figure 4: Importance of the features nr of wrong submissions, originating from the course in the faculty of Engineering, using Logistic Regression. The training set is the combination of both years that is not the mentioned test set. Inhoudsopgave

1 Inleiding 1 1.1 Doel van deze masterproef ...... 2 1.1.1 Punchcard ...... 2 1.1.2 Oefeningensuggestie ...... 3

2 Educational Data Mining en Learning Analytics 5 2.1 Educational Data Mining en Learning Analytics: het verschil . . . .5 2.2 Overzicht van de onderzoeksgebieden ...... 7 2.3 EDM en LA in programmeeronderwijs ...... 11 2.3.1 Voorspelling van de slaagkans van studenten ...... 12 2.3.2 Kennismodellering ...... 14

3 Dodona en data in Dodona 17 3.1 Dodona ...... 17 3.2 Data uit Dodona ...... 19

4 Machine Learning 22 4.1 Interpreteerbaarheid ...... 23 4.2 Random Forest ...... 23 4.3 Logistic Regression ...... 25 4.4 Support Vector Machine ...... 27 4.5 Stochastic Gradient Descent ...... 29 4.6 K-fold Cross validation ...... 29 4.7 Performantiemetrieken ...... 30

5 Voorspelling voortgang van studenten 32 5.1 Werkwijze ...... 34 5.1.1 Berekenen van features ...... 34 5.1.2 Modellen trainen ...... 39

ix Inhoudsopgave x 5.2 Resultaten ...... 42 5.2.1 Resultaten modellen ...... 42 5.2.2 Belangrijkheid features ...... 60

6 Concepten 66 6.1 Hi¨erarchie programmeerconcepten ...... 66 6.2 Extractie van concepten ...... 70 6.3 Visualisatie ...... 71 6.4 Conclusie ...... 76

7 Toekomstig werk 77

A Belangrijkheid van features 80 A.1 Programmeren, Logistische Regressie ...... 81 A.2 Informatica, Logistische Regressie ...... 83 A.3 Features en gewichten van Logistische Regressie ...... 86 A.3.1 Programmeren ...... 86 A.3.2 Informatica ...... 89 Dankwoord

Deze masterproef zou niet tot stand zijn gekomen zonder de hulp en de steun van een aantal mensen. Ik bedank graag professor Peter Dawyndt, Bart Mesuere en Dieter Mourisse voor hun steun, ervaring en hulp bij het uitwerken van deze masterproef. Ik ben zeer blij met de kans die ik heb gekregen om met dit zeer interessante onderwerp te werken. Ook mag ik mijn vrienden en familie niet vergeten. In het bijzonder Jorg, die mij gelukkig blijft maken, zelfs wanner hij aan de andere kant van Europa in R¯ıga is. Het grootste deel van deze thesis werd geschreven in den bureau. Arne, Jarre, Nils, Pieter, Rien en Sam maakten het werk dat met momenten frustrerend was toch altijd aangenaam.

xi Hoofdstuk 1

Inleiding

De opkomst van Big Data en het daarbij horende onderzoeksgebied van Big Data Mining stelt ons in staat om nieuwe inzichten te verkrijgen in grote hoeveelheden data. Dit wordt toegepast op verschillende vlakken in het menselijk leven, zoals winkels die consumentengedrag analyseren tot sociale media die gebruikersdata analyseren. Een ander aspect van het leven waar data mining gebruikt kan wor- den is in het onderwijs. Door de vele digitale leerplatformen en online tools die leerlingen en studenten gebruiken om te leren en opdrachten op te lossen is er veel data over deze studenten of leerlingen beschikbaar. De soort data die beschikbaar is varieert van applicatie tot applicatie. Dit kan gaan van logdata die beschrijft wat een student precies in het platform doet, tot persoonlijke data over wie de student als persoon is: geslacht van de persoon, de woonplaats, eventuele vooropleiding en dergelijke. Door deze data te gaan analyseren kunnen we patronen ontdekken en inzicht krij- gen in hoe studenten leren. We kunnen onder andere proberen om studenten beter te begeleiden in hun leerproces, lesgevers betere feedback geven over de effectiviteit van hun lessen en inzicht geven in hoe een curriculum opgebouwd is. In deze masterproef maken we specifiek gebruik van data uit het Dodona-project (https: //dodona.ugent.be/), ontstaan aan de UGent. Met dit online leerplatform kun- nen studenten leren om te programmeren door oefeningen op te lossen die automa- tisch op juistheid gecontroleerd worden. Telkens ze indienen lopen automatische testen over hun oplossing, waarvan ze ook onmiddellijk feedback krijgen. Dit pro- ject bestaat reeds 3 jaar, waardoor er voor sommige cursussen al voor 3 jaar data verzameld is. Deze data werd echter nog nooit eerder systematisch geanalyseerd.

1 Hoofdstuk 1. Inleiding 2 We kiezen ervoor om te werken met de gedragsdata uit dat platform, en dan speci- fiek enkel de high-level indieningsdata: de ingediende oplossingen die de studenten indienen en de momenten waarop ze die indienen. Aangezien we werken met de data van UGent studenten is het mogelijk om deze indieningsdata te koppelen aan andere persoonsgebonden data die de UGent over deze studenten heeft. Omwille van privacyredenen doen we dit niet. Ook vonden we het belangrijk om enkel data te gebruiken die sowieso werd ver- zameld tijdens het leerproces van een student. We bevragen de studenten niet, noch vragen we hen om in een specifieke omgeving te programmeren. Dit zorgt ervoor dat de student zich enkel moet bezig houden met leren programmeren, hun oefeningen oplossen in Dodona en niet met andere zaken. Dit zorgt er wel voor dat er minder data voorhanden is. We vonden dit een zinvolle beslissing: door geen extra data te verzamelen gebeurt de dataverzameling op een duurzame manier en kunnen we ook de historische data die reeds verzameld is ook gebruiken.

1.1 Doel van deze masterproef

De originele scope van deze masterproef was zeer breed: we wilden op basis van de data uit Dodona meer inzicht verwerven in het leerproces waarbij studenten leren programmeren met ondersteuning van het leerplatform. Dit kan op zeer veel verschillende manieren. We hebben eerst een simpele visualisatie uitgewerkt die gebruikers inzicht geeft in wanneer ze werken aan hun oefeningen. Ook wilden we graag oefeningen suggereren aan studenten om vaardigheden die ze minder onder de knie hadden te verbeteren. Om dit doel te realiseren moeten we een aantal zaken voorzien. Ten eerste is het interessant om te kunnen inschatten of studenten al dan niet on track zijn om succesvol de cursus af te werken. Ten tweede willen we ook inschatten hoe moeilijk een oefening is voor een specifieke student.

1.1.1 Punchcard

Een veelgebruikte manier om gebruikers inzicht te geven in het gedrag van stu- denten in een online leeromgeving is om deze data op een simpele manier te vi- sualiseren. In veel Learning Management Systemen (LMS) wordt daarvoor aan de gebruiker een dashboard getoond waarop simpele factuele en statistische data wordt voorgesteld. Hoofdstuk 1. Inleiding 3 Een simpel idee om studenten en lesgevers inzicht te geven in wanneer de studenten werken was om dit te visualiseren als een soort punchcard. Hiervoor werden de in- dieningstijden van alle ingediende oplossingen van de student geaggregeerd per uur per dag van de week en weergegeven. Een voorbeeld hiervan kan gevonden worden in Figuur 1.1. Op deze figuur worden op de y-as de dagen van de week afgebeeld, met op de x-as de uren van de dag. De grootte van een stip op de punchcard komt overeen met het aantal ingediende oplossingen op dat uur van die dag van de week over alle weken heen. Hoe groter, hoe meer ingediende oplossingen.

Figuur 1.1: Punchcard die toont wanneer studenten werken aan hun oefeningen

1.1.2 Oefeningensuggestie

Parallel aan het ontwikkelen van de visualisatie werkten we ook aan de sugges- tie van oefeningen aan studenten. Een eerste vraag die we ons stelden was of de gedragsdata bevat in Dodona voldoende was om een indicatie te geven van de voortgang van studenten in de cursus. Met andere woorden, of deze data kon voorspellen of studenten zouden slagen of niet. Naast het enkel gebruiken van niet-persoonsgebonden data van studenten vonden we het ook belangrijk om deze voorspelling te doen met data uit voorgaande jaren: het heeft geen zin om de resultaten van studenten te voorspellen met data die het jaar zelf is verzameld. Het is leuk om te zien, maar biedt geen mogelijkheid om dit in een re¨eele situ- atie te gebruiken om te ontdekken welke studenten het moeilijk hebben met het programmeren. Een tweede probleem is dat programmeren een discipline is met veel vaardigheden en concepten die studenten in verschillende volgordes onder de knie kunnen krij- Hoofdstuk 1. Inleiding 4 gen. Eerst is het nodig om deze concepten te defini¨eren. Wanneer de concepten gedefinieerd waren, was het nodig om ze ook te extraheren uit de oefeningen, zodat we deze concepten kunnen koppelen aan de oefeningen die de studenten in Dodona kunnen oplossen In deze masterproef worden beide deelproblemen los van elkaar onderzocht. Het koppelen van een aantal zaken: de vaardigheden die de student verworven heeft, de vaardigheden die de student nodig heeft voor het oplossen van een oefening en de intrinsieke moeilijkheidsgraaf van een oefening behoren tot het onderwerp van vervolgonderzoek. Hoofdstuk 2

Educational Data Mining en Learning Analytics

Educational Data Mining (EDM) en Learning Analytics (LA) zijn beide onder- zoeksgebieden die educationele vraagstukken willen oplossen door gebruik te ma- ken van de grote hoeveelheden data verzameld door online leerplatformen. Deze educationele problemen situeren zich op een groot aantal gebieden, zoals betere ondersteuning voor studenten bieden, maar ook zaken zoals het verbeteren van leerplannen en plagiaatdetectie zijn hier een onderdeel van. Deze onderzoeksgebieden behandelen dezelfde problematiek, maar verschillen van elkaar op enkele vlakken. Hier gaan we in dit hoofdstuk dieper op in. We geven ook een overzicht van alle verschillende aspecten binnen EDM en LA. Tot slot bekijken we het gebruik van EDM en LA binnen het programmeeronderwijs die- per: op welke manier worden EDM en LA specifiek ingezet? Welke data wordt hiervoor gebruikt? We bekijken hierin ook hoe de voortgang van studenten door- heen een cursus programmeren wordt geschat. Verder bekijken we ook nog hoe programmeerkennismodellering wordt gebruikt.

2.1 Educational Data Mining en Learning Ana- lytics: het verschil

Beide onderzoeksgebieden (Educational Data Mining en Learning Analytics) zijn ontstaan uit de vraag naar methodes om leerprocessen beter te begrijpen, gebruik

5 Hoofdstuk 2. Educational Data Mining en Learning Analytics 6 makende van grote hoeveelheiden data die gegenereerd worden door nieuwe leerme- thodes en leertechnieken (Romero & Ventura, 2007). Deze datasets zijn ook vaker en vaker publiek beschikbaar, waardoor onderzoekers sneller aan de slag kunnen zonder te hoeven wachten op de dataverzameling. Op een groot aantal vlakken overlappen EDM en LA met elkaar, zoals het be- studeerde onderwerp en het doel van het onderzoek. Toch zijn er significante verschillen tussen beide onderzoeksgebieden. Volgens Siemens en Baker (2012) situeren deze verschillen zich op 5 verschillende gebieden: 1. Type van exploratie en ontdekking 2. Type van aanpassing en personalisatie 3. Gebruik van holistische of reductionistische frameworks 4. Oorsprong van onderzoekers 5. Gebruikte technieken Volgens hen focust EDM zich eerder op geautomatiseerde ontdekking waarbij een menselijk oordeel eerder als een hulpmiddel wordt gezien bij de automatische ont- dekking. Hier situeert de menselijke inbreng zich eerder bij het initieel labelen van data. Dit in tegenstelling tot LA, waar geautomatiseerde ontdekking het hulpmid- del is om mensen te helpen en te informeren bij het maken van een oordeel. Dit verschil komt ook tot uiting bij een ander verschil tussen beide onderzoeksge- bieden: de aanpassing en personalisatie. Terwijl bij EDM modellen de basis zijn van automatische aanpassingen aan een intelligent systeem, is dit bij LA niet het geval. Daar worden eerder modellen ontwikkeld die studenten en lesgevers informe- ren, zodat zij extra informatie krijgen maar uiteindelijk zelf over de aanpassingen beslissen. Dit gaat bijvoorbeeld over het suggereren van oefeningen aan studenten: in het ene geval worden deze automatisch opgelegd aan studenten, terwijl het in het tweede geval slechts wordt gesuggereerd als een goeie optie. Het derde verschil is als volgt: bij LA wordt er meer nadruk gelegd op een holisti- sche aanpak, het systeem wordt als geheel bekeken. Bij EDM wordt een systeem eerder opgedeeld in componenten en worden deze componenten en de relaties daar- tussen bestudeerd. Volgens Siemens en Baker (2012) hebben de onderzoekers in LA een achtergrond in het semantic web, terwijl onderzoekers bij EDM eerder uit onderzoeksgebieden als educationele software en studentmodellering komen. Die verschillen drijft volgens hen ook het verschil in gebruikte technieken en de verschillende visies die leiden Hoofdstuk 2. Educational Data Mining en Learning Analytics 7 tot de drie eerder vermelde verschillen. Het verschil in gebruikte machine learning technieken vinden we ook terug bij Baker en Inventado (2014). Zij maken een heel uitgebreide oplijsting van de ver- schillende technieken die gebruikt worden bij EDM. Verder vermeldden ze ook nog welke technieken vooral bij LA worden gebruikt. Alhoewel er zeker verschillen zijn, zijn deze volgens Baker en Inventado vooral ook te wijten aan de verschil- lende invalshoek waaruit het probleem wordt bekeken en leidt dit tot het gebruiken van de verschillende technieken op een andere manier. Wat hen wel opvalt is dat relationship mining verrassend weinig wordt toegepast in LA en dat, hoewel de meeste technieken die bij LA gevonden worden ook worden gebruikt bij EDM, dit niet het geval is voor tekstanalyse. Dit wordt bijna exclusief bij LA ingezet. Voor de volledigheid is er in Tabel 2.1 een overzicht te vinden van de verschillende technieken en waar en hoe ze overwegend worden gebruikt (Siemens & Baker, 2012).

EDM LA Classificatie Sociale netwerk analyse Clustering Sentiment analyse Bayesiaans modelleren Invloedanalyse Relationship mining Discourse analyse Ontdekking met modellen Successvoorspelling Visualisatie Concept analyse Sensemaking methodes

Tabel 2.1: Machine learning technieken die voornamelijk worden gebruikt bij EDM of LA.

Baker en Inventado (2014) besluiten dat het positief is dat meerdere onderzoeks- gebieden bestaan waarin deze problemen besproken kunnen worden en dat deze problematiek vanuit meerdere perspectieven wordt bekeken. Ook maakt het niet uit welke methodes het best zijn, maar wel welke methodes het nuttigst zijn voor die applicaties die de ondersteuning van eenieder die leert verbetert.

2.2 Overzicht van de onderzoeksgebieden

In deze sectie willen we een overzicht geven van de EDM en LA onderzoeksgebie- den. We gaan in op de verschillende aspecten die vervat zitten in deze onderzoeks- Hoofdstuk 2. Educational Data Mining en Learning Analytics 8 gebieden. Aangezien de grens tussen beide niet altijd even duidelijk is, maken we ook geen onderscheid tussen beide onderzoeksgebieden en bespreken we niet welk aspect nu beter bij het ene domein dan wel het andere hoort. We beschouwen dit eerder als een overzicht van de verschillende aspecten vervat in onderzoek naar educationele problemen, gebruik makend van grote hoeveelheden data. Het is mogelijk om het onderzoeksgebied op verschillende manieren op te delen. Een eerste optie is op basis van de betrokkenen bij het resultaat van de onder- zoeksactiviteit. In Romero en Ventura (2007) wordt deze opdeling als volgt ge- maakt: 1. Studenten 2. Lesgevers 3. Academische beheerders Indien onderzoek wordt gedaan naar het aanraden van leeractiviteiten en hulpmid- delen die het leren kunnen verbeteren gebaseerd op de voortgang van de student, dan is het duidelijk dat dit onderzoek gericht is op studenten en hen beter begelei- den in het leerproces. Aan de andere kant is het ook mogelijk om lesgevers meer feedback te geven over de structuur en de effectiviteit van hun lessen, het ontdekken van verschillende groepen studenten en de organisatie van het lesmateriaal. Het is tot slot ook mogelijk om feedback te geven aan academische beheerders en admi- nistratiepersonen omtrent o.a. de organisatie van extra hulpmiddelen, een grotere efficientie van hun online learning-platformen te realiseren en het verbeteren van het cursusaanbod. Soms wordt dit lijstje uitgebreid met cursusontwikkelaars en universiteiten of an- dere organisaties die onderwijs aanbieden (Romero & Ventura, 2010). Via deze weg kunnen de inzichten verworven uit het onderzoek het cursusmateriaal verbeteren en kunnen cursussen op een gepersonaliseerde manier aangeraden worden. Een andere high-level opdeling is de volgende (Baker & Yacef, 2009): 1. Verbetering van studentmodellen 2. Ontdekken en verbeteren van domeinstructuurmodellen 3. Pedagogisch support 4. Empirisch bewijs om educationele theorie¨en en fenomenen te verbeteren We zien hier ook duidelijk de focus op studenten en onderwijzers. Punt 2 doelt op het ontdekken van de structuur van kennis en relaties tussen concepten in een bepaald gebied. Opmerkelijk is wel dat hier ook melding wordt gemaakt van educationele theorie¨en en fenomenen. Vaak is dit een aspect dat vergeten wordt Hoofdstuk 2. Educational Data Mining en Learning Analytics 9 (Gaˇsevi´c,Dawson & Siemens, 2015). Bijvoorbeeld, bij het analyseren van de feed- back gegeven in de paper “Course signals at Purdue: Using learning analytics to increase student success”, ´e´envan de bekendste toepassingen van EDM en LA in onderwijs wordt zeer weinig feedback gegeven op procesniveau maar voornamelijk low level opsommende feedback. Van deze opsommende soort feedback is aange- toond dat het geen invloed heeft op het leereffect (Tanes, Arnold, King & Remnet, 2011). Het verankeren van EDM en LA in beproefde pedagogische theorie¨en is belangrijk, zeker omdat het onderzoek vaak geen effectieve toepassing krijgt in een lesomge- ving. Dit wordt door Ihantola e.a. (2015) gezien als ´e´envan de grote problemen van EDM en LA. Natuurlijk is te begrijpen hoe dit komt: in welke mate kan je bepaalde data aan studenten laten zien? Als je een slaagkansvoorspelling aan stu- denten toont, welke invloed heeft dit op hun resultaten en hun leerproces? Zelfs bij het ontwerpen van dashboards is het belangrijk om deze op de juiste manier te visualiseren en de nodige context hierbij te plaatsen om het effect hiervan op studenten juist in te kunnen schatten. 50% van de studenten scoort onder de me- diaan. Dit wil niet altijd zeggen dat ze ook effectief slecht bezig zijn, aangezien verschillende studenten op een andere manier studeren. Goed scorende studenten kunnen afleiden dat ze goed bezig zijn als ze boven het gemiddelde scoren, terwijl ze mogelijks slechter scoren dan gewoonlijk. Deze informatie zichtbaar maken naar de gebruiker toe is zeker niet gemakkelijk (Gaˇsevi´ce.a., 2015). Er kan ook worden gekozen om dergelijke data niet direct aan de studenten te laten zien, maar deze data enkel beschikbaar te maken voor de lesgever die de data kan gebruiken om zich beter te laten informeren over hoe zijn studenten het doen. Hij kan dan zelf de beslissing maken om extra feedback of remedi¨ering te voorzien voor studenten waarvan het algoritme voorspelt dat ze zullen falen. In elk geval is het belangrijk om, vooral wanneer er feedback wordt gegeven, altijd bestaande en getoetste pedagogische principes te gebruiken (Gaˇsevi´ce.a., 2015). Hoe we de inzichten verworven uit EDM en LA precies moeten gebruiken binnen een lesomgeving is dus nog een groot probleem waar in slechts zeer weinig papers rekening mee wordt gehouden. Het is ook mogelijk om een meer low-level opdeling te maken. Deze is te vinden in Tabel 2.2 (Romero & Ventura, 2010). In de rechterkolom vind je een overkoe- pelende groepering waar de categorie¨en in de linkerkolom toe behoren. Deze 11 categorie¨en beschrijven in detail de verschillende aspecten van EDM en Hoofdstuk 2. Educational Data Mining en Learning Analytics 10 LA. Hier kan men ook duidelijk de doelgroepen van de verschillende onderzoeks- aspecten herkennen. Visualisatie, feedback geven aan lesgevers, prestaties van studenten voorspellen, modelleren van studenten, ongewenst gedrag detecteren en groeperen van studenten focust duidelijk op de lesgevers. De derde categorie, aan- bevelingen voor studenten heeft duidelijk studenten als doelgroep. Ontwikkelen van een concepthi¨erarchie en construeren van cursussen is voornamelijk nuttig voor cursusontwerpers.

Groepering Low-level categorie Analyse en visualisatie van data Informatie bieden aan lesgevers Feedback geven aan lesgevers Informatie bieden aan studenten Aanbevelingen voor studenten Prestaties van studenten voorspellen Modelleren van studenten Eigenschappen van studenten ontdekken Ongewenst gedrag detecteren Groeperen van studenten Sociale netwerkanalyse Relaties tussen studenten en concepten Ontwikkelen van een concepthi¨erarchie Construeren van cursussen Inplannen van leerstof en cursussen Plannen en inplannen

Tabel 2.2: Higher-level groepering van 11 aspecten van EDM en LA.

Dit is echter niet de enige mogelijke opdeling, of oplijsting van interessante aspec- ten aan EDM en LA. Een andere mogelijke interessante opdeling is de volgende (Papamitsiou & Economides, 2014): 1. Modellering van studenten 2. Voorspelling van de slaagkans van studenten 3. Verbeteren van zelfreflectie en zelfbewustzijn 4. Voorspellen van studenten die vroeg afvallen 5. Verbeteren van feedback en toetsing 6. Aanbeveling van bronnen en hulpmiddelen Hier worden enkele van dezelfde belangrijke gebieden van EDM en LA geidentifi- ceerd, maar ook een aantal die niet voorkomen in andere opdelingen. Deze zijn dan specifiek verbeteren van zelfreflectie en zelfbewustzijn en verbeteren van feedback en toetsing. Dit eerste punt, verbeteren van zelfreflectie en zelfbewustzijn doelt specifiek op enerzijds het herkennen van studenten die het tempo van de cursus niet meer Hoofdstuk 2. Educational Data Mining en Learning Analytics 11 kunnen volgen en vroegtijdig afgehaakt zijn en anderzijds ervoor zorgen dat de lesgever zich bewust is van deze studenten en ze ook kan herkennen. Dit kan onder andere door het gebruik van het leermateriaal te analyseren (Merceron & Yacef, 2008). Studenten meer motiveren kan dan onder andere door het voorzien van dashboard-achtige applicaties naar studenten (Clow & Makriyannis, 2011). Het tweede punt, verbeteren van feedback en toetsing heeft enerzijds te maken met het geven van de juiste manier van feedback, beide naar studenten en lesgevers toe. Dit is sterk gelinkt met het vorige punt, aangezien feedback sterk gerelateerd is aan zelfreflectie en zelfbewustzijn (Papamitsiou & Economides, 2014). Toetsing, in deze context voornamelijk formatieve toetsing, is ook een zeer belangrijk aspect van leren. Er is onderzoek gedaan naar het kiezen van de beste volgende oefening voor een student.

2.3 EDM en LA in programmeeronderwijs

EDM en LA zijn ook reeds gebruikt om het programmeeronderwijs specifiek te verbeteren. We kunnen een onderscheid maken op basis van de soort data die gebruikt wordt. Aan de ene kant hebben we het onderzoek dat wordt gevoerd met niet-programmeer specifieke data. De data die hier dan wel voor wordt gebruikt varieert van enquˆetes en vragen aan de studenten stellen tot het gebruik van generieke leeromgeving in- formatie (Liao, Zingaro, Laurenzano, Griswold & Porter, 2016), (Azcona, Hsiao & Smeaton, 2019). Het voordeel van dit soort data is dat de technieken hier generie- ker ingezet kunnen worden: ze zijn niet enkel nuttig voor het verbeteren van het programmeeronderwijs. De inzichten die hier verkregen worden kunnen mogelijk ook voor een compleet andere cursus gebruikt worden. Aan de andere kant hebben we onderzoek dat wel specfiek aan de slag gaat met programmeerspecifieke data. We kunnen binnen deze categorie ook een onder- scheid maken op basis van welk granulariteit van data er gebruikt wordt (Ihantola e.a., 2015). Dit gaat van toetsaanslagen, aanpassen van lijnen, opslaan van be- standen, compilaties, uitvoeringen tot ingediende oplossingen, in dalende volgorde qua granulariteit. We kunnen ook een onderscheid maken op basis van hoe de specifieke program- meerdata verzameld wordt. Dit varieert van het instrumenteren van een IDE: afhankelijk van de instrumentatie kan hier andere data verzameld worden, een Hoofdstuk 2. Educational Data Mining en Learning Analytics 12 keylogger inzetten, die duidelijk enkel toetsaanslagen registreert tot versiecontro- lesystemen waar de staat van de oplossing wordt bijgehouden. We focussen ons hier voornamelijk op de twee onderwerpen die verder in deze masterproef zullen belicht worden: het voorspellen van de slaagkans van studenten en het modelleren van de kennis van studenten.

2.3.1 Voorspelling van de slaagkans van studenten

Het gebruiken van extra niet-programmeerspecifieke data is een vrij krachtig mid- del om de slaagkans van studenten te bepalen. Het is mogelijk om op basis van vragen en clickerdata van de antwoorden van de studenten in week 3 van een semes- ter dat 12 weken duurt reeds met 70% accuraactheid te voorspellen of studenten falen of niet voor dit vak, en dit over meerdere semesters heen door gebruik te maken van historische data (Liao e.a., 2016). Wanneer er gebruik gemaakt wordt van logdata afkomstig van een ge¨ınstrumenteer- de IDE kan met een accuraatheid van 75% het uiteindelijke slagen van studenten voorspeld worden (Watson, Li & Godwin, 2013). Telkens wanneer een student zijn code probeerde te compileren werd een snapshot van de code op dat moment met een compilatiestatus, eventuele foutmelding en lijnnummer gelogd. Na het verwerken van deze data werd er een score gegeven. Op basis van deze score werd dan door gebruik te maken van lineaire regressie de slaagkans van de student voorspeld. Een groot nadeel van dit onderzoek is dat het slechts data van 1 cohorte studenten gebruikt, waardoor de accuraatheid eigenlijk van weinig belang is. Vihavainen (2013) gebruikt ook bewust enkel data die door studenten gegene- reerd is tijdens het programmeerproces en bereikt hiermee een accuraatheid van 78%. Het probleem hier is opnieuw dat er maar 1 cohorte studenten wordt ge- bruikt. Azcona e.a. (2019) gebruikt een combinatie van statische en dynamische featu- res. De statische features zijn karakteristieken van de student en eerder behaalde resultaten. De dynamische features zijn onder andere: aanwezigheid op practica en verschillende patronen van toegang tot het online-leerplatform, samen met de hoeveelheid correct opgeloste oefenigen. Echt programmeerspecifieke data wordt niet gebruikt. Hier wordt de voorspelling ook week per week bekeken en eindigt de beste classificatiemethode op week 12 met ongeveer 75%. Wanneer het model op een nieuw jaar data wordt gebruikt, wordt ook een accuraatheid van 74.29% be- haald. Er werd wel optionele feedback gegeven aan de studenten op basis van hun Hoofdstuk 2. Educational Data Mining en Learning Analytics 13 huidige resultaten in de cursus, hun engagement met het online-leerplatform of hun aanwezigheid tijdens practica. Ook positief is dat het model op twee verschillende cohortes studenten werd gebruikt. Asif, Merceron, Ali en Haider (2017) gebruikt ook twee cohortes studenten om de accuraatheid van de methodes te testen. Als data gebruiken ze de eerder behaalde resultaten van de studenten, gewogen zodat eerdere resultaten minder zwaar door- wegen. Carter en Hundhausen (2017) gebruiken patronen in het programmeergedrag van studenten. Ze focussen op de sequenties van verschillende acties. Deze acties komen uit het Programming State Model (PSM) model (Carter, Hundhausen & Adesope, 2015), waarvan een overzicht te vinden is in Tabel 2.3. Studenten worden opgedeeld in 5 verschillende groepen op basis van hun eindresultaten. Dan wordt op verschillende punten in het semester de verschillende soorten transities tussen staten uit het PSM vergeleken over de groepen heen. Er wordt een duidelijk verband tussen de soorten transities en de groepen studenten gevonden, maar dit wordt niet gebruikt om een verdere voorspelling te doen over de slaagkansen van de studenten.

Staat Beschrijving Idle Niet aan het programmeren UU Moet nog gecompileerd worden YN Bewerken, syntax correct, debugging niet succesvol YU Bewerken, syntax correct, debugging succesvol NU Bewerken, syntax niet correct, dubugging succesvol NN Bewerken, syntax niet correct, dubugging niet succesvol DU Debuggen, laatste debug geen runtime exception DN Debuggen, laatste debug wel een runtime exception RU Uitvoeren, laatste debug geen runtime exception RN Uitvoeren, laatste debug wel een runtime exception R/ Uitvoeren, niet gecompileerd

Tabel 2.3: Verschillende staten uit het PSM: Programming State Model.

We zien hier duidelijk dat er niet vaak de effectieve programmeerdata wordt ge- bruikt om de slaagkansen van studenten te voorspellen. Ook wordt er niet altijd getest of de voorspelling over meerdere jaren heen nuttig is. Hoofdstuk 2. Educational Data Mining en Learning Analytics 14 2.3.2 Kennismodellering

Er zijn een aantal manieren om de kennis en het kennisverwervingsproces te gaan voorstellen. E´endaarvan is kennistracering (Corbett & Anderson, 1994). Hierbij worden stu- denten en hun kennis voorgesteld in een Hidden Markov Model als latente va- riabele die kan geschat worden door het observeren van de student op de mo- menten dat ze hun vaardigheid moeten tonen. Deze soort analyse is geinspireerd door the power law of practice, de machtsrelatie tussen oefenen en de hoeveelheid fouten die studenten maken (Newell & Rosenbloom, 1981). Door dit leercurve- model kunnen verborgen of latente kenniscomponenten worden ontdekt, indien complexe vaardigheden voldoende worden opgesplitst in kleinere subvaardighe- den (Corbett & Anderson, 1994). Dit model heeft enkele beperkingen: de ken- nis van een student wordt gemodelleerd door binaire variabelen, waarbij ze enkel meten of de vaardigheid behaald is of niet. Er zijn enkele uitbreidingen waar ook niet-vaardigheidsparameters deel uitmaken van het model zoals geindividua- liseerde bayesiaanse kennistracerings modellen (Yudelson, Koedinger & Gordon, 2013) waarbij ook student-specifieke parameters worden gebruikt, of waarbij re- kening gehouden wordt met slip en guess parameters die de probabiliteit dat een student per ongeluk een fout antwoord geeft of het juiste antwoord gokt voorstellen (d Baker, Corbett & Aleven, 2008). Een andere vaak gebruikte manier om kennis te modelleren is Item Response The- ory (IRT) Hambleton, Swaminathan en Rogers, 1991. Hier wordt de vaardigheid van een student ook voorgesteld als een latente variabele die te meten is door de antwoorden van studenten op testen te observeren. Het differenti¨eert zich van sim- pelere modellen door een test te laten bestaan uit verschillende onderdelen (items) met een vari¨erende moeilijkheidsgraad. Ieder item heeft zijn eigen item charac- teristic curve, die de relatie tussen de kennis van een student en de score op een testonderdeel beschrijft. Deze twee methodes zijn reeds op ´e´enof andere manier ingezet in programmeer- onderwijs. Kasurinen en Nikula (2009) gebruiken bayesiaanse kennistracering om de pro- grammeerkennis van studenten in te schatten. Ze gebruikten 12 van de 41 pro- grammeeroefeningen die 133 studenten oplosten. Voor deze oefeningen werd een voorbeeldoplossing opgesteld, gebaseerd op 5 principes, die vergeleken werden met de oplossingen van de studenten. Er werd ook gebruik gemaakt van slip en guess parameters en individuele parameters die de voorkennis van de student modelle- Hoofdstuk 2. Educational Data Mining en Learning Analytics 15 ren. Hieruit bleek dat studenten vaak complexe programmeerstructuren niet goed genoeg begrepen en te weinig toepasten. Rivers, Harpstead en Koedinger (2016) gebruikten ook een variant op kennistra- cering, leercurveanalyse, om uit te zoeken welke concepten het moeilijkst zijn voor studenten. Om deze analyse uit te kunnen voeren, is het noodzakelijk om kennis- componenten te defini¨eren. Hiervoor gebruiken ze de verschillende soorten nodes die te vinden zijn in Abstract Syntax Tree’s (AST’s). Een AST stelt een pro- gramma in een abstracte boomstructuur voor, waar de syntax van het programma niet meer van belang is. Om te toetsen of studenten wel degelijk de kenniscompo- nenten op de juiste manier toepassen worden de studentenoplossingen vergeleken met voorbeeldoplossingen. Voor een aantal kenniscomponenten lijkt dit succesvol te werken en lijken studenten effectief te leren. Op veel andere leercurves was het vaak moeilijk om effectief leren aan te tonen, wat betekent dat studenten consis- tent evenveel fouten blijven maken of er geen dalende lijn in het foutpercentage kan gevonden worden. E´envan de problemen hier kan het modelleren van kenniscom- ponenten zijn: soms worden dezelfde AST nodes gebruikt voor semantisch andere operaties of stellen meerdere AST nodes eigenlijk slechts 1 semantische operatie voor. Berges en Hubwieser (2015) gebruiken Item Response Theory om programmeerop- lossingen te beoordelen. Ze gebruiken 17 verschillende concepten die ge¨extraheerd worden uit de oplossingen van de studenten. Uiteindelijk werden 5 van deze con- cepten gebruikt in het model. Deze concepten werden gerangschikt op basis van moeilijkheid, wat juist leek te verlopen. Het is echter moeilijk om te weten of deze items wel degelijk de programmeervaardigheden van studenten modelleren. Het is duidelijk dat het nodig is om een lijst van verschillende programmeercon- cepten te hebben en een manier om deze te extraheren uit de studentendata. Een aantal andere studies vermelden ook een lijst programmeerconcepten. In (Sanders & Thomas, 2007) wordt een checklist opgesteld die een reeks concep- ten belangrijk in objectgeori¨enteerde programmeertalen beschrijft, samen met een lijst van mogelijke foute veronderstellingen die een student kan hebben over deze concepten. In (Milne & Rowe, 2002) wordt een enquˆeteafgenomen bij studenten na het vol- tooien van hun tweede of derde programmeercursus. Ze worden gevraagd om programmeerconcepten en hoe vaardig ze dachten te zijn met deze concepten. De concepten die deze enquˆetebevat zijn een aantal C/C++ specifieke concepten, naast een aantal minder specifieke programmeerconcepten. Hoofdstuk 2. Educational Data Mining en Learning Analytics 16

Dit is gelijkaardig aan (Lahtinen, Ala-Mutka & J¨arvinen, 2005). Daar werd ook aan studenten gevraagd om een enquˆetein te vullen. Een deel hiervan bevat een reeks high-level programmeerconcepten. Het probleem met deze lijsten concepten is dat ze ofwel te specifiek zijn (specifiek gericht op objectge¨orienteerde concepten of C/C++ specifieke concepten) of juist niet gedetailleerd genoeg, waardoor ze in ons geval niet echt bruikbaar zijn. Hoofdstuk 3

Dodona en data in Dodona

3.1 Dodona

Dodona is een online leerplatform ontwikkeld aan de Universiteit Gent dat studen- ten in staat stelt om al oefenend te leren programmeren. Bij het oplossen van deze oefeningen krijgen studenten automatisch feedback op de correctheid, snelheid en programmeerstijl. Studenten kunnen intekenen op cursussen. Deze cursussen zijn onderverdeeld in verschillende reeksen. Iedere reeks bevat een aantal oefeningen en eventueel een deadline die aangeeft op welk moment alle oefeningen van die reeks opgelost moeten zijn. Een voorbeeld van hoe een reeks oefeningen eruit ziet in Dodona is te zien in Figuur 3.1. Wanneer een student bezig is met een oefening op te lossen kan hij oplossingen indienen. Elke ingediende oplossing wordt dan automatisch verbeterd aan de hand van een reeks testgevallen. De feedback die hieruit komt, wordt aan de student getoond, die op basis van deze feedback verbeteringen kan aanbrengen in zijn oplossing. De student kan meerdere keren per oefening indienen, en krijgt telkens opnieuw feedback. Dit zorgt ervoor dat een incrementeel proces mogelijk is: indien een student voor een oefening meerdere functies moet schrijven, kunnen deze ´e´en voor ´e´engeschreven en getest worden. Een voorbeeld van hoe deze feedback eruit ziet kan worden gevonden in Figuur 3.2. Studenten zijn ook niet gebonden aan de oefeningen van ´e´enenkel vak: indien de lesgever van de cursus de oefeningen heeft opengesteld, kunnen leerlingen van andere vakken deze ook proberen oplossen en zo vrij verder oefenen.

17 Hoofdstuk 3. Dodona en data in Dodona 18

Figuur 3.1: Weergave van een oefeningenreeks in Dodona, waarop zowel de voortgang van de gebruiker als van de groep gebruikers in de cursus wordt weergege- ven

Dodona wordt ingezet in een groot aantal vakken aan de UGent, voor formatief en summatief toetsen. Formatief toetsen is deel is van het leerproces van de student, zoals een oefeningensessie. Het doel van dit soort toetsen is niet nagaan hoe goed een student de stof beheerst, maar voornamelijk feedback geven over hoe een student zichzelf kan verbeteren. Summatief toetsen daarentegen betekent wel dat de kennis van de student wordt getest, zoals een traditioneel examen. Dodona wordt dus, naast de oefeningensessies, ook voor een aantal van deze vak- ken gebruikt bij tussentijdse evaluaties en examens. Dit is natuurlijk enkel van toepassing voor de vakken waarvan het examen, of een deel van het examen, een oefeningencomponent bevat. Ook worden de oefeningen vaak nog handmatig na- gekeken: Dodona geeft geen score op oefeningen maar zegt enkel of de testgevallen correct waren. Ook is het niet mogelijk om automatisch te ontdekken of de juiste programmeerconcepten aangewend zijn voor een bepaalde oefening. Om deze re- denen is de manuele verbetering zeker nog nodig. Initieel werd het platform gebruikt voor slechts een beperkt aantal vakken binnen de UGent. Tegenwoordig zijn er reeds een tiental verschillende scholen (zowel hoger als secundair onderwijs) die de leeromgeving gebruiken om studenten te leren programmeren. Hoofdstuk 3. Dodona en data in Dodona 19

Figuur 3.2: Weergave van feedback in Dodona, waarbij studenten te zien krijgen aan welke testen de code werd onderworpen, en wat het resultaat is van deze testen.

3.2 Data uit Dodona

Een cursus in Dodona is gelinkt aan een reeks gebruikers en reeksen. Een reeks bevat een aantal oefeningen en heeft een naam en eventueel een deadline. Een oefening is gelinkt aan een bepaalde programmeertaal en heeft een reeks ingediende oplossingen en mogelijke labels. Een gebruiker kan zoveel keer als hij wil indienen per oefening. Een ingediende oplossing is gelinkt aan een oefening en een gebruiker. Een ingediende oplossing heeft ook een bepaalde status, een aanmaaktijdstip en code. Een overzicht over hoe een cursus in elkaar zit, is te vinden in Figuur 3.3. De verschillende statussen die een oefening kan aannemen zijn te vinden in Tabel 3.1. Deze status geeft aan hoe de ingediende oplossing van de student is beoordeeld. Een aantal van de statussen die een ingediende oplossing kan aannemen wijst op een interne status of een interne fout. Andere statussen, zoals wrong, runtime error en compilation error geven aan dat de ingediende oplossing van de student niet correct is. Statussen zoals time limit exceeded en memory limit exceeded wijzen op een ingediende oplossing die niet binnen de gegeven tijds- of geheugenlimieten kan worden uitgevoerd. Hoofdstuk 3. Dodona en data in Dodona 20

Figuur 3.3: Schematisch overzicht van een cursus in Dodona

Door alle ingediende oplossingen binnen een cursus te beschouwen, samen met de reeksen en oefeningen waaruit een cursus bestaat, kunnen we achterhalen hoe elke student werkt binnen de cursus. Om technische redenen werden de oefeningen die een student maakt buiten de cursus buiten beschouwing gelaten voor deze masterproef. Hierdoor weten we dus ook niet welke extra oefeningen een student mogelijks maakte. Hoofdstuk 3. Dodona en data in Dodona 21

Status Betekenis Correct Alle testresultaten slagen. Wrong Niet alle testresultaten slagen. De ingediende oplossing neemt te veel tijd in beslag Time limit exceeded om alle testen uit te voeren. Running De ingediende oplossing wordt getest. Queued De ingediende oplossing wordt straks getest. Runtime error Er trad een fout op tijdens de uitvoering. Compilation error Er trad een fout op tijdens de compilatie. De ingediende oplossing neemt te veel geheugen in beslag Memory limit exceeded om alle testen uit te voeren. Internal error Er trad een interne fout op.

Tabel 3.1: Alle mogelijke statussen die een ingediende oplossing kan hebben. Hoofdstuk 4

Machine Learning

Machine Learning is een verzameling van methodes die computers gebruiken om voorspellingen te maken en te verbeteren gebaseerd op data (Molnar e.a., 2018). De duidelijkste onderverdeling die gemaakt kan worden is die tussen supervised en unsupervised methodes. We beschouwen verder enkel supervised methodes. Supergeviseerde methodes kunnen precies kijken of de voorspelling die ze voor een bepaald datapunt maken klopt. Dit gebruiken we hier, aangezien we telkens beschikken over labels bij de data die aangeven bij welke klasse het datapunt hoort. Binnen het gesuperviseerd leren kunnen we ook nog een onderscheid maken tussen regressie en classificatie. Regressie probeert de relatie tussen verschillende vari- abelen te modelleren. De uitkomst van de regressie is dan een continue waarde. Classificatie daarentegen probeert het datapunt toe te wijzen aan ´e´envan meerdere discrete klassen. Toegepast op het voorspellen van de slaagkansen van een student, zouden we met regressie het precieze punt die de student behaalt in het vak kunnen proberen achterhalen. Met classificatie moeten we deze continue range van 0 tot 20 opdelen in discrete klassen. In dit specifieke geval kiezen we ervoor om de punten op te delen in geslaagd en gefaald. Binnen de context van deze masterproef werken we dus telkens met classificatie.

22 Hoofdstuk 4. Machine Learning 23 4.1 Interpreteerbaarheid

Interpreteerbaarheid is belangrijk in een machine learning model. Indien een model niet interpreteerbaar is moeten we vertrouwen dat het model de juiste beslissing heeft gemaakt, zonder dat we weten waarom het die beslissing heeft gemaakt (Molnar e.a., 2018). Om die reden is het niet enkel belangrijk dat een model juist voorspelt, maar dat het dit ook om de juiste redenen doet. Het is niet voor elk probleem nuttig om inzicht te hebben in de redenen voor de beslissingen van een machine learning model. In dit geval vinden we van wel: we werken met voorspellingen over de voortgang van studenten, dus kan het nuttig zijn om te weten welke gedragingen een grote invloed hebben op de slaagkans. Hierdoor kunnen we achteraf ook zien aan welke gedragingen het model waarde heeft gehecht om bepaalde beslissingen te maken. Het is een moeilijk probleem om op basis van die belangrijke features feedback te geven naar de studenten toe, aangezien we hopen dat ze aan de ene kant zeer duidelijk zijn (meer oefenen leidt tot betere slaagkans) maar aan de andere kant kunnen we ze ook niet zomaar aan de student tonen omdat studenten dan het model kunnen manipuleren waardoor er een foute predictie kan worden gegeven. Een voorbeeld hiervan: een student krijgt de feedback om meer in te dienen om zijn slaagkans te verhogen. De student blijft gewoon lege oplossingen indienen. Het machine learning model kan besluiten dat de student beter bezig is, terwijl de student eigenlijk niets bijleert. We bekijken in dit hoofdstuk enkel interpreteerbare machine learning modellen.

4.2 Random Forest

Een Random Forest is een ensemblemethode die bestaat uit meerdere beslissings- bomen (Quinlan, 1986). De resultaten van de individuele beslissingsbomen worden geaggregeerd. Een beslissingsboom is een zeer interpreteerbare machine learning methode. Deze wordt als volgt opgesteld: de dataset wordt keer op keer gesplitst, gebaseerd op een afkapwaarde voor een bepaalde feature van de dataset. Door deze splitsing worden weer twee nieuwe datasets gecre¨eerd, waar hetzelfde proces zich herhaalt. Dit proces stopt tot er slechts 1 element meer in de dataset zit, of tot een bepaald Hoofdstuk 4. Machine Learning 24

Tennis 12 Geen tennis 5

Weer

Regen Zonnig Bewolkt

Tennis 5 Tennis 4 Tennis 3 Geen tennis 3 Geen tennis 0 Geen tennis 2

Luchtvochtigheid Wind

> 70 Nee Ja <= 70

Tennis 5 Tennis 0 Tennis 0 Tennis 3 Geen tennis 0 Geen tennis 3 Geen tennis 2 Geen tennis 0

Figuur 4.1: Een voorbeeld van een beslissingsboom die probeert te voorspellen of er getennist zal worden op een bepaald tijdsdip aan de hand van data over het weer op dat tijdstip. stopcriterium is bereikt. Een voorbeeld van een beslissingsboom kan gevonden worden in Figuur 4.1. De plaats van de splitsing wordt vaak bepaald door Gini index of information gain. We gebruiken hier enkel de Gini index, aangezien beide waardes zeer gelijkaardig zijn en de Gini index sneller berekend kan worden. De Gini index of de Gini impurity meet de kans dat we een willekeurig punt van de dataset incorrect voorspellen indien we het willekeurig classificeren volgens de distributie van klassen in de dataset. Dit betekent dus dat een volledig pure subset (met een Gini impurity van 0) alleen bestaat uit de elementen met dezelfde juiste categorie. De formule om de Gini impurity te berekenen, met C alle mogelijke klassen en p(i) de kans om een punt van de dataset met klasse i te kiezen:

C X G = p(i) × (1 − p(i)) (4.1) i=1

Specifiek gaan we op zoek naar de splitsing in het model waarbij de originele Gini index verminderd met de Gini index na de splitsing het hoogst is. Hoe hoger, hoe Hoofdstuk 4. Machine Learning 25 beter de splitsing en hoe homogener de gesplitste delen zijn. De Gini index na de splitsing wordt als volgt berekend: we berekenen de Gini index van beide afgesplitste delen en vermenigvuldigen dit met het percentage da- tapunten die in dit afgesplitste deel zit. Daarna nemen we de som van beide. Stopcriteria hebben vaak te maken met de maximum diepte van de boom, een maximum aantal bladeren of een minimum aan elementen voor een node wordt gesplitst. Een random forest is een collectie van beslissingsbomen die bagging, ofwel bootstrap aggregating zullen gebruiken (Breiman, 1996), (Breiman, 2001). Telkens wordt een willekeurig sample gekozen (met teruglegging) uit de volledige dataset en wordt een boom gefit op dit sample. Indien we dan een bepaald punt willen classifice- ren, laten we dit punt door alle beslissingsbomen lopen en kiezen we die klasse waarvan de meeste beslissingsbomen zeggen dat het punt tot die klasse behoort. Een beslissingsboom in een Random Forest zal ook niet op elke splitsing alle fea- tures beschouwen om zo de meest optimale splitsing te kiezen, maar slechts een willekeurige subset van de features. Random Forests werken goed omdat ze overfitting en een te hoge variantie van ´e´en enkele beslissingsboom tegengaan. We maken telkens gebruik van de sklearn.ensemble.RandomForestClassifier uit de scikit-learn module in Python.

4.3 Logistic Regression

Bij regressie wordt de relatie van een afhankelijke variabele tot een groep onaf- hankelijke variabelen bekeken. De afhankelijke variabele is diegene waarvan we willen weten hoe die afhangt van de onafhankelijke variabelen (Hosmer Jr, Leme- show & Sturdivant, 2013) en hoe die verandert als de onafhankelijke variabelen veranderen. Deze onafhankelijke variabelen stellen de feature inputs voor. De meest simpele regressie is lineaire regressie: de afhankelijke variabele wordt voorspeld als een gewogen som van de onafhankelijke variabelen (Molnar e.a., 2018). Deze relatie is als volgt:

y = β0 + β1x1 + ... + βpxp +  (4.2) Hoofdstuk 4. Machine Learning 26

Hierbij stellen de betas (βi) de getrainde gewichten die bij de featurewaardes (xi) horen. β0 is het snijpunt met de y-as en wordt niet vermenigvuldigd met een feature. Deze term stelt de voorspelling voor indien alle features waarde 0 hebben. De interpretatie van deze term is meestal niet relevant.  stelt de foutterm voor, dus het verschil tussen de voorspelling en het uiteindelijke resultaat. Er zijn veel methodes om de optimale β’s te bepalen, maar hier gaan we verder niet op in. Lineaire regressie is omwille van zijn lineariteit zeer interessant. De gewichten die bij de verschillende features horen zijn gemakkelijk interpreteerbaar: hoe hoger het gewicht, hoe belangrijker de feature is. Om interpreteerbaarheid te behou- den is het noodzakelijk dat de featurewaardes genormaliseerd zijn: anders is het gewicht dat bij de feature hoort afhankelijk van de grootte van de featurewaarde en is een interpretatie gebaseerd op enkel het gewicht van de feature niet meer mogelijk. Lineaire regressie is handig voor regressie maar niet voor classificatie aangezien een lineair model nooit kansen zal produceren. Lineaire regressie zal een hypervlak tussen de verschillende punten proberen te vinden die de afstand tussen de punten en het hypervlak minimaliseert. Het is niet mogelijk om een treshold waarde te vinden die bij het toevoegen van datapunten consistent de ene van de andere klasse blijft scheiden. Logistische regression zal de logistische functie toepassen op een lineaire vergelij- king met waardes tussen 0 en 1. Deze logistische functie ziet er als volgt uit:

L f(x) = (4.3) 1 + e−x We kunnen gemakkelijk de lineaire relatie uit lineaire regressie hierin invullen:

1 P (y = 1) = (4.4) 1 + exp (−(β0 + β1x1 + ... + βpxp))

Door deze functie toe te passen kunnen we het resultaat beschouwen als de kans dat het specifieke punt behoort tot een bepaalde klasse. We kunnen dan ook een cut-off punt beschouwen: indien de probabiliteit kleiner is dan 0.5, behoort het punt tot de ene klasse en vice versa. Door het toepassen van deze logistische functie be¨ınvloeden de gewichten de uit- komst van de functie niet meer lineair, waardoor we een extra transformatie moeten Hoofdstuk 4. Machine Learning 27 toepassen voor we deze gewichten kunnen gebruiken (Molnar e.a., 2018). Eigenlijk willen we weten wat het effect van het aanpassen van de waarde van ´e´enfeature heeft op de uitkomst. We herschrijven de formule en bekomen het volgende:

 P (y = 1)  log = β + β x + ... + β x (4.5) 1 − P (y = 1) 0 1 1 p p

P (y=1) De term 1−P (y=1) noemen we de odds. De interpretatie van deze odds gaat als volgt: als we odds van 2 hebben, betekent dat P (y = 1) dubbel zo groot dan P (y = 0) is. We kijken naar de verhouding tussen de originele voorspelling en de voorspelling waarbij we de waarde van ´e´envan de features met 1 verhogen.

odds exp(β + β x + ... + β (x + 1) + ... + β x ) xj +1 = 0 1 1 j j p p (4.6) odds exp(β0 + β1x1 + ... + βjxj + ... + βpxp)

exp(a) Door het toepassen van exp(b) = exp(a − b) bekomen we na vereenvoudiging:

odds xj +1 = exp(β ) (4.7) odds j

We kunnen dit als volgt interpreteren: indien we de waarde van feature xj met 1 eenheid verhogen, veranderen de odds met een factor exp(βj). We gebruiken sklearn.linear model.LogisticRegression uit de scikit-learn module in Python.

4.4 Support Vector Machine

Een support vector machine is een classifier die een scheidend hypervlak constru- eert tussen de gegeven trainingspunten. Deze trainingspunten moeten tot 1 van 2 klassen horen. De SVM zal dit vlak zo construeren dat de marge tussen punten van een verschillende klassen zo groot mogelijk is, zodat het hypervlak de klas- sen optimaal scheidt (Suykens & Vandewalle, 1999). Dit leidt intu¨ıtief tot een betere generaliseerbaarheid van het model. Een voorbeeld van een SVM in een tweedimensionaal probleem is te vinden in Figuur 4.2. Hoofdstuk 4. Machine Learning 28 We willen niet altijd dat beide klassen perfect gescheiden worden: het is mogelijk dat outliers dit moeilijk of onwenselijk maken. Om deze reden is een extra pa- rameter nodig die het model toelaat om een niet-scheidend vlak te construeren. Deze parameter bepaalt de grootte van de strafterm als een aantal punten fout geclassificeerd zijn maar de marge tussen de dichtste punten langs het hypervlak groter is.

Optimaal scheidend hypervlak

niet-optimaal hypervlak

Max marge

Figuur 4.2: Voorbeeld van een SVM.

We gebruiken altijd een lineaire SVM aangezien er enkel voor een lineaire SVM gemakkelijk een nuttige interpretatie kan gegeven worden aan de gewichten die bij de features horen. Deze interpretatie is vrij eenvoudig, hoe groter de co¨effici¨ent die bij een feature hoort, hoe belangrijker die feature is in de classificatie van punten (Chang & Lin, 2008). Het teken van de co¨effici¨ent toont aan tot welke klasse die feature bijdraagt. We gebruiken de sklearn implementatie: sklearn.svm.SVC uit de scikit-learn mo- Hoofdstuk 4. Machine Learning 29 dule in Python.

4.5 Stochastic Gradient Descent

Deze methode is een generieke lineaire classifier die stochastic gradient descent zal gebruiken om de doelfunctie te minimaliseren. Dit is een zeer algemene methode die geregulariseerde lineaire modellen kan oplossen door gebruik te maken van die stochastic gradient descent methode (Zhang, 2004). Geregulariseerde lineaire modellen zijn een uitbreiding op lineaire regressie, waarbij het niet noodzakelijk is dat de voorspelling een Gaussische verdeling volgt. We linken het verwachte gemiddelde en de gewogen som van de features met een mogelijks niet-lineaire functie. We kunnen verschillende soorten loss functies defini¨eren. Afhankelijk van deze functie is het mogelijk dat deze overeenkomt met een andere lineair classificatie- model. Bijvoorbeeld, de loss functie hinge zal een lineaire SVM cre¨eren, de loss functie log zal dan weer logistische regressie geven. We kunnen ook een regularisatiefactor toevoegen om ervoor te zorgen dat het model beter zal generaliseren en niet zal overfitten op de trainingsdata. We werken opnieuw met een lineair model, maar we moeten wel oppassen dat de functie die we toepassen om het verwachte gemiddelde en de gewogen som van de features te linken aan elkaar lineair is. Indien dat niet het geval is, is de interpretatie wat moeilijker. Opnieuw gebruiken we verder de sklearn implementatie hiervan: sklearn. linear model.SGDClassifier.

4.6 K-fold Cross validation

Dit is een methode die vaak gebruikt wordt om te meten hoe goed een bepaald model zal generaliseren. Op deze manier kunnen we de kans op overfitting op de trainingsdata verminderen. Dit houdt in dat het model minder de ruis in de dataset zal modelleren en meer de generiekere karakteristieken van de data. De meest simpele vorm gaat als volgt: we splitsen de dataset op in K delen van ge- lijke grootte. Het is belangrijk dat deze splitsing proportioneel gebeurt: we willen Hoofdstuk 4. Machine Learning 30 een even groot percentage van iedere klasse in ieder van de K delen. We combine- ren steeds K-1 delen, die zullen dienst doen als de trainingsset. Het overgebleven deel wordt dan de validatieset. Op deze manier bekomen we dus K verschillende paren training- en validatieset (Alpaydin, 2009). Wanneer we het model laten lopen over deze K verschillende paren, kunnen we het gemiddelde nemen van deze K verschillende resultaten om ´e´enrepresentatiever resultaat te bekomen.

4.7 Performantiemetrieken

Accuraatheid is niet altijd een ideale score om te meten of een binaire classifier goed presteert. Indien we te maken hebben met een ongebalanceerde dataset waar beduidend meer datapunten tot ´e´enbepaalde klasse behoren presteert de accuraatheid niet altijd ideaal indien we net elementen die tot de andere klasse behoren willen herkennen. Bovendien willen we ook een groter belang hechten aan het herkennen van falende studenten dan aan het herkennen van slagende studenten, wat niet zichtbaar is indien we enkel de accuraatheid gebruiken. Om deze redenen gebruiken we een aantal andere metrieken.

Gebalanceerde accuraatheid

Ten eerste beschouwen we de gebalanceerde accuraatheid: hierbij wordt het gemid- delde genomen van de accuraatheid per klasse. We krijgen dus het gemiddelde van de juist voorspelde falende studenten en de juist voorspelde geslaagde studenten. Dit is vooral nuttig bij ongebalanceerde datasets, maar kan ook gebruikt worden voor meer gebalanceerde datasets. Bij een perfect gebalanceerde dataset is deze score gelijk aan de gewoon accuraatheid.

Recall en Precision

We beschouwen ook de recall. Dit is de verhouding tussen de true positives en het totaal aantal elementen die effectief tot de positieve klasse behoren. De formule hiervoor is als volgt:

tp recall = (4.8) tp + fn Hoofdstuk 4. Machine Learning 31 Een gelijkaardige metriek is de precision. Dit is de verhoduing van de true positives op het totaal aantal positieve voorspelde elementen. De formule is als volgt:

tp precision = (4.9) tp + fp

Hier staat tp voor de true positives, fn voor de false negatives en fp voor de false positives. De true positives zijn de datapunten die werkelijk tot de positieve klasse behoren en waarvan ook wordt voorspeld dat ze tot die klasse behoren. De false negatives zijn de datapunten die ook tot de positieve klasse horen, maar waarvan voorspeld wordt dat ze tot de andere klasse behoren. De false positives zijn de datapunten die in werkelijkheid tot de negatieve klasse behoren maar waarvan we voorspellen dat ze tot de positieve klasse behoren. Een schematisch overzicht van deze zaken is te vinden in 4.1.

Effectieve waarde Positive Negative Positive True positive False positive Voorspelde waarde Negative False negative True negative

Tabel 4.1: Voorbeeld van een confusion matrix. Illustratie hoe true positives, false negatives, false positives en true negatives zich tot elkaar en de voorspelde en effectieve waardes verhouden.

F1-score

We beschouwen ook de f1-score. De f1-score is het harmonisch gemiddelde tussen de precision en recall. Deze worden als volgt berekend:

recall−1 + precision−1 −1 f = (4.10) 1 2

Deze metriek is voornamelijk nuttig om bij ongebalanceerde datasets een beter beeld van de performantie te geven dan enkel accuraatheid. Eigenlijk is het niet de ideale metriek voor de performantie van onze classifiers, aangezien de hoeveelheid slagende en falende studenten vrij gelijk is. Ook is het intu¨ıtief logisch om een hogere kost te hangen aan het fout classificeren van falende studenten dan het fout classificeren van slagende studenten, wat niet gebeurt bij de f1-score. Hoofdstuk 5

Voorspelling voortgang van studenten

Aangezien het Dodona platform reeds in gebruik is sinds 26 september 2016, be- schikken we reeds over een kleine drie jaar aan data. Die data omvat alle ingediende oplossingen die studenten doen binnen het platform. Een aantal vakken stapten al vanaf het begin mee in het Dodona platform, waaronder de vakken Programmeren, van de faculteit Wetenschappen en Informatica, van de faculteit Ingenieursweten- schappen en Architectuur. In beide vakken wordt er aan studenten de beginselen van programmeren geleerd, gebruik makende van Python 3. Het vak Program- meren wordt gegeven aan zeer veel richtingen aan de faculteit Wetenschappen, het vak Informatica wordt gegeven aan de eerstejaars Burgerlijk Ingenieur. Een overzicht van wat deze vakken precies inhouden is te vinden in Tabel 5.1. Een schematisch overzicht van het vak Programmeren is te vinden in Figuur 5.1. Tijdens de lesweken is er iedere week ofwel een oefeningenreeks die de studenten moeten oplossen, of een tussentijdse evaluatie. Elke tussentijdse evaluatiescore wordt vermenigvuldigd met het aantal correcte oefeningen uit de 5 voorgaande oefeningenreeksen. Dit punt wordt dan verrekend naar een score op 2, die de studenten reeds behalen op hun eindresultaat. Het examen levert dan de 16 overige punten. Een schematisch overzicht van het vak Informatica is te vinden in Figuur 5.2. Dit vak en de eindscoreberekening zitten iets moeilijker in elkaar. Per lesweek krijgen de studenten ongeveer 2 reeksen oefeningen. Deze oefeningen hebben geen verplichte deadline en het al dan niet maken van de oefeningen heeft geen directe invloed op de scores van studenten. De studenten krijgen een testscore T, het

32 Hoofdstuk 5. Voorspelling voortgang van studenten 33 Programmeren Informatica Lesgever Prof. Peter Dawyndt Prof. Bart Dhoedt Biologie, Chemie, Fysica, Geografie, Burgerlijk Opleidingen Geologie, Biochemie, Ingenieur Biotechnologie, Statistical Data Analysis Programmeertaal Python 3 Python 3 Aantal studenten / jaar 260 - 400 400+ Aantal ingediende oplossingen 130 000 - 200 000 480 000 / jaar Verplichte oefeningen Ja Nee

Tabel 5.1: In deze tabel worden een aantal kenmerken van de twee vakken waarmee we verder werken opgelijst. gewogen gemiddelde van de eerste en tweede evaluatie. Indien deze score meer dan 9 op 20 is, wordt deze vervangen door een score van 20. Het aantal onwettige afwezigheiden worden voorgesteld door A. Op het examen krijgen ze ook een score op 20 (E). Voor de eindscore, wordt gekeken naar het examenpunt. Indien dat minder dan 8 bedraagt, is de eindscore de examenscore min het aantal keren dat de student onwettig afwezig was op een evaluatie. Indien het examenpunt meer is, wordt het maximum van de twee andere scores genomen, waarbij de evaluatiescore voor een kwart of voor een tiende meetelt. Er is ook een verschil tussen beide vakken bij de beoordeling van de tussentijdse evaluaties. In het vak Programmeren worden de tussentijdse evaluaties handmatig verbeterd en wordt er ook belang gehecht aan de programmeerstijl, terwijl in het vak Informatica het enkel nodig is dat alle testen op dodona slagen om alle punten te krijgen voor die oefening. Om een antwoord te geven op de vraag of een student goed op weg is de vereiste programmeerkennis en -vaardigheden te verwerven, is het noodzakelijk dat de data die we daarvoor willen gebruiken iets zinnigs kan zeggen over de mate waarin een student de eindcompetenties van het vak beheerst. Om deze reden bekijken we of het gedrag van een student ons meer informatie kan geven over de voortgang van die student. Of meer nog, dat de gedragsdata van de student kan voorspellen of die student al dan niet slaagt. De data die we gebruiken om deze voorspelling te doen is alle data over de inge- Hoofdstuk 5. Voorspelling voortgang van studenten 34

Schematisch overzicht vak Programmeren aan faculteit wetenschappen

1 2 3 4 5 6 7 8 9 10 Eval 2 Eval 1 EXAMEN

Evaluatie Evaluatie % correct X % correct X score score

EVAL 1 EVAL 2

20 punten =

Figuur 5.1: Schematisch overzicht van het vak programmeren aan de Faculteit weten- schappen. diende oplossingen van een student in een cursus binnen Dodona, zijn resultaten op de tussentijdse evaluatie en zijn uiteindelijke resultaten. Hiervoor was het nodig om de student te koppelen aan de uiteindelijke resultaten die de student behaald heeft. Deze data komt niet expliciet uit Dodona, maar werd aangeleverd door de lesgevers.

5.1 Werkwijze

5.1.1 Berekenen van features

Achterhalen van deadlines

We extraheren verschillende features uit de gedragsdata. Aangezien we de voort- gang van de student over het semester heen in kaart willen brengen, is het noodza- kelijk om features op verschillende tijdstippen doorheen het semester te extraheren. Hoofdstuk 5. Voorspelling voortgang van studenten 35

Schematisch overzicht vak Informatica aan faculteit ingenieurswetenschappen en architectuur

1 2 3 4 5 6 7 8 9 10 11 12 Lesweken EXAMEN E

1 1 1 1 1 1 1 1 E 1 1 2 1 2 3 4 5 6 7 8 9 EVAL 1 0 1 2 3 4 5 6 7 V 8 9 0 Reeksen A x 0.4 x 0.6 L Test score T 2

Afwezigheid A

E - 2A E < 8

EINDSCORE 0.25T + 0.75E E >= 8 MAX - 2A 0.1T + 0.9E

Figuur 5.2: Schematisch overzicht van het vak informatica aan de Faculteit ingenieurs- wetenschappen en architectuur.

Aangezien we de data over meerdere jaren heen willen gebruiken, is het nodig om deze tijdstippen met elkaar te laten overeenkomen en deze tijdstippen logisch te kiezen. Indien het vak consistent over alle jaren heen over deadlines beschikt en de reeksen die bij deze deadlines horen hetzelfde zijn gebleven, kiezen we deze deadlines als tijdstippen in het semester om de voortgang van studenten weer te geven. Bij ´e´envan de vakken die we beschouwen, het vak Programmeren aan de faculteit Wetenschappen, was dit het geval. Het is nodig dat de verschillende reeksen over de jaren heen ongeveer hetzelfde blijven: zo leren de studenten iedere reeks hetzelfde en blijft de moeilijkheidsgraad per week gelijk. We willen ook dat het aantal oefeningen per reeks ongeveer gelijk blijft. Dit om de verschillen van jaar tot jaar zo veel mogelijk te beperken, wat ervoor kan zorgen dat we beter de voortgang van de student kunnen voorspellen. Hoofdstuk 5. Voorspelling voortgang van studenten 36 Het andere vak, Informatica aan de faculteit Ingenieurswetenschappen en Archi- tectuur, heeft helaas niet consistent voor 3 jaren deadlines. Bovendien zijn de deadlines nooit bindend: studenten verliezen geen punten indien ze niet op tijd oefeningen indienden. In dit geval moeten we op een intelligente manier proberen om vergelijkbare tijd- stippen in het semester te vinden. In het geval van het vak Informatica, beschikken we over 1.5 jaar aan deadlines. Van het jaar 2018-2019 hebben we alle deadlines van alle reeksen, van het jaar 2017-2018 is er gekozen om slechts voor een deel van de reeksen deadlines te voorzien en voor het eerste jaar, 2016-2017 is er geen enkele deadline voorzien. We hebben twee opties. De eerste optie houdt in om de tijdstippen gewoon wekelijks op een vaste dag te plaatsen. Aangezien het academiejaar over het algemeen heel gelijkaardig verloopt, lijkt dit een valide strategie. De tweede optie is te proberen achterhalen waar de deadlines zouden moeten staan. Om te zien of dit mogelijk was, maakten we een grafiek die alle ingediende oplossin- gen over het semester heen voorstelt. We vergelijken deze verschillende jaren met elkaar en bepalen dan de tijdstippen van de ontbrekende deadlines. Een overzicht van deze grafiek is te vinden in Figuren 5.3, 5.4 en 5.5. Een ingezoomde versie is te vinden in Figuur 5.6.

Figuur 5.3: Grafiek van het aantal ingediende oplossingen per 10 minuten, doorheen het hele semester van het academiejaar 2018-2019. Voor het vak Informa- tica aan de Faculteit Ingenieurswetenschappen en Architectuur.

Figuur 5.4: Grafiek van het aantal ingediende oplossingen per 10 minuten, doorheen het hele semester van het academiejaar 2017-2018. Voor het vak Informa- tica aan de Faculteit Ingenieurswetenschappen en Architectuur.

De verschillende pieken komen heel goed met elkaar overeen, waardoor we de ontbrekende deadlines manueel kunnen achterhalen. Als we dan ook de grafiek uitbreiden door de ingediende oplossingen per reeks op te splitsen en anders te kleuren, zien we dat deze reeks per reeks zeer goed overeenkomen. We besluiten dus dat we de nieuwe deadlines logisch hebben gekozen en we gebruiken ook verder deze deadlines als tijdstippen doorheen het semester. Hoofdstuk 5. Voorspelling voortgang van studenten 37

Figuur 5.5: Grafiek van het aantal ingediende oplossingen per 10 minuten, doorheen het hele semester van het academiejaar 2016-2017. Voor het vak Informa- tica aan de Faculteit Ingenieurswetenschappen en Architectuur.

Figuur 5.6: Deel van de grafiek van het aantal ingediende oplossingen per 10 minuten, doorheen het hele semester van het academiejaar 2016-2017. Voor het vak Informatica aan de Faculteit Ingenieurswetenschappen en Architectuur.

Feature extractie

We hebben nu een dataset met alle ingediende oplossingen van de student op een bepaald tijdstip en een aantal deadlines doorheen het semester. Voor het vak Programmeren zijn dit 10 verschillende deadlines, voor het vak Informatica zijn dit er 20. We beschrijven het proces voor het vak Programmeren, maar dit proces is volledig analoog voor het vak Informatica. We beginnen met uit de originele dataset 10 kleinere datasets te halen, die telkens enkel de ingediende oplossingen tot ´e´envan de deadlines bevat. Subdataset 1 bevat dus alle ingediende oplossingen van alle studenten die ingediend zijn v´o´ordeadline 1. Voor elk van deze subdatasets extraheren we dan een aantal features. Dit gaat als volgt: voor elke reeks in de subdataset wordt elke extraheermethode opgeroe- pen. Deze methode zal dan voor die reeks de desbetreffende waarde geven. Er zijn 17 verschillende extraheermethodes. Voor elke subdataset wordt elke student overlopen. Iedere student heeft 10 reeksen met elk 6 oefeningen waarvoor hij/zij mogelijks oplossingen kan ingediend hebben. De extraheermethode wordt voor elk van die reeksen opgeroepen. Zo bekomen we dus 10 verschillende waarden voor deze extraheermethode per dataset per student. We houden ook het gemiddelde van deze 10 waardes bij. Voor elke methode bekomen we dus 11 waardes, zo- dat we per student een featurevector van 187 waardes bekomen. Een schematisch Hoofdstuk 5. Voorspelling voortgang van studenten 38 overzicht van de feature-extractie voor ´e´envak is te vinden in 5.7.

Alle ingediende oplossingen Alle ingediende oplossingen Alle data voor tijdstip 1 voor tijdstip j

Student 1 Reeks 1 Student 1 Reeks 1 Student 1 Reeks 1

Reeks 2 Reeks 2 Reeks 2

......

Reeks k Reeks k Reeks k

......

Student p Reeks 1 Student p Reeks 1 Student p Reeks 1

Reeks 2 Reeks 2 Reeks 2

......

Reeks k Reeks k Reeks k

Student 1 7,4,78,0.66,23,0,0,88,... 2,5,88,0.26,0.1,0,3,55,...

Student 2 19,3,8,0.41,0.89,0,0,... 93,7,1.15,41,0.89,0,7,...

...

Student p-1 0.9,2,0,1.33,77,3,9.9,... 5.7,3,0,4.67,22,8,9.9,...

Student p 4.5,86,94.6,23,6,0,32,... 2.5,38,56.6,2,7.1,8,32,...

Featurevectoren

Formaat featurevector

ft1 reeks1 ft1 reeks2 ft1 reeks3 ... ft2 reeks1 ft2 reeks2 ...

Figuur 5.7: Schematisch overzicht van de feature-extractie.

Een overzicht van deze 17 verschillende extraheermethodes is te vinden in Tabel 5.2. Deze extraheermethodes zijn op een intelligente manier geselecteerd door rekening te houden met vermoedens van de lesgevers van beide vakken. Aangezien enkel het vak Programmeren strikte deadlines hanteert gebruiken we een variatie op deze lijst features voor het vak Informatica, die geen strikte deadlines gebruikt. We laten speciek de methodes first dl, last dl en nr dl vallen, aangezien deze Hoofdstuk 5. Voorspelling voortgang van studenten 39 gebruikt worden om mogelijks plagiaat door deadlinedruk te ontdekken. We gebruiken dus verschillende extraheermethodes bij de vakken met strikte dead- line en de vakken met zachte deadlines. Bij vakken met zachte deadlines gebruiken we deze 3 deadline-sepcifieke methodes niet. We vragen ons af wat de invloed is op het resultaat indien we voor het vak met strikte deadlines ook deze drie methodes laten vallen. We voegen ook nog de evaluatiepunten van iedere student bij de respectievelijke featurevector. We doen dit enkel voor de tijdstippen waarvoor deze punten reeds bekend zijn. Dit houdt in dat, indien de evaluatie tussen reeks 5 en 6 valt we een reeks featurevectors hebben voor het tijdstip van reeks 5 zonder evaluatiepunten, een reeks featurevectors voor het tijdstip van reeks 6 met evaluatiepunten. De reeksen featurevectors van volgende tijdstippen bevatten telkens wel de evaluatie- punten. Tot slot bekijken we ook nog de eindscore van de studenten. Indien die 10 of hoger is, voegen we een 1 toe, anders een 0. Zo bekomen we de uiteindelijke featurevector per student.

5.1.2 Modellen trainen

We willen weten welk interpreteerbaar machine learning model het best is om tijdens het semester de voortgang van de student in de cursus te voorspellen. Hier zijn een paar verschillende aspecten belangrijk: 1. Interpreteerbaarheid: zijn de belangrijke features die die we verwachten? Zijn de belangrijke features logisch? 2. Voortgangsvoorspelling: welk machine learning model presteert het best? 3. Vroegtijdig: kan dit reeds vroeg in het semester? We gebruiken de 4 machine learning modellen beschreven in hoofdstuk 4. Voor elk van deze methodes en voor elk vak gaan we analoog te werk. We voeren deze procedure ook telkens voor iedere subdataset uit, aangezien we op deze tijdstippen ook willen voorspellen of studenten zullen slagen of falen voor het vak. Er zijn een aantal verschillende trainset/testset configuraties die we kunnen ge- bruiken. Alle configuraties met testset 2018-2019 zijn opgelijst in Tabel 5.3 als voorbeeld. In ´e´engeval combineren we dus de dataset uit 2016-2017 en 2017- 2018. Ieder gebruikt model heeft een aantal parameters die geoptimaliseerd kunnen wor- den voor dit specifieke model. Om dit te doen gebruiken we specifie sklearn. Hoofdstuk 5. Voorspelling voortgang van studenten 40 Afkorting Uitleg subm Totaal aantal ingediende oplossingen nosubm Totaal aantal oefeningen waar geen ingediende oplossingen aan gekoppeld zijn first dl Verschil tussen de deadline en de tijd van de eerste inge- diende oplossing, in seconden last dl Verschil tussen de deadline en de tijd van de laatste inge- diende oplossing voor de deadline, in seconden nr dl Totaal aantal correcte ingediende oplossinge voor de dead- line correct Totaal aantal correcte ingediende oplossinge n after correct Totaal aantal ingediende oplossingen na de eerste correcte ingediende oplossing, som over oefeningen van een reeks heen before correct Totaal aantal ingediende oplossingen voor de eerste correcte ingediende oplossing, som over oefeningen van een reeks heen time series Verschil tussen de tijd van de laatste ingediende oplossing en de eerste ingediende oplossing van een reeks time correct Verschil tussen de tijd van de eerste correcte ingediende op- lossing en de eerste ingediende oplossing wrong Aantal foute ingediende oplossingen comp error Aantal ingediende oplossingen met status compiler error runtime error Aantal ingediende oplossingen met de status runtime error correct after 2h Aantal oefeningen waarvoor geldt dat de eerste correcte in- gediende oplossing minder dan 2 uur na de eerste ingediende oplossing gebeurt correct after 24h Aantal oefeningen waarvoor geldt dat de eerste correcte in- gediende oplossing minder dan 24 uur na de eerste inge- diende oplossing gebeurt correct after 5m Aantal oefeningen waarvoor geldt dat de eerste correcte in- gediende oplossing minder dan 5 min na de eerste ingediende oplossing gebeurt correct after 15m Aantal oefeningen waarvoor geldt dat de eerste correcte in- gediende oplossing minder dan 15 min na de eerste inge- diende oplossing gebeurt

Tabel 5.2: Overzicht en uitleg over alle ge¨extraheerde features. Hoofdstuk 5. Voorspelling voortgang van studenten 41 Train dataset Test dataset 2016-2017 2018-2019 2017-2018 2018-2019 2018-2019 2018-2019 2016-2017 & 2017-2018 2018-2019

Tabel 5.3: Voorbeeld van alle train/test configuraties mogelijk voor het testjaar 2018- 2019 model selection.GridSearchCV. Dit houdt in dat we simpelweg een hoop mo- gelijke opties voor de modellen uitproberen. We testen die, gebruik makend van crossvalidatie om overfitting tegen te gaan, en kiezen de beste opties. We gebruiken voor deze stap enkel trainingsdata, we houden de testdata apart. Wanneer we de beste waardes voor deze parameters berekend hebben, trainen we het model op alle trainingsdata en testen we het op alle testdata. Indien de trainingsset en de testset data uit hetzelfde jaar is gebruiken we 5- voudige crossvalidatie. Dit houdt in dat we de data in 5 gelijke delen splitsen. We behouden ook het percentage data die tot elke klasse behoudt in elk deel. Daarna trainen we telkens de data op 4 van deze 5 delen en testen we op het overgebleven deel. Dit herhalen we tot ieder deel als testset gebruikt is geweest. Daarna voegen we de resultaten samen. We beschouwen een aantal metrieken om de performantie van de verschillende classifiers te meten. We gebruiken de gebalanceerde accuraatheid, de recall en de F1-score. Deze werden eerder besproken in 4. De recall is een interessante score in dit geval: het meet hoeveel falende studenten we juist voorspellen in verhouding met alle falende studenten. Dit is dus de ratio effectief falende studenten die we juist hebben. Dit is nuttig, aangezien we liever te veel studenten classificeren als falend, dan te weinig. Hoofdstuk 5. Voorspelling voortgang van studenten 42 5.2 Resultaten

5.2.1 Resultaten modellen

Gebalanceerde accuraatheid

In figuur 5.10 en figuur 5.8 zijn de range van resultaten per machine learning model gevisualiseerd, respectievelijk voor het vak Informatica uit de faculteit Ingenieurs- wetenschappen en het vak Programmeren uit de faculteit Wetenschappen. Deze figuren bestaan elk uit 4 grafieken waar de resultaten van de verschillende model- len worden voorgesteld. Elk van deze grafieken toont de minimale en maximale balanced accuracy score behaald op een bepaald tijdstip in het semester. In figuur 5.9 zien we de resulaten indien we de 3 extraheermethodes laten vallen voor het vak Programmeren aan de faculteit Wetenschappen. Op deze grafieken staat de range aangegeven van alle mogelijke scores die deze classifier op dat vak heeft voorspeld. Dit betekent dus dat dit een aggregatie is van alle scores, over alle mogelijke jaren en trainings- en testsetcombinaties heen. Hoofdstuk 5. Voorspelling voortgang van studenten 43

(a) SGD classifier (b) Logistic regression

(c) Support vector machine (d) Random forest

Figuur 5.8: Range van balanced accuracy bekomen door de verschillende machine learning technieken over de weken van het semester heen, toegepast op het vak Programmeren uit de faculteit Wetenschappen. Hoofdstuk 5. Voorspelling voortgang van studenten 44

(a) SGD classifier (b) Logistic regression

(c) Support vector machine (d) Random forest

Figuur 5.9: Range van balanced accuracy bekomen door de verschillende machine learning technieken over de weken van het semester heen, toegepast op het vak Programmeren uit de faculteit Wetenschappen. Gebruik gemaakt van dezelfde extraheermethodes als het vak Informatica uit de faculteit Ingenieurswetenschappen en Architectuur. Hoofdstuk 5. Voorspelling voortgang van studenten 45

(a) SGD classifier (b) Logistic regression

(c) Support vector machine (d) Random forest

Figuur 5.10: Range van balanced accuracy bekomen door de verschillende machine learning technieken over de weken van het semester heen, toegepast op het vak Informatica uit de faculteit Ingenieurswetenschappen en Archi- tectuur. Hoofdstuk 5. Voorspelling voortgang van studenten 46 Programmeren, met alle extraheermethodes We bekijken de resultaten vak per vak. Eerst bekijken we de resultaten van het vak Programmeren aan de faculteit Wetenschappen. In Figuur 5.8 zien we een duidelijke stijgende lijn doorheen de tijd voor elke classifier. De resultaten van de SGD classifier vari¨eren van 50% tot 85%. We zien dat de resulaten in de eerset weken vrij pover zijn, maar dat we na de eerste evaluatie consistent een gebalanceerde accuraatheid van boven 65% bekomen. De resultaten bij de logistic regression lijken veel beter te zijn: 60% tot max 85%. Hier zien we dat dit model niet alleen veel betere voorspellingen maakt in het begin van het semester, maar dat de voorspellingen over het hele semester bijna 5% beter zijn. De support vector machine ligt wat tussen de SGD classifier en de logistic re- gression in: de resultaten schommelen van 53% tot 84%. Opmerkelijk is dat de data van reeks 3 zeer moeilijk te voorspellen lijkt, aangezien daar de dip tot 53% gebeurt. Het random forest ligt ook wat tussen de twee uitersten in: de voorspellingen liggen tussen de 55% en 85%. We bekijken de vreemde resultaten in detail. Het eerste vreemde resultaat dat we opmerken is de dip tot 50% in de resulaten van de SGD classifier. In Figuur 5.11 zien we de individuele resultaten op het jaar 2018-2019. Hier zien we dat deze dip afkomstig is van de trainingsset bestaande uit de data uit 2016-2017 en 2017-2018, die zeer slecht scoort op de derde reeks oefeningen. Het tweede vreemde resultaat, de slecht voorspelde reeks 3 bij de SVM classifier, is ook uit te leggen aan de hand van deze trainingsset die blijkbaar die reeks slecht kan voorspellen. Dit is opnieuw te zien in dezelfde Figuur 5.11.

Programmeren, zonder deadline-specifiek extraheermethodes Nu be- kijken we of het een verschil uitmaakt of we de features ge¨extraheerd door de drie deadline-specifieke extraheermethodes beschouwen in de verschillende model- len. De resultaten van de SGD classifier vari¨eren opnieuw van 50% tot 85% en ze stijgen opnieuw behoorlijk. Wat ons hier opvalt is dat er geen dip te zien is bij reeks 3, maar wel bij reeks 7. Logistic regression scoort zeer gelijkaardig aan het model waarbij alle extraheer- methodes gebruikt werden. Er zijn wel een aantal verschillen: er is geen daling bij Hoofdstuk 5. Voorspelling voortgang van studenten 47

(a) SGD Classifier (b) SVM

Figuur 5.11: Deze figuren tonen aan dat de SGD en SVM het moeilijk hebben om met de gecombineerde data van de datasets 16-17 en 17-18 moeilijk reeks 3 van 18-19 kunnen voorspellen. week 7, maar wel bij week 3. Dezelfde verschillen zijn ook merkbaar bij het support vector machine model: Er is geen dip bij week 3 en wel bij week 7. Ook ligt de score in de eerste paar weken lager, waardoor de stijgende lijn beter zichtbaar lijkt. In het begin scoort dit model slechts tussen 50% en 60% in tegenstelling tot tussen 60% en 70% (met uitzondering van de dip naar 55% in week 3). De resultaten van het random forest verschillen wat: er is een dip bij week 3 en de ruimte tussen het minimum en maximum neemt steeds 10% tot 20% in. Dit in tegenstelling van het model met alle extraheermethodes, waarbij de variatie slechts max 15% bedraagt. De verschillen bij de SGD classifier (de dip bij reeks 7 ipv de dip bij reeks 3) zijn te verklaren door de slechte performantie van de datasets 17-18 en 18-19 op de testset van 16-17. Dit is te zien in Figuur 5.12.

Informatica We beschouwen de gebalanceerde accuraatheid van het vak Infor- matica. Dit is te vinden in Figuur 5.10. Hoofdstuk 5. Voorspelling voortgang van studenten 48

(a) SGD Classifier (b) SVM

Figuur 5.12: Deze figuren tonen aan dat de SGD en SVM het moeilijk hebben om met de gecombineerde data van de datasets 17-18 en 18-19 moeilijk reeks 7 van 16-17 kunnen voorspellen.

De resultaten van de SGD classifier starten tussen 60% en 75% en eindigen tussen 70% en 80%. De resultaten lopen in een relatief stijgende lijn, alhoewel dit na de eerste evaluatie wat afvlakt. De logistic regression scoort licht beter: hier starten de resultaten rond 65%-75% en eindigen ze rond 75%-85%. De voorspelling op het punt van reeks 15 is echter moeilijk te voorspellen: daar is plots een daling tot een score van 65%. Verder lijken de data hier ook een licht stijgende trend te vertonen die ook weer rond de helft van het semester afvlakt. De resultaten van de support vector mmachine volgen hetzelfde stramien: start rond 60%-75% en eindigen rond 70%-80%. Het hoogste resultaat, 85%, wordt behaald in reeks 12. Hier merken we ook weer een daling op bij het tijdstip van reeks 15: daar scoort de classifier met 62% het laagst. Deze dip is ook zichtbaar bij het random forest. De resulaten van het Random Forest starten tussen 67% en 75% en bereiken in reeks 11 scores tussen 70% en 80%. In de volgende weken blijven ze ongeveer rond deze scores hangen, behalve de dip op week 14 die slechts een 50% gebalanceerde accuraatheid heeft. We merken eerst op dat al deze methodes voor een minder duidelijke stijgende lijn Hoofdstuk 5. Voorspelling voortgang van studenten 49 zorgen dan de scores die behaald worden in het vak programmeren. Deze stijging bedraagt van het begin van het semester tot het einde gemiddeld slechts een 5%. Dit kan er op wijzen dat het gedrag van de studenten ofwel niet verandert en zo een even goede voorspeller blijkt te zijn voor hun uiteindelijke resultaten, of dat het gedrag van de studenten op een voorspellende manier verandert. De daling bij het random forest en de SVM is te verklaren door de data uit het jaar 16-17. Uit de individuele lijngrafieken komt duidelijk dat deze modellen moeite hebben om op basis van de data uit 16-17 en de data van 16-17 en 18-19 reeks 15 voorspellen. De daling bij de logistic regression situeert zich bij het voorspellen van het jaar 18-19 met de data uit 17-18.

(a) Random Forest (b) SVM

Figuur 5.13: Deze figuren tonen aan dat het random forest en de SVM het moeilijk hebben om met de data van 16-17 en zeker met gecombineerde data van de datasets 16-17 en 18-19 moeilijk reeks 14 van 17-18 kunnen voorspellen. Hoofdstuk 5. Voorspelling voortgang van studenten 50

(a) SGD classifier (b) Logistic regression

(c) Support vector machine (d) Random forest

Figuur 5.14: Range van recall bekomen door de verschillende machine learning tech- nieken over de weken van het semester heen, toegepast op het vak Pro- grammeren uit de faculteit Wetenschappen. Hoofdstuk 5. Voorspelling voortgang van studenten 51

(a) SGD classifier (b) Logistic regression

(c) Support vector machine (d) Random forest

Figuur 5.15: Range van recall bekomen door de verschillende machine learning tech- nieken over de weken van het semester heen, toegepast op het vak Pro- grammeren uit de faculteit Wetenschappen. Gebruik makend van alle extraheermethodes. Hoofdstuk 5. Voorspelling voortgang van studenten 52

(a) SGD classifier (b) Logistic regression

(c) Support vector machine (d) Random forest

Figuur 5.16: Range van recall bekomen door de verschillende machine learning tech- nieken over de weken van het semester heen, toegepast op het vak Infor- matica uit de faculteit Ingenieurswetenschappen en Architectuur. Hoofdstuk 5. Voorspelling voortgang van studenten 53 Recall

Programmeren, met alle extraheermethodes We beginnen opnieuw met het vak Programmeren. De grafieken van de verschillende grafieken zijn te vinden in Figuur 5.14. We zien onmiddellijk een compleet ander beeld. Alhoewel er vaak een stijgende lijn te herkennen is, zijn vooral de eerdere tijdstippen doorheen het semester dramatisch. We zien ook een zeer grote variatie in de recall. Anders dan bij de voorgaande grafieken (en de andere classifiers) is er een serieuze daling te zien bij de SGD classifier bij week 4. De scores stabiliseren na de eerste evaluatie tssen 55% en 80%. De logistic regression ziet er stabieler uit: de scores starten tussen 55% en 80% en eindigen tussen 60% en 80%. De support vector machine start met een lagere recall (tussen 37% en 70%) maar eindigt op een gelijkaardige plaats. Het random forest toont een groter verschil tussen de minimumwaardes en maxi- mumwaardes: het minimum komt nooit boven de 50% uit, terwijl het maximum pieken tot meer dan 80% bereikt.

Programmeren, zonder deadlinespecifieke extraheermethodes De gra- fieken van het vak Programmeren, met dezelfde extraheermethodes die gebruikt worden voor het vak Informatica, zijn te vinden in Figuur 5.15. We zien dat de recall scores voor de SGD classifier, de logistic regression en de support vector machine heel gelijkaardig zijn aan de modellen die wel alle extra- heermethodes gebruiken. Hier en daar is een dal of een piek wat uitvergroot of wat afgevlakt, maar grote veranderingen vinden we bij deze modellen niet. Er is een grotere afwijking voor het random forest. We zien een serieuze daling bij reeks 3. Ook bij reeks 4 en 5 is de recall score slechts 30%. Uiteindelijk behaalt dit random forest model geen significant betere score dan het andere model voor het vak Programmeren.

Informatica De recall grafieken, te vinden in Figuur 5.16 zien er iets minder dramatisch uit bij het vak Informatica. De resultaten van de SGD classifier vertoen een zeer duidelijke stijgende lijn. De resultaten van de SGD classifier zijn zeer variabel: er zijn een aantal dalen (reeks Hoofdstuk 5. Voorspelling voortgang van studenten 54 4, eval 1 en reeks 15) en een aantal pieken (reeks 5 en 14). Het is vreemd dat de recall waarde in sommige gevallen daalt op het tijdstip eval1, aangezien we verwachten dat dit heel goed voorspelt of een student slaagt of niet. Blijkbaar is het in dit geval minder goed in het voorpsellen van de falende studenten. De classifier start met scores rond 35%-65% en eindigt met een score tussen 63% en 77%. Logistic regression presteert hier heel wat beter. In het begin van het semester liggen de waardes vrij ver uit elkaar: startend van 55% tot 80%, maar deze gap verkleint naar het einde van het semester toe. Uiteindelijk bereikt de classifier bij reeks 20 een zeer goede score van 75% tot 88%. De support vector machine presteert slechter dan logistic regression. De score is vrij variabel. Er kan wel een lichte stijging waargenomen worden: de recall score start met waardes van ongeveer 53% tot 73% en eindigt met scores tussen 60% en 80%. Er is ook weer een sterke daling bij reeks 15 merkbaar. De resultaten van het random forest zijn slecht. Enkel op 5 tijdstippen doorheen het semester ligt de minimumwaarde boven de 50%. Bij reeks 15 is de score zelfs zeer zeer laag, minder dan 5%. De maximum waardes liggen voornamelijk onder de 70%-75% met een paar pieken boven 80%.

F1-score

Programmeren, met alle extraheermethodes Eerst bekijken we de model- len voor het vak Programmeren die alle extraheermethodes gebruiken, te zien in Figuur 5.14. We zien dat de SGD cassifier in het begin van het semester het slechtst presteert: de score varieert van 5% tot 65%. Ook zien we dat deze scores stijgen tot aan de eerste evaluatie, waar ze hetzelfde niveau bereiken van de andere classifiers: een score tussen 60% en 80%. De logistic regression begint met een betere score (tussen 50% en 70%) en eindigt met een score die 5% hoger ligt. Voor de support vector machine start met een score die iets slechter is (45% tot 67%) een eindigt ook met een score die ongeveer 5% lager ligt dan de scores voor de logistic regression. Het random forest vertoont een gelijkaardig verloop, maar kent een groter verschil tussen de minimumwaardes en maximumwaardes. De maximumscores zijn gelijk Hoofdstuk 5. Voorspelling voortgang van studenten 55

(a) Random Forest (b) SVM

Figuur 5.17: Deze figuren tonen aan dat het random forest en de SVM het moeilijk hebben om met de data van 16-17 en zeker met gecombineerde data van de datasets 16-17 en 18-19 moeilijk reeks 15 van 17-18 kunnen voorspellen. aan die die de andere classifiers halen, maar de minimumwaarde zit vaak onge- veer 25% onder die maximumscores. Deze variatie is bij de andere classifiers iets kleiner.

Programmeren, zonder deadlinespecifieke extraheermethodes We ge- bruiken hier de modellen die dezelfde extraheermethodes gebruiken als het vak Informatica: dus niet de deadline-specifieke methodes. De grafieken zijn te vinden in 5.19 We zien dat de SGD classifier zeer slecht start: de score ligt tussen 10% en 65%. We zien daarna een stijging tot aan de eerste evaluatie: daar bereikt de classifier een score van 60% tot 77%. Daarna is de stijging minder uitgesproken en blijft de classifier rond deze scores hangen. De logistic regression start wat beter met een score tussen 50% en 67%. Ook hier zien we een stijging die zich verder doorzet, tot reeks 9. Uiteindelijk eindigt dit model met een f1-score tussen 65% en 83%. De support vector machine start met een score tussen 35% en 65%. Daarna is er Hoofdstuk 5. Voorspelling voortgang van studenten 56 wel een duidelijke stijging tot het einde van het semester te zien. De scores op het einde van het semester liggen tussen 60% en 83%. De scores van het random forest zijn niet goed. De f1-scores van de classifier komen slechts op 2 tijdstippen van het semester overtuigend boven 50% en bereiken een dal in week 3, met een f1-score dicht bij 0%. Er is een zeer grote variatie op te merken, aangezien de maximumwaarde bijna 85% bereikt op het einde van het semester.

Informatica De grafieken met de f1-score van de verschillende modellen getraind op data uit het vak Informatica zijn te vinden in 5.20. Al deze grafieken zien er op eerste zicht vrij goed uit. De SGD classifier begint bij reeks 1 met scores rond 45% en 65%, stijgt geleide- lijk tot aan de eerste evaluatie en stagneert daarna met een score tussen 65% en 75%. De scores van de logistic regression zien er het best uit. De classifier start met een score tussen 60% en 70% en eindigt met een score tussen 70% en 80%. Er is wel een significante daling te zien tijdens week 15. De support vector machine scoort consistent rond 60% en 75% en gaat daar nooit echt boven. Er is hier ook weer een daling te zien tijdens week 15. Het random forest doet het over het algemeen wat minder goed: de scores starten van 55% tot 70% en eindigen zo’n 5% hoger. Ook is er een zeer duidelijk dal te zien bij week 15. De reden voor deze dalingen in de score tijdens week 15 kunnen we ook afleiden uit de figuur die de recall scores plot: Figuur 5.17 Hoofdstuk 5. Voorspelling voortgang van studenten 57

(a) SGD classifier (b) Logistic regression

(c) Support vector machine (d) Random forest

Figuur 5.18: Range van f1-score bekomen door de verschillende machine learning tech- nieken over de weken van het semester heen, toegepast op het vak Pro- grammeren uit de faculteit Wetenschappen. Hoofdstuk 5. Voorspelling voortgang van studenten 58

(a) SGD classifier (b) Logistic regression

(c) Support vector machine (d) Random forest

Figuur 5.19: Range van f1-score bekomen door de verschillende machine learning tech- nieken over de weken van het semester heen, toegepast op het vak Pro- grammeren uit de faculteit Wetenschappen. Hoofdstuk 5. Voorspelling voortgang van studenten 59

(a) SGD classifier (b) Logistic regression

(c) Support vector machine (d) Random forest

Figuur 5.20: Range van f1-score bekomen door de verschillende machine learning tech- nieken over de weken van het semester heen, toegepast op het vak Pro- grammeren uit de faculteit Wetenschappen. Hoofdstuk 5. Voorspelling voortgang van studenten 60 Conclusie

Voor het vak programmeren zien we reeks per reeks, voor iedere metriek, voor ieder soort machine learning model, een duidelijke stijgende score. Voor de gebalanceerde accuraatheid is er weinig verschil te zien tussen de scores voor de modellen die getraind waren met features die ge¨extraheerd werden met features die expliciet rekening hielden met de deadlines, of de modellen die zonder die features getraind werden. Om deze reden is het aannemelijk dat er niet voor ieder vak een verschillend model moet bedacht worden dat rekening houdt met alle specifieke modaliteiten van dat vak. In ieder geval is het niet nodig om een verschillende modellen te gebruiken voor de vakken Programmeren en Informa- tica. Voor het vak Programmeren kunnen we reeds behoorlijk vroeg in het semester met een goede accuraatheid voorspellen of studenten zullen slagen of falen. Na de deadline van reeks 4 kunnen we dit met gemiddeld 70% accuraatheid. Na de eerste evaluatie is dit gemiddeld 75%, op het einde van het semester 80%. Logistic regression lijkt de beste optie te zijn om voor dit vak de voortgang van de studen- ten te voorspellen, zeker indien we de die deadline-specifieke extraheermethodes niet gebruiken. We zien wel dat de recall minder goed is dan de gebalanceerde ac- curaatheid, zeker in het geval van de SGD Classifier en het Random Forest. Ook hier presteert de logistic regression het best, alhoewel de support vector machine het ook niet slecht doet. Voor het vak Informatica zien we dat we ook vrij vroeg in het semester kunnen voorspellen of studenten zullen slagen of falen. Vaak verbetert de gebalanceerde accuraatheid weinig na de resultaten van de eerste evaluatie. We bereiken vaak bij reeks 7 of 8 al een gebalanceerde accuraatheid van 70% tot 80%. Op het einde van het semester eindigen we met een score van maximaal 80%. Ook hier lijkt logistic regression best te presteren. De recall scores lijken beter voor dit vak dan voor het vak Programmeren. De scores van de logistic regression zijn zelfs zeer goed.

5.2.2 Belangrijkheid features

We werken met behoorlijk interpreteerbare machine learning modellen, dus kunnen we uit deze modellen de belangrijkste features halen. Aangezien bleek dat logistic regression het best presteert op alle vlakken, gaan we dieper in op de belangrijkheid van de features van dit model. Een overzicht van de belangrijkheid van al deze features is te vinden in Figuren A.1 en A.2 voor het vak Programmeren en in Hoofdstuk 5. Voorspelling voortgang van studenten 61 Figuren A.5, A.4 en A.3 voor het vak Informatica. De specifieke waarden van de bekeken features zijn steeds te vinden in Appendix A. In alle grafieken wordt er gewerkt met twee kleuren: grijs en rood. Hoe grijzer een vlak, hoe hoger het gewicht van die feature bij het model op dat specifiek tijdstip. Hoe roder het vlak, hoe kleiner het gewicht van die feature. Aangezien we werken met waardes verkregen uit het logistic regression model kunnen we de features als volgt interpreteren: indien feature x een waarde 1.2 heeft, betekent dit dat de kans op slagen 1.2 keer zo hoog is indien die feature 1 eenheid hoger wordt en alle andere features gelijk blijven. Indien de waarde kleiner is dan 1 betekent dit een vermindering in de kans op slagen. Hier stelt een wit vierkant dus een waarde van 1 voor, die geen verhoging noch vermindering in de kans op slagen voorstelt.

Programmeren

We bekijken een aantal interessante features: de evaluatiepunten, het aantal oefe- ningen die in een tijdsspanne van 15 minuten sinds de eerste ingediende oplossing correct worden opgelost en hoeveel tijd er tussen de eerste ingediende oplossing en de deadline van die reeks ligt.

Features 16-17 Features 17-18 Features 18-19

1 2 3 4 5 e1 6 7 8 9 10 e2 1 2 3 4 5 e1 6 7 8 9 10 e2 1 2 3 4 5 e1 6 7 8 9 10 e2 eval2 eval1

Figuur 5.21: Belangrijkheid van de features eval1 en eval2 voor het vak Programmeren met het logistic regression model. Dataset is telkens de combinatie van de twee andere datasets getest op de vermelde dataset.

Evaluatiepunten In figuur 5.21 zijn de evaluatiefeatures weergegeven. We zien duidelijk dat de evaluatiepunten zeer belangrijke features zijn. Dit is ook wat we verwachten, zeker voor het vak programmeren: de evaluatie komt heel goed overeen met het examen, waardoor het logisch is dat een goede score op de evaluaties ook leidt tot een goede score op het examen.

Aantal oefeningen correct opgelost in 15 minuten De volgende features die we bekijken, zijn de features die kijken naar het aantal oefeningen die in een tijdsspanne van 15 minuten na de eerste ingediende oplossing correct opgelost Hoofdstuk 5. Voorspelling voortgang van studenten 62

Figuur 5.22: Belangrijkheid van de features nr of exercises in 15 mins van het vak Programmeren, met het logistic regression model. De dataset is telkens de combinatie van de twee andere datasets getest op de vermelde dataset. Grijs betekent een hogere kans op slagen, rood een hogere kans op falen. worden. Deze zijn te vinden in Figuur 5.22. Op eerste zicht zien we telkens een duidelijke diagonale trend. Die is zeer logisch: slechts weinig of geen studenten maken oefeningen voor reeksen waarvan de deadline nog ver in de toekomst ligt. Er is dus soms ook gewoon geen data over. Aan de andere kant vinden we soms ook een hoge waarde: in het model voor reeks 1 is het blijkbaar zeer goed voor de slaagkansen van de student indien de student in reeks 5 veel correcte ingediende oplossingen in een tijdsspanne van 15 minuten indient. Dit is hoogstwaarschijnlijk ruis: een enkele student die dit heeft gedaan en geslaagd is voor het vak. Wat hier wel interessant lijkt is dat het in de eerste 2 reeksen minder uitmaakt hoeveel oefeningen de student correct oplost in de korte tijdsspanne: er is slechts een klein effect merkbaar op de slaagkans van de studenten. Vanaf reeks 3 is dit wel een belangrijke feature, hoe meer oefeningen de student correct heeft in een tijdsspanne van 15 minuten, hoe kleiner de kans dat de student slaagt. Dit verschil kunnen we uitleggen door het moeilijker worden van de oefeningen. In de eerdere reeksen zijn de oefeningen zeer simpel om de studenten vertrouwd te maken met het concept programmeren, maar de oefeningen vergen nog niet echt programmeerwerk. Indien een student deze oefeningen dus zeer snel correct oplost betekent dat niet zo heel veel voor de uiteindelijke slaagkans. Naarmate de reeksen vorderen worden de oefeningen moeilijker en complexer. Indien een student dan veel oefeningen correct oplost wijst dit op plagiaat: het is moeilijk om veel oefenin- gen binnen de 15 minuten correct op te lossen omwille van de complexiteit van de oefeningen. Natuurlijk kan het dat een enkele student eerst lokaal alle oefeningen voorbereidt en test en ze dan daarna pas indient op Dodona, maar ervaring leert Hoofdstuk 5. Voorspelling voortgang van studenten 63 dat dit niet de gebruikelijke werkwijze van studenten is.

Aantal foute ingediende oplossingen De laatste features die we bespreken zijn te vinden in Figuur 5.23. Deze features meten het aantal foute oplossingen die een student indient bij oefeningen van een bepaalde reeks. We zien dat de waardes niet consistent zorgen voor een verhoging of verlaging van de kans op slagen. De features uit reeks 2 en 3 lijken erop te wijzen dat hoe meer fout ingediende oplossingen, hoe lager de kans op slagen. De features van reeks 1, 4 en 5 geven dan weer aan dat hoe meer fout ingediende oplossingen, hoe hoger de kans op slagen.

Figuur 5.23: Belangrijkheid van de features nr of wrong submissions van het vak Pro- grammeren, met het logistic regression model. De dataset is telkens de combinatie van de twee andere datasets getest op de vermelde dataset. Grijs betekent een hogere kans op slagen, rood een hogere kans op falen.

Op eerste zicht zou je denken dat hoe meer foute oplossingen een student indient, hoe lager de kans op slagen, aangezien de student blijkbaar meer moeite heeft met het programmeren. Studenten werken echter niet op dezelfde manier. Een student die heel weinig tot niet indient zal ook zeer weinig foute oplossingen indienen. Een student die vaak kleine stappen in het programma test is niet noodzakelijk slecht aan het programmeren. Een student die de oefeningen kopieert van een andere student zal ook weinig foute oplossingen indienen. Deze complexiteit wordt dus ook weergegeven in deze features.

Informatica

Als we de gewichten die het logistische regressiemodel gegeven heeft aan de verschil- lende features ge¨extraheerd uit het vak Informatica zien we ook enkele interessante Hoofdstuk 5. Voorspelling voortgang van studenten 64 features. We bekijken de evaluatiepunten, het aantal fout ingediende oplossingen en het aantal ingediende oplossingen met compileerfouten.

Evaluatiepunten Ten eerste zien we in Figuur 5.24 opnieuw de belangrijkheid van de evaluatiescores. Alhoewel de evaluatie en het examen bij dit vak iets anders in elkaar zitten, wijst dit er toch wel op dat het succesvol kunnen oplossen van 3 oefeningen in twee lesuren een goede indicatie is om te slagen voor dit vak.

Features 16-17 Features 17-18 Features 18-19

01 02 03 04 05 06 07 08 09 10 e1 11 12 13 14 15 16 e2 17 18 19 20 01 02 03 04 05 06 07 08 09 10 e1 11 12 13 14 15 16 e2 17 18 19 20 01 02 03 04 05 06 07 08 09 10 e1 11 12 13 14 15 16 e2 17 18 19 20 eval2 eval1

Figuur 5.24: Belangrijkheid van de features eval1 en eval2 van het vak Informatica, met het logistic regression model. De dataset is telkens de combinatie van de twee andere datasets getest op de vermelde dataset.

Aantal ingediende oplossingen met compileerfouten en aantal foute in- gediende oplossingen De tweede set features die we bekijken geeft het aantal oplossingen die compileerfouten bevatten die de student indiende weer. Zoals we kunnen zien in Figuur 5.25, leidt meer oplossingen met compileerfouten indienen tot een lagere voorspelde slaagkans. In Figuur 5.26 zien we de features die weergeven hoeveel foute oplossingen de stu- dent indiende. Hier valt het wel op dat meer foute oplossingen indienen leidt tot een hogere slaagkans. Dit wijst er waarschijnlijk op dat een student die foute op- lossingen indient wel degelijk zaken indient en bezig is met te leren programmeren. Dit effect is bij het vak Informatica, zonder strikte deadlines, groter dan bij een vak met harde deadlines waarbij de studenten meer verplicht worden om tijdens het jaar hun programmeeroefeningen bij te houden. Het verschil tussen deze twee laatste featuresets valt ons wel op: het is blijkbaar niet belangrijk om de oefeningen onmiddellijk correct op te lossen, maar wel om bij de oplossingen geen compileerfouten te maken. De compileerfouten geven namelijk aan dat de student nog niet goed kan programmeren. Een mogelijke verklaring is dat studenten die sneller vertrouwd zijn met de syntax van de programmeertaal minder over dit aspect moeten gaan nadenken om de oefening op te lossen: ze kunnen zich volledig focussen op het probleemoplossend programmeerwerk. Hoofdstuk 5. Voorspelling voortgang van studenten 65

Figuur 5.25: Belangrijkheid van de features nr of submissions with compilation errors van het vak Informatica met het logistic regression model. De dataset is telkens de combinatie van de twee andere datasets getest op de vermelde dataset. Grijs betekent een hogere kans op slagen, rood een hogere kans op falen.

Figuur 5.26: Belangrijkheid van de features nr of wrong submissions van het vak In- formatica, met het logistic regression model. De dataset is telkens de combinatie van de twee andere datasets getest op de vermelde dataset. Grijs betekent een hogere kans op slagen, rood een hogere kans op falen. Hoofdstuk 6

Concepten

In het vorige hoofdstuk meten we hoe de voortgang van de student in de cursus is op basis van de gedragsdata die deze student vertoont. Dit is een behoorlijk generieke manier om hiermee om te gaan: dit soort technieken kunnen ook voor niet-programmeervakken gebruikt worden waar studenten oefeningen oplossen in een online leerplatform. Het voorspellen van de voortgang van de student zegt echter niets over hoe goed een student bepaalde programmeervaardigheden onder de knie heeft. We gebruiken in dit deel van het onderzoek enkel het vak Programmeren, aangezien er voor dat vak reeds meer dan 700 oefeningen met telkens een voorbeeldoplossing voorhanden is. Om te kunnen modelleren of een student een bepaald programmeerconcept onder de knie heeft is het noodzakelijk om eerst een hi¨erarchie van programmeerconcep- ten op te stellen. Daarna is het nodig om deze concepten ook effectief uit broncode te kunnen extraheren. Uiteindelijk moeten we ook de vaardigheid van de studenten gaan modelleren. Dit is een complex topic dat het onderwerp kan zijn van vervolgonderzoek.

6.1 Hi¨erarchie programmeerconcepten

In het onderdeel over kennismodellering, sectie 2.3.2, bekeken we welke oplijstingen van programmeerconcepten reeds bestaan. We vonden voornamelijk dat er niets

66 Hoofdstuk 6. Concepten 67 bestond dat goed paste bij het vak Programmeren. Ofwel waren de gedefinieerde concepten te high-level en te weinig gedetailleerd, of te veel toegepast op ´e´en specifieke programmeertaal. Wat we wel ter beschikking hebben is een oplijsting van de verschillende reek- sen oefeningen. Per reeks bestaat er voor het vak Programmeren ook een lijst vaardigheden en concepten waarmee de studenten na het oplossen van alle zes de oefeningen vertrouwd mee zouden moeten zijn. We nemen deze lijst concepten als startpunt en hervormen dit tot een concepthi¨erarchie met alle concepten die een student zou moeten kennen op het einde van de cursus Programmeren. Deze hi¨erarchie is te vinden in de volgende lijst: 1. Wiskunde 1.1. Re¨ele deling vs gehele deling (inclusief modulorekenen) 1.2. Afronden en afkappen 1.3. Ingebouwde wiskundefuncties: abs, min, max, ... 1.4. Math module: sqrt, sin, cos, radians, ... 2. Python specifiek 2.1. Gebruik van assert 2.2. Gebruik van doctest 2.3. Gebruik van module random 2.4. Gebruik van module datetime 3. Algemene zaken 3.1. Invoer en uitvoer 3.2. Gegevenstypeconversie 3.3. Expressies: wiskundige concatenatie 4. Conditionals 4.1. Operatoren en gelijkheid 4.1.1. Voorwaardelijke expressies (and, or, not) 4.1.2. Voorwaarden met floats (epsilon) 4.1.3. Vergelijkingsoperatoren (==, !=, ¡, ¡=, ¿, ¿=) 4.1.4. Dubbele stringvergelijkingen 4.2. Conditionele statements 4.2.1. Meerdere onafhankelijke voorwaardelijke opdrachten 4.2.2. Geneste voorwaarden 4.2.3. Voorwaardelijke opdracht met meer dan twee clausules 5. Herhaling 5.1. Lussen 5.1.1. While-lussen 5.1.2. Data inlezen tot een terminator bereikt is Hoofdstuk 6. Concepten 68 5.1.3. For-lussen 5.1.4. Gegeven aantal gevallen inlezen 5.1.5. Karakters van een string overlopen 5.2. Operaties in lusbody 5.2.1. Inlezen/uitschrijven van regel in body van lus (afzonderlijk of sa- men) 5.2.2. Voorwaardelijke opdracht genest in controlelus 6. Functies 6.1. Argumenten 6.1.1. Meerdere argumenten 6.1.2. Optionele en benoemede argumenten 6.1.3. Aanpassen van veranderlijke argumenten 6.1.4. Benoemde argumenten opvangen (**kwargs) 6.2. Returnwaardes 6.2.1. Meerdere returnwaardes in dezelfde functie 6.2.2. Meerdere waardes teruggeven (tuple) 6.3. Geavanceerde functies 6.3.1. Functies doorgeven als argument aan andere functies 6.3.2. Functies die zelfgeschreven functies aanroepen 7. Iterabels 7.1. Strings 7.1.1. Gelijkaardig aan lijsten 7.1.1.1. Indexering 7.1.1.2. Slicing 7.1.1.3. Simultaan lijsten overlopen 7.1.1.4. Circulaire strings 7.1.1.5. String herhalen 7.1.2. Specifiek aan strings 7.1.2.1. Typeconversie int naar str 7.1.2.2. Werken met stringmethoden 7.1.2.3. Rekenen met ASCII-waarden 7.1.2.4. Hoofdletterongevoelig werken 7.1.2.5. Verwerken van newlines en multiline strings 7.1.2.6. Opstellen van multiline strings 7.1.2.7. String formatting 7.2. Lijsten (en Tuples) 7.2.1. Circulaire lijsten 7.2.2. Geneste lijsten 7.2.3. Slicing Hoofdstuk 6. Concepten 69 7.2.4. Indexering 7.2.5. Elementen van een lijst overlopen 7.2.6. Simultaan overlopen van lijsten 7.2.7. Omzetting list naar str en vice versa 7.2.8. Lijsten aanmaken 7.2.9. Lijsten kopi¨eren 7.2.10. Lijsten sorteren 7.2.11. Elementen toevoegen aan een lijst 7.2.12. Elementen verwijderen uit een lijst 7.2.13. Elementen overschrijven in een lijst 7.2.14. Elementen opzoeken in een lijst 7.2.15. Een lijst sorteren met een sorteersleutel 7.3. Verzamelingen 7.3.1. Opzoeken in een verzameling 7.3.2. Elementen toevoegen aan een verzameling 7.3.3. Elementen verwijderen uit een verzameling 7.3.4. Bewerkingen op verzamelingen 7.4. Dictionaries 7.4.1. Elementen opzoeken in een dictionary 7.4.2. Elementen toevoegen aan een dictionary 7.4.3. Elementen verwijderen uit een dictionary 7.4.4. Sleutels afbeelden op samengestelde types 7.5. Bestanden 7.5.1. Inlezen van informatie uit bestanden 7.5.2. Werken met CSV bestanden 7.5.3. Wegschrijven van informatie 7.5.4. Online bestanden 7.5.5. Random file access 8. Objecten en Klassen 8.1. Stringvoorstelling van objecten 8.2. Bestand verwerken in initialisatiemethode 8.3. Operator overloading 8.4. Return self 8.5. Nieuwe objecten van de eigen klasse teruggeven 8.6. Meerdere klassen Hoofdstuk 6. Concepten 70 6.2 Extractie van concepten

Om deze concepten te extraheren uit de oefeningen maken we gebruik van een Abstract Syntax Tree (AST). Een AST is een representatie van een stuk code in een boomstructuur. In plaats van de effectieve syntax van het programma te gebruiken wordt hiermee enkel de structuur van de code behouden. Omdat de syntax van het programma niet wordt behouden is een AST gemakkelijker te gebruiken dan andere soorten representaties van programma’s. AST’s kunnen ook gebruikt worden om de types van verschillende variabelen te vinden: elke node in de AST kan een type hebben. De types van verschillende variabelen uit de broncode achterhalen heet type inferentie. Dit is noodzakelijk om bepaalde van onze concepten te extraheren: soms moeten we bijvoorbeeld weten of een variabele een string of een lijst is om het concept goed te kunnen herkennen. Om de broncode om te zetten naar een AST gebruiken we de ingebouwde Python bibliotheek ast. Om type inferentie te doen gebruiken we jedi (https://github .com/davidhalter/jedi), een bibliotheekd die autocompletion en statische ana- lyse voor pythoncode voorziet. De bibliotheek is eigenlijk bedoeld om autocom- pletion te verzorgen in verschillende editors, en minder om type inferentie te doen. De type inferentie is dus niet altijd helemaal correct, of niet alle variabelen krijgen een type toegewezen. Ook faalt de analyse bij het parsen van f-strings, een nieuwe manier om strings te formatteren in Python 3.7. Voor het extraheren van de comcepten defini¨eren we voor ieder concept een aparte methode die dit concept zal herkennen in de AST. Een voorbeeld hiervan kan gevonden worden in Listing 6.1. Elk van deze functies krijgt twee argumenten mee: tree en types. De tree is een ast object. We kunnen alle verschillende nodes in dit object aflopen. types is een defaultdict. Dit is een mapping van een key op een value. Door de key kan de waarde horend bij die specifieke key opgevraagd worden. Indien de key niet in de mapping aanwezig is wordt een defaultwaarde teruggegeven in plaats van een fout te genereren. Hiermee wordt vermeden dat het programma crasht indien jedi er niet in geslaagd is om alle variabelen een type te geven.

1 def multiple_values_to_return(tree, types): 2 for node in ast.walk(tree): 3 if type(node) == ast.Return and type(node.value) == ast. Tuple: 4 return True Hoofdstuk 6. Concepten 71

5 return False Listing 6.1: Voorbeeld van een extraheermethode

Alle voorbeeldoplossingen worden reeks per reeks door deze extraheermethodes gestuurd. Het resultaat wordt opgeslagen als een csv bestand. De hoofding van het bestand bestaat uit alle concepten. De linkerkolom van de file bestaat uit alle oefeningen uit een bepaalde reeks. De rest van de file bestaat uit 1’en en 0’en. Indien er een 1 staat betekent dat die oefening dat bepaald concept gebruikt. Voor elk van de 10 reeksen wordt zo’n bestand gegenereerd. Een voorbeeld van hoe zo’n bestand eruit ziet is te vinden in Listing 6.2.

1 gen_input;gen_output;gen_int_division;gen_round ... 2 kleurengradient;1;1;0;1;0;0;0;0;0;0;1;0;0;0;0 ... 3 verbond der wortels;1;1;0;0;0;0;0;0;0;1;1;0;1 ... 4 vrienden bezoeken;1;1;0;0;0;0;0;0;0;0;1;0;1;0 ... 5 sommen uitschrijven;1;1;0;0;0;0;0;0;0;0;1;0;0 ... 6 vanderwaalskracht;1;1;0;0;0;1;0;0;0;0;1;0;0;0 ... 7 het juiste cijfer;1;1;1;0;0;0;0;0;0;0;1;0;0;0 ... Listing 6.2: Voorbeeld van een bestand met data over de ge¨extraheerde concepten

6.3 Visualisatie

We gebruiken een binaire heatmapvisualisatie om de verschillende ge¨extraheerde concepten voor te stellen. We maken zo’n heatmap per reeks. Twee reeksen zijn te zien in Figuur 6.1, waar alle oefeningen beschikbaar voor reeks 3 worden voorge- steld, en Figuur 6.2, met de oefeningen uit reeks 10. We zien duidelijke patronen in de gebruikte concepten: in reeks 3 zien we dat de eerste twee kolommen bijna compleet zwart zijn. Dit geeft aan dat er voornamelijk gebruikt wordt gemaakt van input en output. Met deze input wordt bedoeld dat de student zelf de input vanuit stdin leest en naar stdout wegschrijft. Wanneer studenten functies moeten begin- nen defini¨eren wordt dit veel minder meer gebruikt. We zien dit ook in de heatmap voor reeks 10: de eerste twee kolommen worden amper nog gebruikt. We zien ook duidelijk een verschil in het aantal gebruikte concepten tussen reeks 3 en reeks 10. Reeks 10 gebruikt een zeer brede waaier van concepten vergeleken met reeks 3. Dit is te verklaren door het feit dat reeks 10 de laatste oefeningenreeks is en er van de studenten verwacht wordt om in die reeks reeds alle voorgaande concepten te kunnen toepassen Hoofdstuk 6. Concepten 72

gen_input gen_output gen_int_divisiongen_round gen_math_modulegen_math gen_assert gen_docstring gen_random gen_datetime gen_type_conversiongen_math_concatcond_if cond_eps cond_log_compcond_math_compcond_nested cond_mult cond_mult_independentstr_int_conv str_methods str_ascii str_case str_indexing str_slicing str_repeat str_modulo str_format str_split_newlinestr_make_multilineloop_while loop_for_range loop_for_sring loop_for_list loop_zip loop_read/print_bodyloop_nested loop_cond coll_list_str_convcoll_list_make coll_list_sort coll_list_add coll_list_removecoll_list_copy coll_list_searchcoll_list_sort_keycoll_list_index coll_list_slice coll_nested_listcoll_list_modulocoll_list_overwritecoll_set_add coll_set_removecoll_set_searchcoll_set_operationscoll_dict_add coll_dict_searchcoll_dict_removecoll_dict_key_compfunc_return_mult_valsfunc_mult_arg func_def_arg func_def_arg_nonefunc_vararg func_kwararg func_mult_return_funcfunc_as_arg func_call_own file_read file_write file_csv file_online file_random_accessobj_string obj_operator_overloadingobj_return_selfobj_mult_classesobj_process_fileobj_return_new

conan the bacterium oog van Horus slaapkwaliteit bezige bijen rijen aanvullen biljarttafel delers boeketje rozen lifters basel probleem faculteit zonnewijzer canvascrack dubbel of niets beleefdheid Duitse tanks volkstelling op Mars chaos game apen en kokosnoten pythagorese drietallen afels van vermenigvuldiging russische boeren waterdicht de kikkerprins de drie wijzen uitdager of crack new york times babylonische methode liftparadox vreemde eend schoonspringen harshadgetallen hittegolf deelbaar door 17 verjaardagsparadox wet van planck universal product code loonbrief vermoeden van Collatz akie en de chocoladefabriek eerste verwittiging slimmer dobbelen generatoren ISBN interessante getallen spreiding vermoeden van Erdos-Straus flip-floppers getal van Euler ronde getallen groeicurve chaos fibonacciwoorden het juiste cijfer vanderwaalskracht sommen uitschrijven vrienden bezoeken verbond der wortels kleurengradient

Figuur 6.1: Voorbeeld van een visualisatie van de ge¨extraheerde concepten. Dit is de visualisatie voor reeks 3. Hoofdstuk 6. Concepten 73

gen_input gen_output gen_int_divisiongen_round gen_math_modulegen_math gen_assert gen_docstring gen_random gen_datetime gen_type_conversiongen_math_concatcond_if cond_eps cond_log_compcond_math_compcond_nested cond_mult cond_mult_independentstr_int_conv str_methods str_ascii str_case str_indexing str_slicing str_repeat str_modulo str_format str_split_newlinestr_make_multilineloop_while loop_for_rangeloop_for_sring loop_for_list loop_zip loop_read/print_bodyloop_nested loop_cond coll_list_str_convcoll_list_make coll_list_sort coll_list_add coll_list_removecoll_list_copy coll_list_searchcoll_list_sort_keycoll_list_index coll_list_slice coll_nested_listcoll_list_modulocoll_list_overwritecoll_set_add coll_set_removecoll_set_searchcoll_set_operationscoll_dict_add coll_dict_searchcoll_dict_removecoll_dict_key_compfunc_return_mult_valsfunc_mult_arg func_def_arg func_def_arg_nonefunc_vararg func_kwararg func_mult_return_funcfunc_as_arg func_call_own file_read file_write file_csv file_online file_random_accessobj_string obj_operator_overloadingobj_return_selfobj_mult_classesobj_process_fileobj_return_new

combinatieslot boter kaas en eieren sterrendatum blockchain bankrekening het vijfde element woordzoeker Eyjafjallajokull verkeerslicht genoomdichtheid osmuthalluthexium massacentrum de vijfde kaart rontgendiffractie koloniepikker voorraadbeheer autocomplete look and say geheimschreiber stratenplan mangarevaans rekenen geheime boodschap in hofmakerij in de kerk nim packet assembler verwarming blindelings eiwitvouwen speleologie gekleurde druppels een schuldige sleutel genetische code driehoekige klok metrokaart der exacte wetenschap zwart gat bifidcodering dot plot quilten lettergrepen splitsen mad libs linear feedback shift register inventaris hodometer landherkenning schuifpuzzel racetrack playa anthropocentrisme klok kaarten kleuren verkaveling kwyjibo anamonics trechter lemmings bacteriepopulatie dominostenen rijksregisternummer doorsnede rechthoeken cowsay stardoku de code van Hippocrates Huntington-Hill methode mijnenveger dronken mier rijmwoorden telefooncentrale sushi kompas romeins rekenen playfair ISBN sorteertrucje turbolift scrabblewoorden victoria amazonica Mengenlehreuhr buzzword bingo stuwmeer huffmancodering vier-vierkant woordritsen veeltermen kaartdressuur mayagetallen levenshtein galgje panini immuunsysteem het mechanische internet kleur datacompressie diana cryptosystem duikerslogboek cijferpermutatie slagerij strandlectuur tryptische peptiden binnenstebuiten doolhof point Nemo voorspelbare dobbelstenen

Figuur 6.2: Voorbeeld van een visualisatie van de ge¨extraheerde concepten. Dit is de visualisatie voor reeks 10. Hoofdstuk 6. Concepten 74

coll_dict_key_compfunc_return_mult_valsfunc_mult_arg func_def_arg func_def_arg_nonefunc_vararg func_kwararg func_mult_return_funcfunc_as_arg func_call_own file_read file_write file_csv file_online file_random_accessobj_string obj_operator_overloadingobj_return_selfobj_mult_classesobj_process_fileobj_return_new

conan the bacterium oog van Horus slaapkwaliteit bezige bijen rijen aanvullen biljarttafel delers boeketje rozen lifters basel probleem faculteit zonnewijzer canvascrack dubbel of niets beleefdheid Duitse tanks volkstelling op Mars chaos game apen en kokosnoten

Figuur 6.3: Dit is een ingezoomde versie van de gegenereerde heatmap voor reeks 3. Hier is te zien dat een paar voorbeeldoplossingen in reeks 3 al functies gebruiken, terwijl de studenten pas in reeks 5 functies leren.

name gen_input gen_output gen_int_divisiongen_round gen_math_modulegen_math gen_assert gen_docstring gen_random gen_datetime gen_type_conversiongen_math_concatcond_if cond_eps cond_log_compcond_math_compcond_nested cond_mult cond_mult_independentstr_int_conv str_methods str_ascii str_case str_indexing str_slicing str_repeat str_modulo str_format str_split_newlinestr_make_multilineloop_while loop_for_range loop_for_sring loop_for_list loop_zip loop_read/print_bodyloop_nested loop_cond coll_list_str_convcoll_list_make coll_list_sort coll_list_add coll_list_removecoll_list_copy coll_list_searchcoll_list_sort_keycoll_list_index coll_list_slice coll_nested_listcoll_list_modulocoll_list_overwritecoll_set_add coll_set_removecoll_set_searchcoll_set_operationscoll_dict_add coll_dict_searchcoll_dict_removecoll_dict_key_compfunc_return_mult_valsfunc_mult_arg func_def_arg func_def_arg_nonefunc_vararg func_kwararg func_mult_return_funcfunc_as_arg func_call_own file_read file_write file_csv file_online file_random_accessobj_string obj_operator_overloadingobj_return_selfobj_mult_classesobj_process_fileobj_return_new

series10 blindelings series10 mad libs series10 de code van Hippocrates series10 rijksregisternummer series10 ISBN series09 geen voor allen series09 de code van Hippocrates series09 dichte buren series09 BADA55 series09 rorschachtest series09 ISBN series08 rooksignalen series08 zalig kerstfeest series08 sneeuwbalgetallen series08 rekenmachinespelling series08 kaukasus series08 ISBN series07 five up series07 curling series07 obscure feestdagen series07 de laatste knikker series07 dawkins wezel series07 ISBN series06 kolomtranspositie series06 koninginnen, paarden en pionnen series06 doemdagklok series06 herschikking series06 lineup series06 ISBN series05 rovarspraket series05 pangrammatisch venster series05 omkeringen series05 stopcodons series05 tafelpraat series05 ISBN series04 bijbelcodes series04 suskewiet series04 het priemgetal van de ugent (2) series04 verscheurde getallen series04 makkie series04 ISBN series03 biljarttafel series03 liftparadox series03 eerste verwittiging series03 de kikkerprins series03 generatoren series03 ISBN series02 stopwatchbaby series02 APGAR score series02 kaartmakkers series02 vingervlug series02 landingsbaan series02 ISBN series01 wekker series01 vis viva series01 mercatorprojectie series01 licht werk series01 som van twee getallen series01 ISBN

Figuur 6.4: Dit is een heatmap gegenereerd voor alle verplichte oefeningen uit het jaar 18-19. Hoofdstuk 6. Concepten 75 Deze visualisatie kan ook gebruikt worden om vreemde voorbeeldoplossingen op te sporen. Zo is bijvoorbeeld in Figuur 6.3 te zien dat de voorbeeldoplossing voor twee oefeningen uit reeks 3 functies gebruiken, terwijl de studenten pas vanaf reeks 5 leren wat functies zijn. Indien we dit detecteren kan het nuttig zijn om de voorbeeldoplossing ofwel te herbekijken en aan te passen aan de kennis van de studenten op dat moment, of de oefening in een andere reeks plaatsen. We kunnen ook gebruik maken van deze visualisatie om lesgevers te helpen bij het opstellen van de reeksen oefeningen. In het ideale geval willen we dat alle concepten minstens 1 keer worden gebruikt over alle oefeningen heen. We zien in 6.4 dat dit waarschijnlijk niet het geval was voor het academiejaar 2018-2019.

Figuur 6.5: Dit is een clustering voor alle oefeningen gebruikt in het academiejaar 2018-2019. De kleuren aan de linkerkant geven de reeksen aan.

We kunnen deze concepten ook gaan clusteren. Als we dit uitvoeren op de oefenin- Hoofdstuk 6. Concepten 76 gen gegeven in het academiejaar 2018-2019 bekomen we Figuur 6.5. We zien hier ook een aantal zaken: reeks 1 (rood) en reeks 2 (blauw) zijn zeer goed apart geclus- terd. De andere oefeningen lopen wat meer door elkaar, maar we zien dat reeks 4 en 3 (appelblauwzeegroen en zwart) samen zeer goed geclusterd worden. We zien ook dat reeks 9 en to (oranje en roze) ook vrij goed samen worden geclusterd. Opmerkelijk is ook dat de ISBN-oefeningen van reeks 5, 6, 7 en 8 ook samen worden gezet. Deze ISBN-oefeningen zijn allemaal vrij gelijkaardige oefeningen die de student vertrouwd moet maken met de concepten die in de reeks worden ge¨ıntroduceerd. Het is daarom ook logisch dat deze oefeningen samen worden geclusterd. Deze clustering toont aan dat deze concepten op deze manier extraheren nut heeft.

6.4 Conclusie

We definieerden een concepthi¨erarchie die nuttig gebruikt kan worden voor het vak Programmeren aan de faculteit Wetenschappen. Alhoewel deze hi¨erarchie vrij diep is, worden concepten die niet in het vak gedoceerd worden niet beschouwd. Dit zijn concepten zoals polymorfise, overerving en recursie. De extraheermethodes zijn echter op een zeer uitbreidbare manier gedefinieerd, waardoor het toevoegen van extractors voor deze concepten vrij gemakkelijk kan gebeuren. Wanneer we deze concepten kunnen extraheren uit oefeningen zijn er zeer veel mogelijke toepassingen. Lesgevers kunnen deze concepten gebruiken om aan de hand van voorbeeldoplossingen na te gaan welke concepten aanwezig zijn in de cursus. Ook is het mogelijk om te zien welke concepten vaak aan bod zijn gekomen en welke slechts eenmalig werden getoetst. Het is ook mogelijk om vreemde voorbeeldoplossingen te ontdekken: indien een bepaalde voorbeeldoplossing concepten gebruikt die de student op dat punt in de cursus nog niet heeft gezien is ofwel de voorbeeldoplossing misschien niet ideaal ofwel de oefening niet juist geplaatst in de cursus. Hoofdstuk 7

Toekomstig werk

De data die vervat zit in Dodona is zeer interessante data. Er zijn veel aspecten van Educational Data Mining en Learning Analytics waar we in deze masterproef weinig mee hebben gedaan.

Dashboards

In het kader van deze masterproef zijn een aantal visualisaties gemaakt. E´endaar- van, de punchcard visualisatie, te zien in Figuur 1.1, wordt ook effectief gebruikt in Dodona. Andere visualisaties, zoals Figuren 5.3, 5.4 en 5.5 staan nog niet helemaal visueel op punt, maar geven een aanzet om voor lesgevers de indientijdstippen van de studenten weer te geven. Hier kan nog veel verder mee gegaan worden. Het is mogelijk om dashboards te maken, voor de student en de lesgever, waarmee verschillende statistische data kan weergegeven worden. Dit kan vari¨eren van simpele statistieken die nu reeds worden weergegeven zoals het aantal correct opgeloste oefeningen en het aantal ingediende oplossingen, tot meer ingewikkelde visualisaties zoals het aantal indienpogingen per oefening.

Pedagogiek

Belangrijk is om ook bij zaken zoals een dashboard het pedagogische aspect niet te vergeten: wat is het effect van deze data aan de studenten laten zien op hun

77 Hoofdstuk 7. Toekomstig werk 78 gedrag? Indien we aangeven dat een student significant minder oefeningen oplost dan de bedoeling is, wat is het effect van dit te laten weten aan de student? Bij alle technieken waar individuele studenten vergeleken worden met een volledige groep is het nodig om dit pedagogische aspect in rekening te brengen.

Voorspelling en concepten linken

Een aspect dat nog niet in deze masrerproef aan bod is gekomen, is het linken van de voorspelling van de voortgang van studenten en de mate waarin ze verschillende programmeerconcepten onder de knie hebben. Hiervoor zijn een aantal aspecten noodzakelijk. Ten eerste moeten we de kennis van studenten gaan modelleren. Om dit te doen kunnen we gebruik maken van onder andere Item Response Theory of Bayesian Knowledge Tracing. Sowieso zal het nodig zijn om te bepalen wanneer een concept juist wordt gebruikt. Ofwel kan gekeken worden naar de voorbeeldoplossing: enkel concepten die daarin voorkomen zijn juist, andere zaken worden als fout aanzien. Dit heeft het probleem dat er soms meerdere valide strategie¨en zijn om een oefening op te lossen. Een andere mogelijkheid is om de concepten als juist toegepast te zien wanneer de ingediende oplossing waarin ze voorkomen resulteert in een juiste oplossing. Het probleem hiermee is dat het dan mogelijk is om een oefening op te lossen op een manier die niet de beste of juiste manier is.

Moeilijkheid van oefeningen inschatten

Indien we de kennis van studenten over bepaalde concepten inschatten, kunnen we deze ook gebruiken om de student extra oefeningen aan te raden die focussen op concepten die de student nog niet onder de knie heeft. We kunnen ook probe- ren om een gepersonaliseerde moeilijkheid aan iedere oefening te koppelen. Deze kan gebaseerd zijn op een intrinsieke moeilijkheid en een variabele persoonlijke factor. Deze intrinsieke moeilijkheid kan te maken hebben met het aantal con- cepten die gebruikt worden in een voorbeeldoplossing, de persoonlijke factor kan ingevuld worden door de mate waarin de student deze concepten reeds onder de knie heeft. Ook wordt het dan mogelijk om iedere student hun eigen set oefeningen aan te bieden die alle concepten die in die reeks behandeld moeten worden bevat. Dit zou een zeer nuttige tool zijn om plagiaat tegen te gaan: indien niet alle studenten Hoofdstuk 7. Toekomstig werk 79 dezelfde oefeningen moeten oplossen kunnen ze deze oefeningen ook niet gewoon kopi¨eren van elkaar. 80 Bijlage A. Belangrijkheid van features 81

Bijlage A

Belangrijkheid van features

A.1 Programmeren, Logistische Regressie

Features 16-17 Features 17-18 Features 17-18

1 2 3 4 5 e1 6 7 8 9 10 e2 1 2 3 4 5 e1 6 7 8 9 10 e2 1 2 3 4 5 e1 6 7 8 9 10 e2 wk02_time between first submission and first correct submission wk01_time between first submission and first correct submission mean_time between first and last submissions of a series wk10_time between first and last submissions of a series wk09_time between first and last submissions of a series wk08_time between first and last submissions of a series wk07_time between first and last submissions of a series wk06_time between first and last submissions of a series wk05_time between first and last submissions of a series wk04_time between first and last submissions of a series wk03_time between first and last submissions of a series wk02_time between first and last submissions of a series wk01_time between first and last submissions of a series mean_number of submissions before first correct wk10_number of submissions before first correct wk09_number of submissions before first correct wk08_number of submissions before first correct wk07_number of submissions before first correct wk06_number of submissions before first correct wk05_number of submissions before first correct wk04_number of submissions before first correct wk03_number of submissions before first correct wk02_number of submissions before first correct wk01_number of submissions before first correct mean_number of submissions after first correct submission wk10_number of submissions after first correct submission wk09_number of submissions after first correct submission wk08_number of submissions after first correct submission wk07_number of submissions after first correct submission wk06_number of submissions after first correct submission wk05_number of submissions after first correct submission wk04_number of submissions after first correct submission wk03_number of submissions after first correct submission wk02_number of submissions after first correct submission wk01_number of submissions after first correct submission mean_number of correct submissions wk10_number of correct submissions wk09_number of correct submissions wk08_number of correct submissions wk07_number of correct submissions wk06_number of correct submissions wk05_number of correct submissions wk04_number of correct submissions wk03_number of correct submissions wk02_number of correct submissions wk01_number of correct submissions mean_number of correct submissions before deadline wk10_number of correct submissions before deadline wk09_number of correct submissions before deadline wk08_number of correct submissions before deadline wk07_number of correct submissions before deadline wk06_number of correct submissions before deadline wk05_number of correct submissions before deadline wk04_number of correct submissions before deadline wk03_number of correct submissions before deadline wk02_number of correct submissions before deadline wk01_number of correct submissions before deadline mean_time of last submissions before deadline wk10_time of last submissions before deadline wk09_time of last submissions before deadline wk08_time of last submissions before deadline wk07_time of last submissions before deadline wk06_time of last submissions before deadline wk05_time of last submissions before deadline wk04_time of last submissions before deadline wk03_time of last submissions before deadline wk02_time of last submissions before deadline wk01_time of last submissions before deadline mean_time of 1st submission before deadline wk10_time of 1st submission before deadline wk09_time of 1st submission before deadline wk08_time of 1st submission before deadline wk07_time of 1st submission before deadline wk06_time of 1st submission before deadline wk05_time of 1st submission before deadline wk04_time of 1st submission before deadline wk03_time of 1st submission before deadline wk02_time of 1st submission before deadline wk01_time of 1st submission before deadline mean_total nr of exercises with no submissions wk10_total nr of exercises with no submissions wk09_total nr of exercises with no submissions wk08_total nr of exercises with no submissions wk07_total nr of exercises with no submissions wk06_total nr of exercises with no submissions wk05_total nr of exercises with no submissions wk04_total nr of exercises with no submissions wk03_total nr of exercises with no submissions wk02_total nr of exercises with no submissions wk01_total nr of exercises with no submissions mean_total nr of submissions wk10_total nr of submissions wk09_total nr of submissions wk08_total nr of submissions wk07_total nr of submissions wk06_total nr of submissions wk05_total nr of submissions wk04_total nr of submissions wk03_total nr of submissions wk02_total nr of submissions wk01_total nr of submissions

Figuur A.1: Features en gewichten, compleet overzicht: deel 1 Bijlage A. Belangrijkheid van features 82

Features 16-17 Features 17-18 Features 18-19

1 2 3 4 5 e1 6 7 8 9 10 e2 1 2 3 4 5 e1 6 7 8 9 10 e2 1 2 3 4 5 e1 6 7 8 9 10 e2 eval2 eval1 mean_nr of submissions runtime error wk10_nr of submissions runtime error wk09_nr of submissions runtime error wk08_nr of submissions runtime error wk07_nr of submissions runtime error wk06_nr of submissions runtime error wk05_nr of submissions runtime error wk04_nr of submissions runtime error wk03_nr of submissions runtime error wk02_nr of submissions runtime error wk01_nr of submissions runtime error mean_nr of submissions compilation error wk10_nr of submissions compilation error wk09_nr of submissions compilation error wk08_nr of submissions compilation error wk07_nr of submissions compilation error wk06_nr of submissions compilation error wk05_nr of submissions compilation error wk04_nr of submissions compilation error wk03_nr of submissions compilation error wk02_nr of submissions compilation error wk01_nr of submissions compilation error mean_nr of submissions wrong wk10_nr of submissions wrong wk09_nr of submissions wrong wk08_nr of submissions wrong wk07_nr of submissions wrong wk06_nr of submissions wrong wk05_nr of submissions wrong wk04_nr of submissions wrong wk03_nr of submissions wrong wk02_nr of submissions wrong wk01_nr of submissions wrong mean_nr of exercises in 15 mins wk10_nr of exercises in 15 mins wk09_nr of exercises in 15 mins wk08_nr of exercises in 15 mins wk07_nr of exercises in 15 mins wk06_nr of exercises in 15 mins wk05_nr of exercises in 15 mins wk04_nr of exercises in 15 mins wk03_nr of exercises in 15 mins wk02_nr of exercises in 15 mins wk01_nr of exercises in 15 mins mean_nr of exercises in 5 mins wk10_nr of exercises in 5 mins wk09_nr of exercises in 5 mins wk08_nr of exercises in 5 mins wk07_nr of exercises in 5 mins wk06_nr of exercises in 5 mins wk05_nr of exercises in 5 mins wk04_nr of exercises in 5 mins wk03_nr of exercises in 5 mins wk02_nr of exercises in 5 mins wk01_nr of exercises in 5 mins mean_nr of exercises in 24 hours wk10_nr of exercises in 24 hours wk09_nr of exercises in 24 hours wk08_nr of exercises in 24 hours wk07_nr of exercises in 24 hours wk06_nr of exercises in 24 hours wk05_nr of exercises in 24 hours wk04_nr of exercises in 24 hours wk03_nr of exercises in 24 hours wk02_nr of exercises in 24 hours wk01_nr of exercises in 24 hours mean_nr of exercises in 2 hours wk10_nr of exercises in 2 hours wk09_nr of exercises in 2 hours wk08_nr of exercises in 2 hours wk07_nr of exercises in 2 hours wk06_nr of exercises in 2 hours wk05_nr of exercises in 2 hours wk04_nr of exercises in 2 hours wk03_nr of exercises in 2 hours wk02_nr of exercises in 2 hours wk01_nr of exercises in 2 hours mean_time between first submission and first correct submission wk10_time between first submission and first correct submission wk09_time between first submission and first correct submission wk08_time between first submission and first correct submission wk07_time between first submission and first correct submission wk06_time between first submission and first correct submission wk05_time between first submission and first correct submission wk04_time between first submission and first correct submission wk03_time between first submission and first correct submission

Figuur A.2: Features en gewichten, compleet overzicht: deel 2 Bijlage A. Belangrijkheid van features 83 A.2 Informatica, Logistische Regressie

Features 16-17 Features 17-18 Features 18-19

01 02 03 04 05 06 07 08 09 10 e1 11 12 13 14 15 16 e2 17 18 19 20 01 02 03 04 05 06 07 08 09 10 e1 11 12 13 14 15 16 e2 17 18 19 20 01 02 03 04 05 06 07 08 09 10 e1 11 12 13 14 15 16 e2 17 18 19 20 eval2 eval1 mean_nr of submissions runtime error wk20_nr of submissions runtime error wk19_nr of submissions runtime error wk18_nr of submissions runtime error wk17_nr of submissions runtime error wk16_nr of submissions runtime error wk15_nr of submissions runtime error wk14_nr of submissions runtime error wk13_nr of submissions runtime error wk12_nr of submissions runtime error wk11_nr of submissions runtime error wk10_nr of submissions runtime error wk09_nr of submissions runtime error wk08_nr of submissions runtime error wk07_nr of submissions runtime error wk06_nr of submissions runtime error wk05_nr of submissions runtime error wk04_nr of submissions runtime error wk03_nr of submissions runtime error wk02_nr of submissions runtime error wk01_nr of submissions runtime error mean_nr of submissions compilation error wk20_nr of submissions compilation error wk19_nr of submissions compilation error wk18_nr of submissions compilation error wk17_nr of submissions compilation error wk16_nr of submissions compilation error wk15_nr of submissions compilation error wk14_nr of submissions compilation error wk13_nr of submissions compilation error wk12_nr of submissions compilation error wk11_nr of submissions compilation error wk10_nr of submissions compilation error wk09_nr of submissions compilation error wk08_nr of submissions compilation error wk07_nr of submissions compilation error wk06_nr of submissions compilation error wk05_nr of submissions compilation error wk04_nr of submissions compilation error wk03_nr of submissions compilation error wk02_nr of submissions compilation error wk01_nr of submissions compilation error mean_nr of submissions wrong wk20_nr of submissions wrong wk19_nr of submissions wrong wk18_nr of submissions wrong wk17_nr of submissions wrong wk16_nr of submissions wrong wk15_nr of submissions wrong wk14_nr of submissions wrong wk13_nr of submissions wrong wk12_nr of submissions wrong wk11_nr of submissions wrong wk10_nr of submissions wrong wk09_nr of submissions wrong wk08_nr of submissions wrong wk07_nr of submissions wrong wk06_nr of submissions wrong wk05_nr of submissions wrong wk04_nr of submissions wrong wk03_nr of submissions wrong wk02_nr of submissions wrong wk01_nr of submissions wrong mean_nr of exercises in 15 mins wk20_nr of exercises in 15 mins wk19_nr of exercises in 15 mins wk18_nr of exercises in 15 mins wk17_nr of exercises in 15 mins wk16_nr of exercises in 15 mins wk15_nr of exercises in 15 mins wk14_nr of exercises in 15 mins wk13_nr of exercises in 15 mins wk12_nr of exercises in 15 mins wk11_nr of exercises in 15 mins wk10_nr of exercises in 15 mins wk09_nr of exercises in 15 mins wk08_nr of exercises in 15 mins wk07_nr of exercises in 15 mins wk06_nr of exercises in 15 mins wk05_nr of exercises in 15 mins wk04_nr of exercises in 15 mins wk03_nr of exercises in 15 mins wk02_nr of exercises in 15 mins wk01_nr of exercises in 15 mins mean_nr of exercises in 5 mins wk20_nr of exercises in 5 mins wk19_nr of exercises in 5 mins wk18_nr of exercises in 5 mins wk17_nr of exercises in 5 mins wk16_nr of exercises in 5 mins wk15_nr of exercises in 5 mins wk14_nr of exercises in 5 mins wk13_nr of exercises in 5 mins

Figuur A.3: Features en gewichten, compleet overzicht: deel 1 Bijlage A. Belangrijkheid van features 84

Features 16-17 Features 17-18 Features 18-19

01 02 03 04 05 06 07 08 09 10 e1 11 12 13 14 15 16 e2 17 18 19 20 01 02 03 04 05 06 07 08 09 10 e1 11 12 13 14 15 16 e2 17 18 19 20 01 02 03 04 05 06 07 08 09 10 e1 11 12 13 14 15 16 e2 17 18 19 20 wk12_nr of exercises in 5 mins wk11_nr of exercises in 5 mins wk10_nr of exercises in 5 mins wk09_nr of exercises in 5 mins wk08_nr of exercises in 5 mins wk07_nr of exercises in 5 mins wk06_nr of exercises in 5 mins wk05_nr of exercises in 5 mins wk04_nr of exercises in 5 mins wk03_nr of exercises in 5 mins wk02_nr of exercises in 5 mins wk01_nr of exercises in 5 mins mean_nr of exercises in 24 hours wk20_nr of exercises in 24 hours wk19_nr of exercises in 24 hours wk18_nr of exercises in 24 hours wk17_nr of exercises in 24 hours wk16_nr of exercises in 24 hours wk15_nr of exercises in 24 hours wk14_nr of exercises in 24 hours wk13_nr of exercises in 24 hours wk12_nr of exercises in 24 hours wk11_nr of exercises in 24 hours wk10_nr of exercises in 24 hours wk09_nr of exercises in 24 hours wk08_nr of exercises in 24 hours wk07_nr of exercises in 24 hours wk06_nr of exercises in 24 hours wk05_nr of exercises in 24 hours wk04_nr of exercises in 24 hours wk03_nr of exercises in 24 hours wk02_nr of exercises in 24 hours wk01_nr of exercises in 24 hours mean_nr of exercises in 2 hours wk20_nr of exercises in 2 hours wk19_nr of exercises in 2 hours wk18_nr of exercises in 2 hours wk17_nr of exercises in 2 hours wk16_nr of exercises in 2 hours wk15_nr of exercises in 2 hours wk14_nr of exercises in 2 hours wk13_nr of exercises in 2 hours wk12_nr of exercises in 2 hours wk11_nr of exercises in 2 hours wk10_nr of exercises in 2 hours wk09_nr of exercises in 2 hours wk08_nr of exercises in 2 hours wk07_nr of exercises in 2 hours wk06_nr of exercises in 2 hours wk05_nr of exercises in 2 hours wk04_nr of exercises in 2 hours wk03_nr of exercises in 2 hours wk02_nr of exercises in 2 hours wk01_nr of exercises in 2 hours mean_time between first submission and first correct submission wk20_time between first submission and first correct submission wk19_time between first submission and first correct submission wk18_time between first submission and first correct submission wk17_time between first submission and first correct submission wk16_time between first submission and first correct submission wk15_time between first submission and first correct submission wk14_time between first submission and first correct submission wk13_time between first submission and first correct submission wk12_time between first submission and first correct submission wk11_time between first submission and first correct submission wk10_time between first submission and first correct submission wk09_time between first submission and first correct submission wk08_time between first submission and first correct submission wk07_time between first submission and first correct submission wk06_time between first submission and first correct submission wk05_time between first submission and first correct submission wk04_time between first submission and first correct submission wk03_time between first submission and first correct submission wk02_time between first submission and first correct submission wk01_time between first submission and first correct submission mean_time between first and last submissions of a series wk20_time between first and last submissions of a series wk19_time between first and last submissions of a series wk18_time between first and last submissions of a series wk17_time between first and last submissions of a series wk16_time between first and last submissions of a series wk15_time between first and last submissions of a series wk14_time between first and last submissions of a series wk13_time between first and last submissions of a series wk12_time between first and last submissions of a series wk11_time between first and last submissions of a series wk10_time between first and last submissions of a series wk09_time between first and last submissions of a series wk08_time between first and last submissions of a series wk07_time between first and last submissions of a series wk06_time between first and last submissions of a series wk05_time between first and last submissions of a series wk04_time between first and last submissions of a series wk03_time between first and last submissions of a series wk02_time between first and last submissions of a series wk01_time between first and last submissions of a series mean_number of submissions before first correct wk20_number of submissions before first correct wk19_number of submissions before first correct wk18_number of submissions before first correct

Figuur A.4: Features en gewichten, compleet overzicht: deel 2 Bijlage A. Belangrijkheid van features 85

Features 16-17 Features 17-18 Features 18-19

01 02 03 04 05 06 07 08 09 10 e1 11 12 13 14 15 16 e2 17 18 19 20 01 02 03 04 05 06 07 08 09 10 e1 11 12 13 14 15 16 e2 17 18 19 20 01 02 03 04 05 06 07 08 09 10 e1 11 12 13 14 15 16 e2 17 18 19 20 wk17_number of submissions before first correct wk16_number of submissions before first correct wk15_number of submissions before first correct wk14_number of submissions before first correct wk13_number of submissions before first correct wk12_number of submissions before first correct wk11_number of submissions before first correct wk10_number of submissions before first correct wk09_number of submissions before first correct wk08_number of submissions before first correct wk07_number of submissions before first correct wk06_number of submissions before first correct wk05_number of submissions before first correct wk04_number of submissions before first correct wk03_number of submissions before first correct wk02_number of submissions before first correct wk01_number of submissions before first correct mean_number of submissions after first correct submission wk20_number of submissions after first correct submission wk19_number of submissions after first correct submission wk18_number of submissions after first correct submission wk17_number of submissions after first correct submission wk16_number of submissions after first correct submission wk15_number of submissions after first correct submission wk14_number of submissions after first correct submission wk13_number of submissions after first correct submission wk12_number of submissions after first correct submission wk11_number of submissions after first correct submission wk10_number of submissions after first correct submission wk09_number of submissions after first correct submission wk08_number of submissions after first correct submission wk07_number of submissions after first correct submission wk06_number of submissions after first correct submission wk05_number of submissions after first correct submission wk04_number of submissions after first correct submission wk03_number of submissions after first correct submission wk02_number of submissions after first correct submission wk01_number of submissions after first correct submission mean_number of correct submissions wk20_number of correct submissions wk19_number of correct submissions wk18_number of correct submissions wk17_number of correct submissions wk16_number of correct submissions wk15_number of correct submissions wk14_number of correct submissions wk13_number of correct submissions wk12_number of correct submissions wk11_number of correct submissions wk10_number of correct submissions wk09_number of correct submissions wk08_number of correct submissions wk07_number of correct submissions wk06_number of correct submissions wk05_number of correct submissions wk04_number of correct submissions wk03_number of correct submissions wk02_number of correct submissions wk01_number of correct submissions mean_total nr of exercises with no submissions wk20_total nr of exercises with no submissions wk19_total nr of exercises with no submissions wk18_total nr of exercises with no submissions wk17_total nr of exercises with no submissions wk16_total nr of exercises with no submissions wk15_total nr of exercises with no submissions wk14_total nr of exercises with no submissions wk13_total nr of exercises with no submissions wk12_total nr of exercises with no submissions wk11_total nr of exercises with no submissions wk10_total nr of exercises with no submissions wk09_total nr of exercises with no submissions wk08_total nr of exercises with no submissions wk07_total nr of exercises with no submissions wk06_total nr of exercises with no submissions wk05_total nr of exercises with no submissions wk04_total nr of exercises with no submissions wk03_total nr of exercises with no submissions wk02_total nr of exercises with no submissions wk01_total nr of exercises with no submissions mean_total nr of submissions wk20_total nr of submissions wk19_total nr of submissions wk18_total nr of submissions wk17_total nr of submissions wk16_total nr of submissions wk15_total nr of submissions wk14_total nr of submissions wk13_total nr of submissions wk12_total nr of submissions wk11_total nr of submissions wk10_total nr of submissions wk09_total nr of submissions wk08_total nr of submissions wk07_total nr of submissions wk06_total nr of submissions wk05_total nr of submissions wk04_total nr of submissions wk03_total nr of submissions wk02_total nr of submissions wk01_total nr of submissions

Figuur A.5: Features en gewichten, compleet overzicht: deel 3 Bijlage A. Belangrijkheid van features 86 A.3 Features en gewichten van Logistische Re- gressie

A.3.1 Programmeren

Evaluatiescores

1 2 3 4 5 ev1 6 7 8 9 10 ev2 eval 2 1 1 1 1 1 1 1 1 1 1 1 3.72 18 19 eval 1 1 1 1 1 1 2.27 2.83 2.62 2.79 2.5 1.52 1.86 eval 2 1 1 1 1 1 1 1 1 1 1 1 1.39 17 18 eval 1 1 1 1 1 1 2.24 1.97 1.98 1.42 1.48 1.32 1.42 eval 2 1 1 1 1 1 1 1 1 1 1 1 1.37 16 17 eval 1 1 1 1 1 1 3.74 2.41 1.48 2.91 2.21 1.27 1.43

Tabel A.1: Belangrijkheid van de features eval1 en eval2 van het vak Programmeren. Model is Llgistic regression, dataset is telkens de combinatie van de twee andere datasets getest op de vermelde dataset. Grijs betekent een hogere kans op slagen, rood een hogere kans op falen. Bijlage A. Belangrijkheid van features 87 Aantal oefeningen correct in 15 minuten

1 2 3 4 5 ev1 6 7 8 9 10 ev2 mean 1.37 1.09 1.06 1.04 1.1 1.28 1.02 0.99 1 0.96 0.97 0.97 reeks 10 1 1 1 1 1 1 1 1 0.95 1.07 0.97 0.94 reeks 9 1 1 1 1 0.97 0.84 0.93 0.97 1.1 0.83 0.93 0.92 reeks 8 1 1 1 1 1.01 1.31 1.08 1.03 0.83 0.89 0.96 0.95 reeks 7 1 1 1 1 0.97 0.84 0.91 0.91 0.69 0.76 0.94 0.91 16 17 reeks 6 1 1 1 1 0.98 0.86 0.81 0.93 0.88 0.89 0.96 0.98 reeks 5 1.27 1.03 1.01 1.04 1 1.32 1.05 1 1.2 1.13 1.02 1.05 reeks 4 0.95 0.98 1.01 0.92 0.89 0.74 0.91 0.94 0.9 0.92 0.95 0.93 reeks 3 1.16 1.11 1.06 1.08 1.33 1.6 1.19 1.06 1.42 1.28 1.03 1.04 reeks 2 1.28 1.08 1.07 1.08 1.1 1.15 1.13 1.07 1.17 1.12 1.06 1.09 reeks 1 0.88 1.03 1.02 1.02 1.03 0.93 1.07 1.02 1 1.04 1.02 1.02 mean 1.04 0.68 1.04 1.02 1.03 1.01 0.98 0.92 0.96 0.95 0.96 0.94 reeks 10 1 1 1 1 1.01 1.06 1.03 1.05 0.98 0.99 0.92 0.92 reeks 9 1 1 1 1 1.01 1.06 1.03 1.05 1.02 0.92 0.95 0.93 reeks 8 1 1 1 1 1.01 1.06 1.03 0.99 0.89 0.9 0.93 0.92 reeks 7 1 1 1 1 1.01 1.06 0.91 0.65 0.85 0.84 0.89 0.85 17 18 reeks 6 1 1 1 1 1.02 1.04 0.89 0.92 0.98 0.99 0.97 0.98 reeks 5 1 1.29 0.99 1.02 1 1.17 1.05 1.14 1.03 1.01 1.04 1.03 reeks 4 0.97 1.52 1.02 1 0.92 0.9 0.9 0.97 0.97 0.97 0.97 0.94 reeks 3 1.02 1.85 0.98 1 1.05 1.01 1.07 1.07 1.02 1.03 1.01 1.02 reeks 2 1.04 1.62 1.11 1.03 1.14 1.11 1.11 1.14 1.09 1.15 1.1 1.12 reeks 1 1.04 1.16 1.03 1.02 1.05 1.06 1.02 1.03 1.02 0.98 1.02 1.01 mean 0.91 1.04 0.99 0.96 1.01 0.95 0.93 0.94 0.91 0.93 0.95 0.9 reeks 10 1 1 1 1 1 1.02 1.01 1.01 1.01 1.06 0.93 0.79 reeks 9 1 1 1 1 0.99 0.98 0.94 0.93 0.9 0.88 0.92 0.95 reeks 8 1 1 1 1 1 0.99 1.05 1.01 0.78 0.84 0.91 0.86 reeks 7 1 1 1 1 0.99 0.98 0.96 0.95 0.95 1 0.99 1.09 18 19 reeks 6 1 1 1 1 1 0.98 0.86 0.84 0.94 0.91 0.93 0.92 reeks 5 1.1 1.01 1 1.05 1.01 0.98 1.1 1.11 1.18 1.15 1.06 1.14 reeks 4 1.02 1.03 1.02 0.85 0.97 0.88 0.86 0.9 0.81 0.86 0.95 0.83 reeks 3 0.96 1.06 0.95 0.98 1.01 1.01 1.04 1.01 0.98 1.02 0.99 1 reeks 2 0.85 1.07 1.07 1.09 1.04 1.06 1.01 1.02 1.03 1.03 1.05 1.06 reeks 1 1.01 0.94 0.96 0.94 1.02 0.93 0.9 0.91 0.84 0.9 0.98 0.85

Tabel A.2: Belangrijkheid van de features nr of exercises in 5 mins van het vak Pro- grammeren. Model is Logistische Regressie, dataset is telkens de combi- natie van de twee andere datasets getest op de vermelde dataset. Grijs betekent een hogere kans op slagen, rood een hogere kans op falen. Bijlage A. Belangrijkheid van features 88 Aantal foute ingediende oplossingen

1 2 3 4 5 ev1 6 7 8 9 10 ev2 mean 0.72 0.99 1.01 1.02 1.12 1.54 1.04 1.03 1.08 1.04 1.02 1.04 reeks 10 1 1 1 1 1 1 1 1 0.8 0.95 1.07 1.07 reeks 9 1 1 1 1 1 1 0.91 1 0.94 0.98 1.01 1.01 reeks 8 1 1 1 1 1.04 1.75 0.89 0.96 1.28 1.13 1.04 1.05 reeks 7 1 1 1 1 0.98 0.96 0.96 1.07 1.08 1.06 1.02 1.02 16 17 reeks 6 1 1 1 1 0.93 0.8 0.94 0.98 0.94 0.92 0.99 0.98 reeks 5 1.49 1.08 1.01 0.99 1.28 0.95 1.14 1.08 1.06 1.04 1.02 1.05 reeks 4 1.48 1.04 1.03 1.1 1.23 1.16 1.1 1.06 1.19 1.12 1.04 1.05 reeks 3 0.82 0.96 1 0.97 0.79 0.55 0.86 0.96 0.77 0.86 0.98 0.99 reeks 2 0.88 0.94 0.94 0.93 0.79 0.7 0.86 0.9 0.9 0.93 0.95 0.95 reeks 1 1.35 1.07 1.08 1.04 1.22 1.54 1.26 1.05 1.46 1.26 1.02 1.06 mean 1.02 1.27 1 1.01 1.07 1.01 1.01 1.05 1.07 1.06 1.04 1.05 reeks 10 1 1 1 1 1 1 1 1 1.02 1.05 1.08 1.1 reeks 9 1 1 1 1 1 1 1 0.96 0.99 1.09 1.06 1.05 reeks 8 1 1 1 1 1 1 0.95 0.91 1.1 1.09 1.05 1.04 reeks 7 1 1 1 1 1 1 1.05 1.3 1.1 1.13 1.08 1.09 17 18 reeks 6 1 1 1 1 0.91 0.91 0.98 0.92 1.01 0.95 0.98 0.99 reeks 5 1.01 0.8 0.96 1.01 1.25 1.24 1.19 1.24 1.12 1.09 1.06 1.12 reeks 4 1.01 1.71 1.03 1.03 1.13 1.11 1.07 1.1 1.11 1.06 1.05 1.09 reeks 3 1.01 0.57 1 1 0.82 0.73 0.8 0.7 0.94 0.93 0.93 0.89 reeks 2 0.95 0.79 0.88 0.98 0.78 0.73 0.79 0.78 0.89 0.88 0.9 0.85 reeks 1 1.06 1.94 1.11 1 1.19 1.27 1.17 1.2 1.05 1.08 1.03 1.08 mean 1.15 1.05 1.02 1.07 1.03 1.05 1.05 1.07 1.05 1.06 1.05 1.03 reeks 10 1 1 1 1 1 1 1 1 0.7 0.94 1.02 0.79 reeks 9 1 1 1 1 1 1 0.86 0.92 1 0.84 1 0.76 reeks 8 1 1 1 1 1 1 0.97 0.94 0.99 0.98 1.09 0.93 reeks 7 1 1 1 1 0.99 0.96 1.11 1.18 1.15 1.19 1.06 1.16 18 19 reeks 6 1 1 1 1 1 0.98 1.06 1.04 1.03 1.03 1.05 1.09 reeks 5 0.97 1 0.96 1.02 1.05 1.12 1.11 1.08 1.09 1.08 1.07 1.06 reeks 4 1.01 0.97 1 1.2 1.06 1.1 1.08 1.07 1.03 1.05 1.04 1.05 reeks 3 1.09 1.01 1.03 0.89 1 0.9 0.81 0.78 0.67 0.8 0.96 0.75 reeks 2 0.83 0.96 0.92 0.9 0.97 0.91 0.89 0.92 0.94 0.97 0.96 0.96 reeks 1 1.14 1.11 1.07 1.06 1 1.08 1.12 1.08 1.18 1.12 1.05 1.04

Tabel A.3: Belangrijkheid van de features nr of wrong submissions van het vak Pro- grammeren. Model is Logistische Regressie, dataset is telkens de combi- natie van de twee andere datasets getest op de vermelde dataset. Grijs betekent een hogere kans op slagen, rood een hogere kans op falen. Bijlage A. Belangrijkheid van features 89 A.3.2 Informatica

Evaluatiescores

e1 11 12 13 14 15 16 17 e2 18 19 20 16 17 eval2 1 1 1 1 1 1 1 1 1.42 2.02 1.21 1.43 deel 2 eval1 1.5 1.5 2.13 2.26 1.56 1.57 1.44 1.66 1.58 2.06 1.3 1.52 17 18 eval2 1 1 1 1 1 1 1 1 1.21 1.24 1.24 1.38 deel 2 eval 1 1.73 1.57 1.54 1.6 1.98 1.46 1.48 1.52 1.43 1.49 1.46 1.82 18 19 eval2 1 1 1 1 1 1 1 1 1.21 1.58 1.19 1.2 deel 2 eval 1 1.23 1.36 1.43 2.11 1.45 1.51 1.32 1.47 1.27 1.88 1.24 1.24

Tabel A.4: Belangrijkheid van de features eval1 en eval2 van het vak Informatica. Model is Logistische Regressie, dataset is telkens de combinatie van de twee andere datasets getest op de vermelde dataset. Grijs betekent een hogere kans op slagen, rood een hogere kans op falen. Bijlage A. Belangrijkheid van features 90 Aantal submissies met compilatiefouten

1 2 3 4 5 6 7 8 9 10 e1 mean 0.9 0.9 0.92 0.96 0.92 0.84 0.88 0.87 0.87 0.9 0.89 reeks 20 1 1 1 1 1 1 1 1 1 1 1 reeks 19 1 1 1 1 1 1 1 1 1 1 1 reeks 18 1 1 1 1 1 1 1 1 1 1 1 reeks 17 1 1 1 1 1 1 1 1 1 1 1 reeks 16 1 1 1 1 1 1 1 1 1 1 1 reeks 15 1 1 1 1 1 1 1 1 1 1 1 reeks 14 1 1 1 1 1 1 1 1 1 1 1 reeks 13 1 1 1 1 1 1 1 1 1 1.03 1.02 16 17 reeks 12 1 1 1 1 1 1 1 1 1 0.97 0.96 deel 1 reeks 11 1 1 1 1 1 1 1 1 0.91 0.97 0.95 reeks 10 1 1 1 1 1.01 0.91 1.02 1.03 1.02 1.04 1 reeks 9 1 1 1 1 0.97 0.88 0.91 0.88 0.87 0.9 0.91 reeks 8 1 1 1.01 1.01 1.02 0.97 0.98 1.01 0.99 1.02 1.03 reeks 7 1 1.01 0.97 0.99 0.96 0.97 0.97 0.96 0.95 0.95 0.95 reeks 6 1 0.91 0.96 0.98 0.94 0.91 0.92 0.88 0.89 0.89 0.91 reeks 5 0.87 0.95 0.93 0.97 0.93 0.88 0.89 0.85 0.89 0.9 0.89 reeks 4 0.9 0.89 0.94 0.97 0.92 0.79 0.82 0.82 0.85 0.9 0.89 reeks 3 0.88 0.9 0.94 0.97 0.91 0.85 0.88 0.88 0.87 0.91 0.91 reeks 2 0.95 0.94 0.95 0.98 0.94 0.89 0.94 0.93 0.94 0.93 0.92 reeks 1 0.95 0.94 0.95 0.95 0.94 0.97 0.93 0.97 0.95 0.91 0.92

11 12 13 14 15 16 17 e2 18 19 20 mean 0.9 0.82 0.81 0.89 0.89 0.9 0.87 0.89 0.86 0.93 0.89 reeks 20 1 1 1 1 1 1 0.84 0.87 0.94 0.95 0.96 reeks 19 1 1 1 0.96 0.98 0.94 0.89 0.92 0.86 0.95 0.91 reeks 18 1 1 1 1 1.06 1.02 1.04 1 1.14 1.01 1 reeks 17 1.04 1.15 0.77 0.89 0.83 0.88 0.85 0.9 0.75 0.93 0.93 reeks 16 0.96 1.04 0.88 0.96 0.98 0.98 0.96 0.99 0.96 0.99 0.97 reeks 15 0.93 0.69 0.7 0.85 0.87 0.88 0.87 0.85 0.75 0.92 0.84 reeks 14 1.04 1.07 1.21 1.08 1.07 1.02 1.03 1.05 1.11 1.02 1.03 reeks 13 0.9 0.78 0.74 0.89 0.88 0.9 0.86 0.86 0.82 0.94 0.88 16 17 reeks 12 0.94 0.83 0.82 0.9 0.87 0.93 0.84 0.86 0.81 0.93 0.89 deel 2 reeks 11 0.96 0.87 0.86 0.93 0.92 0.93 0.91 0.94 0.8 0.94 0.92 reeks 10 1.02 1.11 1.11 1.03 1.04 1.04 1.06 1.02 1.13 1.02 1.01 reeks 9 0.9 0.87 0.81 0.9 0.88 0.9 0.89 0.89 0.84 0.93 0.88 reeks 8 1 0.91 0.89 0.97 0.96 0.97 0.97 0.96 0.86 0.99 0.93 reeks 7 0.97 0.94 0.99 0.95 0.95 0.95 0.98 0.96 0.96 0.99 0.94 reeks 6 0.91 0.97 0.99 0.9 0.91 0.92 0.89 0.91 1.03 0.93 0.9 reeks 5 0.89 0.86 0.85 0.9 0.9 0.9 0.9 0.9 0.96 0.95 0.92 reeks 4 0.87 0.77 0.84 0.89 0.88 0.91 0.86 0.9 0.87 0.93 0.87 reeks 3 0.92 0.83 0.8 0.92 0.93 0.91 0.9 0.91 0.81 0.96 0.9 reeks 2 0.96 0.89 0.9 0.93 0.95 0.98 0.93 0.94 0.9 0.96 0.93 reeks 1 0.92 0.94 0.96 0.93 0.93 0.9 0.95 0.9 0.99 0.92 0.9

Tabel A.5: Belangrijkheid van de features nr of submissions compilation error van het vak Programmeren, getest op het academiejaar 16-17. Model is Logistische Regressie, dataset is telkens de combinatie van de twee andere datasets getest op de vermelde dataset. Grijs betekent een hogere kans op slagen, rood een hogere kans op falen. Bijlage A. Belangrijkheid van features 91 1 2 3 4 5 6 7 8 9 10 e1 mean 0.85 0.83 0.83 0.9 0.93 0.91 0.92 0.91 0.94 0.93 0.93 reeks 20 1 1 1 1 1 1 1 1 1 1 1 reeks 19 1 1 1 1 1 1 1 1 1 1 1 reeks 18 1 1 1 1 1 1 1 1 1 1 1 reeks 17 1 1 1 1 1 1 1 1 1 1 1 reeks 16 1 1 1 1 1 1 1 1 1 1 1 reeks 15 1 1 1 1 1 1 1 1 1 1 1 reeks 14 1 1 1 1 1 1 1 1 1 1 1 reeks 13 1 1 1 1 1 1 1 1 1 1 1 17 18 reeks 12 1 1 1 1 1 1 1 1 1 1 1 deel 1 reeks 11 1 1 1 1 1 1 1 1 1.01 0.98 0.99 reeks 10 1 1 1 1 1.02 0.95 0.97 0.98 1.02 1.01 1.04 reeks 9 1 1 1 1 1.01 0.92 0.96 0.92 0.92 0.91 0.91 reeks 8 1 1 1 1.02 1.06 1.03 1.04 1.03 1.06 1.09 1.05 reeks 7 1 1 0.96 0.97 0.95 0.96 0.94 0.96 0.97 0.98 0.95 reeks 6 1 0.96 0.99 0.95 0.96 0.94 0.94 0.95 0.95 0.93 0.94 reeks 5 0.84 0.86 0.83 0.91 0.93 0.9 0.92 0.87 0.93 0.91 0.93 reeks 4 0.84 0.84 0.82 0.93 0.93 0.92 0.86 0.86 0.92 0.89 0.9 reeks 3 0.92 0.91 0.9 0.93 0.93 0.94 0.95 0.96 0.94 0.94 0.95 reeks 2 0.92 0.91 0.9 0.94 0.96 0.95 0.98 0.98 0.96 0.95 0.96 reeks 1 0.97 0.94 0.95 0.91 0.94 0.92 0.9 0.93 0.94 0.94 0.92

11 12 13 14 15 16 17 e2 18 19 20 mean 0.93 0.93 0.93 0.93 0.94 0.94 0.94 0.94 0.94 0.95 0.94 reeks 20 1 1 1 1 1 0.98 0.91 0.93 0.93 0.94 0.96 reeks 19 1 1 1 1 1 0.95 0.92 0.94 0.93 0.96 0.92 reeks 18 1 1 1 1 1.01 0.98 0.96 0.99 0.95 0.96 0.99 reeks 17 1 1 0.98 0.96 0.94 0.94 0.94 0.96 0.93 0.95 0.99 reeks 16 1 0.98 0.93 0.91 0.97 0.96 0.95 0.95 0.95 0.96 0.9 reeks 15 0.95 0.87 0.89 0.86 0.96 0.9 0.92 0.92 0.91 0.92 0.85 reeks 14 1 1.01 1.04 1.06 1.04 1.02 1 1.01 1.01 1.02 1.04 reeks 13 0.97 1.01 1.01 0.96 0.97 0.99 1 1 1 0.98 0.95 17 18 reeks 12 1.03 1.02 1.03 1.05 0.94 1.01 1.01 1.02 1.03 0.99 1.02 deel 2 reeks 11 1 1.02 1.01 1.03 1.01 0.99 0.98 0.97 0.98 0.98 1.03 reeks 10 1.02 0.98 1 0.99 1.03 1.01 1.01 1 1 1.01 0.95 reeks 9 0.91 0.9 0.9 0.9 0.92 0.93 0.91 0.91 0.93 0.94 0.89 reeks 8 1.04 1.05 1.06 1.02 1.05 1.02 1.05 1.05 1.03 1.04 1.04 reeks 7 0.94 0.94 0.95 0.94 0.98 0.97 0.98 0.98 0.97 0.97 0.96 reeks 6 0.95 0.94 0.93 0.94 0.96 0.96 0.96 0.95 0.97 0.97 0.98 reeks 5 0.91 0.95 0.92 0.92 0.93 0.94 0.94 0.94 0.95 0.96 0.91 reeks 4 0.92 0.92 0.92 0.92 0.95 0.94 0.96 0.94 0.96 0.95 0.89 reeks 3 0.95 0.95 0.95 0.94 0.96 0.94 0.94 0.94 0.96 0.96 0.97 reeks 2 0.95 0.95 0.94 0.93 0.95 0.96 0.96 0.96 0.95 0.95 0.94 reeks 1 0.93 0.92 0.93 0.97 0.92 0.92 0.94 0.93 0.93 0.95 0.97

Tabel A.6: Belangrijkheid van de features nr of submissions compilation error van het vak Programmeren, getest op het academiejaar 17-18. Model is Logistische Regressie, dataset is telkens de combinatie van de twee andere datasets getest op de vermelde dataset. Grijs betekent een hogere kans op slagen, rood een hogere kans op falen. Bijlage A. Belangrijkheid van features 92 1 2 3 4 5 6 7 8 9 10 e1 mean 0.96 0.97 0.98 0.98 0.94 0.91 0.88 0.85 0.88 0.91 0.95 reeks 20 1 1 1 1 1 1 1 1 1 1 1 reeks 19 1 1 1 1 1 1 1 1 1 1 1 reeks 18 1 1 1 1 1 1 1 1 1 1 1 reeks 17 1 1 1 1 1 1 1 1 1 1 1 reeks 16 1 1 1 1 1 1 1 1 1 1 1 reeks 15 1 1 1 1 1 1 1 1 1 1 1 reeks 14 1 1 1 1 1 1 1 1 1 1 1 reeks 13 1 1 1 1 1 1 1 1 1 1.03 1.01 18 19 reeks 12 1 1 1 1 1 1 1 1 1 0.96 0.98 deel 1 reeks 11 1 1 1 1 1 1 1 1 0.92 0.96 0.98 reeks 10 1 1 1 1 1.02 0.87 0.85 0.77 0.91 0.99 0.99 reeks 9 1 1 1 1 1.01 1.01 0.99 0.87 0.91 0.93 0.96 reeks 8 1 1 1 1 1.01 0.95 0.97 0.95 1.01 1 1.01 reeks 7 1 1 1 1 0.98 0.98 0.92 0.95 0.92 0.94 0.97 reeks 6 1 0.96 1.01 1 0.98 0.97 0.96 0.93 0.94 0.95 0.96 reeks 5 0.94 1 0.98 0.99 0.94 0.89 0.88 0.75 0.85 0.89 0.95 reeks 4 0.99 0.99 1 0.99 0.95 0.9 0.88 0.87 0.92 0.94 0.96 reeks 3 0.95 0.95 0.97 0.98 0.9 0.87 0.85 0.81 0.86 0.91 0.95 reeks 2 0.98 0.98 1 0.99 0.98 0.99 0.98 0.99 0.96 0.96 0.97 reeks 1 0.98 0.98 0.97 0.98 0.95 0.97 0.98 1.08 0.98 0.97 0.96

11 12 13 14 15 16 17 e2 18 19 20 mean 0.91 0.91 0.89 0.91 0.91 0.94 0.91 0.94 0.91 0.95 0.95 reeks 20 1 1 1 1 1 1.01 0.94 0.97 0.98 0.98 0.99 reeks 19 1 1 1 0.97 0.99 0.99 0.99 0.99 0.99 0.99 0.98 reeks 18 1 1 1 1 1.04 1.04 1.01 1.01 1.05 1 1 reeks 17 1.03 1.04 0.87 0.97 0.94 0.96 0.94 0.97 0.93 0.97 0.97 reeks 16 0.94 1.02 1.01 0.96 1.03 1 1 0.98 1.03 0.98 1 reeks 15 0.87 0.83 0.75 0.87 0.88 0.88 0.83 0.9 0.83 0.93 0.9 reeks 14 1.02 1.05 1.11 1.04 1.03 1.01 1 1.02 1 0.99 0.99 reeks 13 0.95 0.93 0.88 0.92 0.88 0.94 0.89 0.95 0.83 0.98 0.96 18 19 reeks 12 1 1.05 1.25 1.04 0.94 1.03 1.01 1 1.16 1.01 1 deel 2 reeks 11 0.94 0.93 0.88 0.91 0.9 0.92 0.93 0.94 0.86 0.96 0.94 reeks 10 0.95 0.93 0.8 0.95 0.95 0.96 0.93 0.96 0.83 0.96 0.96 reeks 9 0.92 0.92 0.9 0.92 0.9 0.94 0.93 0.94 0.93 0.95 0.95 reeks 8 0.98 1.03 0.94 0.98 0.99 1.01 0.97 1.02 0.95 1.02 1 reeks 7 0.97 0.94 0.93 0.96 0.94 0.96 0.94 0.98 0.96 0.97 0.98 reeks 6 0.96 0.95 1.07 0.96 0.95 0.95 0.95 0.96 1.05 0.98 0.96 reeks 5 0.89 0.9 0.85 0.89 0.88 0.93 0.9 0.93 0.85 0.94 0.93 reeks 4 0.93 0.92 0.9 0.94 0.92 0.92 0.93 0.94 0.93 0.95 0.95 reeks 3 0.93 0.93 0.79 0.9 0.91 0.94 0.88 0.94 0.83 0.95 0.95 reeks 2 0.95 0.97 0.97 0.95 0.97 0.97 0.97 0.97 0.96 0.96 0.97 reeks 1 0.95 0.95 1.02 0.97 0.97 0.99 1.01 0.98 1.04 0.94 0.98

Tabel A.7: Belangrijkheid van de features nr of submissions compilation error van het vak Programmeren, getest op het academiejaar 18-19. Model is Logistische Regressie, dataset is telkens de combinatie van de twee andere datasets getest op de vermelde dataset. Grijs betekent een hogere kans op slagen, rood een hogere kans op falen. Bijlage A. Belangrijkheid van features 93 Aantal foute ingediende oplossingen

1 2 3 4 5 6 7 8 9 10 e1 mean 1.1 1.09 1.07 1.04 1.06 1.09 1.11 1.09 1.1 1.09 1.08 reeks 20 1 1 1 1 1 1 1 1 1 1 1 reeks 19 1 1 1 1 1 1 1 1 1 1 1 reeks 18 1 1 1 1 1 1 1 1 1 1 1 reeks 17 1 1 1 1 1 1 1 1 1 1 1 reeks 16 1 1 1 1 1 1 1 1 1 1 1 reeks 15 1 1 1 1 1 1 1 1 1 1 1 reeks 14 1 1 1 1 1 1 1 1 1 1 1 reeks 13 1 1 1 1 1 1 1 1 1 1 1.02 16 17 reeks 12 1 1 1 1 1 1 1 1 1 1.05 1.06 deel 1 reeks 11 1 1 1 1 1 1 1 1 1.08 1.08 1.06 reeks 10 1 1 1 1 1 0.93 0.99 1.03 1.05 1.05 1.03 reeks 9 1 1 1 1 1 1.14 1.07 1.08 1.08 1.05 1.06 reeks 8 1 1 1.01 1.04 1.08 1.09 1.07 1.1 1.14 1.08 1.07 reeks 7 1 1 1.01 1.02 1 1.06 1.13 1.07 1.07 1.05 1.07 reeks 6 1.01 1.07 0.97 1.01 1 1.03 1.06 1.01 1.02 1.04 1.02 reeks 5 1.05 1.04 1.04 1.04 1.09 1.06 1.08 1.09 1.09 1.09 1.07 reeks 4 1.1 1.07 1.05 1.04 1.06 1.11 1.09 1.08 1.08 1.07 1.07 reeks 3 1.13 1.12 1.11 1.06 1.09 1.15 1.13 1.12 1.14 1.1 1.1 reeks 2 1.07 1.07 1.05 1.02 1.04 1.02 1.04 1.05 1.04 1.04 1.04 reeks 1 0.91 0.92 0.91 0.94 0.92 0.89 0.92 0.89 0.91 0.94 0.93

11 12 13 14 15 16 17 e2 18 19 20 mean 1.07 1.08 1.07 1.07 1.07 1.06 1.07 1.07 1.07 1.05 1.08 reeks 20 1 1 1 1 1 1.02 1.09 1.06 1.19 1.05 1.04 reeks 19 1 1 1 1.05 1.07 1.01 1.07 1.05 1.19 1.06 1.07 reeks 18 1 1 1 1 1.03 1.04 1.02 1 0.98 1.03 1.03 reeks 17 1 1 1.05 1.12 1.12 1.11 1.17 1.14 1.33 1.09 1.14 reeks 16 1.01 1.01 1.07 1.12 1.11 1.07 1.08 1.04 0.96 1.05 1.07 reeks 15 1.04 1.11 1.24 1.1 1.07 1.05 1.1 1.08 1.11 1.06 1.06 reeks 14 1 1.01 0.97 1.02 1.01 0.98 0.96 0.96 0.89 1 1 reeks 13 0.97 0.92 0.84 0.97 0.99 0.98 0.96 0.99 0.88 1 0.98 16 17 reeks 12 1.02 1.16 1.2 1.08 1.1 1.06 1.07 1.06 1.16 1.04 1.06 deel 2 reeks 11 1.1 1.34 1.29 1.11 1.11 1.08 1.08 1.1 1.16 1.06 1.1 reeks 10 1 0.84 0.76 1 0.97 1.02 0.96 0.98 0.8 1.03 1.03 reeks 9 1.06 1.08 1.1 1.04 1.06 1.03 1.05 1.03 1.07 1.04 1.06 reeks 8 1.07 1.07 1.04 1.07 1.07 1.07 1.05 1.07 1.06 1.06 1.09 reeks 7 1.06 1.08 1.09 1.04 1.04 1.06 1.05 1.06 1.06 1.04 1.05 reeks 6 1.03 0.92 0.89 1 1.02 1.03 1.01 1.04 0.96 1.03 1.01 reeks 5 1.06 1.04 1.02 1.04 1.05 1.07 1.05 1.05 0.99 1.04 1.07 reeks 4 1.06 1.04 0.99 1.05 1.07 1.06 1.1 1.07 1.07 1.04 1.07 reeks 3 1.12 1.14 1.1 1.09 1.11 1.08 1.11 1.11 1.1 1.06 1.12 reeks 2 1.05 1.04 1.02 1.04 1.03 1.02 1.03 1.05 1.13 1.02 1.05 reeks 1 0.91 0.95 0.96 0.91 0.94 0.94 0.91 0.94 0.95 0.93 0.9

Tabel A.8: Belangrijkheid van de features nr of wrong submissions van het vak Pro- grammeren, getest op het academiejaar 16-17. Model is Logistische Regres- sie, dataset is telkens de combinatie van de twee andere datasets getest op de vermelde dataset. Grijs betekent een hogere kans op slagen, rood een hogere kans op falen. Bijlage A. Belangrijkheid van features 94 1 2 3 4 5 6 7 8 9 10 e1 mean 1.07 1.12 1.11 1.05 1.05 1.07 1.07 1.06 1.06 1.06 1.05 reeks 20 1 1 1 1 1 1 1 1 1 1 1 reeks 19 1 1 1 1 1 1 1 1 1 1 1 reeks 18 1 1 1 1 1 1 1 1 1 1 1 reeks 17 1 1 1 1 1 1 1 1 1 1 1 reeks 16 1 1 1 1 1 1 1 1 1 1 1 reeks 15 1 1 1 1 1 1 1 1 1 1 1 reeks 14 1 1 1 1 1 1 1 1 1 1 1 reeks 13 1 1 1 1 1 1 1 1 1 1 1 17 18 reeks 12 1 1 1 1 1 1 1 1 1 1 1 deel 1 reeks 11 1 1 1 1 1 1 1 1 1.02 1.04 1.02 reeks 10 1 1 1 1 1 0.98 1.04 1.06 1.09 1.07 1.07 reeks 9 1 1 1 1 1.03 1.11 1.13 1.12 1.09 1.11 1.1 reeks 8 1 1 1 1.09 1.1 1.12 1.1 1.1 1.1 1.11 1.08 reeks 7 1 1 0.95 0.96 1.01 0.99 1.05 1.03 1.04 1.02 1.04 reeks 6 1 1.19 1.16 1.03 1.01 1.08 1.08 1.03 1.04 1.02 1.01 reeks 5 0.97 1.06 1.11 1.06 1.04 1.03 1 1.01 1.01 1 0.97 reeks 4 1.1 1.13 1.06 1.07 1.06 1.07 1.03 1.06 1.03 1.02 1.04 reeks 3 1.12 1.16 1.18 1.05 1.03 1.02 1.06 1.03 1.04 1.05 1.05 reeks 2 1.05 1.08 1.12 1.01 1.01 1.04 1.02 1.01 1.01 1.02 1.04 reeks 1 0.95 0.96 0.96 0.97 0.98 0.97 0.98 0.96 0.96 0.96 0.97

11 12 13 14 15 16 17 e2 18 19 20 mean 1.04 1.04 1.05 1.04 1.05 1.04 1.04 1.04 1.04 1.04 1.06 reeks 20 1 1 1 1 1 1 1.04 1.05 1.04 1.04 1.05 reeks 19 1 1 1 1 1 1.01 1.03 1.05 1.06 1.07 1.06 reeks 18 1 1 1 1 1 0.99 1 0.97 0.97 0.98 0.96 reeks 17 1 1 1 1.13 1.04 1.09 1.09 1.08 1.08 1.08 1.12 reeks 16 1 0.99 1.06 1.11 1.06 1.05 1.03 1.06 1.05 1.04 1.04 reeks 15 1 1 1.06 1.07 1.06 1.05 1.05 1.04 1.05 1.05 1.06 reeks 14 1 1.02 1.04 1.02 1.03 1.02 1.01 1.01 1.02 1.01 1.03 reeks 13 1.03 1.02 1.04 1.02 0.99 1.02 1.02 1.03 1.03 1.01 1.03 17 18 reeks 12 1 1.04 1.02 1.05 1.03 1.03 1 1.01 1.02 1.02 1.02 deel 2 reeks 11 1.08 1.06 1.05 1.01 1.05 1.04 1.03 1.02 1.03 1.04 1.02 reeks 10 1.03 1.05 1.04 1.05 1.04 1.05 1.03 1.03 1.05 1.04 1.06 reeks 9 1.06 1.09 1.09 1.12 1.08 1.07 1.07 1.09 1.07 1.06 1.07 reeks 8 1.07 1.06 1.07 1.1 1.07 1.06 1.07 1.05 1.04 1.07 1.1 reeks 7 1.02 1 1 1.01 1.03 1.02 1 1.01 1.01 1.01 0.99 reeks 6 1.02 1.01 1.03 1 1.03 1.01 1.02 1.01 1.02 1 0.98 reeks 5 0.98 0.98 0.98 0.93 0.99 0.98 0.97 0.99 0.98 0.98 0.98 reeks 4 1.03 1.04 1.04 1.06 1.02 1.03 1.04 1.03 1.03 1.03 1.04 reeks 3 1.03 1.02 1.02 1 1.04 1.03 1.03 1.03 1.02 1.03 1.05 reeks 2 0.99 1.02 1.01 1.02 1.01 0.99 1 1.01 1.02 1.02 1.02 reeks 1 0.98 0.98 0.98 0.98 0.95 0.99 0.97 0.97 0.98 0.98 0.98

Tabel A.9: Belangrijkheid van de features nr of wrong submissions van het vak Pro- grammeren, getest op het academiejaar 17-18. Model is Logistische Regres- sie, dataset is telkens de combinatie van de twee andere datasets getest op de vermelde dataset. Grijs betekent een hogere kans op slagen, rood een hogere kans op falen. Bijlage A. Belangrijkheid van features 95 1 2 3 4 5 6 7 8 9 10 e1 mean 1.01 1.02 1.01 1.02 1.03 1.06 1.07 1.08 1.07 1.05 1.04 reeks 20 1 1 1 1 1 1 1 1 1 1 1 reeks 19 1 1 1 1 1 1 1 1 1 1 1 reeks 18 1 1 1 1 1 1 1 1 1 1 1 reeks 17 1 1 1 1 1 1 1 1 1 1 1 reeks 16 1 1 1 1 1 1 1 1 1 1 1 reeks 15 1 1 1 1 1 1 1 1 1 1 1 reeks 14 1 1 1 1 1 1 1 1 1 1 1 reeks 13 1 1 1 1 1 1 1 1 1 1.02 1 18 19 reeks 12 1 1 1 1 1 1 1 1 1 1.05 1.03 deel 1 reeks 11 1 1 1 1 1 1 1 1 1.08 1.03 1.03 reeks 10 1 1 1 1.01 1 1 1.11 1.13 1.12 1.09 1.07 reeks 9 1 1 1 1.01 1.01 1.02 1.05 1.1 1.09 1.08 1.05 reeks 8 1 1 1 1.02 1.09 1.08 1.11 1.16 1.12 1.09 1.05 reeks 7 1 1 1 1.01 1 1.02 1.05 0.96 1.04 1.03 1.04 reeks 6 1 1.02 0.99 1.01 0.99 1.03 1.06 0.99 0.99 0.98 1.01 reeks 5 0.99 1.01 1 1.01 1.03 1.06 0.97 0.98 0.98 1 1 reeks 4 1.03 1.03 1.02 1.02 1.03 1.03 1.04 0.98 1 1 1.01 reeks 3 1.05 1.05 1.04 1.03 1.05 1.11 1.11 1.21 1.12 1.06 1.04 reeks 2 1.01 1 1.01 1 1.01 1.01 1 1.05 1.03 1 1.01 reeks 1 0.94 0.95 0.97 0.97 0.95 0.93 0.93 0.86 0.9 0.93 0.94

11 12 13 14 15 16 17 e2 18 19 20 mean 1.03 1.04 1.02 1.04 1.06 1.03 1.04 1.03 1.03 1.03 1.03 reeks 20 1 1 1 1 1 1.01 1.02 1.02 1.06 1.01 1.01 reeks 19 1 1 1 1.06 1.07 1.01 1.04 1.04 1.11 1.05 1.04 reeks 18 1 1 1 1 1.02 1 0.99 1 0.88 0.99 0.99 reeks 17 1 1 0.99 1.09 1.06 1.08 1.11 1.08 1.25 1.06 1.08 reeks 16 1 1 1.05 1.07 1.05 1.05 1.01 1.01 1.06 1.02 1.01 reeks 15 1.03 1.02 1.02 1.02 1.03 1.01 1.03 1 1.04 1.01 1.01 reeks 14 1.01 1.01 0.92 1 1 0.99 0.97 0.98 0.88 0.97 0.98 reeks 13 1.01 0.99 0.93 1.01 0.98 1.02 1 1.01 0.99 1.01 1.02 18 19 reeks 12 1.02 1.01 1.04 1.03 1.02 1.02 1.02 1.01 0.99 1.01 1.02 deel 2 reeks 11 1.02 1.03 1.01 1.02 1.02 1.01 1.02 1.03 1.03 1.02 1.03 reeks 10 1.07 1.07 1.12 1.07 1.09 1.07 1.1 1.06 1.16 1.05 1.07 reeks 9 1.04 1.07 1.06 1.02 1.03 1.03 1.03 1.03 1.03 1.02 1.03 reeks 8 1.08 1.08 1.08 1.09 1.12 1.07 1.08 1.05 1.05 1.06 1.06 reeks 7 1.02 1.03 0.98 1.02 1.02 1.03 1.04 1.01 0.99 1.02 1.01 reeks 6 0.98 1.01 0.92 0.98 0.99 0.99 0.98 0.98 0.94 1 1 reeks 5 0.99 1 0.92 0.97 0.99 1 0.99 1 0.95 1.01 0.99 reeks 4 1 1.03 0.94 1 0.98 1.02 1 1 0.96 1 1 reeks 3 1.05 1.04 1.16 1.1 1.09 1.05 1.09 1.04 1.1 1.04 1.04 reeks 2 1.03 1.03 1.05 1.02 1.01 1.01 1.03 1.01 1.07 1.01 1.02 reeks 1 0.92 0.93 0.91 0.91 0.92 0.93 0.91 0.94 0.92 0.96 0.96

Tabel A.10: Belangrijkheid van de features nr of wrong submissions van het vak Pro- grammeren, getest op het academiejaar 18-19. Model is Logistische Re- gressie, dataset is telkens de combinatie van de twee andere datasets getest op de vermelde dataset. Grijs betekent een hogere kans op slagen, rood een hogere kans op falen. Bibliografie

Alpaydin, E. (2009). Introduction to machine learning. MIT press. Arnold, K. E. & Pistilli, M. D. (2012). Course signals at Purdue: Using learning analytics to increase student success. In Proceedings of the 2nd international conference on learning analytics and knowledge (pp. 267–270). ACM. Asif, R., Merceron, A., Ali, S. A. & Haider, N. G. (2017). Analyzing undergra- duate students’ performance using educational data mining. Computers & Education, 113, 177–194. Azcona, D., Hsiao, I.-H. & Smeaton, A. F. (2019). Detecting students-at-risk in computer programming classes with learning analytics from students’ digital footprints. User Modeling and User-Adapted Interaction, 1–30. Baker, R. S. & Inventado, P. S. (2014). Educational data mining and learning analytics. In Learning analytics (pp. 61–75). Springer. Baker, R. S. & Yacef, K. (2009). The state of educational data mining in 2009: A review and future visions. JEDM— Journal of Educational Data Mining, 1 (1), 3–17. Berges, M. & Hubwieser, P. (2015). Evaluation of source code with item response theory. In Proceedings of the 2015 ACM Conference on Innovation and Tech- nology in Computer Science Education (pp. 51–56). ACM. Breiman, L. (1996). Bagging predictors. Machine learning, 24 (2), 123–140. Breiman, L. (2001). Random forests. Machine learning, 45 (1), 5–32. Carter, A. S., Hundhausen, C. D. & Adesope, O. (2015). The normalized pro- gramming state model: Predicting student performance in computing cour- ses based on programming behavior. In Proceedings of the eleventh annual International Conference on International Computing Education Research (pp. 141–150). ACM. Carter, A. S. & Hundhausen, C. D. (2017). Using programming process data to detect differences in students’ patterns of programming. In Proceedings of the 2017 ACM SIGCSE Technical Symposium on Computer Science Education (pp. 105–110). ACM.

96 Bibliografie 97 Chang, Y.-W. & Lin, C.-J. (2008). Feature ranking using linear SVM. In Causation and Prediction (pp. 53–64). Clow, D. & Makriyannis, E. (2011). iSpot analysed: participatory learning and reputation. In Proceedings of the 1st international conference on learning analytics and knowledge (pp. 34–43). ACM. Corbett, A. T. & Anderson, J. R. (1994). Knowledge tracing: Modeling the acqui- sition of procedural knowledge. User modeling and user-adapted interaction, 4 (4), 253–278. d Baker, R. S., Corbett, A. T. & Aleven, V. (2008). More accurate student mode- ling through contextual estimation of slip and guess probabilities in bayesian knowledge tracing. In International conference on intelligent tutoring sys- tems (pp. 406–415). Springer. Gaˇsevi´c,D., Dawson, S. & Siemens, G. (2015). Let’s not forget: Learning analytics are about learning. TechTrends, 59 (1), 64–71. Hambleton, R. K., Swaminathan, H. & Rogers, H. J. (1991). Fundamentals of item response theory. Sage. Hosmer Jr, D. W., Lemeshow, S. & Sturdivant, R. X. (2013). Applied logistic regression. John Wiley & Sons. Ihantola, P., Vihavainen, A., Ahadi, A., Butler, M., B¨orstler, J., Edwards, S. H., . . . Rivers, K. e.a. (2015). Educational data mining and learning analytics in programming: Literature review and case studies. In Proceedings of the 2015 ITiCSE on Working Group Reports (pp. 41–63). ACM. Kasurinen, J. & Nikula, U. (2009). Estimating programming knowledge with Bay- esian knowledge tracing. ACM SIGCSE Bulletin, 41 (3), 313–317. Lahtinen, E., Ala-Mutka, K. & J¨arvinen, H.-M. (2005). A study of the difficulties of novice programmers. Acm Sigcse Bulletin, 37 (3), 14–18. Liao, S. N., Zingaro, D., Laurenzano, M. A., Griswold, W. G. & Porter, L. (2016). Lightweight, early identification of at-risk CS1 students. In Proceedings of the 2016 ACM Conference on International Computing Education Research (pp. 123–131). ACM. Merceron, A. & Yacef, K. (2008). Interestingness measures for association rules in educational data. In Educational Data Mining 2008. Milne, I. & Rowe, G. (2002). Difficulties in learning and teaching programming—views of students and tutors. Education and Information technologies, 7 (1), 55–66. Molnar, C. e.a. (2018). Interpretable machine learning: A guide for making black box models explainable. Christoph Molnar, Leanpub. Newell, A. & Rosenbloom, P. S. (1981). Mechanisms of skill acquisition and the law of practice. Cognitive skills and their acquisition, 1 (1981), 1–55. Bibliografie 98 Papamitsiou, Z. & Economides, A. A. (2014). Learning analytics and educational data mining in practice: A systematic literature review of empirical evidence. Journal of Educational Technology & Society, 17 (4), 49–64. Quinlan, J. R. (1986). Induction of decision trees. Machine learning, 1 (1), 81–106. Rivers, K., Harpstead, E. & Koedinger, K. R. (2016). Learning curve analysis for programming: Which concepts do students struggle with? In ICER (pp. 143– 151). Romero, C. & Ventura, S. (2010). Educational data mining: a review of the state of the art. IEEE Transactions on Systems, Man, and Cybernetics, Part C (Applications and Reviews), 40 (6), 601–618. Romero, C. & Ventura, S. (2007). Educational data mining: A survey from 1995 to 2005. Expert systems with applications, 33 (1), 135–146. Sanders, K. & Thomas, L. (2007). Checklists for grading object-oriented CS1 pro- grams: concepts and misconceptions. ACM SIGCSE Bulletin, 39 (3), 166– 170. Siemens, G. & Baker, R. S. (2012). Learning analytics and educational data mi- ning: towards communication and collaboration. In Proceedings of the 2nd international conference on learning analytics and knowledge (pp. 252–254). ACM. Suykens, J. A. & Vandewalle, J. (1999). Least squares support vector machine classifiers. Neural processing letters, 9 (3), 293–300. Tanes, Z., Arnold, K. E., King, A. S. & Remnet, M. A. (2011). Using Signals for appropriate feedback: Perceptions and practices. Computers & Education, 57 (4), 2414–2422. Vihavainen, A. (2013). Predicting Students’ Performance in an introductory pro- gramming course using data from students’ own programming process. In 2013 IEEE 13th International Conference on Advanced Learning Technolo- gies (pp. 498–499). IEEE. Watson, C., Li, F. W. & Godwin, J. L. (2013). Predicting performance in an intro- ductory programming course by logging and analyzing student programming behavior. In 2013 IEEE 13th International Conference on Advanced Learning Technologies (pp. 319–323). IEEE. Yudelson, M. V., Koedinger, K. R. & Gordon, G. J. (2013). Individualized baye- sian knowledge tracing models. In International conference on artificial in- telligence in education (pp. 171–180). Springer. Zhang, T. (2004). Solving large scale linear prediction problems using stochastic gradient descent algorithms. In Proceedings of the twenty-first international conference on Machine learning (p. 116). ACM.