Skip to content
OnlyProjects
B.Tech / B.E. · Data ScienceFor educational purposes only
Code included

Restaurant Ranking and Recommendation Engine for Food Delivery Search

A two-stage learning-to-rank engine over real Bengaluru restaurant data, judged by NDCG — not by vibes

Mapped to your syllabusJNTUH R22 · Project Stage-II incl. Seminar · IV-2

Overview

1 min read

Restaurant Ranking and Recommendation Engine is an advanced machine-learning project that rebuilds the core of food-delivery search: given a user's area, cuisine craving and budget, return restaurants ranked by how well they match — and prove, with an offline evaluation protocol, that the ranking is genuinely better than the obvious baselines.

Most search UIs sort by a single number (rating or vote count), which systematically buries new and niche restaurants and rewards the already-famous. This project treats search as a learning-to-rank problem on a real dataset: the public Zomato Bengaluru restaurants dataset (51,717 restaurants, 17 attributes — ratings, votes, cuisines, cost for two, locality, online-order flags). A two-stage pipeline first generates candidates (hard filters plus content similarity), then scores them with a gradient-boosted ranker trained on engineered features: Bayesian-smoothed rating, vote credibility, cuisine and locality match, cost fit, and service flags. A hybrid content-based recommender (“more like this”) sits alongside, using TF-IDF vectors over cuisine and dish text.

The project's spine is its offline evaluation protocol: graded relevance labels are constructed per query context, the ranker is compared against rating-rank and popularity-rank baselines using Precision@10, NDCG@10, MAP and MRR, and a leave-one-locality-out split proves the model generalises rather than memorising famous neighbourhoods. The stack stays inside the JNTUH R22 toolset — Python, scikit-learn (ML lab, CS604PC), MySQL (CS407PC) and a Django demo app (CS409PC) — with the evaluation results also reported in Power BI (CS308PC). Four members own four modules: data and features, models, evaluation, and the demo application.

Relevant for
Telangana
Level
Advanced · 16 weeks · team of 4
Common at
Jawaharlal Nehru Technological University Hyderabad, Osmania University, Visvesvaraya Technological University
Updated
Nov 2026

Syllabus alignment

JNTUH · R22

Project Stage-II incl. Seminar · IV-2 · 11 credits · CIE 40 + SEE 60

Subjects this project applies
  • CS604PC Machine Learning Laboratory
  • CS308PC Data Visualization (R / Power BI)
  • CS409PC Web Technologies (Django)
  • CS407PC DBMS Laboratory
How it is evaluated

Stage-II: committee 20 + supervisor 20 internal, external examiner 60; pass 35% each, 40% overall

Also fits: VTU 2022 Scheme (OBE/CBCS), Anna University Regulation 2021, Osmania University AICTE model scheme (2020-21 batch).

What's in the box

11 parts · 5 free · 2 previewed · 4 unlock for ₹2,000

Problem & synopsis

5 min read

Problem statement

Food-delivery search in India is a ranking problem, but the rankings users actually get are one-dimensional. Sorting by rating ignores query intent and vote credibility; sorting by popularity entrenches already-famous restaurants and makes new or niche ones undiscoverable. Neither ordering can answer the user's real question — “which of these places best matches my cuisine, budget and area right now?” — and neither comes with evidence that it is better.

There is a need for a query-aware ranking engine built on real Indian restaurant data, which learns a scoring function over query-item features, offers content-based “more like this” recommendations, and — critically — is judged by a documented offline evaluation protocol with rank-aware metrics (Precision@10, NDCG@10, MAP, MRR) against honest baselines, including a generalisation test on unseen localities, so that every claim of improvement is a number in a table rather than a feeling.

Synopsis

Abstract

This project designs, builds and rigorously evaluates a restaurant ranking and recommendation engine for food-delivery search, using the public Zomato Bengaluru dataset of 51,717 restaurants. A two-stage architecture — candidate generation followed by a gradient-boosted learning-to-rank scorer — returns query-aware rankings for searches like “biryani under ₹600 in Indiranagar”. A hybrid content-based recommender handles the “more like this” path. The contribution the panel will be shown is the evaluation: graded relevance labels, four retrieval metrics, three baselines, and a leave-one-locality-out protocol that demonstrates the learned ranker outperforms rating- and popularity-only ordering on held-out localities.

Introduction

On food-delivery platforms, the search result list is the marketplace: merchants outside the first screen effectively do not exist. Yet the default ordering — raw rating or raw vote count — has well-known failure modes: a 4.5-star restaurant with 40 votes loses to a 4.4-star with 40,000 votes even when the query screams “quiet, new, affordable”. Learning to rank treats ordering as a supervised problem: learn a scoring function from query-item features that places the most contextually relevant items first, and measure success with rank-aware metrics rather than accuracy.

Existing System

  • App search sorts by a single signal (rating, delivery time or popularity), ignoring the query's cuisine and budget intent.
  • Rating-only ordering is exploitable and vote-biased; new restaurants are structurally invisible.
  • Existing analyses of the Zomato Bengaluru dataset stop at exploratory charts of localities and cuisines.
  • Limitations: no relevance definition, no baseline comparison, no generalisation check — charts that cannot say “this ordering is better, by this much”.

Proposed System

  • Data layer: the Zomato CSV cleaned (mixed 4.1/5 rate formats, NEW/- ratings, comma-grouped costs, list-valued cuisines) into a MySQL catalogue with a derived feature store — Bayesian-smoothed rating, TF-IDF cuisine/dish vectors, locality statistics.
  • Two-stage ranking: Stage 1 generates ~100 candidates per query via filters and content similarity; Stage 2 scores candidates with a gradient-boosted regressor trained on query-item features.
  • Hybrid recommender: item-to-item content similarity for the “more like this” flow.
  • Offline evaluation protocol: graded relevance labels from rating strength, vote credibility and budget fit within each query context; metrics Precision@10, NDCG@10, MAP, MRR; three baselines (rating rank, popularity rank, Bayesian rank); k-fold cross-validation over query groups plus leave-one-locality-out testing.
  • Demo: a Django app with a search form, ranked results with per-item explanation chips, and an admin evaluation dashboard (metrics also charted in Power BI).

Feasibility Study

  • Technical: 51,717 rows is small-data for scikit-learn — training takes seconds on a laptop; the stack (Python, MySQL, Django) is taught in R22 (CS604PC, CS407PC, CS409PC). The main engineering risk is label construction, addressed with a documented, reviewable protocol.
  • Economic: ₹0 — public dataset, free tools, no cloud needed.
  • Operational: the demo runs locally with a pre-loaded database; retraining is a single command, and the evaluation harness re-runs in under a minute for the viva.

Objectives

  1. 01Clean and model the Zomato Bengaluru dataset (51,717 restaurants) into a MySQL catalogue with typed, derived and audited columns.
  2. 02Engineer a feature store for ranking: Bayesian-smoothed ratings, vote credibility, TF-IDF cuisine/dish vectors, locality priors and budget-fit features.
  3. 03Implement two-stage ranking — candidate generation by filters and content similarity, followed by a gradient-boosted scoring model.
  4. 04Build a hybrid content-based recommender for item-to-item “more like this” suggestions using TF-IDF similarity.
  5. 05Construct an offline evaluation protocol with graded relevance labels, four retrieval metrics and three baselines.
  6. 06Prove generalisation with k-fold cross-validation over query groups and a leave-one-locality-out split.
  7. 07Deliver a Django demo app that shows ranked results with per-item explanations and an evaluation dashboard.
  8. 08Report all results with code, metric tables and Power BI charts such that every number is reproducible by re-running one script.

Scope

In scope

  • The public Zomato Bengaluru restaurants dataset (one snapshot; no scraping of live platforms, no login-protected data).
  • Query model: locality × cuisine(s) × budget; ranked result lists and item-to-item recommendations.
  • Feature engineering, gradient-boosted ranking model, three baselines, four retrieval metrics, two validation protocols.
  • Django demo with explanation chips; Power BI report of evaluation results; pytest suite for data and metric code.

Out of scope (v1)

  • Live platform integration, real user clicks, A/B testing or any online evaluation — this is an offline protocol by design.
  • Delivery-time or rider-logistics ranking (no such fields exist in the dataset).
  • Deep-learning rankers and embeddings beyond TF-IDF (listed as future work; the classic model keeps the viva explainable).
  • User accounts, ordering, payments or review writing in the demo app.

Methodology

The project follows CRISP-DM adapted to an academic two-stage scheme, wrapped in an incremental build: every phase ends with something runnable, and the evaluation harness exists from week 9 onward so the model is never judged by vibes.

PhaseWeeksActivitiesDeliverable
Stage-I carry-over1–2Literature study (learning-to-rank, recommender evaluation); dataset audit; finalise objectivesObjectives + data audit note
Data understanding3–4Profile all 17 columns; cleaning rules for rates, costs, NEW/-, cuisine listsCleaned MySQL catalogue
Feature store5–6Bayesian rating, TF-IDF vectors, locality priors, budget-fit featuresFeature tables + tests
Models7–9Candidate generator; content recommender; gradient-boosted ranker v1; baselinesRunnable ranking service
Evaluation10–11Relevance labels; P@10/NDCG@10/MAP/MRR harness; k-fold and leave-one-locality-out runsMetric tables vs baselines
Demo app12–13Django search UI, explanation chips, admin evaluation page, Power BI reportDemo build
Hardening14Golden-query regression tests; pytest suite; profilingTest report
Stage-II close15–16Final report, seminar slides, dry-run viva per memberSubmission + seminar

Testing approach: unit tests for every cleaning rule and metric implementation (metrics verified against a hand-computed example); golden-query regression tests that pin the top-5 results for ten saved queries and fail the build if a model change silently reshuffles them; evaluation runs are scripted and versioned so the report's tables regenerate exactly.

Architecture & tech stack

2 diagrams · 7 technologies · 2 min read

  • Python
  • pandas
  • scikit-learn
  • MySQL
  • Django
  • Matplotlib
  • Power BI

The system is a classic two-stage retrieval architecture backed by a small catalogue database.

  1. Data layer — the cleaned Zomato catalogue in MySQL plus derived feature tables (Bayesian rating, TF-IDF vectors, locality stats). A loader script rebuilds everything from the raw CSV deterministically.
  2. Retrieval layer — Stage 1 narrows 51,717 restaurants to ~100 candidates per query using hard filters (locality, budget ceiling) and content similarity; Stage 2 scores candidates with the gradient-boosted ranker and orders them.
  3. Serving layer — a Django app exposes the search form, renders ranked results with per-item explanation chips (which features pushed this restaurant up), and serves the item-to-item recommender.
  4. Evaluation harness — offline scripts that build relevance labels, run all models and baselines, emit metric tables, and push results to the Power BI report.
flowchart TD
  U["User query<br/>locality · cuisine · budget"] --> CG["Stage 1: candidate generation<br/>filters + content similarity (top ~100)"]
  C[("MySQL catalogue & feature store<br/>51,717 restaurants")] --> CG
  C --> FS["Feature vectors<br/>Bayesian rating · TF-IDF · cost fit"]
  CG --> R["Stage 2: learning-to-rank<br/>gradient-boosted scorer"]
  FS --> R
  R --> X["Explainer<br/>top contributing features"]
  X --> O["Ranked results<br/>Django UI"]
  B["Baselines<br/>rating · popularity · Bayesian"] -.-> EV
  R -.-> EV["Offline evaluation harness<br/>P@10 · NDCG@10 · MAP · MRR"]
  EV --> PBI["Metric tables & Power BI report"]

Catalogue schema (core tables)

erDiagram
  RESTAURANT ||--o{ RESTAURANT_CUISINE : "has"
  CUISINE ||--o{ RESTAURANT_CUISINE : "tags"
  LOCALITY ||--o{ RESTAURANT : "contains"
  QUERY_LOG ||--o{ EVAL_RESULT : "is measured by"

  RESTAURANT {
    int id PK
    string name
    int locality_id FK
    decimal rating
    int votes
    decimal bays_rating
    int cost_for_two
    bool online_order
  }
  LOCALITY {
    int id PK
    string name
    int restaurant_count
  }
  CUISINE {
    int id PK
    string name
  }
  QUERY_LOG {
    int id PK
    int locality_id FK
    string cuisines
    int budget
  }
  EVAL_RESULT {
    int id PK
    int query_id FK
    string model_name
    decimal ndcg_at_10
    decimal precision_at_10
  }

The two-stage split is the point of the architecture: Stage 1 keeps latency and label construction tractable, and Stage 2 sees only plausible candidates, so the learned scorer spends its capacity on ordering, not filtering.

Modules

4 modules

  1. Module 01

    Data Pipeline & Feature Store (Member 1)

    Owns the raw-to-usable journey: parsing 4.1/5-style rates, NEW/- values and comma-grouped costs; exploding list-valued cuisine and dish columns; designing the MySQL catalogue and locality/cuisine tables; and computing the ranking features — Bayesian-smoothed rating (shrinking low-vote restaurants toward the prior), TF-IDF vectors over cuisines and liked dishes, locality priors and budget-fit deltas. Every rule ships with a pytest unit test.

  2. Module 02

    Ranking & Recommendation Models (Member 2)

    Owns the models: the Stage-1 candidate generator (hard filters plus TF-IDF content similarity), the Stage-2 gradient-boosted scorer trained on query-item features, and the hybrid item-to-item content recommender. Also implements the three baselines (rating rank, popularity rank, Bayesian rank) so the learned model always has something honest to beat, and packages model training into a single reproducible command with a saved model artefact.

  3. Module 03

    Offline Evaluation Protocol (Member 3)

    Owns the project's spine: constructing graded relevance labels per query context (rating strength × vote credibility × budget fit), implementing Precision@10, NDCG@10, MAP and MRR with hand-verified unit tests, running k-fold cross-validation over query groups, executing the leave-one-locality-out generalisation study, and producing the final metric tables and Power BI report that the report and seminar present as evidence.

  4. Module 04

    Demo Application & Explanations (Member 4)

    Owns the Django app: the search form (locality, cuisine, budget), rendering the ranked list with per-item explanation chips generated from feature contributions, the “more like this” recommendation panel, and an admin page that shows the latest evaluation metrics. Also owns golden-query regression tests that pin the top-5 results for ten saved queries so model changes that silently degrade the demo are caught in CI.

Slides

13 slides · titles free · bullets, notes and the .pptx unlock

  1. Slide 1

    Restaurant Ranking & Recommendation Engine

  2. Slide 2

    The Problem with One-Number Search

  3. Slide 3

    Problem Statement & Objectives

  4. Slide 4

    The Dataset

  5. Slide 5

    Architecture: Two-Stage Retrieval

  6. Slide 6

    Feature Engineering

  7. Slide 7

    Models & Baselines

  8. Slide 8

    Offline Evaluation Protocol

  9. Slide 9

    Results

  10. Slide 10

    Demo

  11. Slide 11

    Testing

  12. Slide 12

    Limitations

  13. Slide 13

    Conclusion & Future Scope

Bullets, speaker notes and the .pptx · ₹2,000

The titles above are the real outline. The rest is what you present from.

Unlock for ₹2,000

Viva questions & answers

3 of 16 answered free · 13 unlock

Read each answer, close it, and say it in your own words. Your viva will ask. Now you'll know.

  1. 01Concept

    What is learning to rank, and how is it different from ordinary regression or classification?

    Learning to rank trains a model whose job is to order items for a query, not to predict a single label per item. Regression predicts a number like a rating, but the quality of an ordering depends on the relative positions of many items together, which is why we evaluate with rank-aware metrics such as NDCG instead of error on individual predictions. Our scorer is a regression model internally, but it is trained, tuned and judged on the ordering it produces for each query context.

  2. 02Concept

    Explain NDCG and why you chose it as your headline metric.

    Normalized Discounted Cumulative Gain scores a ranked list by summing each item's relevance graded by its position — highly relevant items contribute more, and later positions are logarithmically discounted — then normalises by the score of the ideal ordering so results lie between 0 and 1. We chose it because relevance here is graded, not binary, and because the top of the list matters most in food-delivery search; Precision@10 alone would throw away that grading.

  3. 03Concept

    What is Bayesian smoothing of ratings and why did your features need it?

    A restaurant with one vote and a 5.0 rating is not better than one with 3,000 votes at 4.4. Bayesian smoothing shrinks each restaurant's rating toward the global prior in proportion to how few votes it has: effective rating = (votes × rating + m × prior) / (votes + m), where m controls shrinkage. As a feature this lets the ranker trust ratings strongly for well-reviewed places and fall back on other signals for thinly-reviewed ones.

+13 more questions, with answers

Try the free ones out loud first. Your examiner will not accept “it's in the PPT”.

Source code & how to run

8 steps · complete source code · unlocks with the project

Unlocks with the project · ₹2,000

8 steps · source code zip

Prerequisites, install, seed data and tests, written for demo day. Plus the complete source.

Unlock for ₹2,000

READMEFIRST

236 words · unlocks with the project

What to change before it goes anywhere near a submission. Skipping it is how the demo fails live.

Unlocks with the project · ₹2,000

236 words · ~1 min read

The checklist of things to rename, re-seed and re-think so the project reads as yours.

Unlock for ₹2,000

Instructions

358 words · unlocks with the project

How to study it, adapt it and walk your examiner through it, step by step.

Unlocks with the project · ₹2,000

358 words · ~2 min read

Report structure, formatting rules and the submission checklist your department will grade.

Unlock for ₹2,000

References

7 sources

  1. Zomato Bangalore Restaurants dataset (51,717 rows × 17 columns) — Kaggle
  2. scikit-learn documentation (gradient boosting, model evaluation)
  3. Django documentation
  4. MySQL 8.0 Reference Manual
  5. pandas documentation
  6. Leskovec, Rajaraman & Ullman, Mining of Massive Datasets, 3rd ed. (free online edition)
  7. Manning, Raghavan & Schütze, Introduction to Information Retrieval, Cambridge University Press (precision, MAP and NDCG chapters)

Cite this bundle

OnlyProjects. (2026). Restaurant Ranking and Recommendation Engine for Food Delivery Search: B.Tech / B.E. Data Science project bundle [Educational resource]. https://onlyprojects.online/projects/btech-ds-restaurant-ranking-recommendation-engine

Future scope

1 min read

  • Real interaction data — deploying the demo internally and collecting consented clicks to move from proxy labels to behavioural evaluation.
  • Learning-to-rank libraries — comparing the gradient-boosted scorer against a listwise approach such as LambdaMART.
  • Text embeddings — replacing TF-IDF with sentence embeddings for dish and review text to catch semantic cuisine matches.
  • Multi-objective ranking — explicitly trading off relevance with promotion of new restaurants (fairness to cold-start items).
  • Geo features — distance-decay and locality clustering once coordinates are joined, moving toward a map-first search UI.

Keep browsing

Same degree, same syllabus slot, different idea. Pick the one your guide will actually approve.

B.Tech / B.E.Code included

Aerospace / Aeronautical

Low-Speed Open-Circuit Wind Tunnel with Force Balance for Aerofoil Lift-Drag Measurement

Build a subsonic test tunnel on a student budget, then trace lift and drag on a 3D-printed NACA 0012 against theory

  • C / Arduino Uno (industry-standard extra) — HX711 load-cell and serial logging firmware
  • Python (NumPy, Matplotlib) — calibration, force coefficients and plots
  • MATLAB / Scilab — thin-airfoil theory overlay and regression
  • +4

intermediate14 wk4 students