Production-style Data Science project for restaurant businesses planning to open in Chennai, India. Uses machine learning, clustering, geospatial analysis, and interactive business intelligence to recommend optimal locations.
This system analyzes 11,800+ Zomato restaurants across Chennai to help entrepreneurs answer:
- Where should I open my restaurant?
- What rating can I expect?
- How intense is the competition?
- Which cuisines perform best in each area?
| Module | Technique | Purpose |
|---|---|---|
| Rating Prediction | CatBoost Regressor | Predict expected dining rating |
| Area Segmentation | KMeans Clustering | Market segment classification |
| Competition Analysis | DBSCAN | Geospatial competition hotspots |
| Recommendation Engine | Composite Scoring | Rank best areas for new outlets |
├── data/ # Raw & processed datasets
│ └── Zomato_Chennai_Final.csv
├── notebooks/ # Jupyter notebooks (optional EDA)
├── models/ # Trained ML artifacts
├── src/
│ ├── config.py # Paths & constants
│ ├── preprocessing/ # Data cleaning
│ ├── features/ # Feature engineering
│ ├── modeling/ # CatBoost rating model
│ ├── clustering/ # KMeans & DBSCAN
│ ├── recommendation/ # Location recommendation engine
│ ├── visualization/ # Plotly & Folium charts
│ └── utils/ # Helper functions
├── app/
│ ├── streamlit_app.py # Main dashboard
│ └── components/ # UI & data loaders
├── outputs/
│ ├── figures/ # Saved charts
│ ├── maps/ # HTML maps
│ └── reports/ # CSV & JSON reports
├── main.py # Training pipeline
├── requirements.txt
└── README.md
pip install -r requirements.txtpython main.pyThis runs:
- Data cleaning
- Feature engineering (area-level business metrics)
- KMeans area clustering
- DBSCAN competition analysis
- CatBoost rating model training
streamlit run app/streamlit_app.pyOpen http://localhost:8501 in your browser.
- Cuisine type
- Restaurant category (Restaurant, Cafe, Fast Food, etc.)
- Minimum expected rating threshold
- Best areas to open a restaurant (ranked)
- Predicted success score (0–100)
- Expected rating (CatBoost)
- Competition level (Low / Medium / High)
- Area demand score
- Nearby similar restaurants
- Interactive Plotly charts
- Folium geospatial maps
- Downloadable Excel reports
| Feature | Description |
|---|---|
restaurant_count_per_area |
Total restaurants in area |
avg_area_rating |
Mean dining rating |
cuisine_popularity_score |
City-wide cuisine demand |
competition_density |
Competition intensity proxy |
premium_restaurant_ratio |
Share of rating ≥ 4.2 |
area_success_score |
Composite business score |
- CatBoost Regressor — Predicts
dining_ratingusing area, cuisine, category, and engineered features - KMeans (k=6) — Segments areas into market clusters
- DBSCAN — Identifies geospatial competition hotspots vs. opportunity zones
Score = 25% Demand + 20% Quality + 20% Cuisine Fit
+ 20% Low Competition + 15% Geo Opportunity
Source: Zomato_Chennai_Final.csv
| Column | Description |
|---|---|
| name_of_restaurant | Restaurant name |
| market_segment | Category (Restaurant, Cafe, etc.) |
| cuisine | Comma-separated cuisines |
| area/location | Chennai neighborhood |
| latitude, longitude | Geo coordinates |
| dining_rating | Zomato dining rating (0–5) |
- Frontend: Streamlit
- Backend: Python
- ML: scikit-learn, CatBoost, XGBoost
- Viz: Plotly, Matplotlib, Seaborn, Folium
- Geo: geopy, Folium
- Final year engineering project
- GitHub portfolio showcase
- Data Science internship interviews
- Restaurant business feasibility studies
Built as a modular, scalable data science product with separated concerns:
preprocessing→features→modeling→clustering→recommendation→visualization→app
Run python main.py after any data updates to refresh models.
MIT — Open for educational and portfolio use.