Recommends is a modular, production-ready Streamlit web application for building, training, and evaluating recommendation systems based on implicit user feedback (such as views, clicks, and purchases). It supports multiple matrix factorization algorithms and provides a full workflow from data ingestion to model evaluation and recommendation visualization.
- End-to-End Pipeline: Data loading, preprocessing, model training, evaluation, and recommendation generation.
- Algorithm Support: Alternating Least Squares (ALS), Bayesian Personalized Ranking (BPR), Logistic Matrix Factorization (LMF).
- Web UI: Streamlit-based, multi-page navigation, interactive visualizations (Plotly).
- Synthetic & Custom Data: Generate demo data or upload your own (CSV).
- Comprehensive Evaluation: Standard metrics (Precision@K, Recall@K, NDCG), cold-start handling.
- Model Management: Save, load, and package full model artifacts.
- Deployment Ready: Designed for Replit autoscale, Python 3.11.
- Framework: Streamlit
- Pages: Data Overview, Model Training, Generate Recommendations, Evaluation, Performance Metrics
- Visualization: Plotly for interactive charts
- Session State: Streamlit session management for continuity
- Data Processing:
DataProcessorclass (matrix creation, ID mapping, splitting) - Recommendation Engine:
ImplicitRecommender(algorithm wrapper, training, recommendations) - Evaluation:
RecommendationEvaluator(metrics, multi-K, cold-start) - Cold Start Handling:
ColdStartHandler(user/item clustering, popular/diverse/trending detection) - Model Manager:
ModelManager(save/load artifacts) - Utilities: Data generation, formatting, logging
- Data Input: Upload CSV or generate synthetic (see below for format)
- Preprocessing: Filter, map, convert to sparse matrices
- Model Training: Train ALS/BPR/LMF with configurable hyperparameters
- Evaluation: Assess performance with multiple metrics
- Recommendation: Generate personalized recommendations
- Visualization: Results shown via interactive charts
streamlit run app.py
-
Or, deploy on Replit (see
.replitfor autoscale config). -
Or, the deployed version, live on: https://recommends.onrender.com/
CSV file must include columns:
user_id: Unique identifier for useritem_id: Unique identifier for itemrating: Implicit feedback score (e.g., 1 for view, 2 for click, etc.)
- Data Overview: Upload or generate data, visualize basic stats
- Model Training: Select algorithm, configure hyperparameters, train model
- Generate Recommendations: View recommendations for users
- Evaluation: See metrics (Precision@K, Recall@K, NDCG@K)
- Performance Metrics: Visualize and compare model performance
app.py: Main Streamlit UI and routingdata_processor.py: Data ingestion, filtering, matrix creationrecommender.py: Algorithms (ALS, BPR, LMF)evaluator.py: Metrics and evaluation logiccold_start_handler.py: Cold start user/item managementmodel_manager.py: Save/load model packages (including mappings and evaluation results)utils.py: Demo data generation, helpers
- ALS (Alternating Least Squares): Standard collaborative filtering
- BPR (Bayesian Personalized Ranking): Pairwise ranking for implicit signals
- LMF (Logistic Matrix Factorization): Probabilistic approach
- Python 3.11
implicitscipyscikit-learnpandasnumpystreamlitplotly- (See
uv.lockfor full list)
- Replit: Configured for autoscale deployment (
.replit,.streamlit/config.toml) - Local: Install dependencies, run with Streamlit
- Fork the repo
- Create your feature branch (
git checkout -b feature/foo) - Commit your changes
- Push to the branch
- Open a Pull Request
This project is open source and available under the MIT License.