File size: 2,770 Bytes
1e10174
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
18a63f1
 
 
 
 
 
1e10174
18a63f1
1e10174
18a63f1
1e10174
18a63f1
 
 
 
 
 
 
 
 
 
 
 
1e10174
18a63f1
1e10174
 
18a63f1
 
 
1e10174
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
---
title: GridPulse
emoji: 
colorFrom: green
colorTo: purple
sdk: docker
app_port: 7860
pinned: true
license: mit
short_description: Day-ahead grid demand forecasting benchmarked vs the EIA
---

# ⚡ GridPulse

Day-ahead electricity demand forecasting for US balancing authorities,
benchmarked against the **EIA's own published day-ahead forecast**.

| Model | MAPE | vs EIA |
|---|---|---|
| **LightGBM hybrid** (+ EIA forecast as input) | **2.771%** | **+25.0%** |
| **LightGBM** (global, from first principles) | 3.676% | +0.6% |
| _EIA official forecast_ | 3.696% | benchmark |
| Seasonal naive (24h) | 5.677% | -53.6% |
| Weekly naive (168h) | 9.117% | -146.7% |

Measured over 25,927 out-of-sample hours across 12 balancing authorities, using a
strictly chronological split.

## What you can do here

| Tab | What it does |
|---|---|
| **Forecast** | Make a live 24-hour forecast with a P10-P90 range for any of the 12 regions, using the current weather forecast |
| **Explorer** | Past demand, the V-shaped link between temperature and demand, and how weekdays differ from weekends |
| **Model Leaderboard** | Every model scored against EIA's own forecast on exactly the same test hours |
| **Anomalies** | Hours that look wrong, found by three detectors that have to agree |
| **Data Quality** | A scorecard covering six categories of data quality |
| **Ask the Grid** | Ask a question in normal English and get SQL and a chart back |

## What is behind it

This Space is just the website. Behind it there is a full data pipeline:

- Downloads data from the EIA and Open-Meteo APIs a bit at a time, remembering
  where it got to so it never re-downloads the same thing
- Stores it in bronze, silver and gold layers, ending in a star schema in DuckDB
- Runs 16 data quality checks covering completeness, validity, consistency,
  timeliness, duplicates and accuracy
- Trains LightGBM with P10/P50/P90 bands, plus an LSTM and a Transformer in
  PyTorch so I could compare them properly
- Finds unusual hours using three different detectors that have to agree: a
  seasonal z-score, an Isolation Forest, and an autoencoder trained on daily
  demand shapes
- Has an LLM that writes SQL, wrapped in guardrails (read-only connection, SELECT
  only, a list of allowed tables, and a row limit)

## Setup

The **Ask the Grid** tab needs a `GROQ_API_KEY` under
**Settings, Variables and secrets**. Keys are free at
[console.groq.com/keys](https://console.groq.com/keys). Everything else works with
no setup at all.

## Source

Full pipeline, tests, orchestration and documentation:
**[github.com/adwitiyashukla/gridpulse](https://github.com/adwitiyashukla/gridpulse)**

Data: [US EIA Form 930](https://www.eia.gov/opendata/) and
[Open-Meteo](https://open-meteo.com/).