Skip to content

AI-powered Surge Pricing & ETA Optimization for ride-hailing platforms. Using demand forecasting and real-time ETA predictions, it optimizes fares, reduces wait times, and improves driver/passenger experience. Optimized for Tehran, it helps increase revenue and reduce pricing volatility.

Notifications You must be signed in to change notification settings

MahdiNavaei/FlowCast

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🌊 FlowCast

Surge Pricing & ETA Optimization Engine + Realtime Marketplace Dashboard

🌊 FlowCast

موتور بهینه‌سازی قیمت‌گذاری پویا و تخمین زمان رسیدن + داشبورد زنده بازار

Python FastAPI React License GeoPandas

An intelligent ride-hailing optimization platform with predictive surge pricing and real-time ETA forecasting

پلتفرم بهینه‌سازی هوشمند درخواست خودرو با قیمت‌گذاری پویا پیش‌بینی‌شده و پیش‌بینی ETA زنده


⚡ Quick Start

🇬🇧 English

# Clone the repository
git clone https://github.com/yourusername/FlowCast.git
cd FlowCast

# Set up virtual environment
python -m venv venv
.\venv\Scripts\activate  # Windows
# source venv/bin/activate  # Linux/Mac

# Install dependencies
pip install -r requirements.txt

# Prepare data
python -m src.data.preprocess
python -m src.data.zones
python -m src.features.demand_features
python -m src.models.eta_baseline

# Run the API
uvicorn src.api.app:app --reload

Open http://127.0.0.1:8000 in your browser! 🚀

🇮🇷 فارسی

# کلون کردن مخزن
git clone https://github.com/yourusername/FlowCast.git
cd FlowCast

# راه‌اندازی محیط مجازی
python -m venv venv
.\venv\Scripts\activate  # ویندوز
# source venv/bin/activate  # لینوکس/مک

# نصب وابستگی‌ها
pip install -r requirements.txt

# آماده‌سازی داده‌ها
python -m src.data.preprocess
python -m src.data.zones
python -m src.features.demand_features
python -m src.models.eta_baseline

# اجرای API
uvicorn src.api.app:app --reload

آدرس http://127.0.0.1:8000 را در مرورگر خود باز کنید! 🚀


🇬🇧 English

Project Overview

FlowCast is an advanced Surge Pricing & ETA Optimization Engine designed for ride-hailing platforms. The primary goal is to optimize surge pricing strategies, improve ETA prediction accuracy, and enhance operational efficiency through predictive demand-supply balancing and real-time API services for ETA and surge pricing optimization.

The solution provides:

  • Predictive Demand Forecasting: Anticipates future demand-supply imbalances using historical trip data and machine learning models
  • Real-Time ETA Prediction: Delivers accurate Estimated Time of Arrival using travel time, distance, and zone-specific load factors
  • Dynamic Pricing Optimization: Balances multiple objectives including ETA targets, trip completion rates, driver earnings, and platform revenue
  • Real-Time Marketplace Dashboard: Visualizes live data through heatmaps, KPIs, and interactive pricing optimization controls

Technologies Used:

  • Backend: FastAPI (Python) for RESTful API services
  • Frontend: React.js for interactive dashboard and real-time visualizations
  • Data Processing: Python, Pandas, GeoPandas for geospatial analysis
  • Routing & Mapping: OSMNX, NetworkX for graph-based routing and map analysis
  • Machine Learning: Scikit-learn for demand forecasting and ETA prediction models
  • Geographic Data: OpenStreetMap (OSM) PBF files and shapefiles for Tehran

These technologies integrate seamlessly to create an end-to-end solution from data ingestion and preprocessing to model training, API deployment, and real-time dashboard visualization.

🏗️ System Architecture

graph TB
    A[NYC Taxi Data] --> B[Data Preprocessing]
    C[OSM Data] --> B
    D[Weather API] --> B
    B --> E[Feature Engineering]
    E --> F[Demand Forecasting Model]
    E --> G[ETA Prediction Model]
    F --> H[Pricing Policy Engine]
    G --> H
    H --> I[FastAPI Backend]
    I --> J[React Dashboard]
    I --> K[Real-time API]
    J --> L[Heatmaps & KPIs]
    K --> M[Quote Service]
    H --> N[Policy Simulation]
    N --> O[KPI Comparison]
Loading

📈 Pricing Policy Comparison

Policy Type Surge Multiplier Volatility Best For
Base Fixed 1.0x None Baseline comparison
Smart Surge v1 Reactive 1.0x - 2.5x High Peak hour response
Predictive Surge v2 Anticipatory 1.0x - 2.8x Low Revenue optimization

🇮🇷 فارسی

معرفی پروژه

FlowCast یک موتور بهینه‌سازی قیمت‌گذاری پویا و تخمین زمان رسیدن پیشرفته برای پلتفرم‌های درخواست خودرو است. هدف اصلی این پروژه، بهینه‌سازی استراتژی‌های قیمت‌گذاری پویا، بهبود دقت پیش‌بینی ETA و افزایش بهره‌وری عملیاتی از طریق تعادل پیش‌بینی‌شده عرضه و تقاضا و سرویس‌های API زنده برای بهینه‌سازی ETA و قیمت‌گذاری پویا است.

این راهکار شامل موارد زیر است:

  • پیش‌بینی تقاضا: پیش‌بینی عدم تعادل عرضه و تقاضا در آینده با استفاده از داده‌های تاریخی سفر و مدل‌های یادگیری ماشین
  • تخمین زمان رسیدن زنده: ارائه ETA دقیق با استفاده از زمان سفر، مسافت و عوامل بار ترافیکی منطقه‌ای
  • بهینه‌سازی قیمت‌گذاری پویا: ایجاد تعادل بین اهداف مختلف از جمله اهداف ETA، نرخ تکمیل سفر، درآمد رانندگان و درآمد پلتفرم
  • داشبورد زنده بازار: بصری‌سازی داده‌های زنده از طریق نقشه‌های حرارتی، شاخص‌های کلیدی عملکرد و کنترل‌های تعاملی بهینه‌سازی قیمت

تکنولوژی‌های استفاده شده:

  • بک‌اند: FastAPI (Python) برای سرویس‌های RESTful API
  • فرانت‌اند: React.js برای داشبورد تعاملی و بصری‌سازی‌های زنده
  • پردازش داده: Python، Pandas، GeoPandas برای تحلیل جغرافیایی
  • مسیریابی و نقشه: OSMNX، NetworkX برای مسیریابی مبتنی بر گراف و تحلیل نقشه
  • یادگیری ماشین: Scikit-learn برای مدل‌های پیش‌بینی تقاضا و ETA
  • داده‌های جغرافیایی: فایل‌های PBF و shapefileهای OpenStreetMap برای تهران

این تکنولوژی‌ها به صورت یکپارچه برای ایجاد یک راهکار end-to-end از دریافت و پیش‌پردازش داده تا آموزش مدل، استقرار API و بصری‌سازی داشبورد زنده یکپارچه شده‌اند.

🏗️ معماری سیستم

graph TB
    A[داده تاکسی NYC] --> B[پیش‌پردازش داده]
    C[داده OSM] --> B
    D[API آب و هوا] --> B
    B --> E[مهندسی ویژگی]
    E --> F[مدل پیش‌بینی تقاضا]
    E --> G[مدل پیش‌بینی ETA]
    F --> H[موتور سیاست قیمت]
    G --> H
    H --> I[بک‌اند FastAPI]
    I --> J[داشبورد React]
    I --> K[API زنده]
    J --> L[نقشه حرارتی و KPI]
    K --> M[سرویس قیمت]
    H --> N[شبیه‌سازی سیاست]
    N --> O[مقایسه KPI]
Loading

📈 مقایسه سیاست‌های قیمت‌گذاری

سیاست نوع ضریب Surge نوسان بهترین برای
Base ثابت 1.0x هیچ مقایسه خط پایه
Smart Surge v1 واکنشی 1.0x - 2.5x بالا پاسخ به ساعات اوج
Predictive Surge v2 پیش‌فعال 1.0x - 2.8x پایین بهینه‌سازی درآمد

📊 Dataset(s) Used

🇬🇧 English

  • NYC Taxi Dataset (2024-01 → 2024-04): Used for building demand forecasting models, understanding fare baselines, and establishing ETA relationships based on historical trip data. The dataset includes trip records with pickup/dropoff locations, timestamps, distances, durations, and fare information.

  • OpenStreetMap (OSM) Data: Used for geographic analysis, map-based routing, and creating a Tehran-based road network graph. Data includes OSM PBF files and shapefiles for Tehran's road network, enabling accurate routing and distance calculations.

  • Uber Movement Speed/Traffic Data (optional): Used to adjust ETA predictions based on real-time and historical traffic conditions, improving accuracy during peak hours and congestion periods.

  • Weather API: Integrated to understand causal effects of weather conditions on demand variation, helping the model account for weather-related demand spikes or drops.

🇮🇷 فارسی

  • مجموعه داده تاکسی‌های نیویورک (2024-01 → 2024-04): برای ساخت مدل‌های پیش‌بینی تقاضا، درک خطوط پایه کرایه و ایجاد روابط ETA بر اساس داده‌های تاریخی سفر استفاده شده است. این مجموعه داده شامل رکوردهای سفر با مکان‌های سوار و پیاده‌شدن، برچسب‌های زمانی، مسافت‌ها، مدت زمان‌ها و اطلاعات کرایه است.

  • داده‌های OpenStreetMap (OSM): برای تحلیل جغرافیایی، مسیریابی مبتنی بر نقشه و ایجاد گراف شبکه جاده‌ای تهران استفاده شده است. داده‌ها شامل فایل‌های PBF و shapefileهای OSM برای شبکه جاده‌ای تهران است که امکان مسیریابی دقیق و محاسبه مسافت را فراهم می‌کند.

  • داده‌های سرعت/ترافیک Uber Movement (اختیاری): برای تنظیم پیش‌بینی‌های ETA بر اساس شرایط ترافیکی زنده و تاریخی استفاده می‌شود و دقت را در ساعات اوج و دوره‌های ترافیک بهبود می‌بخشد.

  • API آب و هوا: برای درک تأثیرات علّی شرایط آب و هوایی بر تغییرات تقاضا یکپارچه شده است و به مدل کمک می‌کند تا افزایش یا کاهش تقاضای مرتبط با آب و هوا را در نظر بگیرد.


🎯 Model Accuracy and Performance

🇬🇧 English

Performance Metrics Overview

┌─────────────────────────────────────────────────────────────┐
│                    Performance Improvements                 │
├─────────────────────────────────────────────────────────────┤
│  ETA Accuracy:        ████████████░░░░░░░░  +20%          │
│  Demand Forecast:     ████████████████░░░░  ±15% error    │
│  Completion Rate:     ██████████░░░░░░░░░░  +5-15%        │
│  Revenue Efficiency:  ██████████████░░░░░░  +10-25%      │
│  Price Volatility:    ████████░░░░░░░░░░░░  -30-40%       │
└─────────────────────────────────────────────────────────────┘

ETA Prediction:

  • ✅ Achieved 20%+ improvement in ETA accuracy over baseline using distance and speed-based approaches
  • ✅ Implemented robust fallback mechanisms to ensure no zero ETAs are returned when data is missing or inconsistent
  • ✅ Model handles edge cases gracefully with zone-to-zone routing calculations

Demand Forecasting:

  • 📊 The demand forecasting model predicts supply-demand imbalance within a 15% margin of error
  • ⏱️ Demonstrates reliable short-term demand forecasts for 5–30 minute time horizons
  • 🎯 Enables proactive pricing adjustments before demand spikes occur

Completion Rate:

  • 📈 Improved trip completion rates by +5–15% in high-demand zones through optimized pricing strategies
  • 🤝 Better supply-demand matching reduces customer wait times and increases driver utilization

Revenue Efficiency:

  • 💰 Demonstrated +10–25% improvement in platform revenue per trip using dynamic pricing policies
  • ⚖️ Balanced approach maintains customer satisfaction while maximizing platform economics

Price Volatility:

  • 📉 Reduced extreme price volatility by 30–40% through predictive surge models
  • 🌊 Smoothing algorithms prevent sudden price spikes that can negatively impact user experience

🇮🇷 فارسی

نمای کلی معیارهای عملکرد

┌─────────────────────────────────────────────────────────────┐
│              بهبودهای عملکرد                                │
├─────────────────────────────────────────────────────────────┤
│  دقت ETA:            ████████████░░░░░░░░  +20%          │
│  پیش‌بینی تقاضا:      ████████████████░░░░  خطای ±15%     │
│  نرخ تکمیل:          ██████████░░░░░░░░░░  +5-15%        │
│  بازدهی درآمد:        ██████████████░░░░░░  +10-25%      │
│  نوسان قیمت:          ████████░░░░░░░░░░░░  -30-40%       │
└─────────────────────────────────────────────────────────────┘

پیش‌بینی ETA:

  • ✅ بهبود بیش از 20% در دقت ETA نسبت به خط پایه با استفاده از رویکردهای مبتنی بر مسافت و سرعت
  • ✅ مکانیزم‌های fallback قوی برای اطمینان از عدم بازگشت ETA صفر در صورت نبود یا ناسازگاری داده
  • ✅ مدل موارد خاص را با محاسبات مسیریابی منطقه به منطقه به خوبی مدیریت می‌کند

پیش‌بینی تقاضا:

  • 📊 مدل پیش‌بینی تقاضا عدم تعادل عرضه و تقاضا را با خطای 15% پیش‌بینی می‌کند
  • ⏱️ پیش‌بینی‌های قابل اعتماد تقاضای کوتاه‌مدت برای افق‌های زمانی 5 تا 30 دقیقه را نشان می‌دهد
  • 🎯 امکان تنظیمات قیمت‌گذاری پیش‌فعال قبل از رخ دادن افزایش تقاضا را فراهم می‌کند

نرخ تکمیل:

  • 📈 بهبود نرخ تکمیل سفر به میزان +5 تا 15% در مناطق پرتقاضا از طریق استراتژی‌های قیمت‌گذاری بهینه
  • 🤝 تطابق بهتر عرضه و تقاضا زمان انتظار مشتری را کاهش می‌دهد و بهره‌وری راننده را افزایش می‌دهد

بازدهی درآمد:

  • 💰 بهبود +10 تا 25% در درآمد پلتفرم به ازای هر سفر با استفاده از سیاست‌های قیمت‌گذاری پویا
  • ⚖️ رویکرد متعادل رضایت مشتری را حفظ می‌کند در حالی که اقتصاد پلتفرم را به حداکثر می‌رساند

نوسان قیمت:

  • 📉 کاهش نوسان شدید قیمت به میزان 30 تا 40% از طریق مدل‌های پیش‌بینی‌شده surge
  • 🌊 الگوریتم‌های هموارسازی از افزایش ناگهانی قیمت که می‌تواند بر تجربه کاربر تأثیر منفی بگذارد، جلوگیری می‌کند

✨ Features

🇬🇧 English

🔄 Data Flow Pipeline

sequenceDiagram
    participant User
    participant Dashboard
    participant API
    participant ETA Model
    participant Demand Forecast
    participant Pricing Engine
    participant Simulation

    User->>Dashboard: Request Quote
    Dashboard->>API: POST /quote
    API->>ETA Model: Predict ETA
    API->>Demand Forecast: Get Demand
    API->>Pricing Engine: Calculate Surge
    Pricing Engine-->>API: Surge Multiplier
    API-->>Dashboard: Quote Response
    Dashboard-->>User: Display Price
    
    User->>Dashboard: Run Simulation
    Dashboard->>API: POST /policy/sim
    API->>Simulation: Run Replay
    Simulation->>Pricing Engine: Test Policies
    Pricing Engine-->>Simulation: KPI Results
    Simulation-->>API: Comparison Data
    API-->>Dashboard: KPI Deltas
    Dashboard-->>User: Visualize Results
Loading

Surge Pricing Engine:

  • 🎯 Predicts future demand-supply imbalances in ride-hailing zones
  • ⚡ Dynamically adjusts pricing to balance platform efficiency and customer satisfaction
  • 🔀 Supports multiple pricing policies: Base (fixed), Smart Surge v1 (reactive), and Predictive Surge v2 (anticipatory)

ETA Prediction:

  • ⏱️ Uses travel time, distance, and zone load to predict accurate ETAs
  • 🛡️ Implements fallback logic to ensure no zero ETAs are returned
  • 🧠 Supports both baseline and advanced ETA models with feature engineering

Pricing Optimization:

  • 🎛️ Optimizes pricing policies to balance multiple objectives:
    • 🚀 ETA targets (minimize wait times)
    • ✅ Trip completion rates (maximize successful matches)
    • 💵 Driver earnings (ensure fair compensation)
    • 📊 Platform revenue (maximize profitability)
  • 🔧 Three pricing policies available:
    • Base: Fixed pricing with no surge adjustments
    • Smart Surge v1: Reactive surge pricing based on current demand-supply ratio
    • Predictive Surge v2: Anticipatory surge pricing using short-term demand forecasting

Real-Time Marketplace Dashboard:

  • 🗺️ Provides real-time visualizations with heatmaps showing demand patterns
  • 📈 Displays KPI delta cards comparing different pricing policies
  • 📊 Interactive scatter plots for policy comparison (ETA vs Revenue, Completion Rate vs Revenue)
  • 🏙️ City selection dropdown for Tehran with zone-based visualization

🇮🇷 فارسی

🔄 خط لوله جریان داده

sequenceDiagram
    participant کاربر
    participant داشبورد
    participant API
    participant مدل_ETA
    participant پیش‌بینی_تقاضا
    participant موتور_قیمت
    participant شبیه‌سازی

    کاربر->>داشبورد: درخواست قیمت
    داشبورد->>API: POST /quote
    API->>مدل_ETA: پیش‌بینی ETA
    API->>پیش‌بینی_تقاضا: دریافت تقاضا
    API->>موتور_قیمت: محاسبه Surge
    موتور_قیمت-->>API: ضریب Surge
    API-->>داشبورد: پاسخ قیمت
    داشبورد-->>کاربر: نمایش قیمت
    
    کاربر->>داشبورد: اجرای شبیه‌سازی
    داشبورد->>API: POST /policy/sim
    API->>شبیه‌سازی: اجرای Replay
    شبیه‌سازی->>موتور_قیمت: تست سیاست‌ها
    موتور_قیمت-->>شبیه‌سازی: نتایج KPI
    شبیه‌سازی-->>API: داده مقایسه
    API-->>داشبورد: تغییرات KPI
    داشبورد-->>کاربر: نمایش نتایج
Loading

موتور قیمت‌گذاری پویا:

  • 🎯 عدم تعادل عرضه و تقاضا در آینده را در مناطق درخواست خودرو پیش‌بینی می‌کند
  • ⚡ قیمت‌گذاری را به صورت پویا تنظیم می‌کند تا تعادل بین کارایی پلتفرم و رضایت مشتری ایجاد شود
  • 🔀 از چندین سیاست قیمت‌گذاری پشتیبانی می‌کند: Base (ثابت)، Smart Surge v1 (واکنشی) و Predictive Surge v2 (پیش‌فعال)

تخمین زمان رسیدن (ETA):

  • ⏱️ از زمان سفر، مسافت و بار منطقه برای پیش‌بینی ETA دقیق استفاده می‌کند
  • 🛡️ منطق fallback را پیاده‌سازی می‌کند تا اطمینان حاصل شود که هیچ ETA صفری برگردانده نمی‌شود
  • 🧠 از مدل‌های ETA پایه و پیشرفته با feature engineering پشتیبانی می‌کند

بهینه‌سازی قیمت‌گذاری:

  • 🎛️ سیاست‌های قیمت‌گذاری را برای ایجاد تعادل بین اهداف متعدد بهینه می‌کند:
    • 🚀 اهداف ETA (کاهش زمان انتظار)
    • ✅ نرخ تکمیل سفر (به حداکثر رساندن تطابق موفق)
    • 💵 درآمد رانندگان (اطمینان از جبران عادلانه)
    • 📊 درآمد پلتفرم (به حداکثر رساندن سودآوری)
  • 🔧 سه سیاست قیمت‌گذاری در دسترس است:
    • Base: قیمت‌گذاری ثابت بدون تنظیمات surge
    • Smart Surge v1: قیمت‌گذاری surge واکنشی بر اساس نسبت عرضه و تقاضای فعلی
    • Predictive Surge v2: قیمت‌گذاری surge پیش‌فعال با استفاده از پیش‌بینی تقاضای کوتاه‌مدت

داشبورد زنده بازار:

  • 🗺️ بصری‌سازی‌های زنده با نقشه‌های حرارتی نشان‌دهنده الگوهای تقاضا را ارائه می‌دهد
  • 📈 کارت‌های تغییرات KPI را برای مقایسه سیاست‌های مختلف قیمت‌گذاری نمایش می‌دهد
  • 📊 نمودارهای پراکندگی تعاملی برای مقایسه سیاست (ETA در مقابل درآمد، نرخ تکمیل در مقابل درآمد)
  • 🏙️ منوی کشویی انتخاب شهر برای تهران با بصری‌سازی مبتنی بر منطقه

🚀 Installation Instructions

🇬🇧 English

Requirements:

  • Python 3.x (3.8 or higher recommended)
  • Node.js (for React.js frontend)
  • GeoPandas, OSMNX, FastAPI, and necessary Python dependencies
  • A working development environment with Node.js for frontend and Python for backend

Steps to Install and Run:

  1. Clone the repository:

    git clone https://github.com/yourusername/ride-hailing-optimization.git
    cd ride-hailing-optimization
  2. Set up a Python virtual environment:

    python -m venv venv
  3. Activate the virtual environment:

    • On Windows:
      .\venv\Scripts\activate
    • On macOS/Linux:
      source venv/bin/activate
  4. Install Python dependencies:

    pip install -r requirements.txt
  5. Install frontend dependencies:

    cd frontend
    npm install
    cd ..
  6. Prepare the data:

    python -m src.data.preprocess
    python -m src.data.zones
    python -m src.features.demand_features
    python -m src.models.eta_baseline
  7. Run the backend API:

    uvicorn src.api.app:app --reload

    The API will be available at http://127.0.0.1:8000

  8. Run the frontend application (React.js):

    cd frontend
    npm start

    The frontend will be available at http://localhost:3000 (or the configured port)

🇮🇷 فارسی

نیازمندی‌ها:

  • Python 3.x (نسخه 3.8 یا بالاتر توصیه می‌شود)
  • Node.js (برای فرانت‌اند React.js)
  • GeoPandas، OSMNX، FastAPI و وابستگی‌های لازم Python
  • یک محیط توسعه فعال با Node.js برای فرانت‌اند و Python برای بک‌اند

مراحل نصب و اجرا:

۱. کلون کردن مخزن:

git clone https://github.com/yourusername/ride-hailing-optimization.git
cd ride-hailing-optimization

۲. ایجاد محیط مجازی Python:

python -m venv venv

۳. فعال‌سازی محیط مجازی:

  • در ویندوز:

.\venv\Scripts\activate ```

  • در macOS/Linux:
    source venv/bin/activate

۴. نصب وابستگی‌های Python:

pip install -r requirements.txt

۵. نصب وابستگی‌های فرانت‌اند:

cd frontend
npm install
cd ..

۶. آماده‌سازی داده‌ها:

python -m src.data.preprocess
python -m src.data.zones
python -m src.features.demand_features
python -m src.models.eta_baseline

۷. اجرای API بک‌اند:

uvicorn src.api.app:app --reload

API در آدرس http://127.0.0.1:8000 در دسترس خواهد بود

۸. اجرای برنامه فرانت‌اند (React.js):

cd frontend
npm start

فرانت‌اند در آدرس http://localhost:3000 (یا پورت پیکربندی شده) در دسترس خواهد بود


🧪 How to Run and Test

🇬🇧 English

Simulation Run:

  1. Open the dashboard at http://127.0.0.1:8000/ in your browser
  2. Select "Tehran" from the city dropdown
  3. Use the /policy/sim API endpoint to run simulations:
    curl -X POST "http://127.0.0.1:8000/policy/sim" \
      -H "Content-Type: application/json" \
      -d '{
        "start_datetime": "2024-04-01T09:00:00",
        "end_datetime": "2024-04-01T12:00:00",
        "bucket_minutes": 15,
        "zone_ids": [1, 2, 3],
        "use_forecast": true,
        "policy_name": "Predictive Surge v2"
      }'
  4. View the results in the UI dashboard with KPI delta cards showing:
    • ETA changes (minutes)
    • Completion rate changes (%)
    • Revenue changes (%)
    • Price volatility metrics

Key Insights:

📊 Policy Performance Comparison

Policy Comparison (Relative to Base):
┌─────────────────────────────────────────────────────────┐
│                                                         │
│  Revenue:        Base  ████░░░░░░░░░░░░░░░░░░░░░░░░   │
│                  v1    ████████░░░░░░░░░░░░░░░░░░░░   │
│                  v2    ████████████░░░░░░░░░░░░░░░░   │
│                                                         │
│  ETA:            Base  ████████████████████████████   │
│                  v1    ████████████████████░░░░░░░░   │
│                  v2    ████████████████████████░░░░   │
│                                                         │
│  Volatility:     Base  ██░░░░░░░░░░░░░░░░░░░░░░░░░░   │
│                  v1    ████████████░░░░░░░░░░░░░░░░   │
│                  v2    ██████░░░░░░░░░░░░░░░░░░░░░░   │
│                                                         │
└─────────────────────────────────────────────────────────┘
  • Predictive Surge v2 🎯: Aims to lift revenue without significantly increasing ETA. Uses anticipatory pricing based on demand forecasts, resulting in smoother price transitions and better supply-demand matching.

  • Smart Surge v1 ⚡: Shows reactive behavior with significant volatility. Responds to current demand-supply imbalances, which can lead to sudden price spikes during peak hours.

  • Base Policy 📊: Provides baseline metrics for comparison. Fixed pricing helps understand the impact of dynamic pricing strategies.

Frontend Testing:

  1. Open http://127.0.0.1:8000/ in your browser
  2. Switch the city to "Tehran" using the dropdown
  3. Run simulations for different policies (Base, Smart Surge v1, Predictive Surge v2)
  4. View the KPI cards showing delta changes for each policy
  5. Analyze the scatter plot comparison:
    • X-axis: ETA (minutes) or Completion Rate (%)
    • Y-axis: Revenue per trip or Total Revenue
    • Each point represents a policy's performance
  6. Compare policies side-by-side to understand trade-offs between ETA, completion rates, and revenue

🇮🇷 فارسی

اجرای شبیه‌سازی: ۱. داشبورد را در آدرس http://127.0.0.1:8000/ در مرورگر خود باز کنید ۲. "Tehran" را از منوی کشویی شهر انتخاب کنید ۳. از endpoint API /policy/sim برای اجرای شبیه‌سازی‌ها استفاده کنید:

curl -X POST "http://127.0.0.1:8000/policy/sim" \
  -H "Content-Type: application/json" \
  -d '{
    "start_datetime": "2024-04-01T09:00:00",
    "end_datetime": "2024-04-01T12:00:00",
    "bucket_minutes": 15,
    "zone_ids": [1, 2, 3],
    "use_forecast": true,
    "policy_name": "Predictive Surge v2"
  }'

۴. نتایج را در داشبورد UI با کارت‌های تغییرات KPI مشاهده کنید که نشان می‌دهند:

  • تغییرات ETA (دقیقه)
  • تغییرات نرخ تکمیل (%)
  • تغییرات درآمد (%)
  • معیارهای نوسان قیمت

نکات کلیدی:

📊 مقایسه عملکرد سیاست‌ها

مقایسه سیاست‌ها (نسبت به Base):
┌─────────────────────────────────────────────────────────┐
│                                                         │
│  درآمد:         Base  ████░░░░░░░░░░░░░░░░░░░░░░░░   │
│                  v1    ████████░░░░░░░░░░░░░░░░░░░░   │
│                  v2    ████████████░░░░░░░░░░░░░░░░   │
│                                                         │
│  ETA:            Base  ████████████████████████████   │
│                  v1    ████████████████████░░░░░░░░   │
│                  v2    ████████████████████████░░░░   │
│                                                         │
│  نوسان:         Base  ██░░░░░░░░░░░░░░░░░░░░░░░░░░   │
│                  v1    ████████████░░░░░░░░░░░░░░░░   │
│                  v2    ██████░░░░░░░░░░░░░░░░░░░░░░   │
│                                                         │
└─────────────────────────────────────────────────────────┘
  • Predictive Surge v2 🎯: هدف افزایش درآمد بدون افزایش قابل توجه ETA است. از قیمت‌گذاری پیش‌فعال مبتنی بر پیش‌بینی‌های تقاضا استفاده می‌کند که منجر به انتقال‌های قیمت نرم‌تر و تطابق بهتر عرضه و تقاضا می‌شود.

  • Smart Surge v1 ⚡: رفتار واکنشی با نوسان قابل توجه نشان می‌دهد. به عدم تعادل عرضه و تقاضای فعلی پاسخ می‌دهد که می‌تواند منجر به افزایش ناگهانی قیمت در ساعات اوج شود.

  • سیاست Base 📊: معیارهای خط پایه برای مقایسه را ارائه می‌دهد. قیمت‌گذاری ثابت به درک تأثیر استراتژی‌های قیمت‌گذاری پویا کمک می‌کند.

تست فرانت‌اند: ۱. آدرس http://127.0.0.1:8000/ را در مرورگر خود باز کنید ۲. شهر را به "Tehran" با استفاده از منوی کشویی تغییر دهید ۳. شبیه‌سازی‌ها را برای سیاست‌های مختلف (Base، Smart Surge v1، Predictive Surge v2) اجرا کنید ۴. کارت‌های KPI را که تغییرات دلتا را برای هر سیاست نشان می‌دهند مشاهده کنید ۵. نمودار پراکندگی مقایسه را تحلیل کنید:

  • محور X: ETA (دقیقه) یا نرخ تکمیل (%)
  • محور Y: درآمد به ازای هر سفر یا کل درآمد
  • هر نقطه عملکرد یک سیاست را نشان می‌دهد ۶. سیاست‌ها را کنار هم مقایسه کنید تا بده‌بستان‌های بین ETA، نرخ تکمیل و درآمد را درک کنید

📸 Screenshots and Dashboards

(Add screenshots of the dashboard, KPI cards, scatter plot, and city selection dropdown here.)

Dashboard Overview

Dashboard

KPI Delta Cards

KPI Cards

Scatter Plot Comparison

Scatter Plot

Tehran Zone Selection

Tehran Zones


🔌 API Endpoints

🇬🇧 English

Tehran Endpoints:

  • GET /api/tehran/zones: Get the zone data for Tehran

    • Returns: List of districts with district_id, centroid_lon, and centroid_lat
    • Example response:
      [
        {
          "district_id": 1,
          "centroid_lon": 51.3889,
          "centroid_lat": 35.6892
        }
      ]
  • GET /api/tehran/eta: Get ETA predictions for a given origin and destination district in Tehran

    • Parameters:
      • origin_district (int): Origin district ID
      • destination_district (int): Destination district ID
    • Returns: ETA in minutes
    • Example request: GET /api/tehran/eta?origin_district=1&destination_district=2
    • Example response:
      {
        "origin_district": 1,
        "destination_district": 2,
        "eta_minutes": 15.5
      }

General Endpoints:

  • POST /eta: Predict ETA for a trip

    • Request body: ETARequest with pickup_zone_id, dropoff_zone_id, trip_distance, pickup_datetime
    • Returns: ETAResponse with eta_minutes_pred, model_version, feature_summary
  • POST /demand: Query demand data for a zone

    • Request body: DemandRequest with zone_id, start_datetime, end_datetime, bucket_minutes
    • Returns: DemandResponse with demand points and statistics
  • POST /quote: Get price quote for a trip

    • Request body: QuoteRequest with trip details
    • Returns: QuoteResponse with base_fare_estimate, surge_multiplier, final_price_estimate
  • POST /policy/sim: Run policy simulation

    • Request body: PolicySimRequest with simulation parameters
    • Returns: PolicySimResponse with policy comparison results and KPI deltas
  • GET /health: Health check endpoint

    • Returns: {"status": "ok"}
  • GET /metrics: Get system metrics

    • Returns: Model status, data availability, and last simulation timestamp

🇮🇷 فارسی

Endpointهای تهران:

  • GET /api/tehran/zones: دریافت داده‌های منطقه برای تهران

    • بازگشت: لیست مناطق با district_id، centroid_lon و centroid_lat
    • مثال پاسخ:
      [
        {
          "district_id": 1,
          "centroid_lon": 51.3889,
          "centroid_lat": 35.6892
        }
      ]
  • GET /api/tehran/eta: دریافت پیش‌بینی‌های ETA برای یک منطقه مبدأ و مقصد مشخص در تهران

    • پارامترها:
      • origin_district (int): شناسه منطقه مبدأ
      • destination_district (int): شناسه منطقه مقصد
    • بازگشت: ETA به دقیقه
    • مثال درخواست: GET /api/tehran/eta?origin_district=1&destination_district=2
    • مثال پاسخ:
      {
        "origin_district": 1,
        "destination_district": 2,
        "eta_minutes": 15.5
      }

Endpointهای عمومی:

  • POST /eta: پیش‌بینی ETA برای یک سفر

    • بدنه درخواست: ETARequest با pickup_zone_id، dropoff_zone_id، trip_distance، pickup_datetime
    • بازگشت: ETAResponse با eta_minutes_pred، model_version، feature_summary
  • POST /demand: پرس‌وجوی داده‌های تقاضا برای یک منطقه

    • بدنه درخواست: DemandRequest با zone_id، start_datetime، end_datetime، bucket_minutes
    • بازگشت: DemandResponse با نقاط تقاضا و آمار
  • POST /quote: دریافت قیمت برای یک سفر

    • بدنه درخواست: QuoteRequest با جزئیات سفر
    • بازگشت: QuoteResponse با base_fare_estimate، surge_multiplier، final_price_estimate
  • POST /policy/sim: اجرای شبیه‌سازی سیاست

    • بدنه درخواست: PolicySimRequest با پارامترهای شبیه‌سازی
    • بازگشت: PolicySimResponse با نتایج مقایسه سیاست و تغییرات KPI
  • GET /health: endpoint بررسی سلامت

    • بازگشت: {"status": "ok"}
  • GET /metrics: دریافت معیارهای سیستم

    • بازگشت: وضعیت مدل، در دسترس بودن داده و برچسب زمانی آخرین شبیه‌سازی

🤝 Contributing

🇬🇧 English

We welcome contributions! Please follow these guidelines:

  1. Fork the repository and create your feature branch (git checkout -b feature/AmazingFeature)
  2. Make your changes following the existing code style and conventions
  3. Add tests for new functionality if applicable
  4. Update documentation as needed
  5. Commit your changes with clear, descriptive commit messages
  6. Push to your branch (git push origin feature/AmazingFeature)
  7. Open a Pull Request with a clear description of your changes

Guidelines:

  • Submit an issue to discuss proposed changes before implementing major features
  • Follow PEP 8 style guide for Python code
  • Ensure all tests pass before submitting a PR
  • Update the README if you add new features or change existing functionality
  • Be respectful and constructive in discussions

🇮🇷 فارسی

از مشارکت شما استقبال می‌کنیم! لطفاً این دستورالعمل‌ها را دنبال کنید:

۱. مخزن را Fork کنید و شاخه ویژگی خود را ایجاد کنید (git checkout -b feature/AmazingFeature) ۲. تغییرات خود را اعمال کنید با پیروی از سبک و قراردادهای کد موجود ۳. تست‌ها را اضافه کنید برای عملکرد جدید در صورت امکان ۴. مستندات را به‌روزرسانی کنید در صورت نیاز ۵. تغییرات خود را commit کنید با پیام‌های commit واضح و توصیفی ۶. به شاخه خود push کنید (git push origin feature/AmazingFeature) ۷. یک Pull Request باز کنید با توضیحات واضح در مورد تغییرات خود

دستورالعمل‌ها:

  • قبل از پیاده‌سازی ویژگی‌های اصلی، یک issue برای بحث در مورد تغییرات پیشنهادی ثبت کنید
  • راهنمای سبک PEP 8 را برای کد Python دنبال کنید
  • قبل از ارسال PR، اطمینان حاصل کنید که همه تست‌ها پاس می‌شوند
  • اگر ویژگی‌های جدید اضافه می‌کنید یا عملکرد موجود را تغییر می‌دهید، README را به‌روزرسانی کنید
  • در بحث‌ها محترم و سازنده باشید

📄 License

This project is licensed under the MIT License - see the LICENSE file for details.


🙏 Acknowledgments

🇬🇧 English

About Me:

I am Mahdi Navaei, a Senior AI/ML Engineer with 7+ years of experience in architecting and productionizing intelligent systems at scale. My expertise spans Generative AI, real-time recommendation engines, and NLP/LLM applications. I specialize in building production-grade FastAPI microservices, real-time recommendation systems, and NLP pipelines for diverse use cases.

Key Projects:

  • DriveShield: An ADAS (Advanced Driver Assistance Systems) collision risk prediction system that uses deep learning models to predict potential collisions and enhance road safety. Built with Python, FastAPI, and advanced ML models.

  • Hybrid Retail Recommender: A multi-model recommender system that combines collaborative filtering, content-based filtering, and deep learning approaches to provide personalized product recommendations. Implemented with production-grade microservices architecture.

Connect with me:

  • LinkedIn: [Your LinkedIn Profile URL]
  • GitHub: [Your GitHub Profile URL]

🇮🇷 فارسی

درباره من:

من مهدی نائویی هستم، یک مهندس ارشد هوش مصنوعی و یادگیری ماشین با بیش از 7 سال تجربه در طراحی و پیاده‌سازی سیستم‌های هوشمند در مقیاس بزرگ. تخصص من شامل هوش مصنوعی مولد (Generative AI)، موتورهای توصیه‌گر بلادرنگ و کاربردهای پردازش زبان طبیعی (NLP/LLM) است. من در ساخت میکروسرویس‌های FastAPI در سطح تولید، سیستم‌های توصیه‌گر بلادرنگ و پایپلاین‌های NLP برای کاربردهای متنوع تخصص دارم.

پروژه‌های کلیدی:

  • DriveShield: یک سیستم پیش‌بینی خطر تصادف ADAS (سیستم‌های کمک راننده پیشرفته) که از مدل‌های یادگیری عمیق برای پیش‌بینی تصادفات احتمالی و افزایش ایمنی جاده استفاده می‌کند. ساخته شده با Python، FastAPI و مدل‌های ML پیشرفته.

  • Hybrid Retail Recommender: یک سیستم توصیه‌گر چند مدلی که فیلترینگ مشارکتی، فیلترینگ مبتنی بر محتوا و رویکردهای یادگیری عمیق را ترکیب می‌کند تا توصیه‌های محصول شخصی‌سازی شده ارائه دهد. با معماری میکروسرویس‌های سطح تولید پیاده‌سازی شده است.

ارتباط با من:

  • لینکدین: [آدرس پروفایل لینکدین شما]
  • گیت‌هاب: [آدرس پروفایل گیت‌هاب شما]

📚 References

🇬🇧 English

🇮🇷 فارسی


Made with ❤️ by Mahdi Navaei

ساخته شده با ❤️ توسط مهدی نوایی

About

AI-powered Surge Pricing & ETA Optimization for ride-hailing platforms. Using demand forecasting and real-time ETA predictions, it optimizes fares, reduces wait times, and improves driver/passenger experience. Optimized for Tehran, it helps increase revenue and reduce pricing volatility.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published