Our genetic information can tell us a lot about ourselves that we don't know (yet). What better way to put it to use than help us find new things we don't know we like? The inspiration behind Genomusic is to enrich music recommendations not only based on what is already known to be liked by the user, but also open up completely new horizons based on genetic information.
What it does
- Connect to your Spotify account
- Connect to your GenomeLink account
- Done! Get your predicted Spotify preference profile based on genetic information and generate recommended playlists based on that profile.
How we built it
To generate recommendations we use Spotify's recommendations API (https://developer.spotify.com/documentation/web-api/reference/browse/get-recommendations/). This requires providing a "preference" seed and list of genres. Thus given a GenomeLink list of markers we need to generate both a list of genres and a preference profile. We can use existing data to generate these:
Given a list of user genetic markers and liked songs for many users, we can try to isolate how much each genre is "liked" by each genetic marker. We calculate the score for each genre for each marker as the sum of the marker values (minus 2) for each song liked by a user:
score(genre, marker) = sum([user[marker] - 2 for song in user_songs for user in users if song.genre == genre]).
-2 means that songs liked by users whose marker value is 2 (neutral) don't contribute to the genre's score, while songs liked by users with low marker value contribute a negative value.
After calculating the scores we can take the X-most favorite genres for each marker, and later combine them for a single user based on all the user's marker values.
First, given user data, we can construct a list of song ratings
R and song properties
S (properties similar to the preference seeds passed to the Spotify recommendation algorithm). Assuming a simple (linear) relationship between the users' preferences and the song preferences, to find the user preferences we just need to solve the linear system
S * P_transposed = R, where
P is the user preference matrix. Then we again assume a linear relationship between genetic profile
G and the preference matrix, and find the mediating matrix
M used to translate a genetic profile to a preference profile by solving the linear system
G * M_transposed = P. From there we can use
M to predict the preference profile based on the genetic profile, and feed those preferences to the recommendation API.
Of course these representations and predictions are gross simplifications of the problem, but we hope that thanks to the large pool of genetic markers they contain enough variety to capture some interesting properties.
What's next for Genomusic
- Learning more complex relationships between the genetic profile and preference profile.
- Combining user preferences with genetic information to produce more accurate recommendations.