// energy forecasting · anomaly detection

A deep-learning control room for the power grid — it forecasts the next 24 hours of energy demand, flags anomalies, and re-forecasts live in your browser as you change the weather.

0%

1h-ahead MAE vs XGBoost

0.00%

24h MAPE · PJM East

0 zones

PJM East · ComEd · Dayton

$0

hosting · runs in-browser

24h demand forecastactual → forecast
VOLTA dashboard — forecast and what-if simulator

// try it yourself

The real app, running right here.

This is the live VOLTA deployment, embedded. Drag the temperature and the CNN-BiLSTM re-forecasts the next 24 hours — the model runs in your browser via ONNX, with no server behind it.

volta-virid.vercel.app liveOpen full screen

// how it works

From real grid data to an in-browser forecast.

01 · Ingest

Real grid + weather

PJM hourly demand joined with real hourly temperature from Open-Meteo — assembled by one key-less script.

pandas · Open-Meteo

02 · Forecast

CNN → Bi-LSTM

A one-week window of demand, weather and calendar features predicts the next 24 hours in a single shot.

PyTorch

03 · Detect

Anomalies

Forecast residuals are z-scored to flag demand that deviates sharply from the prediction.

Residual z-score

04 · Serve

Runs in your browser

Model exported to ONNX, results to static JSON — the what-if simulator runs inference client-side, no backend.

onnxruntime-web

// the model

A CNN-BiLSTM that learns the grid's rhythm.

A 168-hour window of 8 channels (load, temperature, cyclical hour & day-of-week, weekend, holiday) feeds a 1-D CNN feature extractor, a bidirectional LSTM, and a last⊕mean⊕max read-out that emits all 24 steps at once. The head predicts a correction to “same hour yesterday”, so it learns deviations from the daily rhythm rather than the raw level. One model is pooled across all three zones in normalised space, then exported to a single-file ONNX that runs in WASM.

Model scorecard · PJM East · held-out test window

ModelMAE (MW)RMSE (MW)MAPE
CNN-BiLSTM170124515.35%0.861
XGBoost135519474.21%0.912
Seasonal-Naive3757502811.61%0.416

The CNN-BiLSTM wins the dispatch-critical near-term horizon — −10% MAE at 1-hour-ahead on PJM East, beating XGBoost at h+1 across all three zones and leading through h+2. Beyond a few hours, gradient-boosted trees edge the 24-hour average — a documented strength of trees on regular hourly load. VOLTA reports this transparently, with a per-horizon chart showing exactly where the models cross. Knowing where a model wins — and saying so — beats a cherry-picked number.

// what's inside

In-browser inference

The CNN-BiLSTM runs client-side via onnxruntime-web — no inference server, no cost.

Real, reproducible data

Real PJM demand + real Open-Meteo weather, assembled with no API keys.

Honest benchmarking

Per-horizon metrics show exactly where the model wins against a strong XGBoost baseline.

Anomaly detection

A residual z-score flags abnormal demand against the forecast.

Multi-zone

PJM East, Commonwealth Edison and Dayton, switchable live.

$0 hosting

Pure static export on Vercel's free tier — no backend, no GPU.

// under the hood

Serious machinery, zero servers.

The full stack behind VOLTA — modelling, data, web and in-browser inference. Scroll to spin it up.

PyTorch CNN-BiLSTMXGBoostONNX exportPJM hourly loadOpen-Meteo weatherpandas / numpyNext.js 14TypeScriptTailwindRechartsonnxruntime-web (WASM)Vercel static$0 hostingPyTorch CNN-BiLSTMXGBoostONNX exportPJM hourly loadOpen-Meteo weatherpandas / numpyNext.js 14TypeScriptTailwindRechartsonnxruntime-web (WASM)Vercel static$0 hosting
$0 hostingVercel staticonnxruntime-web (WASM)RechartsTailwindTypeScriptNext.js 14pandas / numpyOpen-Meteo weatherPJM hourly loadONNX exportXGBoostPyTorch CNN-BiLSTM$0 hostingVercel staticonnxruntime-web (WASM)RechartsTailwindTypeScriptNext.js 14pandas / numpyOpen-Meteo weatherPJM hourly loadONNX exportXGBoostPyTorch CNN-BiLSTM

// built, deployed, free

Trained offline. Runs in your browser.

An end-to-end energy-forecasting app built on real PJM grid data and real weather. A CNN→Bi-LSTM predicts 24h-ahead demand across three zones, a residual z-score detector flags anomalies, and a what-if simulator runs the trained model entirely in-browser via ONNX — trained offline, shipped as a static site with $0 hosting.