ML Engineer · 2025

Movie Recommendation System

SVD collaborative filtering — the research foundation that became LumoroX.

PythonSurpriseSVDCollaborative Filtering
Movie Recommendation System — SVD collaborative filtering — the research foundation that became LumoroX.

Goals

  • Move discovery beyond top-N popularity lists.
  • Produce personalised top-10 recommendations per user profile.
  • Beat a popularity baseline on a measurable error metric.
  • Keep the model small enough to serve interactively.

Approach & architecture

  1. 1

    Data prep

    Built a user-item rating matrix and split it into train and holdout sets by user.

  2. 2

    Matrix factorization

    SVD from the Surprise library learned latent user and item factors from sparse ratings.

  3. 3

    Tuning

    Grid search over factor count, learning rate and regularisation, scored on RMSE.

  4. 4

    Evaluation

    Compared against a popularity baseline and inspected per-user top-10 lists for plausibility.

Matrix factorization diagram: a sparse user-item rating matrix approximated by user factors multiplied by item factors, with grid-search hyperparameter tuning and RMSE evaluation against a popularity baseline.
SVD matrix factorization with grid-search tuning and RMSE evaluation.

Tech stack

Python
Surprise
SVD
Collaborative Filtering
Results panel comparing RMSE of the SVD model against a popularity baseline with an 18 percent improvement, next to a personalised top-10 recommendation table with predicted ratings.
18% RMSE improvement over the popularity baseline, with per-user top-10 lists.

Results

18%

RMSE improvement over the popularity baseline

Top-10

personalised lists per distinct user profile

→ LumoroX

extended into a live discovery product

Frequently asked questions

More case studies

All projects