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
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