Project Story

AquaSentinel started with a simple question:

What happens between two water-quality measurements?

Freshwater monitoring often depends on periodic observations. But environmental conditions can change much faster. Rain can fall, temperature can rise, and streamflow can change between scheduled measurements.

By the time the next measurement is collected, an important change may already have happened.

The Idea

We wanted to explore whether existing environmental data could be combined to identify early signs of dissolved-oxygen risk and provide monitoring teams with an additional signal for investigation.

AquaSentinel brings together multiple environmental sources:

  • Water-quality observations from VMM Waterinfo
  • Rainfall data from RMI/KMI
  • Sentinel-1 SAR satellite observations
  • Sentinel-2 optical satellite observations

Instead of looking at each source separately, AquaSentinel aligns and validates these signals before using them for risk assessment.

How We Built It

We first collected and audited historical observations from the Zwalm catchment.

Our resulting dataset contains 1,913 observations across 21 columns.

The prediction target is based on dissolved oxygen:

$$ DO < 6.0\;mg/L $$

The model uses environmental variables including water temperature, conductivity, turbidity, pH, flow, rainfall accumulation, satellite-derived water extent, NDWI, MNDWI, and season.

An important design decision was to keep the measured dissolved oxygen value separate from the prediction inputs. The measured value is used as ground truth for evaluating the model rather than being given to the model as an input.

We also used a strict temporal split:

  • 2018–2022: Training data
  • 2023–2024: Unseen temporal holdout

This allowed us to evaluate the system on a later period rather than randomly mixing observations across time.

From Machine Learning to an Operational System

One of the biggest things we learned was that training a model is only one part of the problem.

A real monitoring system needs to continuously receive new environmental observations.

So we built a multi-source ingestion pipeline connecting:

Water observations → Rainfall → Satellite observations → Data validation → Feature construction → ML inference

Incoming observations are normalized, checked for quality and freshness, converted into the model's feature contract, and then passed to the inference API.

The system also has a simulation mode for demonstrating environmental scenarios without presenting simulated data as live observations.

What the Model Shows

On the 2023–2024 temporal holdout, the selected model detected:

27 of 30 measured high-risk dissolved-oxygen events

This corresponds to:

$$ Recall = \frac{27}{27+3} = 90.0\% $$

The precision was 18.49%, which means the system produces false warnings as part of its high-sensitivity early-warning strategy.

Because of this, AquaSentinel does not automatically diagnose pollution or take enforcement action.

Instead, the intended workflow is:

Model Warning → Field Team Alert → Verify Observation → Consider Field Sampling

What We Learned

The project taught us that building an environmental AI system is not simply about achieving a high model score.

We had to think about:

  • Temporal data leakage
  • Different update frequencies between data sources
  • Missing and stale observations
  • Data provenance
  • Ground-truth separation
  • False alarms
  • Model explainability
  • Human verification
  • The difference between historical validation and future forecasting

One particularly important lesson was that our current system should not be described as a 24–72 hour forecasting system.

Our current validation demonstrates detection of high-risk conditions in an unseen temporal holdout period. Explicit 24-, 48-, or 72-hour forecasting would require a separate lead-time forecasting experiment.

The Challenge

The hardest part was combining environmental datasets that were never designed to work together.

Water observations, rainfall measurements, and satellite imagery have different temporal resolutions and update schedules. We therefore had to carefully align timestamps and enforce:

$$ T_{feature} \leq T_{prediction} $$

This prevents information from the future from accidentally entering a prediction.

Where AquaSentinel Is Today

AquaSentinel has evolved from a historical machine-learning experiment into a working operational prototype with:

  • Multi-source environmental data ingestion
  • Data-quality validation
  • Feature engineering
  • Real-time inference APIs
  • Historical temporal validation
  • Model explanations
  • Simulation scenarios
  • Data provenance tracking
  • Operational monitoring dashboards
  • Automated verification and audit tests

Our goal is not to replace environmental scientists or field monitoring teams.

AquaSentinel is designed to help them see the signals between measurements — so they can decide when an observation deserves closer attention.

Built With

  • artificial-intelligence
  • climate-tech
  • data-engineering
  • data-science
  • environmental-monitoring
  • fastapi
  • geospatial
  • machine-learning
  • predictive-analytics
  • python
  • remote-sensing
  • rest-api
  • satellite-imagery
  • water-quality
Share this project:

Updates

Submission history