Implementation of a movie recommendation system for the Applied ML at Scale course taught by Prof. Ulrich Paquet at AIMS South Africa
# Collaborative Filtering-based Recommendation System using the MovieLens 32M Dataset
This project implements high-performance Matrix Factorization (MF) algorithms (bias-only baseline, standard MF using user and item latent vectors, hybrid MF incorporating genre-based feature priors) using **Alternating Least Squares (ALS)** for a collaborative filtering-based movie recommendation system. It leverages **Numba JIT compilation** and **Sparse Matrices** to scale and optimize training on the MovieLens 32M dataset.
## 🔗 Links
-
- **📄 View Project Report**
## Tools Used
- **uv** - For managing dependencies and virtual environment in Python.
- **Numba**: JIT compiler for accelerating ALS training loops.
- **OmegaConf**: Experiment configuration management.
## 📂 Project Structure
```text
.
├── configs/ # OmegaConf configuration files
├── data/ # Raw MovieLens 32M dataset
├── figures/ # Generated plots
├── logs/ # Execution logs
├── notebooks/ # Jupyter notebooks for experimentation
│ ├── eda.ipynb # Exploratory Data Analysis
│ ├── experiments.ipynb # Unoptimized models
│ └── experiments_optimized.ipynb # Optimized models (using Numba)
├── report/ # LaTeX report and PDF
├── results/ # Serialized model weights (.npz) and metrics
├── scripts/ # CLI scripts for downloading data, etc.
├── src/ # Source code package
│ ├── data/ # Dataset loading, indexing, splitting
│ ├── models/ # ALS models implementations
│ ├── inference/ # Inference helpers
│ └── utils/ # Logging, plotting, and serialization helpers
└── pyproject.toml # Project dependencies
```
## Key Files & Modules
- `notebooks/experiments_optimized.ipynb`:
The primary entry point for experiments. Runs full-scale training, hyperparameter tuning, and gen …