End-to-End AI Career Coach: MLP Surrogates + PPO Reinforcement Learning + LLM Report Generation
An AI-powered career advising system that goes beyond prediction — it tells students what to do, in what order, and why, with realistic effort constraints and empathetic natural-language coaching reports.
This project is for academic purposes as part of the UCL ELEC0149 Introduction to Machine Learning course (2025–2026). All rights reserved.
Traditional career prediction models tell a student "you have a 35% chance of getting placed" — and stop there. Our system answers the follow-up question: "What precise steps should I take to change this outcome?"
We formulate career development as a Markov Decision Process (MDP) and solve it with Proximal Policy Optimization (PPO). The system:
- Diagnoses — Dual MLPs predict placement probability and expected salary
- Plans — PPO discovers the optimal multi-step improvement path under realistic effort constraints
- Communicates — An LLM (Gemini Pro) translates the mathematical trajectory into an empathetic, professional coaching report
- Cost-Aware Planning: Exponential effort decay (λ=0.8) prevents unrealistic recommendations like "do 10 internships"
- Dual-Policy Architecture: Separate PPO policies for unemployed (threshold crossing) and employed (salary maximisation) students
- Privacy-Preserving Reports: A desensitisation layer conceals all model internals (thresholds, logits, raw scores) from the LLM and end user
- Interactive Web App: Streamlit-based UI — enter your profile, get a personalised coaching report in ~30 seconds
| Metric | Value |
|---|---|
| Unemployed → Employed conversion rate | 53.9% (avg 6.1 steps) |
| Employed salary improvement (median) | +16.4% |
| MLP placement AUC | 0.833 |
| MLP salary R² | 0.794 |
| End-to-end latency | 15–30 seconds |
Student Profile ──→ Dual-MLP Surrogate ──→ PPO RL Agent ──→ Desensitisation ──→ Gemini Pro LLM
(Placement + Salary) (13 actions, (threshold →%, (3-chapter
15-step horizon, LPA → GBP) coaching report)
24 rollouts)
MachineLearning_2526_U4/
├── src/
│ ├── data.py # Data loading, preprocessing, DataLoader construction
│ ├── MLP.py # PlacementMLP + SalaryMLP training
│ ├── RL.py # MDP environment, PPO training, multi-rollout inference
│ ├── LLM.py # Data desensitisation + Gemini Pro report generation
│ ├── app.py # Streamlit web application
│ ├── compare_models.py # MLP vs Random Forest benchmarking
│ ├── generate_rl_figures.py # RL evaluation figure generation
│ ├── models/ # Trained model weights (.pth, .zip)
│ ├── figures/ # Generated figures for the paper
│ └── ppo_tensorboard/ # PPO training logs
├── data/ # Dataset (not tracked by git)
├── U4_Career_Coach_Report_Employed.pdf # Example report (employed student)
├── U4_Career_Coach_Report_Unemployed.pdf # Example report (unemployed student)
├── requirements.txt
└── README.md
git clone https://github.com/pangxuan945/MachineLearning_2526_U4.git
cd MachineLearning_2526_U4
pip install -r requirements.txtCreate a .env file in the src/ directory:
echo 'GEMINI_API_KEY=your_gemini_api_key_here' > src/.envPre-trained weights are included in src/models/. To retrain from scratch:
cd src
# Step 1: Train dual MLPs
python MLP.py
# Step 2: Train PPO policies
python RL.pycd src
streamlit run app.pyOpen http://localhost:8502 in your browser, fill in your information, and receive your coaching report.
Two complete AI-generated coaching reports are available in the repository:
- 📋 Employed Student Report — "Workplace High-Potential" with 215.6% competitiveness, 15-step salary optimisation reaching £47,739 (+12.5%)
- 📋 Unemployed Student Report — "Job-seeking Breakthrough Candidate" at 53.5%, 13-step path crossing the employment threshold
- PlacementMLP: 40→128→64→1, BatchNorm, Dropout(0.3/0.2), class-balanced BCE
- SalaryMLP: 40→128→64→1, BatchNorm, Dropout(0.1/0), Smooth L1 loss, trained on placed students only
- Threshold optimised via macro-F1 sweep on validation set
- Algorithm: PPO (Stable-Baselines3)
- Action space: 13 discrete actions (12 increase + 1 decrease_backlogs)
- Effort cost: Percentile-based steps with geometric decay λ=0.8 per repeated use
- Integer features: Bernoulli jump mechanism preserving expected effort parity
- Inference: 24 candidate rollouts → task-specific best-path selection
- Model: Gemini Pro via Google GenAI API
- Desensitisation: Threshold normalised to 100% baseline; salaries converted LPA→GBP (×3000)
- Guardrails: Explicit prohibition of technical terms (MLP, RL, threshold, logit)
| Name |
|---|
| Yihang Liu |
| Leonard Huang (Zhenxuan Huang) |
| Zifan Song |
| Shen Wu |
UCL Machine Learning Capstone Project, 2025–2026
@article{liu2026career,
title={End-to-End AI Career Coach: Integrating MLP, Reinforcement Learning, and LLM-based Explanation},
author={Liu, Yihang and Huang, Leonard and Song, Zifan and Wu, Shen},
year={2026},
url={https://github.com/pangxuan945/MachineLearning_2526_U4}
}This project is for academic purposes as part of the UCL ELEC0149 Introduction to Machine Learning course (2025–2026).
