Music Recommendation

Last updated April 2017

This page is a description of my thoughts and work on music recommendation. Relevant works include:

The audience

People who have their own music collections/people who like to own their music instead of just streaming it from Pandora, Spotify et. al.

The problem

  1. It takes too much effort to listen to the music in your library. A few current options are: 1) spend time managing playlists, 2) listen to music by artist, album etc. 3) listen to the entire library on shuffle mode and skip songs a lot.
  2. It’s inconvenient to find new music. Pandora & friends are far from perfect.

The solution

A music player app that learns your music preferences from your skipping behavior. You would listen to your entire library on shuffle mode, but the app would have a smart shuffle algorithm so it wouldn’t keep playing songs that it knows you’ll skip. All you have to do is press play and skip songs when you don’t want to listen to them right now, and the app would handle the rest.

This would give the app a deep understanding of your music preferences. It would use that data to occasionally stream new songs to you. You would be able to discover new music without any extra effort. You could also buy songs from within the app and they would be synced to all your devices.

Current progress

I’ve released a prototype Android app. It keeps track of your listening history and groups it into sessions. It finds old sessions that are similar to the current session and plays other songs from those sessions that you didn’t skip. It works, but it tends to play the same songs over and over again instead of actively exploring new songs in your library.

The smart shuffle algorithm is coded in Clojure. It’s super cool. It does session-based collaborative filtering using K-nearest neighbor. I compile it to a jar and include it as a library in the Android app which is coded in java.

I really like Lisp/Clojure, so I’m planning to do the whole app with it in the future. The Android app is just a prototype. I’m going to create a new cross-platform music app from scratch using something like React Native + ClojureScript. The backend will be written in Clojure also.

Past progress

I wrote a literature review of music recommendation research for my technical communication class.

I worked on a precursor to this project throughout 2016. I got a $1,500 grant for it (it was an ORCA project), but it ended up being a bad idea. Going through that process helped me come up with this current idea.


  1. Do more exploring. Exploration vs. exploitation is a well known problem in reinforcement learning. See the multi-armed bandit problem. This will make the app stop playing the same songs over and over.
  2. Add content-based modeling to the algorithm for when there isn’t enough user data yet.
  3. Create the cross-platform app.
  4. Add streaming recommendations. Use a similar hybrid model (content-based + collaborative filtering) to give recommendations.
  5. Make it so you can buy songs from within the app.
  6. Figure out data syncing so users’ music collections stay synced across devices. See I Heart Dropbox for my general thoughts on how this should be done.
  7. Iterate. Make the algorithm really good so no one else can catch up. For example, it’s easy to switch search engines, but Google is still ahead because it’s the best. I want to do that with music recommendation.


  1. Create a startup around this idea. I’m graduating in December 2017. I’m going to try to get into Y Combinator, either in January or June 2018. Otherwise I’ll just do it here in Provo.
  2. Focus on indie artists. They could upload their new music, and the system would automatically figure out what kinds of people like their music.
  3. Expand to everyone, not just people with their own music collections. If you don’t own any music, the app could stream music all the time. This app should be all anyone ever needs for listening to music. We’ll have better data on our users than Pandora/Spotify/etc, so that should give us the higher ground we need to dominate the music recommendation market (how hard could it be?).
  4. (Super long term) after the startup becomes successful, make another startup that focuses on music creation instead of just music consumption. Make it easier for amateurs and indie artists to create music without selling their souls to the record labels. The music recommendation system would already be a big step in helping to get their music out there. Maybe we could use an open-source model of development. Think Github for music.


We’ll make money from streaming recommendations and selling songs inside the app. For streaming, I like the idea of doing a prepaid model, e.g. you put $10 in and we charge $0.005 everytime we stream you a song. We could do a monthly subscription model though. But there will be no ads. Instead we’ll give people a free trial. The goal is to make the app so good that people will actually be willing to pay after the free trial.

Interested in this idea? Send me an email: