← back to the live map

HOW THE FIRE RISK MODEL WORKS

The map ranks every 10×10 km cell of Kalimantan by how likely it is to be burning hard in the coming days. No machine learning, no training data — three physically meaningful factors, measured fresh every few hours, multiplied together.

risk = persistence × spread pressure × dryness × wind

1Persistence — fire begets fire

Every fire detection from the last 7 days is collected from NASA FIRMS — the VIIRS instruments on the Suomi-NPP and NOAA-20 satellites, which flag any 375 m pixel significantly hotter than its surroundings on every pass over the island.

Each detection is weighted two ways before being summed into its grid cell:

Why it works here: southern Kalimantan burns on peat — meters-deep dried organic soil. Peat fires don't blow out; they smolder underground and re-flare for weeks. Yesterday's fire is the single best predictor of tomorrow's.

2Spread pressure — neighbors matter

A cell surrounded by burning cells is riskier than an isolated one of the same intensity, because fire complexes creep outward through connected dry fuel. Each cell's score is boosted by the persistence of its eight neighbors:

score × (1 + 0.3 · ln(1 + neighbor score))

That is why ranks 1, 2, 3 and several others cluster around Palangka Raya: they are not independent fires but one contiguous complex, and the model scores them accordingly.

3Dryness — the Drought Code

Peat fire danger is not about last week's rain — it tracks months of cumulative deficit, because the question is how deep into the peat column a fire can bite. The model computes the FWI Drought Code (DC) per cell: the same slow moisture bookkeeping used by Canada's fire-danger system and by Indonesia's own SPBK ratings. Each day the code rises with temperature-driven evaporation and falls when meaningful rain (>2.8 mm) recharges the deep layer:

DC += 0.5 · (0.36·(T+2.8) + 1.4)    rain: DC → 400·ln(800 / (800·e-DC/400 + 3.937·(0.83r−1.27)))

It runs over ~120 days of observed weather (Open-Meteo's historical archive, bridged to yesterday with recent observations). DC above ~300 means the deep peat is dry enough to sustain smoldering; 400+ is severe. The score enters the risk as:

dryness = DC / (DC + 150)  ·  1/(1 + forecast3 / 10 mm)

— so a long-drought cell keeps nearly all of its fire score, while one about to receive a real downpour is discounted however hard it burns today. Each cell's current DC is shown in the ranking (“drought 412”).

4Wind — which edge advances

For each top cell the model reads the current 10 m wind from Open-Meteo and applies two small corrections:

Deliberately a modest term: Kalimantan's fires are smoldering peat fires, which creep underground largely indifferent to surface wind, and dry-season winds here are weak and steady (~3–5 m/s). Wind decides which edge of a complex advances and where the smoke lands — it rarely creates risk where there is no fire and no drought.

What comes out

Every cell's three factors multiply into one score; the top 15 are ranked, scaled so the worst cell reads 100, and drawn as the numbered markers on the map. The ranking recomputes every 4 hours, and the separate live fires layer (glowing dots) refreshes every 30 minutes from the latest satellite passes.

SourceWhat it providesCadence
NASA FIRMSVIIRS 375 m fire detections, Suomi-NPP + NOAA-20, 7-day and 24-hour feedseach satellite pass (~4×/day)
Open-Meteoper-cell wind + rain forecast; ~120-day weather archive for the Drought Codehourly / daily
CAMS (Copernicus)PM2.5 forecast behind the city haze outlooktwice daily
NASA GIBSdaily true-color imagery and the date-stepped fire overlaydaily
Esri / SRTMhi-res archive imagery and 3D terrain (visual context only — not model inputs)static

Does it actually work? — the model grades itself

Every model run files its top-15 predictions. Twenty-four hours later, the next run checks what really happened: a predicted cell counts as a hit if the satellites recorded at least 5 new detections inside it during those 24 hours. The same test is run against a naive baseline — simply picking the 15 cells with the most hotspots, ignoring recency, drought, spread and wind.

The rolling hit rates (last 60 scored runs) are published on the main page and in the API (/api/skill). If the model can't beat the naive baseline, you'll see that too — the point of the scoreboard is that every future change to the model has to earn its place in the number, not in an argument.

Hindcast (Aug 28 – Sep 4, 2026; 9 replayed runs): 100% of the model's top-15 picks flared within 24 h (a random burning cell: 21%). Its picks averaged 94–140 detections the next day against an island average of 3–8 per cell, captured 80% of the theoretical maximum a 15-cell pick could achieve, and overlapped the actual next-day top-15 at 7.6/15 — modestly ahead of a naive most-hotspots baseline (77%, 7.1/15). In peak season persistence dominates; the drought and wind terms are expected to earn their keep when conditions turn.

Haze outlook

Separate from the risk ranking, the map shows a 4-day PM2.5 forecast for eight major cities, from the Copernicus CAMS atmosphere model (via Open-Meteo). Bands follow the standard daily-mean breakpoints: good ≤12, moderate ≤35, unhealthy-for-sensitive ≤55, unhealthy ≤150, very unhealthy ≤250, hazardous above — µg/m³. This is what the fire situation means for people breathing downwind of it.

Honest limits

Built on open data. Rankings are indicative — for operational decisions follow BNPB/BPBD guidance. ← live map