Skip to content

Nothing0g/Uber_ride_demand_analysis

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 

Repository files navigation

Uber Ride Analytics

When does ride demand actually spike, does driver supply keep up, and what should ops do differently because of it? This project digs into 150,000 ride bookings across a full year to find out — using time-based EDA and pattern analysis, not classification, since the underlying question here is about demand and supply timing, not predicting a yes/no outcome.

Dataset

NCR ride bookings dataset — 150,000 bookings across 365 days, with booking status, timestamps, pickup/drop locations, fare, distance, and cancellation reasons.

What I found

  • Day-of-week barely matters. Daily booking counts range from 21,215 to 21,644 across the whole week — under a 2% spread. Weekday and weekend averages are nearly identical. Any staffing plan built around "weekends are busier" would be reacting to noise.
  • Hour-of-day is where the real pattern is. Demand swings ~9x across the day — from ~1,320 bookings at 4 AM to ~12,400 at 6 PM. Weekday and weekend hourly shapes track almost identically, aside from a small secondary bump around 10 AM on weekends.
  • Fare and distance don't move with time of day. Both stay in a tight band (fare: ₹499–₹519, distance: 25.5–26.5 km) across all 24 hours — ruling out the idea that peak-hour fares already reflect demand.
  • The core finding: supply failure is flat, not demand-driven. Combined driver cancellations and "no driver found" hold at ~24–26% regardless of hour — 25.4% at the busiest hour, 24.9% at the quietest. This reframes the problem: it's not a peak-hour capacity issue, it's a constant structural failure rate.
  • Demand isn't geographically concentrated. The top 15 pickup locations (out of 176) account for only 9.2% of all bookings — spread evenly across the city rather than clustered around a few hotspots.

Full write-up with charts and reasoning: see Uber_Ride_Analytics_Writeup.docx in this repo.

Approach

  1. Cleaning — parsed date/time into hour, day-of-week, and month fields; checked for duplicate booking IDs and nulls tied to booking status (cancelled/incomplete rides naturally lack fare and distance data)
  2. EDA — demand by hour, by day of week, weekday vs. weekend shape, top pickup locations, and fare/distance patterns by hour
  3. Pattern analysis — 7-day rolling average to separate real trend from daily noise; supply-failure rate by hour instead of raw cancellation counts, since rate reveals the flat-failure pattern that raw counts would hide
  4. Evaluation — every finding is checked against rate, not just raw count, since job role/location-style "biggest raw number" comparisons can be misleading (a lesson carried over from the HR attrition project)

Repo contents

  • ncr_ride_bookings.csv — dataset
  • Uber_ride_analysis_code — full analysis script (cleaning, EDA, pattern analysis)
  • Uber_Ride_Analytics_Writeup.docx — full write-up: every chart, captioned and explained
  • README.md — this file

Tools

Python, pandas, numpy, matplotlib

Running it

pip install pandas numpy matplotlib
python Uber_ride_analysis_code

Keep ncr_ride_bookings.csv in the same folder as the script.

Note on the data

The flat day-of-week pattern, even spread across locations, and tight fare/distance bands suggest this is likely a synthetic or simulated dataset rather than organic ride-hailing data — real-world data usually shows sharper geographic concentration and a clearer weekday/weekend split. Flagging this here rather than overstating findings the data doesn't fully support.

About

Operations/demand analytics on 150K Uber ride bookings — hourly demand patterns, cancellation-rate diagnostics, and ops recommendations using Python (pandas, matplotlib)

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors