Logo Lanfrica

jameskoero/nyando-flood-ai: Nyando Flood AI v1.0.0 β€” Real GEE Satellite Data Β· AUC 0.9717

Domain:

climategeospatial

Record type:

modeldatasetsoftware
Creator:
Jam
Publisher:
Zenodo
Host:avatar

🌊 Nyando Basin Flood Risk Prediction System β€” v1.0.0

AI-powered flood early warning for Nyando River Basin, Kisumu County, Kenya. Ward-level susceptibility mapping trained on real Google Earth Engine satellite data.

πŸ“Š Model Performance

| Metric | Score | |---|---| | AUC-ROC | 0.9717 | | F1-Score | 0.9022 | | Precision | 0.8830 | | Recall | 0.9222 | | Brier Score | 0.0736 | | CV AUC (5-fold) | 0.9727 Β± 0.0040 |

Model: GradientBoostingClassifier Β· scikit-learn 1.4+ Data: 2,308 real GEE observation points Β· Nyando sub-county, Kenya

πŸ“¦ What's Included in This Release

  • βœ… Trained model β€” models/nyando_xgb_v1.pkl
  • βœ… Training dataset β€” data/training/nyando_training_v1.csv (5,000 rows)
  • βœ… Raw GEE extract β€” data/training/nyando_training_v1_raw_gee.csv (2,308 points)
  • βœ… 4 Jupyter notebooks (GEE extraction β†’ EDA β†’ Modelling β†’ Feature analysis)
  • βœ… 9 evaluation charts (ROC, confusion matrix, SHAP, calibration, spatial CV...)
  • βœ… FastAPI backend β€” live at nyando-flood-api.onrender.c…
  • βœ… CI pipeline β€” 15 automated tests passing on every commit
  • βœ… MODEL_CARD.md β€” full transparency card (Mitchell et al. 2019 standard)
  • βœ… Funding concept note β€” docs/funding/concept_note_v1.md

πŸ›°οΈ Real Satellite Data Sources

| Feature | Source | License | |---|---|---| | Elevation & Slope | NASA NASADEM 30m | Public Domain | | 3-Day Rainfall | CHIRPS v2 (UCSB) | CC-BY-4.0 | | Flood Labels | Sentinel-1 SAR (ESA) | Free Copernicus | | Soil Clay 0-5cm | ISRIC SoilGrids | CC-BY-4.0 | | River Distance | HydroSHEDS / OSM | ODbL | | Land Cover | ESA WorldCover 2021 | CC-BY-4.0 |

Real feature ranges: Elevation 1,131–2,588m Β· Rainfall 81.8–162.3mm Β· Clay 25.9–57.1%

⚑ Quick Start

# Load the model directly
import joblib, numpy as np
model = joblib.load("models/nyando_xgb_v1.pkl")

sample = np.array([[1142.5, 2.3, 87.4, 320.0, 42.1, 40]])
# [elevation, slope, rainfall_3day, distance_river, clay_percent, land_cover]

risk = model.predict_proba(sample)[0, 1]
print(f"Flood risk score: {risk:.3f}")  # 0.0–1.0