Built to order

Music Recommendation using Spotify Data

A "what should I add to this playlist?" engine built on the Spotify Million Playlist Dataset — 1,000,000 playlists, 2M+ tracks. It follows the RecSys Challenge 2018 task (automatic playlist continuation), blending track co-occurrence embeddings with audio-feature similarity and playlist-title matching. The demo is a working playlist builder where every continued track carries a reason chip; the evaluation view covers the 10 challenge scenarios and metrics. Suitable for B.E./B.Tech final-year projects in Computer Science, AI/ML and Data Science.

Music Recommendation using Spotify Data — project thumbnail preview
More project photos (2)

The problem

Playlists are how most people organize music, and the most useful music recommendation is often the simplest: given the songs already in a playlist, what belongs next? Spotify turned this into the RecSys Challenge 2018 by releasing the Million Playlist Dataset — 1,000,000 user playlists with 2M+ unique tracks from ~300K artists — and asking systems to continue partial playlists under 10 scenarios, from a bare title to 100 seed tracks. The full corpus is too heavy for casual student experimentation, and most tutorials retreat to toy collaborative filtering that ignores the playlist-continuation framing entirely. This project delivers a faithful, runnable slice of the real task: the authentic MPD schema, track embeddings learned from playlist co-occurrence, a three-signal scoring blend, and the challenge's exact evaluation protocol (R-precision, NDCG, clicks) on a documented subset — plus a playlist-builder demo where every recommendation explains itself.

How it works

  1. MPD JSON slices are parsed into playlist-track pairs; a documented subset is sampled with a fixed seed so any examiner can reproduce the build on a student PC.
  2. Track embeddings are learned with a Word2Vec-style objective over the playlist "sentences", capturing which tracks belong together.
  3. Audio features (danceability, energy, valence) are normalized per track from the dataset's track metadata.
  4. At inference, each candidate track is scored by the three-signal blend against the seed tracks and the playlist title, then ranked.
  5. The demo renders the top continuations with score bars and reason chips; the track explorer shows any track's audio-feature profile.
  6. Evaluation truncates each test playlist per the 10 challenge scenarios, recommends 500 tracks, and computes R-precision, NDCG and clicks exactly as the challenge defines them.

Tech stack:

  • Python 3.10, gensim (Word2Vec-style track embeddings)
  • pandas, NumPy, scikit-learn (data pipeline, audio-feature similarity)
  • Matplotlib (scenario and metric charts)
  • Flask demo app (playlist builder, track explorer, evaluation views)
  • Spotify Million Playlist Dataset subset (documented sampling; full 1M optional)
Parameter Value
Task Automatic playlist continuation (RecSys Challenge 2018 framing)
Dataset Spotify Million Playlist Dataset: 1,000,000 playlists, 2M+ unique tracks, ~300K artists
Dataset scope Public US playlists, Jan 2010 - Nov 2017; student build trains on a documented subset
Signals Track co-occurrence embeddings (0.5) + audio-feature similarity (0.3) + title matching (0.2)
Audio features Danceability, energy, valence from track metadata
Evaluation 10 challenge scenarios; R-precision, NDCG, recommended-songs clicks — computed by the notebook during your build
Design targets Approximately R-precision 0.18, NDCG 0.35, clicks 1.9 (final numbers from your own run)
Recommendations Up to 500 ranked tracks per playlist, as in the challenge
Input Seed tracks + playlist title
Output Ranked continuation tracks with scores and reason chips

Project features

  • [Playlist-continuation framing] The task is modeled exactly as RecSys Challenge 2018 defined it: extend a partial playlist with up to 500 ranked tracks, not generic "similar songs".
  • [Track embeddings from co-occurrence] A Word2Vec-style objective over playlist-track pairs learns embeddings where tracks that share playlists sit close together.
  • [Three-signal scoring blend] Continuation score = 0.5 x co-occurrence similarity + 0.3 x audio-feature similarity + 0.2 x playlist-title matching, with weights documented and tunable.
  • [Audio-feature similarity] Danceability, energy and valence profiles let the model match vibe even for tracks that rarely co-occur.
  • [Playlist-title matching] Title keywords (focus, workout, party) contribute a cold-start signal when few or no seed tracks exist.
  • [Reason chips per track] Every continued track shows why it was chosen — co-occurrence counts, shared vibe, title fit — in the demo UI.
  • [Challenge-faithful evaluation] The 10 RecSys scenarios (title-only, first track, first 5, 5 random, first 10/25/100, last 5, title+1, title+5) with R-precision, NDCG and clicks, all computed by the notebook.

What is included

  • Complete source code (MPD parsing, embedding training, three-signal scorer, evaluation, Flask demo)
  • Jupyter notebook (buyer-run procedure: sample subset, train embeddings, evaluate all 10 scenarios)
  • Evaluation outputs: per-scenario R-precision, NDCG and clicks tables from your build
  • Project report PDF (background, challenge history, methodology, evaluation, dataset caveats)
  • PPT presentation for final review
  • Viva Q&A preparation document (playlist continuation, embeddings, the three metrics, MPD limitations)
  • Setup guide (environment, dataset access via the challenge resources page, subset sampling, running the demo)

Limitations & prerequisites

  • The MPD is sampled with randomization, manual filtering and fictitious tracks added — it is not representative of real Spotify listening, and the report states this plainly.
  • Title-only cold start is weak: a brand-new empty playlist has zero track signal and title NLP alone carries the recommendation.
  • The corpus covers US playlists from 2010-2017; newer artists, genres and regional tastes are missing.
  • The full 1M-playlist corpus is heavy — the student build trains on a documented subset, and full-corpus training is listed as future scope.
  • Reported metrics are offline challenge metrics; they do not measure whether real users would actually keep the continued tracks.

Frequently Asked Questions

Which dataset is used?

The Spotify Million Playlist Dataset from the RecSys Challenge 2018: 1,000,000 user-created playlists with 2M+ unique tracks by ~300K artists, including playlist titles, track lists and metadata. The student build trains on a documented, fixed-seed subset; the pipeline supports the full corpus.

What exactly is "playlist continuation"?

Given a partial playlist (a title, a few tracks, or both), recommend up to 500 tracks that fit it — the exact task Spotify set in 2018, evaluated across 10 scenarios of varying difficulty.

Are the metric numbers guaranteed?

No. Design targets are approximately R-precision 0.18, NDCG 0.35 and 1.9 clicks (in the range of published challenge baselines); the notebook computes all three metrics on your subset build across the 10 scenarios, and the report presents your measured numbers.

How do I get the dataset?

The MPD is available to registered participants from the challenge's resources page (re-released as an open challenge on AIcrowd in 2020); the setup guide walks through registration, download and the subset-sampling step.

Why three signals instead of just collaborative filtering?

Co-occurrence alone fails on title-only and few-track scenarios. Audio features match vibe without shared history, and title matching gives the cold-start case something to work with — the blend mirrors what won the challenge's creative track.

Can it recommend songs released after 2017?

Not from the MPD, which ends in November 2017. The report states this boundary; extending to newer tracks via audio-content embeddings is listed as future scope. Suitable for B.E./B.Tech final-year projects in Computer Science, AI/ML and Data Science.

Components & software requirements
  • Python 3.10, gensim (Word2Vec-style track embeddings)
  • pandas, NumPy, scikit-learn (data pipeline, audio-feature similarity)
  • Matplotlib (scenario and metric charts)
  • Flask demo app (playlist builder, track explorer, evaluation views)
  • Spotify Million Playlist Dataset subset (documented sampling; full 1M optional)
Delivery information

Built-to-order project. Delivery timeline is shared after order confirmation based on current queue.

Support terms

Complete documentation, setup guide, and viva preparation included. Support for setup and explanation provided.

Download abstract (PDF)

Related guides

All guides
Illustration of object tracking showing video frames with bounding boxes and persistent ID labels following people and vehicles, comparing motion prediction and appearance matching.B.E./B.Tech Computer Science and Electronics students building video analytics projects — people counting, vehicle tracking, sports analysis — who have detection working and need

Object Tracking: DeepSORT and ByteTrack Explained

Detection finds objects per frame; tracking keeps their identities across frames. This guide explains tracking-by-detection, Kalman motion models, DeepSORT's appearance embeddings vs ByteTrack's low-confidence box recovery, tracking metrics (HOTA, IDF1, ID switches), and the tuning parameters that determine real-world quality.

Read guide
Illustration of image segmentation showing U-Net's U-shaped encoder-decoder with skip connections producing pixel masks, alongside Mask R-CNN detecting instances with masks.B.E./B.Tech Computer Science and AI/ML students moving from image classification or detection to pixel-level understanding — medical imaging, defect detection, autonomous driving

Image Segmentation: U-Net and Mask R-CNN

When projects need pixel-level answers, segmentation delivers. This guide explains semantic vs instance vs panoptic segmentation, U-Net's encoder-decoder with skip connections, Mask R-CNN's parallel mask head, Dice and IoU evaluation, paired augmentation, and how to choose the right architecture for your data and question.

Read guide
Illustration of Whisper speech-to-text showing sound waves flowing into a neural network and emerging as transcribed text with timestamps and speaker labels.B.E./B.Tech Computer Science and AI/ML students adding speech-to-text to projects — voice assistants, meeting transcription, accessibility tools

Whisper for Speech-to-Text in Student Projects

Whisper transcribes speech in dozens of languages with no training required. This guide covers how it works, choosing among model sizes, running it locally with faster-whisper, handling hour-long audio, timestamps and speaker diarization, multilingual quirks, and honest evaluation with word error rate.

Read guide
Get a quotation