§3.3 · Nov 2025 — Jan 2026 · Shipped

Course Load Evaluator

An end-to-end tool that takes a proposed term of courses and returns a risk score and category while you can still act on it. The interesting part is not the interface but the model selection: a tuned Random Forest reached 0.65 average precision on held-out data, beating a Logistic Regression baseline that could not see the interaction the problem is actually about.

Pythonscikit-learnFastAPIReactTypeScript
3.3.1

The problem

Course-load decisions get made on hearsay — a friend's opinion about whether two particular courses are survivable together. The signal exists, spread across everyone who has already taken them, and nobody aggregates it. It also expires: advice that arrives after registration closes is not advice.

3.3.2

What I built

A React and TypeScript dashboard that renders its inputs dynamically and visualises the prediction, over a FastAPI backend with request validation and structured error responses that runs the prediction through a scikit-learn pipeline in real time.

3.3.3

The interesting decision

I started with Logistic Regression as a baseline, which is the right place to start and the wrong place to stop. It underperformed for a diagnosable reason rather than a mysterious one: it is additive, and course-load risk is not. Risk lives in the interaction between how many courses you take and how heavy each one is, and a model linear in those two terms cannot represent that interaction at all. A Random Forest can, because each split changes the meaning of the splits below it.

Tuned, it reached 0.65 average precision on held-out data. Average precision, not accuracy, is the number that matters here: the risky loads are the minority class, so a model that called every term safe would post excellent accuracy while being worthless. Choosing the metric was more consequential than choosing the model.

3.3.4

What I would change

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

← Back to the table