Quant Power · Demand forecasting & algorithmic procurement

Work out what a house will use. Go and buy it.

Two things have to work for peer-to-peer solar. You need to know what a home is about to use, and you need to have bought that energy already. Here's how we do on each, using our own data.

Part 1

Forecasting the household

Real meters · 2019

Around 97 households in four Indian cities, measured at the meter. Every hour we put out a range for the next twenty-four. Then the readings come in and we find out how close we were.

Next 24 hours from a 19:30 anchor 2 Aug 2019 · City 1
0.00.30.60.91.119:3001:3007:3013:3018:30

Household A in City 1: 24 hourly forecasts with a p10 to p90 range. 22 of 24 actual readings fell inside the range. Total measured consumption 14.4 kilowatt-hours.

Likely range (p10–p90) Our forecast (p50) Naive baseline What actually happened Outside the range
In range22 / 24
Outside2
Our error0.212
Baseline error0.232
Day total14.4 kWh

One household on one day. Some days the naive guess does better than we do — Households C and D here are two of them. The figures below are across all 122,661 hours.

7.2%less error than guessing “same hour, last week”
0.3464 vs 0.3731 WMAPE · 122,661 held-out hours
77.7%of readings landed inside the range we'd given
we aim for 80%
1,22,661hours forecast, then checked against the meter
28,659 kWh · Jul–Oct 2019

What we do differently

  • Every home gets its own modelTwo houses on the same street, same size, same tariff, use power completely differently — one is empty until midnight, the next runs a pump at dawn. So each meter is fitted on its own history instead of on a neighbourhood average.
  • You get a high and a low, not just a middleIf you're buying energy hours ahead, how wrong the middle number might be matters as much as the number itself. Every hourly forecast comes with a range.
  • We forecast the change, not the totalMost of a household's week repeats itself. The interesting part is what breaks the pattern — a hot afternoon, a festival, someone home who's usually out. That's where the model spends its effort.
  • How often the range is rightWe're aiming for the reading to land inside the range eight times in ten. Across 122,661 hours it comes out at 7.8. We're working to push that past eight. The ones that fell outside are ringed on the chart above.

From here on, it's simulated

Everything above came off real meters. It's the only way to check a forecast, since you need to know what the house actually did.

For the buying, we run the full forecast-and-buy cycle for eighty-four days against a simulated network of homes and rooftops. Both sources are labelled wherever they turn up.

Above · real metersBelow · simulated network
Part 2

Buying against that forecast

Simulated network · 2026

One decision, pulled straight out of the run. A house is going to need energy at 9am. It's 6am. Seven rooftops are offering. Here's what the engine did with that.

Offer book · target 09:00, decided at 06:00 forecast demand 1.734 kWh
RooftopOfferedWe trustTheir priceRisk-adjustedWe bought
PROS0001 1.250 0.218 ₹3.34 ₹4.20 0.218 kWh
PROS0002 1.420 0.247 ₹3.35 ₹4.22 0.247 kWh
PROS0011 1.830 0.319 ₹3.36 ₹4.22 0.319 kWh
PROS0010 1.020 0.178 ₹3.37 ₹4.23 0.083 kWh
PROS0005 1.810 0.315 ₹3.37 ₹4.23
PROS0012 0.440 0.077 ₹3.37 ₹4.24
PROS0009 0.550 0.096 ₹3.39 ₹4.25
Demand 09:00
1.734 kWh — 0.867 bought now · 0.867 left for later

It didn't fill the whole hour. It took half and left the rest for a later look, when the forecast would be sharper. And it bought from each rooftop only up to what it thought that rooftop would really deliver — PROS0011 offered 1.83 kWh and got bought for 0.319.

19.5%of what a rooftop advertises is what we'll actually count on
1.61 kWh offered → 0.315 kWh trusted
+27.6%added to the asking price for the chance it doesn't arrive
₹3.32 asked → ₹4.24 once risk is priced in
78.4%of the engine's moves are to wait rather than buy
548,102 of 698,894 allocations

What we do differently

  • Advertised and delivered are different thingsA rooftop offering 1.8 kWh is making a forecast of its own — about cloud cover, and about how much it'll end up using itself. We work out what we'd count on, which comes to about a fifth of what gets advertised, and don't buy past it.
  • Most of the time it waitsRoughly four in five of its moves are to hold off. The same hour of demand comes back round again and again as it gets nearer and the forecast sharpens. There's rarely a reason to lock in at 6am for something happening at 9.
  • Grid power sets the barGrid electricity is always there at a price you know. So the only question about a rooftop is whether it beats that price once you've allowed for the chance it doesn't deliver. Paying for energy that never turns up is worse than just buying from the grid.
  • You can ask why, months laterEvery decision keeps what it saw, what else was on the table and what it went with. Pick a kilowatt-hour from March and you can find out why it got bought.
Part 3

Eighty-four days of it, unattended

Simulated network · 2026

Fifteen homes, twelve rooftops, three cities. March into May. Every hour, on the hour, with nobody watching. Drag the timeline to any day and see where things stood.

The run, day by day8 Mar – 30 May 2026
30 May 2026 day 84 of 84
8 Mar1 Apr1 May30 May
bought from rooftops   bought from grid  — daily kWh
Offers scored24,83,625
Decisions7,16,655
Confirmed1,28,177
Settled1,27,215
This day7,275 decisions
Running total
8,401 kWh from rooftops · 10,801 kWh from grid

More than half of it came off the grid, and that's the engine doing its job: where it didn't believe a rooftop would deliver, it took the sure thing over the cheap one. 90.2% of contracts ended up delivered in full. On the rest the household still pays only what it agreed to — the shortfall lands on the seller.

90.2%of contracts delivered in full
127,215 settled
₹3.33per kWh paid, blended across everything bought
against an assumed ₹9.00 grid price
0hours anyone spent operating it
7,533.7 kWh contracted end to end

Rooftop prices in this run are set by the simulation and the ₹9.00 grid price is an assumption, so read ₹3.33/kWh as showing how the thing works rather than as a market result.