🏆 Best Newbie Hack at MAIS Hacks 2023
Our model takes as input a list of the user's current courses and professors, alongside their GPA and completed credits and predicts their GPA by the end of the semester. The model takes historical course data and the difficulty of each professor. Furthermore, our model is specific towards McGill students by only training on McGill data, meaning our predictions follow the trends of McGill courses and McGill professors.
| course | term | avg | alltime_avg | prof |
|---|---|---|---|---|
| ACCT351 | F2016 | 3.0 | 2.991667 | Tsang, Desmond |
| ACCT351 | F2016 | 3.0 | 2.991667 | Abrams, Amanda |
| ACCT351 | F2016 | 3.0 | 2.991667 | Marianer, Michael |
| ACCT351 | F2016 | 3.0 | 2.991667 | Murray, Michael George |
| ACCT351 | W2017 | 3.0 | 2.991667 | Abrams, Amanda |
To get historical course data, we used crowdsourced data from McGill Enhanced. This dataset contained the majority of our required data, except that it was missing a professor column. We created a web scraper using Beautiful Soup to retrieve professor names for every instance. In addition, we added an all-time average column that has the all-time course average.
Our model follows an Exponential Moving Average (EMA) model that uses historical class average data in order to predict the next class average in conjunction with prof difficulty. This will place a higher importance on recent data to predict the next class average.
Where the Prof value is the associated difficulty of the prof with a coefficient of 1, found through linear regression between the class average and professor difficulty in R.
Thus, we can use the
Our model found, through simple linear regression in R, that there is a one to one increase between the professor score and the overall course average.


