9,700+movies
100Kratings
HybridSVD + content
38modern films
The problem
Movie recommendations with no user history
Most recommendation systems need extensive user history to work well. MatchMaker solves the cold-start problem by letting users pick movies they like, then combining collaborative filtering (what similar users liked) with content-based similarity (same genres).
Architecture
Five phases, hybrid approach
Phase 1Collaborative filtering (SVD)
Uses scikit-surprise SVD matrix factorization trained on 100K user-movie ratings. Predicts how much a user would like unseen movies based on patterns from similar users.
- 943 users, 1,682 movies in original training
- SVD with 50 latent factors, 20 training epochs
- Cold-start handled via synthetic user from liked movies
- Scikit-surprise library for fast training
Phase 2Content-based filtering
Builds genre profiles using TF-IDF vectorization and cosine similarity. When you like 'Toy Story', it finds other animation/children/comedy movies regardless of user ratings.
- TF-IDF on pipe-separated genre strings
- Cosine similarity matrix for instant lookups
- Works for movies with zero ratings (cold-start)
- Genre-level matching, not keyword-based
Phase 3Hybrid fusion
Combines SVD and content-based scores with a configurable weight (60% collaborative, 40% content-based). Small random jitter ensures results vary between requests.
- 60% SVD / 40% content-based weighting
- Score normalization to [0, 1] range
- Random jitter (±0.02) for variety
- Graceful fallback to single method if one fails
Phase 4FastAPI service
Deployed as part of the najdiavto-ml service on Railway. Four endpoints serving search, recommendations, similar movies, and popular picks.
- POST /api/recommend — hybrid recommendations from liked movies
- POST /api/recommend/similar — genre-based similar movies
- GET /api/recommend/popular — randomized popular picks
- POST /api/recommend/search — movie title search
Phase 5Modern dataset
Uses MovieLens latest-small (9,742 movies, 100K ratings, up to 2018) with 38 injected modern films up to 2024 for complete coverage.
- 9,742 movies from the MovieLens latest-small dataset
- 100,836 ratings from 610 users
- 38 modern films injected (2018–2024)
- Movies include Batman Begins, Inception, Dune, Oppenheimer
Stack
Tools used
Pythonscikit-surprisescikit-learnFastAPIReactTypeScriptDocker