Wildfire Modeling
Updated Mar 2026 with Aidan D'Alonzo & Ethan Meid
- PyTorch
- XGBoost
- Earth Engine
- Python
0.928F2, recall-weighted, on four fires the model never saw
paper · Table 2, the source for 0.928 F2, recall-weighted, on four fires the model never saw (opens in new tab)0.929F1, equal-weight, against 0.884 for XGBoost on the same features
paper · Table 3, the source for 0.929 F1, equal-weight, against 0.884 for XGBoost on the same features (opens in new tab)+0.180F1 gained from fixing the labels and features, with the model unchanged
paper · Table 3, the source for +0.180 F1 gained from fixing the labels and features, with the model unchanged (opens in new tab)

Six generations of model for one question: given where a fire is now, where will it be in an hour? This was a three-person research project with Aidan D'Alonzo and Ethan Meid; the final system is FireSpreadNet, a ConvGRU-U-Net with CBAM attention over a 38-channel stack of satellite, weather and terrain data, trained on eight California fires.
what i built
- a data pipeline that pulls GOES fire detections through Earth Engine, masks cloud with DQF, and fuses VIIRS and MODIS, GRIDMET weather and 3DEP terrain into training arrays
- FireSpreadNet: a ConvGRU-U-Net with CBAM attention that predicts a whole next-frame fire image from a sequence, trained with focal + Tversky loss
- an XGBoost per-pixel classifier and a logistic-regression baseline, so the neural network has to justify itself against something simpler
- a 6-stage ablation harness that adds one feature group at a time and keeps only what moves F2
- a React and FastAPI viewer that plays a fire back hour by hour against the model's prediction
how it works
- 1Earth Engine exports GOES fire detections for a fire's bounding box, hour by hour
- 2a 7-stage label pipeline cleans the raw detections — majority-vote smoothing over 5 frames is what turned a noisy signal into a learnable one
- 3prev_fire_state[t] is defined as labels[t-1], which removes temporal leakage by construction rather than by remembering to shift a column
- 4the ConvGRU-U-Net consumes a 6-frame sequence and predicts the next frame in full
findings
- fire state alone carries most of XGBoost's feature importance: spread is strongly autocorrelated, so any honest model has to beat that prior
- F2 rather than F1 as the target, because missing a fire costs more than a false alarm
what's next
- generalise past California — every fire in the training set shares a fuel and terrain regime
- calibrate the probabilities, so the output can drive a decision rather than a picture