Glen Cooper's UMG Seminar (Mar 12 @ 12 pm) on song skips (in music streaming) and how it's negatively impacting revenue for artists and record labels.
Intuitively, a recommendation engine that can meaningfully push songs that a user will listen to 'fully' (or 30s+) is highly desired.
I decided to combine Cooper's requirement with the Radio industry's 'Sandwich principle' to solve the problem.
In summary, find highly desirable songs and insert them into playlists between two popular or familiar songs. This will ideally enable a longer listen for these newly discovered songs.
What it does
- Fetches the bottom of the Top 5000 songs in the US charts
- Analyzes these songs for unique anomalies (e.g. high Shazam hits, unusual ranking movement, etc.)
- Assigns a 'Star Power' score for song potential
Star Miner can then:
- Take a playlist as input
- Analyze a playlist's unique song properties (e.g. acoustic qualities, tempo, etc.)
- Provide recommendations on where to insert newly discovered 'high star power' songs
How I built it
Backend: Node JS + MySQL FrontEnd: EmberJS framework + HighCharts for graphing
Data APIs: 7Digital: Media streaming on song detail page BuzzAngle: Fetching song ranking data and streaming stats Spotify: Fetching song attributes
Challenges I ran into
Scoring Algorithm: Ended up using a weighed equation, that provides a higher bias for certain properties (e.g. high Shazam hits = higher score). I'd like to make this more advanced in the future.
BuzzAngle's reporting APIs took 1-3 mins on average due to number crunching / performance time. Had to account for that.
Playlist song insertion: I'm only sorting songs by 'Valiance' (a measurement of a song's positivity) when determining where to insert a song. Ideally I'd like to expand this to use more advanced parameters
Accomplishments that I'm proud of
Getting an end-to-end solution working (DB -> Server -> Front End) Getting High Charts multi line graphing to work
What I learned
I could be doing a lot more to simplify the UI for the user. Right now I provide a lot of data upfront. Ideally the user should see the bare minimum, and have the UI automatically compute and present the data needed.
Learned a lot about compromises to attain desired product or feature set. I ended up not making all the APIs live, and storing a lot of data to MySQL for computations
What's next for Star Miner
I'd love to explore using Star Miner with a much larger data set (n=100000+). This will provide much more unique results into upcoming artists and songs
I'd like to also explore how to use time of day as a parameter for deciding when 'sandwiched' recommendations should be made.