All work
ProjectLASU Final-Year Project

CareerFit — An AI Career-Path Recommender

My final-year project: an AI career-path recommender for Nigerian university students. A student takes a short personality-and-skills assessment and gets their three best-fit, degree-relevant careers, ranked by match. Full-stack and mine end to end — React, Flask, MongoDB, and a Random Forest model trained on a synthetic dataset I designed. Top-3 accuracy 94% across 24 careers.

Live demo
CareerFit home page — "Discover the career path that fits who you are"

The problem

Choosing a career at a Nigerian university is mostly guesswork. Counsellors are stretched impossibly thin — one study puts the ratio at around 3,500 students to a single counsellor — so real one-on-one guidance barely exists. What fills the gap is peer pressure, family opinion, and whatever's popular, rather than a student's actual interests and aptitudes. The result is a skills-to-market mismatch that feeds graduate unemployment; nearly a quarter of Nigerian youth report being unemployed and looking for work.

CareerFit, my final-year project at Lagos State University, asked a simple question: can software give every student the consistent, personalized, data-driven career guidance that a scarce human counsellor can't scale?

What I built

CareerFit is a web application. A student takes a short assessment — a progressive, one-question-at-a-time RIASEC personality inventory, self-rated skills, their CGPA, and their course of study — and gets back their three best-fit careers from a catalogue of 24, each with a match score and ranked by fit.

The assessment: one statement at a time on a five-point agree/disagree scale, with a progress bar. This turns Holland's RIASEC framework into a short interest inventory, so a student never has to know their own personality type in advance.

It's full-stack and mine end to end: a React (Vite) frontend, a Flask REST API, a MongoDB database, a Random Forest model at the core, and secure JWT authentication so each student keeps a history of their results.

The dashboard: each result is shown as ranked careers with a match percentage and a comparative bar, alongside a saved history so a student can retake the assessment and watch how their matches shift over time.

The hard part I: teaching a model with data that doesn't exist

Supervised ML needs a labelled dataset, and no real dataset of Nigerian students' profiles-and-outcomes exists — institutional records are locked behind privacy rules, and nobody's collecting it. So I generated a synthetic one. The interesting decision was making it hard on purpose.

The naïve approach — label a record "Software Developer" whenever the Investigative score is highest — would let any classifier score near-100% by simply recovering that rule, proving nothing. Instead, I gave each of the 24 careers a statistical profile: a mean and spread for every one of the 17 features (the six RIASEC scores, CGPA, and ten skills). I then sampled 335 students per career — 8,040 in total, perfectly balanced, and seeded so it's fully reproducible. Because related careers' distributions deliberately overlap (a Software Developer and a Cybersecurity Analyst look similar on paper), the model can't memorize a threshold — it's forced to learn the combined, multi-feature patterns that actually separate careers.

The hard part II: the model doesn't know what you studied

The model predicts from personality, CGPA, and skills alone — it has no idea what your degree is. Left unchecked, it could cheerfully tell a Law student to become a Fashion Designer. A personalized recommendation that's impossible for your programme is worse than useless.

So I added a course relevance layer that runs after the model. It's a hand-authored, auditable mapping that sorts every career into three tiers for each course of study:

  • Tier 1 (flagship): the degree's core career — boosted, and guaranteed to appear.
  • Tier 2 (relevant): careers the degree can lead to — allowed, and ranked among themselves by the model's scores.
  • Tier 3 (excluded): careers that don't fit the degree — never recommended.

After the model produces probabilities across all 24 careers, I strip Tier 3, boost the flagship, re-rank what's left, and recalculate the match percentages so they stay meaningful over the smaller set. It's a deliberate hybrid: the ML brings the personalization, and the curated rules guarantee feasibility. I kept the mapping rule-based on purpose — because it's curated and auditable, every recommendation the system makes is defensible and easy to justify.

The decision I'm proudest of: shipping the "worse" model

I didn't just pick Random Forest and move on — I compared it head-to-head with SVM, Logistic Regression, and Gradient Boosting on the same split. And SVM and Logistic Regression actually scored 3–5 points higher on top-1 accuracy.

I shipped Random Forest anyway. The product doesn't live or die on top-1 accuracy — it shows three ranked careers with match percentages, and it should be able to explain itself. Random Forest natively produces well-behaved class probabilities (which the system uses to rank careers and show a match score) and feature-importance measures (which explain why a career was recommended). The higher-accuracy models don't give those without extra machinery. For a guidance tool, transparency and honest ranking mattered more than a marginal accuracy bump — so I traded raw top-1 for a system that can show its work.

Did it work?

Across 24 careers the model reaches ~64% top-1 accuracy and ~94% top-3 accuracy — and top-3 is the number that counts, because the system presents three. Five-fold cross-validation held steady at ~64.7% (±1.4%), so it's not a lucky split.

The most satisfying result was in the confusion matrix: the model's mistakes aren't random. It confuses careers that are genuinely similar — Software Developer with Cybersecurity Analyst, Civil with Electrical Engineering — which means it learned real relationships between a person and a career rather than memorizing data. And the feature-importance analysis confirmed the theory the whole project rests on: the RIASEC personality dimensions dominated the predictions, exactly as Holland's framework predicts.

What I'd build next

The honest limitation is the synthetic data. The strongest next step is to validate and retrain on real, anonymized LASU student data (with ethical approval), then pull the closely-confused careers further apart and fold in live labour-market demand so recommendations reflect not just who you are but what's actually hiring.

ReactFlaskPythonscikit-learnMongoDBRandom Forest
#engineering#education