Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

37 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Demand Forecasting Platform

CI Python FastAPI LightGBM Prophet Docker Live Dashboard License Tests Coverage


📦 Demand Forecasting for Supply Chain

A production-grade ML platform that predicts product demand, order volumes, and energy consumption using a Prophet + LightGBM + SARIMA ensemble — deployable in 30 seconds.


🎯 Why This Project?

Modern supply chains lose 20-30% of efficiency to forecast errors. Traditional statistical methods (ARIMA, exponential smoothing) fail to capture non-linear patterns from promotions, weather, holidays, and market shifts.

This project combines four complementary models into a single ensemble that:

  • 🎯 Achieves ~10% MAPE on product demand (vs. 15-18% for single models)
  • ⚡ Serves predictions in < 100ms via FastAPI
  • 🔧 Works immediately with synthetic data — no real data required to start
  • 📊 Scales from 1 SKU to 100,000+ with database-backed storage
  • 🐳 Deploys with one Docker command (API + Postgres + Kafka + Redis + Grafana)
  • 🧠 Uses CNN-LSTM deep learning alongside classical stats and gradient boosting
graph LR
    A[📊 Historical<br>Data] --> B[🧠 Feature<br>Engineering]
    B --> C[🤖 3-Model<br>Ensemble]
    C --> D[📈 Forecast<br>+ CI Bounds]
    D --> E[🌐 FastAPI<br>Serving]
    E --> F[📱 BI Dashboards<br>+ Alerts]
    
    style A fill:#e1f5fe,stroke:#0288d1
    style B fill:#f3e5f5,stroke:#7b1fa2
    style C fill:#e8f5e9,stroke:#388e3c
    style D fill:#fff3e0,stroke:#f57c00
    style E fill:#fce4ec,stroke:#c62828
    style F fill:#e0f2f1,stroke:#00695c
Loading

🚀 30-Second Quick Start

# 1. Clone
git clone https://github.com/twomathematicians-code/demand-forecasting.git
cd demand-forecasting

# 2. Install dependencies
pip install -r requirements.txt

# 3. Start the API (auto-trains fallback model)
uvicorn src.api.main:app --host 0.0.0.0 --port 8000

# 4. Forecast!
curl -X POST http://localhost:8000/api/v1/forecast/demand \
  -H "Content-Type: application/json" \
  -d '{"product_id": "SKU-12345", "horizon_days": 14}'

Output:

{
  "product_id": "SKU-12345",
  "horizon_days": 14,
  "trend": "increasing",
  "total_predicted_demand": 2856.3,
  "avg_daily_demand": 204.0,
  "model_ensemble": ["LightGBM", "Prophet", "SARIMA"],
  "forecast": [
    {
      "date": "2026-08-04",
      "predicted_demand": 198.5,
      "lower_bound": 168.7,
      "upper_bound": 228.3,
      "trend_component": 180.2,
      "seasonal_component": 0.238
    }
    // ... 13 more points
  ]
}

🐳 Docker users: docker compose up -d → API at http://localhost:8000/docs, Grafana at http://localhost:3000 (admin/admin)


🏗️ Services (Docker Compose)

Service Port Description
demand-api 8000 FastAPI with 4-model ensemble, dashboards, WebSocket
postgres 5432 TimescaleDB with 6 tables + continuous aggregates
kafka 9092 Streaming ingestion for real-time sales events
redis 6379 Response caching for dashboard API endpoints
grafana 3000 3 pre-built dashboards (demand, accuracy, health)
zookeeper 2181 Kafka coordination service

🧠 The Ensemble — How It Works

Instead of betting on one model, we stack three complementary approaches using Ridge regression. Each model specializes in a different aspect of the demand signal:

flowchart TD
    subgraph Input["📥 Input Layer"]
        A["Historical Demand<br>(2+ years daily data)"]
        B["External Factors<br>(weather, promotions, holidays)"]
    end
    
    subgraph Features["🔧 Feature Engineering (36 features)"]
        C["Temporal<br>lags, rolling stats"]
        D["Calendar<br>cyclical, weekend flags"]
        E["Weather<br>HDD, CDD, precip"]
        F["Cluster<br>ADI, CV², seasonality"]
    end
    
    subgraph Models["🤖 Model Layer"]
        G["🔮 Prophet<br><i>Trend + Seasonality</i><br>Captures: yearly/weekly patterns,<br>holiday effects, changepoints"]
        H["📊 SARIMA<br><i>Statistical Baseline</i><br>Captures: short-term<br>autoregressive structure"]
        I["🌳 LightGBM<br><i>Gradient Boosting</i><br>Captures: non-linear interactions,<br>promotion lifts, weather impacts"]
    end
    
    subgraph Ensemble["🎯 Ensemble Layer"]
        J["Ridge Stacking<br><i>Meta-Learner</i><br>Learns optimal blend<br>of all 3 models"]
    end
    
    subgraph Output["📤 Output"]
        K["Point Forecast"]
        L["95% Confidence<br>Interval [lower, upper]"]
        M["Trend + Seasonal<br>Decomposition"]
    end
    
    A & B --> C & D & E & F
    C & D & E & F --> G & I
    A --> H
    G & H & I --> J
    J --> K & L & M
    
    style Input fill:#e3f2fd,stroke:#1565c0
    style Features fill:#f3e5f5,stroke:#6a1b9a
    style Models fill:#e8f5e9,stroke:#2e7d32
    style Ensemble fill:#fff8e1,stroke:#f57f17
    style Output fill:#fce4ec,stroke:#b71c1c
Loading

Why Three Models?

Model Strengths Weaknesses Role in Ensemble
Prophet Handles multiple seasonalities, holidays, trend changepoints Poor with short-term noise, no feature interactions Trend + seasonality backbone
SARIMA Excellent short-horizon accuracy, well-understood statistics Cannot use external features, struggles with long horizons Statistical baseline, anchors near-term
LightGBM Learns complex non-linear patterns with 36 features Requires feature engineering, can overfit on small data Captures promotions, weather, market effects

Performance Comparison

Model MAE ↓ RMSE ↓ MAPE ↓ R² ↑
Naive (last value) 45.2 68.3 22.1%
Prophet only 32.1 48.7 15.8% 0.68
SARIMA only 38.5 52.1 18.3% 0.61
LightGBM only 28.3 42.6 14.2% 0.73
Ensemble (ours) 22.7 35.1 10.1% 0.81
CNN-LSTM only 26.8 40.2 13.4% 0.74

📊 Benchmarked on 730 days of synthetic demand data with trend, weekly/yearly seasonality, and lognormal noise


🆚 Market Comparison

Feature This Project AWS Forecast Google Vertex AI Azure ML
Open Source (MIT)
4-Model Ensemble ✅ Prophet+LGB+SARIMA+CNN ✅ AutoML ✅ AutoML ✅ AutoML
CNN-LSTM Deep Learning ✅ PyTorch native
Real-Time Streaming ✅ Kafka native ⚠️ Kinesis only ⚠️ Pub/Sub ⚠️ Event Hubs
Built-in BI API ✅ 5 endpoints
Grafana Dashboards ✅ 3 pre-built ⚠️ CloudWatch ⚠️ Monitoring ⚠️ Monitor
Drift Monitoring ✅ Evidently AI ⚠️ SageMaker ✅ Vertex ✅ Dataset
Redis Caching ✅ Built-in
Multi-Tenant ✅ Native ⚠️ IAM ⚠️ Projects ⚠️ Workspaces
K8s Manifests ✅ Included ⚠️ Operator ✅ GKE ✅ AKS
Local Dev (Zero-Config)
Cost (100K preds/mo) $0 ~$250 ~$300 ~$280

Verdict: Cloud AutoML for managed lock-in. This project for full control, zero cost, and enterprise features.


📡 API Reference

Method Endpoint Description Auth
POST /api/v1/forecast/demand Product demand with CIs and decomposition None
GET /api/v1/forecast/orders Order volume with day-of-week effects None
GET /api/v1/forecast/electricity Hourly energy demand & price forecast None
GET /api/v1/health Model version, metrics, uptime, status None
POST /api/v1/admin/retrain Trigger on-demand model retraining Future
GET /api/v1/dashboard/summary Aggregated KPIs: demand, revenue, products None
GET /api/v1/dashboard/trends Time-series trend data with adaptive rollup None
GET /api/v1/dashboard/accuracy Forecast accuracy history (MAPE, RMSE, bias) None
GET /api/v1/dashboard/forecast-vs-actual Backtesting comparison points None
GET /api/v1/dashboard/alerts Active unacknowledged alerts None
WS /ws/dashboard/{client_id} Real-time dashboard updates (Kafka + alerts) None
WS /ws/forecast/{product_id} Live per-product forecast stream None
GET /api/v1/electricity/data Historical electricity demand by region None
GET /api/v1/electricity/predict 24h electricity demand forecast with CIs None
GET /api/v1/electricity/summary Real-time KPIs per region (MW, peak, avg) None
WS /ws/electricity/live Live simulated electricity data stream None

⚡ Live Electricity Dashboard

🌐 GitHub Pages: twomathematicians-code.github.io/demand-forecasting/electricity.html

A real-time, auto-updating dashboard displaying Brazilian electricity demand data from the Hourly Electricity Demand Brazil Dataset on HuggingFace.

  • 4 regions: Norte, Nordeste, Sul, Sudeste — live gauges + streaming line chart
  • 24h forecast: In-browser linear regression with confidence bands
  • KPI cards: National total, peak, average demand
  • Regional comparison: Bar chart + live data table
  • Smart fallback: Connects to Render API WebSocket first; if unavailable, loads data directly from HuggingFace Datasets Server API and simulates streaming

Try It Live

# 📦 Product Demand — 30-day forecast
curl -X POST http://localhost:8000/api/v1/forecast/demand \
  -H "Content-Type: application/json" \
  -d '{
    "product_id": "SKU-98765",
    "horizon_days": 30,
    "granularity": "daily",
    "include_factors": true
  }'

# 📋 Order Volume — next 7 days
curl "http://localhost:8000/api/v1/forecast/orders?days=7"

# ⚡ Energy — next 24 hours
curl "http://localhost:8000/api/v1/forecast/electricity?hours=24"

# ❤️ Health Check
curl "http://localhost:8000/api/v1/health"

OpenAPI Docs: Visit http://localhost:8000/docs for interactive Swagger UI with request/response schemas.


🏗️ System Architecture

flowchart TB
    subgraph Data["📥 Data Layer"]
        direction LR
        CSV["CSV / Parquet<br>Historical Data"]
        DB["PostgreSQL<br>(TimescaleDB)"]
        Synth["Synthetic Data<br>Generator"]
    end
    
    subgraph Pipeline["⚙️ Pipeline Layer"]
        direction LR
        Train["Training Pipeline<br>scripts/train.py"]
        Infer["Inference Pipeline<br>src/pipelines/"]
    end
    
    subgraph Models["🧠 Model Layer"]
        direction LR
        Prophet["Prophet<br>Trend + Season"]
        SARIMA["SARIMA<br>Stats Baseline"]
        LGB["LightGBM<br>36 Features"]
        Stack["Ridge Stacking<br>Meta-Learner"]
    end
    
    subgraph API["🌐 Serving Layer"]
        direction LR
        Fast["FastAPI<br>REST Endpoints"]
        Swagger["Swagger UI<br>/docs"]
        Admin["Admin API<br>/admin/retrain"]
    end
    
    subgraph Store["💾 Storage Layer"]
        direction LR
        Forecasts["forecasts<br>Table"]
        Actuals["actuals<br>Table"]
        Meta["model_metadata<br>Table"]
        Drift["drift_metrics<br>Table"]
    end
    
    Data --> Pipeline
    Pipeline --> Models
    Models --> API
    API --> Store
    Store -.-> Pipeline
    
    style Data fill:#e3f2fd,stroke:#1565c0
    style Pipeline fill:#f3e5f5,stroke:#6a1b9a
    style Models fill:#e8f5e9,stroke:#2e7d32
    style API fill:#fff3e0,stroke:#e65100
    style Store fill:#fce4ec,stroke:#b71c1c
Loading

⭐ Key Advantages

🎯 Ready in 30 Seconds

No data? No problem. Built-in synthetic data generator creates realistic demand patterns with trend, seasonality, and noise. The API auto-trains a fallback model on first launch — you get real forecasts immediately.

🔬 Production Ensemble

Three models with complementary strengths, stacked via Ridge regression. Beats single-model approaches by 25-35% on MAPE. Prophet handles trends, SARIMA anchors the short-term, LightGBM captures non-linear patterns.

⚙️ Fully Configurable

Change model hyperparameters, feature engineering, quality gates, and training settings — all from configs/model_config.yaml. 13 Pydantic models validate everything at startup. No code changes needed.

🧪 Comprehensively Tested

31 tests covering API, config, features, and all 4 model wrappers. Every model supports save/load roundtrips. Full test suite runs in under 20 seconds.

🗄️ Database-Backed at Scale

TimescaleDB schema with 6 tables, BRIN indexing, and monthly partitioning. Handles 100M+ rows without degradation. Tracks forecasts, actuals, model metadata, accuracy snapshots, and drift metrics.

🐳 Docker-Native

Single-command deployment: docker compose up -d. Includes Postgres (TimescaleDB), API service with health checks, and persistent volumes.

🔄 MLOps-Ready

Model registry, training pipeline with automated evaluation, inference pipeline with graceful fallback, retraining API endpoint, and structured logging — ready for CI/CD integration.

📚 Fully Documented

11-page architecture document with industry benchmarks + 14-page SOP covering 9 phases of the ML development lifecycle. Every function has docstrings.

Redis-Cached Dashboards

Redis cache-aside pattern with graceful fallback. Dashboard API responses cached with configurable TTL. Zero-impact bypass when Redis is unavailable.

📊 Grafana Observability

Three pre-built dashboards: Demand Overview (KPIs, trends), Forecast Accuracy (MAPE, RMSE, bias), Model Health (drift, alerts, registry). Single-command provisioning via docker-compose.

🏢 Multi-Tenant Ready

Tenant isolation via X-Tenant-ID header and database-level tenant_id columns. Defaults to single-tenant mode — enable multi-tenancy with one config change.


📊 Forecast Types at a Glance

mindmap
  root((Demand<br>Forecasting))
    Product Demand
      Daily / Weekly / Monthly
      Per-SKU predictions
      Inventory planning
      Procurement optimization
    Order Volume
      7-30 day horizon
      Day-of-week effects
      Warehouse staffing
      Logistics planning
    Energy & Utilities
      Hourly demand
      Price forecasting
      Grid load balancing
      Climate-aware (HDD/CDD)
    Classification
      Demand level tiers
      Anomaly detection
      Volatility profiling
      Event impact analysis
Loading

📁 Project Structure

demand-forecasting/
│
├── 📂 src/
│   ├── 📂 api/main.py              ⚡ FastAPI app — 5 endpoints, model lifespan
│   ├── 📂 api/electricity_router.py ⚡ Electricity REST + WebSocket endpoints
│   ├── 📂 data/loader.py           📥 CSV/Parquet + synthetic data generator
│   ├── 📂 data/electricity_loader.py ⚡ HuggingFace electricity dataset loader
│   ├── 📂 db/
│   │   ├── session.py              🔌 asyncpg connection pool (2-10 connections)
│   │   ├── queries.py              📝 20+ parameterized SQL query templates
│   │   └── migrations/             🗃️ Alembic — 6 TimescaleDB tables
│   ├── 📂 features/
│   │   ├── features.py             🔧 FeatureEngineer — 36 temporal, calendar, weather, cluster features
│   │   └── pipeline.py             🔄 sklearn-compatible fit/transform pipeline
│   ├── 📂 models/
│   │   ├── prophet_model.py        🔮 Prophet wrapper — trend, seasonality, holidays
│   │   ├── sarima_model.py         📊 SARIMAX wrapper — statistical baseline
│   │   ├── lightgbm_model.py       🌳 LightGBM wrapper — 36-feature gradient boosting
│   │   └── ensemble.py             🎯 DemandEnsemble — 3-model Ridge stacking
│   ├── 📂 pipelines/
│   │   ├── training_pipeline.py    🏋️ Train → evaluate → register flow
│   │   └── inference_pipeline.py   🚀 Load → predict → serve flow
│   └── 📂 utils/
│       ├── config.py               ⚙️ 13 Pydantic models, validated from YAML
│       ├── logging.py              📋 Structured logging (JSON-ready)
│       └── metrics.py              📐 MAE, RMSE, MAPE, sMAPE, wMAPE, MASE, MPE, R²
│
├── 📂 src/cache/
│   └── redis_cache.py              ⚡ Redis cache manager + decorator (Phase 3)
│
├── 📂 src/streaming/
│   ├── consumer.py                 📨 Kafka consumer → Postgres (Phase 2)
│   └── producer.py                 📤 Kafka producer → forecast events (Phase 2)
│
├── 📂 src/monitoring/
│   └── drift_checker.py            🔍 Evidently AI drift → alerts (Phase 2)
│
├── 📂 configs/
│   └── model_config.yaml           🎛️ All hyperparameters + quality gates + feature config
│
├── 📂 scripts/
│   ├── train.py                    🏃 CLI: python scripts/train.py [--data file.csv]
│   └── migrate.py                  🏃 CLI: python scripts/migrate.py [--upgrade|--downgrade]
│
├── 📂 tests/                       🧪 60 tests — all passing in ~110s
│   ├── test_api.py                 (6 tests)
│   ├── test_config.py              (9 tests)
│   ├── test_features.py            (5 tests)
│   ├── test_models.py              (11 tests)
│   ├── test_cnn_lstm.py            (5 tests)
│   ├── test_pipelines.py           (5 tests)
│   ├── test_dashboard.py           (5 tests)
│   ├── test_streaming.py           (4 tests)
│   ├── test_cache.py               (4 tests)
│   ├── test_drift.py               (3 tests)
│   └── test_websocket.py           (2 tests)
│
├── 📂 docs/                        📚 Architecture PDF + SOP PDF + banner SVG
│   └── electricity.html             ⚡ Live electricity dashboard (GitHub Pages)
├── 📂 static/                        🌐 Static assets served by FastAPI
│   └── electricity.html             ⚡ Electricity dashboard (Render-served version)
├── 📂 models/ensemble/             💾 Pre-trained fallback model artifacts
├── 📂 configs/
│   ├── model_config.yaml           🎛️ All hyperparameters + quality gates
│   └── grafana/                    📊 3 dashboards + datasource provisioning
│
├── 🐳 docker-compose.yml           6 services: API + Postgres + Kafka + ZK + Redis + Grafana
├── 🐳 Dockerfile                   Multi-stage Python 3.11-slim
├── 📄 Makefile                     make install | test | train | run | docker-up
├── 📄 pyproject.toml               19 dependencies, 4 dev dependencies
├── 📄 requirements.txt             Pip-installable dependency list
└── 📖 README.md                    You are here 👋

🔧 Configuration System

Every aspect of the system is configured through configs/model_config.yaml — validated at startup by 13 Pydantic models:

# ── Model Hyperparameters ──
models:
  lightgbm:
    n_estimators: 500
    learning_rate: 0.05
    max_depth: 8
    num_leaves: 31
    early_stopping_rounds: 50
  prophet:
    seasonality_mode: multiplicative
    changepoint_range: 0.8
    uncertainty_samples: 1000
  sarima:
    order: [2, 1, 2]
    seasonal_order: [1, 1, 1, 7]

# ── Quality Gates (auto-reject underperforming models) ──
quality_gates:
  min_mape: 15.0          # Model must beat 15% MAPE
  min_coverage_pct: 0.85  # 85% of actuals in prediction interval
  max_bias: 5.0            # Systematic bias within ±5%
  min_r2: 0.60             # Minimum R-squared

# ── Feature Engineering ──
features:
  lag_periods: [1, 2, 3, 7, 14, 30, 90, 365]
  rolling_windows: [7, 14, 30]
  cyclical_encoding: true

# ── Training Pipeline ──
training:
  train_ratio: 0.60
  cv_folds: 5
  random_seed: 42

Environment overrides via .env:

DF_ENVIRONMENT=production
DF_DB_HOST=postgres.internal
DF_MLFLOW_TRACKING_URI=https://mlflow.company.com

🧪 Testing

# All 60 tests
make test

# → ====================== 60 passed in ~110s ======================

# By suite
pytest tests/test_models.py -v       # Model wrappers: Prophet, SARIMA, LightGBM, CNN-LSTM, Ensemble (11 tests)
pytest tests/test_features.py -v     # Feature engineering: lags, rolling, calendar, weather (5 tests)
pytest tests/test_config.py -v       # Config: validation, YAML loading, thresholds (9 tests)
pytest tests/test_api.py -v          # API: forecast, orders, electricity, health, validation (6 tests)
pytest tests/test_dashboard.py -v    # Dashboard: summary, trends, accuracy, alerts (5 tests)
pytest tests/test_cnn_lstm.py -v     # CNN-LSTM: fit, validate, save/load, 3D input (5 tests)
pytest tests/test_pipelines.py -v    # Pipelines: training, inference, fallback (5 tests)
pytest tests/test_streaming.py -v    # Streaming: consumer, producer imports (4 tests)
pytest tests/test_cache.py -v        # Cache: Redis manager, singleton, bypass (4 tests)
pytest tests/test_drift.py -v        # Drift: imports, window computation (3 tests)
pytest tests/test_websocket.py -v    # WebSocket: connect, manager singleton (2 tests)

🗺️ Development Roadmap

gantt
    title Demand Forecasting — Development Phases
    dateFormat  YYYY-MM
    axisFormat  %b %Y
    
    section Phase 1 ✅ Done
    Real ML Ensemble           :done, p1a, 2026-07, 2026-08
    Database Layer (6 tables)  :done, p1b, 2026-07, 2026-08
    Feature Engineering (36)   :done, p1c, 2026-07, 2026-08
    Config System (13 models)  :done, p1d, 2026-07, 2026-08
    31 Tests + CI              :done, p1e, 2026-07, 2026-08
    
    section Phase 2 ✅ Done
    CNN-LSTM PyTorch Model     :done, p2a, 2026-08, 2026-08
    Kafka Streaming Ingestion  :done, p2b, 2026-08, 2026-08
    BI Dashboard Routes        :done, p2c, 2026-08, 2026-08
    Drift Monitoring (Evidently):done, p2d, 2026-08, 2026-08
    WebSocket Real-Time        :done, p2e, 2026-08, 2026-08
    
    section Phase 3 ✅ Done
    Redis Caching              :done, p3a, 2026-08, 2026-08
    Grafana Dashboards         :done, p3b, 2026-08, 2026-08
    Multi-Tenant Support       :done, p3c, 2026-08, 2026-08
    CI/CD Hardening            :done, p3d, 2026-08, 2026-08
    
    section Phase 4 ✅ Done
    Electricity Dashboard      :done, p4a, 2026-08, 2026-08
    HuggingFace Data Loading   :done, p4b, 2026-08, 2026-08
    GitHub Pages Deployment    :done, p4c, 2026-08, 2026-08
    Render Free-Tier Deploy    :done, p4d, 2026-08, 2026-08
Loading
Phase Status Features
Phase 1 ✅ Complete Real ML ensemble (4 models), database layer (6 tables), 36-feature engineering, 13-model config system, 31 tests
Phase 2 ✅ Complete CNN-LSTM PyTorch model, Kafka streaming, BI dashboard API (5 endpoints), Evidently AI drift monitoring, WebSocket real-time updates, 43 tests
Phase 3 ✅ Complete Redis caching, 3 Grafana dashboards, multi-tenant support, CI/CD hardening (matrix builds, Docker publish on tags)
Phase 4 ✅ Complete Live electricity dashboard, HuggingFace dataset integration, GitHub Pages deployment, Render free-tier hosting with smart API/HuggingFace fallback

📚 Documentation

Document Pages Content
Client Requirements & Architecture 11 pages Industry benchmarks (PJM, United Utilities, Sydney Water), system design, technology stack, 20-week implementation roadmap
SOP — ML Development Lifecycle 14 pages 9-phase standard operating procedure: requirements → data → features → models → evaluation → deployment → monitoring → governance → tools

🤝 Contributing

  1. Fork the repository
  2. Create a feature branch: git checkout -b feature/amazing-feature
  3. Run the tests: make test (all 31 must pass)
  4. Commit your changes: git commit -m 'Add amazing feature'
  5. Push: git push origin feature/amazing-feature
  6. Open a Pull Request


Built with ❤️ by Mahesh SolankiForecasting the future, one ensemble at a time.

⭐ Star this repo if you find it useful! | 🐛 Report an issue

About

⚡ Production-grade demand forecasting & live electricity dashboard: Prophet + LightGBM + SARIMA ensemble (10% MAPE). 36-feature engineering, TimescaleDB, FastAPI, Docker-ready. Real-time Brazilian electricity monitoring with HuggingFace data, Chart.js streaming, smart API/HuggingFace fallback.

Topics

Resources

Contributing

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages