EarthPV · Sentinel-2 · TerraMind · SPPI · epoch-diff

Where Pakistan's rooftop solar appeared since before the boom

Pakistan's rooftop PV stock is dominated by a post-2022 import boom. Three independent instruments diff the same pre-boom (2021/22) and current Sentinel-2 imagery to show where that growth actually landed: a trained segmentation model's own recall-corrected capacity estimate, that same checkpoint's fraction head reaching below its 400 m² floor, and a model-free spectral index computed directly on each building's own reflectance. Switch between them below.

0MWp
Recall-corrected growth since the pre-boom epoch
0%
Growth relative to the pre-boom total
0MWp
SPPI onset capacity — uncalibrated ceiling, not a precision-weighted estimate
0
Buildings whose spectral signature crossed the has-PV threshold (SPPI)
0MWp
Fraction-sourced growth — the small-PV-sensitive expected-area instrument
Growth per 0.1° cell, pre-boom (2021/22) vs. current
≈11 km × 11 km cells · log scale
selected view, per cell

What each view means, and what it doesn't

Three independent ways of asking the same question — where did rooftop solar appear since before Pakistan's 2021/22 import boom — built from the same imagery but different mechanisms: segmentation and fraction both diff a trained model's own estimate across two dates (one thresholded and precision-corrected, the other a probability-weighted expected area reaching below segmentation's 400 m² floor), while SPPI diffs a fixed spectral formula on the same building's reflectance, no model at all.

Segmentation growth

Two full density runs, differenced. The production TerraMind checkpoint scores a 2021/22 (pre-boom) composite and the current composite separately; each gets its own candidates, buildings join and recall-corrected capacity estimate; this map is simply current minus pre-boom, per cell. A small number of cells show an apparent decrease — noise from independently re-polygonizing two raster generations, not real capacity loss, and not colour-mapped here (only positive growth is shown).

SPPI onset uncalibrated ceiling

The same building's spectral signature, both epochs, no model. SPPI is a fixed five-band formula (He et al. 2026); a building "onset" here means its SPPI crossed the has-PV threshold between the pre-boom and current composite. The MWp shown converts 100% of that onset roof area to capacity at 0.18 kWp/m², with no precision weighting at all — unlike the segmentation view, which is both recall- and precision-corrected. No calibration exists for this exact population (an epoch-diff crossing, not a single-epoch classification), so treat the MWp figure the same way this project treats its other explicit ceilings: an outer bound, not an estimate. SPPI's own level also carries a known adopter-propensity confound, and this map's regional spread (meaningful capacity in Balochistan and Gilgit-Baltistan, not just Punjab) matches SPPI's documented weak spot on bare/arid terrain rather than a validated finding — treat MWp outside Punjab's urban core with more skepticism than inside it.

Fraction growth leans high, no precision correction

The only growth instrument here with real sub-400 m² sensitivity. The fraction head predicts per-pixel PV coverage rather than a threshold, so unlike segmentation's expected area it is not trained blind below the 400 m² floor. Scored on the current and pre-boom composites separately with the same checkpoint, then differenced per cell -- same mechanics as segmentation growth, different instrument. It is probability-weighted with no precision correction (segmentation's growth figure is both recall- and precision-corrected), and the fraction head's absolute scale is not independently established -- a German MaStR benchmark found it 2.5 to 13x high depending on how well-mapped the comparison area is. Read the delta as a directional, small-PV-inclusive signal, not a calibrated capacity number.

A third approach was tried and did not work: retraining the model itself stacking the pre-boom epoch as a second input layer+
A natural third idea is to give the segmentation model both epochs as input (20 bands instead of 10) and let it learn the change signal directly, rather than differencing two separately-run outputs. This was tried on a small Punjab-only training set (332 chips). The retrained checkpoint's per-installation recall looked like a large win, but its pixel-level F1 was 0.035 (fp=4,162,093 vs tp=75,944, a ~55:1 false-positive ratio) — the model had collapsed to flagging most pixels as PV, so it trivially "detected" every installation without having learned anything. This is a training-collapse artifact of too little data, not evidence for or against the idea itself; a real test needs a substantially larger in-domain training set. Full write-up: docs/issues/boom-window-stacking-experiment.md.
A radiometric caveat that applies to both mapped views pre-boom composites predate a Collection-1 offset fix+
Both views' pre-boom (2021/22) composites were built between 2026-07-05 and 2026-07-25, one day before a fix (2026-07-26) to how this pipeline normalises the Sentinel-2 Collection-1 processing-baseline BOA offset. Some cells therefore carry a spurious ~1000 DN shift in the pre-boom layer relative to the current one, cell by cell, not uniformly — a real, unresolved source of noise in both maps above until the pre-boom composites are rebuilt with the fix in place.