// the find
trouties/wildfire-risk-eu-pipeline
Asset-level wildfire exposure intelligence for Mediterranean WUI — structural + event-context risk scoring, 4-event LOEO validation, LightGBM + SHAP
A geospatial ML pipeline that scores 226K buildings in the Athens WUI for wildfire risk using a two-layer approach: a weighted structural index (terrain, vegetation, fire weather, fire history) plus an experimental LightGBM layer using ERA5 event-day meteorology, validated via leave-one-event-out across 4 historical fires. Aimed at re/insurance underwriters assessing Mediterranean wildfire exposure. The README is unusually honest — it leads with the fact that v2's mean AUC is ~0.508 (chance level) and explains exactly why.
- Exceptional epistemic honesty: the README front-loads limitations, explicitly calls the n=4 validation 'not statistically powered', flags the post-hoc Acharnes exclusion as what it is, and ships a leakage_audit.md documenting known open issues rather than hiding them.
- The ERA5 resolution diagnostic (226K buildings → ~28 grid cells) is a concrete, reproducible explanation for why v2 fails — that analysis is committed as outputs/validation/era5_resolution_diagnostic.csv, not just hand-waved.
- 214 tests across 9 files with CI on every push is solid for a solo geospatial research repo; most comparable academic pipelines have zero tests.
- Full pipeline reproducibility via a single `make all-v2` with clearly documented external credential requirements and YAML-driven config — no magic constants scattered across notebooks.
- The known leakage in fire_weather.py (fwi_season_max not temporally cutoff per validation.yaml config) is documented but unresolved — this means the v1 structural AUC numbers are also suspect, not just v2, and the README only partially flags this.
- All 4 fire perimeters are circular proxies derived from area-equivalent radii, not actual burned boundaries; the real EMS perimeters (EMSR300, EMSR531) are listed in config but 'not wired into the validator'. This is a fundamental data quality issue that undermines every AUC number produced.
- Risk classes are quintile bins (pd.qcut q=5), meaning 'Very High' risk is purely relative rank within the Attica WUI sample — the Acharnes inversion (Class 5 burn rate 2.2% vs Class 2 burn rate 3.9%) shows this produces miscalibrated outputs, but the interactive map still displays the quintile classes without this caveat prominently attached.
- Credential setup spans four different systems (CDS API file, Windows Credential Manager ×2, env var) with no fallback or mock path for CI — the test suite likely can't run the acquire stages in a clean environment without manual setup, limiting the practical value of the CI badge for new contributors.