HomeAboutServicesPortfolioScrapersReviewsBlog Hire me
Case study

Hybrid Course Recommender for 95,415 MOOC Learners

Category
Recommender Systems
Stack
PyTorch · Transformers · Flask
Data
MOOCCube (public)
Status
Deployed as REST API
0.454
Recall@10 (vs 0.426 item-CF)
0.285
NDCG@10 (vs 0.264 item-CF)
95,415
Learners served via API

Problem

MOOC platforms lose learners who can't find their next course. The goal: recommend each learner's next course from their history — and prove the recommender actually beats simpler alternatives before anyone trusts it.

Approach

Instead of jumping straight to deep learning, the project built an honest evaluation harness first: a chronological leave-last-out split (predict each learner's final enrollment from everything before it), shared by every model. Three baselines — popularity, item-based collaborative filtering, and matrix factorization (SVD) — set the bar. The hybrid model then had to clear it.

Exploratory analysis of MOOCCube: long-tailed distributions of courses per learner and enrollments per course

Technology

  • PyTorch — Transformer/GRU sequence encoder over each learner's enrollment history
  • sentence-transformers (all-MiniLM-L6-v2) — content embeddings of course titles (translated zh→en with Argos)
  • Collaborative signals — item-item similarity fused with the learned representations
  • Flask REST API/recommend, /health, and sample-user endpoints over precomputed top-20 lists

Implementation

The pipeline downloads and k-core filters MOOCCube, trains the hybrid network with AdamW, and runs ablations to show each component earns its place. Cold-start slices measure how the model behaves for learners with almost no history — where content embeddings carry the load. Significance testing (p ≈ 1e-182) confirms the improvement isn't noise.

All models compared at k=10 on MOOCCube leave-last-out: the hybrid model outperforms popularity, item-CF and SVD on recall, precision, F1 and NDCG

Result

The hybrid model beat every baseline on every metric: Recall@10 rose to 0.454 from item-CF's 0.426, NDCG@10 to 0.285 from 0.264, and AUC to 0.9279 from 0.9188. Recommendations for all 95,415 learners are precomputed and served through the Flask API with a browser demo UI.

Need a similar system?

Describe your data and the decision it should support — you'll get a feasibility answer and a fixed quote.

Start a project →