S.01Machine learningJanuary 2026active

AquaSafe

Five models for waterborne disease risk, built twice

Waterborne disease in India is not an unsolved science problem. It is a timing problem: the data that would predict an outbreak exists, but it sits in separate registries and arrives after the fact. AquaSafe is an attempt to close that gap — and an honest account of how far numbers from generated data can be trusted.

Disease classification
95.19%
7 diseases + none
Water safety
99.25%
3-class accuracy
Outbreak risk
AUC 0.9997
binary, LightGBM
Dataset
5.25M
synthetic records

AquaSafe predicts which of seven waterborne diseases a case is most likely to be (cholera, typhoid, dysentery, giardiasis, hepatitis A, hepatitis E and leptospirosis), and separately scores water safety, water quality, sanitation risk and outbreak risk. Each question is its own model, because they are separate problems with separate error costs.

The dataset was the project

There is no public dataset joining water chemistry to disease incidence at district resolution in India. The training set is therefore synthetic: 5.25 million records calibrated against CPCB, IDSP and Census of India data, covering all 36 states and union territories and more than 615 districts, with 40 features spanning geography, water chemistry, sanitation, climate, demographics and clinical symptoms.

Current results

  • Disease classifier: 95.19% accuracy across eight classes, using a weighted XGBoost and LightGBM ensemble.
  • Water safety: 99.25% accuracy across safe, moderate and dangerous, using XGBoost.
  • Outbreak risk: AUC-ROC of 0.9997, using LightGBM.
  • Water Quality Index: R² of 0.886, using an XGBoost regressor.
  • Sanitation risk: R² of 0.787, using an XGBoost regressor.

Published at IEEE IC-SIT 2026

The current version is published under the name AquaHealth at the 2026 International Conference on Intelligent Computing and Sustainable Innovations in Technology, with Parimita Das, T. Shashi Vardhan Reddy and B. Pallavi. Its feature analysis found that clinical symptom flags such as bloody stool, jaundice and fever matter most for classifying the disease, but not for predicting outbreaks, where environmental features matter most. Inference takes about 15 ms on commodity hardware.

The number that moved

First version500,000 records, 26 features42.46%
Current version5.25M records, 36 input features95.19%
Disease classification across eight classes, first version and current version. Different datasets, so this is not a clean before and after.

The first version, on 500,000 records and 26 features, scored 42.46% on disease classification, with a macro F1 of 0.2020 and top-3 accuracy of 73.79%. The current version scores 95.19%. I do not read that jump as the model getting better at medicine. The dataset, the features and the generator all changed, so a higher score can mean easier data as much as a better model. Only real surveillance data can separate the two, and this project does not have it yet.

Both numbers stay on this page. Neither one is a field result.

Shipping it

All five models are exported with joblib and loaded when a Flask API starts under Gunicorn, with JWT authentication and PostgreSQL for user accounts. The client is a 19-screen Flutter app built with Riverpod, fl_chart and flutter_map.

Current figures are from the model card on Hugging Face (March 2026) and the IEEE paper, DOI 10.1109/IC-SIT69723.2026.11735771. First-version figures are from ML/export/reports/training_report.md in the GitHub repository, generated 2026-02-04.

Longer read / 5 minWhy 42% is the honest number

Search only: every answer quotes this site and links its source. Nothing is generated.