A machine learning-based music recommendation system implementing multiple algorithms for personalized music discovery using Spotify's audio features.
This system combines content-based filtering, matrix factorization, and collaborative filtering to provide personalized music recommendations. It handles cold start problems and processes implicit feedback signals.
- Content-Based Filtering: Recommends music based on audio feature similarity
- NMF Matrix Factorization: Discovers latent user preferences and music patterns
- Collaborative Filtering: User-based recommendations from similar listeners
- Hybrid Approach: Combines multiple methods for better accuracy
- Cold Start Handling: Recommendations for new users and tracks
- Genre Classification: Automatic music genre prediction
- 114,000 tracks with audio features (danceability, energy, valence, etc.)
- 114 unique genres across multiple music categories
- Implicit feedback simulation based on popularity and user preferences
git clone https://github.com/yourusername/spotify-recommendation-system.git
cd spotify-recommendation-system
pip install pandas numpy scikit-learn matplotlib seaborn scipyfrom recommendation_system import HybridRecommender
# Initialize and train
recommender = HybridRecommender()
recommender.fit(interaction_matrix, track_features)
# Get recommendations
recommendations = recommender.recommend(user_id='user_123', n_recommendations=10)
# Handle new users
new_user_recs = recommender.recommend(preferred_genres=['rock', 'pop'], n_recommendations=5)| Model | Precision@5 | Recall@5 | F1@5 |
|---|---|---|---|
| Content-Based | 0.234 | 0.187 | 0.208 |
| NMF | 0.267 | 0.213 | 0.237 |
| Collaborative Filtering | 0.189 | 0.245 | 0.214 |
| Hybrid System | 0.312 | 0.278 | 0.294 |
- NMF: Non-negative Matrix Factorization with component optimization
- Cosine Similarity: For content-based audio feature matching
- User-Based CF: Collaborative filtering with implicit feedback
- Weighted Hybrid: Combines all methods with optimized weights
# Hybrid weights
nmf_weight = 0.4
cf_weight = 0.3
content_weight = 0.2
popularity_weight = 0.1- Recommendation Speed: < 100ms per user
- Genre Diversity: 0.78 (balanced variety)
- Cold Start Performance: 70% of warm start accuracy
- Memory Usage: ~2GB for 50K tracks
Place these files in your data directory:
dataset.csv- Main Spotify track databasetrain.csv- Training data with genre labelstest.csv- Test set for evaluationsubmission.csv- Output format template
✅ Implemented
- Content-based filtering with audio features
- NMF matrix factorization (limited component testing)
- User-based collaborative filtering
- Basic cold start solutions
- Simple evaluation metrics
- SVD & Funk SVD implementations
- Item-based collaborative filtering
- Comprehensive evaluation (MAP, multiple K values)
- Advanced implicit feedback modeling
- Fork the repository
- Create a feature branch
- Make changes with tests
- Submit a pull request
MIT License - see LICENSE file for details.
🎵 Built for music discovery and recommendation research 🎵