Supply-Demand Dynamics in On-Demand Services

Data ScienceAnalyticsSQL

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.