The On-Demand Economy
On-demand platforms face a unique challenge: balancing real-time supply (drivers, couriers) with fluctuating demand (riders, customers). Understanding these dynamics is crucial for platform efficiency.
Measuring Supply-Demand Balance
WITH hourly_metrics AS (
SELECT
date_trunc('hour', request_time) as hour,
city_id,
COUNT(*) as total_requests,
COUNT(CASE WHEN status = 'completed' THEN 1 END) as fulfilled,
COUNT(DISTINCT driver_id) as active_drivers
FROM trips
WHERE request_time >= CURRENT_DATE - INTERVAL '30 days'
GROUP BY 1, 2
)
SELECT
hour,
city_id,
total_requests,
fulfilled,
active_drivers,
ROUND(fulfilled::numeric / NULLIF(total_requests, 0) * 100, 1) as fill_rate,
ROUND(total_requests::numeric / NULLIF(active_drivers, 0), 1) as requests_per_driver
FROM hourly_metrics
ORDER BY hour DESC;
Surge Pricing Mechanics
Dynamic pricing helps balance supply and demand during peak periods. The multiplier is typically a function of:
- Request volume relative to historical baseline
- Available driver count in the area
- Estimated wait time for riders
def calculate_surge_multiplier(
current_demand: float,
available_supply: float,
baseline_ratio: float = 1.0
) -> float:
"""Calculate surge pricing multiplier."""
supply_demand_ratio = available_supply / max(current_demand, 1)
if supply_demand_ratio >= baseline_ratio:
return 1.0
multiplier = baseline_ratio / supply_demand_ratio
return min(round(multiplier, 1), 3.0) # Cap at 3x
Conclusion
Data-driven approaches to supply-demand management enable platforms to optimize pricing, improve driver utilization, and enhance rider experience simultaneously.