Skip to content
OnlyProjects
MCA · Data Science & AnalyticsFor educational purposes only
Code included

Chennai Drinking-Water Reservoir Storage Analytics and Dry-Season Forecasting (Python)

CMWSSB four-reservoir storage and rainfall turned into weeks-of-water-remaining forecasts and a drought early-warning dashboard

Mapped to your syllabusAnna University MCA Regulation 2021 · Project Work · Semester 4

Overview

1 min read

NeerWatch Chennai is a data-science project that turns Chennai's publicly published drinking-water reservoir data into short-horizon storage forecasts and a drought early-warning dashboard. Chennai's city supply depends on a chain of reservoirs — chiefly Poondi, Cholavaram, Red Hills (Puzhal) and Chembarambakkam — whose storage the Chennai Metropolitan Water Supply and Sewerage Board (CMWSSB) publishes in million cubic feet (mcft) every day. In June 2019 all four principal reservoirs effectively ran dry, the episode popularly called Chennai's "Day Zero", and residents learnt about the crisis only when tanker queues appeared.

The project builds a reproducible pipeline: reservoir storage and rainfall CSVs are ingested into a MySQL database, cleaned and aggregated to daily series, and enriched with features such as storage lags, rolling rainfall totals, north-east-monsoon flags and an estimated daily supply draw. Models — a seasonal-naive baseline, linear regression, random forest, gradient boosting and a SARIMA reference — are compared with time-series cross-validation to forecast storage one, two and four weeks ahead for each reservoir and for the system total.

A Streamlit dashboard shows each reservoir's history, the forecast band, the percentage of full capacity and a risk classification (Normal, Watch, Alert, Critical). The work applies Python Programming (MC4103), Data Mining (MC4020), Data Visualization (MC4019) and Advanced Database Technology (MC4202) from the Anna University MCA R2021 curriculum.

Relevant for
Tamil Nadu
Level
Intermediate · 14 weeks · team of 3
Common at
Anna University, Chennai, IGNOU, Osmania University
Updated
Oct 2026

Syllabus alignment

Anna University · MCA Regulation 2021

Project Work · Semester 4

Subjects this project applies
  • Python Programming (MC4103)
  • Data Mining (MC4020)
  • Data Visualization (MC4019)
  • Advanced Database Technology (MC4202)
How it is evaluated

See your department's project guidelines.

Also fits: IGNOU MCA_NEW — MCSP-232 guidelines (2025), Osmania University 2-year MCA 2022-23, JNTUH MCA R22.

What's in the box

11 parts · 5 free · 2 previewed · 4 unlock for ₹2,000

Problem & synopsis

5 min read

Problem statement

Chennai's drinking-water security depends on a handful of reservoirs whose storage is published daily, yet nobody outside the water board turns that feed into a forward-looking picture. The published tables live in different places and formats, contain gaps, and are rarely joined with rainfall, so a consistent analytical history has to be assembled by hand every time someone wants to study it. The public — residents, schools, hospitals and ward offices — sees only today's number, not whether storage is falling faster than usual or when a reservoir is likely to approach empty. In 2019 the decline to near-empty storage was reported as news rather than predicted as a trend, and tanker demand then exploded. There is a need for a reproducible, offline-runnable analytics system that maintains a clean daily history of reservoir storage and rainfall, forecasts storage a week to a month ahead with honestly validated models, and translates the result into risk categories and weeks-of-water-remaining estimates that a non-specialist can act on.

Synopsis

Abstract

Chennai stores its drinking water in a chain of reservoirs whose combined capacity is about 11,057 mcft for the four principal lakes, supplemented by Veeranam and the newer Kannankottai Thervoy Kandigai reservoir. Storage rises during the October–December north-east monsoon and falls steadily through the dry months, and in 2019 the city came close to a full supply failure. This project builds an end-to-end analytics system that ingests daily reservoir storage and rainfall data published by CMWSSB, models the storage dynamics, forecasts one to four weeks ahead and converts the forecast into a plain-language risk category and a "weeks of water remaining" estimate.

Introduction

A metropolitan water board makes operational decisions — canal releases, tanker deployment, supply-hour reductions — weeks before the public feels them. Those decisions depend on how fast storage is falling, which depends on rainfall, evaporation and the daily draw. All of these are visible in the daily published data, but the data is spread across web tables and CSV files in different formats, so a consistent, machine-readable history must first be assembled. The north-east monsoon gives Chennai a strongly seasonal storage cycle, which makes it a good candidate for time-series modelling with lagged features.

Existing System

  • CMWSSB publishes a daily lake-level table on its website (level, storage, inflow, outflow, rainfall, and the same day last year); historical compilations exist on OpenCity (monthly, since 2003) and Kaggle (daily, 2004–2019).
  • The formats differ between sources, values are occasionally missing, and nothing joins the reservoir series with rainfall.
  • News coverage reports crisis only when it is already visible: no published weekly forecast or risk category exists for a lay reader or a ward official.

Proposed System

  • A validated ETL that loads daily storage and rainfall for each reservoir into MySQL, with unit checks (mcft), duplicate removal and gap rules.
  • Feature engineering: storage lags (1, 7, 14, 30 days), 7- and 30-day rolling rainfall, month and week-of-year, NE-monsoon flag, and an estimated net draw computed from day-over-day storage change on rain-free days.
  • Models compared with TimeSeriesSplit cross-validation: seasonal-naive (storage of the same week last year), linear regression, random forest, gradient boosting and SARIMA.
  • Forecasts mapped to risk bands by percentage of full capacity — Normal above 50%, Watch 25–50%, Alert 10–25%, Critical below 10% — plus a draw-rate-based weeks-of-water-remaining estimate.
  • A Streamlit dashboard with history, forecast, band, per-reservoir and system views, and a downloadable CSV report.

Feasibility Study

  • Technical: every library is open-source; the daily datasets are small (a few thousand rows per reservoir) and train in seconds on a laptop. MySQL, covered in Advanced Database Technology (MC4202), stores the series; Streamlit covers the visualization requirement of MC4019.
  • Economic: zero licence cost; the data is public.
  • Operational: the dashboard runs offline on a campus laptop; a one-command refresh re-runs ingestion, training and forecasting when new CMWSSB numbers are pasted in.

Objectives

  1. 01Assemble a validated daily history of storage and rainfall for Poondi, Cholavaram, Red Hills and Chembarambakkam in a MySQL database with documented cleaning rules.
  2. 02Engineer time-series features — storage lags, rolling rainfall, monsoon flags and net-draw estimates — for supervised forecasting.
  3. 03Train and compare seasonal-naive, linear regression, random forest, gradient boosting and SARIMA models using TimeSeriesSplit cross-validation and a held-out final period.
  4. 04Forecast reservoir storage one, two and four weeks ahead and report MAE and RMSE in mcft per horizon and per reservoir.
  5. 05Map forecasts and current storage to Normal, Watch, Alert and Critical bands based on percentage of full capacity.
  6. 06Estimate weeks of water remaining from the fitted dry-season draw rate and validate the estimate against the 2019 decline.
  7. 07Deliver a Streamlit dashboard with per-reservoir and system-total views, forecast plots and CSV export.

Scope

In scope

  • Four principal reservoirs (Poondi, Cholavaram, Red Hills, Chembarambakkam); Veeranam and Kannankottai Thervoy Kandigai added optionally where the student has data.
  • Daily storage (mcft) and rainfall (mm) from public sources: the Kaggle daily compilation (2004–2019), OpenCity monthly levels (since 2003) and CMWSSB's current daily table pasted into a watched file.
  • Batch pipeline, weekly-to-daily refresh by re-running the ingest command; horizons of 7, 14 and 28 days.
  • Risk bands, weeks-of-water-remaining estimate, Streamlit dashboard, CSV export, pytest test suite.

Out of scope

  • Real-time scraping of the CMWSSB site (the daily table is pasted into a file by hand; automated scraping is a future enhancement).
  • Hydrological simulation (inflow–outflow mass balance, evaporation pan models) and canal or Krishna-water supply modelling.
  • Groundwater and city demand modelling; consumption metering.
  • Operational use by the water board — this is an academic early-warning prototype.

Methodology

The project follows the KDD process (selection, pre-processing, transformation, data mining, interpretation/evaluation) taught in Data Mining (MC4020), run in iterations over 14 weeks. A team of three splits the work: Member A owns ingestion and cleaning, Member B owns features and models, Member C owns the alert logic, dashboard and tests; every phase is reviewed by the guide.

PhaseWeeksActivitiesDeliverable
Selection & problem framing1–2Study CMWSSB publication formats, define horizons and risk bands, collect Kaggle/OpenCity filesProblem definition, data plan
Pre-processing3–4Schema design in MySQL, ingestion script, unit and range checks, gap rules, EDA of seasonalityClean daily tables, EDA notebook
Transformation5–6Lag, rolling-rainfall, monsoon and draw features; correlation and leakage checksFeature table
Data mining7–10Baseline, linear, random forest, gradient boosting, SARIMA; hyper-parameter tuning inside CV foldsModel comparison table
Interpretation11–12Held-out evaluation incl. the 2019 dry season, band accuracy, weeks-of-water validationResults tables, error analysis
Dashboard & report13–14Streamlit build, demo data, consolidated report and viva preparationWorking system, report, PPT

Validation protocol: TimeSeriesSplit(n_splits=5) inside 2014–2017 for tuning; 2018–2019 held out untouched, which deliberately includes the 2019 dry-season decline. Metrics: MAE and RMSE (mcft) per horizon, percentage of days whose predicted risk band matches the observed band, and a retrospective check — how many weeks before June 2019 each model first flagged Critical. No result is claimed before it is produced by the team's own run.

Architecture & tech stack

2 diagrams · 10 technologies · 1 min read

  • Python 3.11
  • pandas
  • NumPy
  • scikit-learn
  • statsmodels (SARIMA)
  • Matplotlib
  • MySQL
  • SQLAlchemy
  • Streamlit
  • pytest

NeerWatch Chennai is a batch pipeline with a presentation layer, built so each stage can be re-run independently and writes its output to MySQL.

flowchart TD
  A["Kaggle daily CSVs (2004-2019)"] --> I["Ingest and validate"]
  B["OpenCity monthly CSV"] --> I
  C["CMWSSB daily table (pasted file)"] --> I
  I --> Q["Quarantine bad rows"]
  I --> M["Clean: units, duplicates, gaps"]
  M --> DB[("MySQL: daily storage and rainfall")]
  DB --> F["Feature engineering"]
  F --> T["Train models with TimeSeriesSplit"]
  T --> R["Model registry (joblib + metrics)"]
  R --> P["Forecast job: 7 / 14 / 28 days"]
  P --> AL["Risk bands + weeks-of-water"]
  AL --> DB
  DB --> S["Streamlit dashboard"]

Data model

erDiagram
  RESERVOIR ||--o{ STORAGE_DAILY : "has"
  RESERVOIR ||--o{ RAINFALL_DAILY : "receives"
  RESERVOIR ||--o{ FORECAST : "is forecast"
  MODEL_RUN ||--o{ FORECAST : "produces"
  RESERVOIR {
    int id PK
    string name
    float fullCapacityMcft
    float fullTankLevelFt
  }
  STORAGE_DAILY {
    int id PK
    int reservoirId FK
    date day
    float storageMcft
    float pctCapacity
    int sourceId FK
  }
  RAINFALL_DAILY {
    int id PK
    int reservoirId FK
    date day
    float rainMm
  }
  MODEL_RUN {
    int id PK
    string algorithm
    datetime trainedAt
    float cvMae
    float cvRmse
  }
  FORECAST {
    int id PK
    int reservoirId FK
    int modelRunId FK
    date targetDay
    float storagePredMcft
    string riskBand
    float weeksRemaining
  }
  SOURCE_FILE {
    int id PK
    string filename
    datetime ingestedAt
    string contentHash
  }

A QUARANTINE table records every rejected row (file, line number, reason) so cleaning decisions are auditable. Risk bands compare storage with each reservoir's full capacity: Normal above 50%, Watch 25–50%, Alert 10–25%, Critical below 10%. The weeks-of-water-remaining estimate divides current storage by the median net daily draw observed in dry-season months (storage drop on rain-free days), and is displayed with its assumption, not as an exact date.

Modules

6 modules

  1. Module 01

    Ingestion & Validation (Member A)

    Reads the Kaggle daily compilation, the OpenCity monthly files and pasted CMWSSB daily tables from a drop folder, normalises column names and units (mcft, mm), parses dates, validates ranges (storage cannot exceed full capacity or go negative) and logs the content hash of every file so re-ingestion is idempotent. Rejected rows go to the quarantine table with a reason.

  2. Module 02

    Cleaning & Gap Rules (Member A)

    Removes duplicate dates, fixes the known unit slips between sources, interpolates storage gaps of up to three days linearly, back-fills rainfall with zero only after checking the same-day CMWSSB table, and marks months assembled from the OpenCity monthly series with a coarser resolution flag so models can exclude them.

  3. Module 03

    Feature Engineering (Member B)

    Builds storage lags at 1, 7, 14 and 30 days, 7- and 30-day rolling rainfall totals, day-over-day net change, a dry-season draw estimate (median storage drop on rain-free days per month), week-of-year and month encodings, and the north-east-monsoon flag for October–December. A dedicated test proves no feature uses the target day's value.

  4. Module 04

    Modelling & Evaluation (Member B)

    Trains the seasonal-naive baseline, linear regression, random forest, gradient boosting and a SARIMA reference inside scikit-learn pipelines, tunes hyper-parameters with TimeSeriesSplit on 2014–2017 and evaluates on the untouched 2018–2019 hold-out. Metrics per reservoir and horizon are written to reports/metrics.csv with the registry of fitted models.

  5. Module 05

    Forecast & Alert Logic (Member C)

    Writes the one-, two- and four-week-ahead forecasts with the model run that produced them, computes the risk band from percentage of full capacity, estimates weeks of water remaining from the draw rate, and appends an ALERT row when a band worsens or crosses into Alert or Critical.

  6. Module 06

    Streamlit Dashboard & Reports (Member C)

    Shows per-reservoir history with monsoon shading, the forecast with the observed 2019 overlay, band gauges, the model leaderboard and residual plots, plus a CSV export of forecasts and alerts. A pytest suite covers band boundaries, draw estimation, leakage and an end-to-end run on the bundled sample data.

Slides

12 slides · titles free · bullets, notes and the .pptx unlock

  1. Slide 1

    NeerWatch Chennai — Reservoir Storage Analytics and Forecasting

  2. Slide 2

    Why This Problem

  3. Slide 3

    Problem Statement

  4. Slide 4

    Existing vs Proposed System

  5. Slide 5

    Objectives

  6. Slide 6

    Data Sources

  7. Slide 7

    Methodology — KDD with 14-Week Plan

  8. Slide 8

    System Architecture

  9. Slide 9

    Models & Validation

  10. Slide 10

    Demo / Screenshots

  11. Slide 11

    Results & Limitations

  12. Slide 12

    Conclusion & Future Scope

Bullets, speaker notes and the .pptx · ₹2,000

The titles above are the real outline. The rest is what you present from.

Unlock for ₹2,000

Viva questions & answers

3 of 15 answered free · 12 unlock

Read each answer, close it, and say it in your own words. Your viva will ask. Now you'll know.

  1. 01Concept

    Why is Chennai's reservoir storage a good candidate for time-series forecasting?

    The storage follows a strong seasonal cycle driven by the October–December north-east monsoon and a fairly steady daily draw, so past storage and rainfall carry a lot of information about the near future. The series is daily, public and long enough (over fifteen years across sources) to train and honestly validate models, and the operational value of a one-to-four-week horizon is real.

  2. 02Concept

    What is the KDD process and why did you choose it over CRISP-DM?

    KDD — selection, pre-processing, transformation, data mining and interpretation/evaluation — is the knowledge-discovery pipeline taught in our Data Mining course, and this project is genuinely data-centric rather than application-centric. CRISP-DM adds a business-understanding phase that we folded into the guide-reviewed problem-framing weeks, so the two map closely, but KDD keeps our report structure aligned to the syllabus.

  3. 03Concept

    Why do you need a seasonal-naive baseline at all?

    Because an error number means nothing in isolation. Chennai's storage repeats its annual shape, so predicting 'this week last year's storage' is a strong naive competitor; if our gradient boosting model cannot beat that baseline on the hold-out, the extra complexity is worthless. The baseline also anchors the examiners' question 'compared to what?' with a number they can verify from the same tables.

+12 more questions, with answers

Try the free ones out loud first. Your examiner will not accept “it's in the PPT”.

Source code & how to run

6 steps · complete source code · unlocks with the project

Unlocks with the project · ₹2,000

6 steps · source code zip

Prerequisites, install, seed data and tests, written for demo day. Plus the complete source.

Unlock for ₹2,000

READMEFIRST

237 words · unlocks with the project

What to change before it goes anywhere near a submission. Skipping it is how the demo fails live.

Unlocks with the project · ₹2,000

237 words · ~1 min read

The checklist of things to rename, re-seed and re-think so the project reads as yours.

Unlock for ₹2,000

Instructions

330 words · unlocks with the project

How to study it, adapt it and walk your examiner through it, step by step.

Unlocks with the project · ₹2,000

330 words · ~2 min read

Report structure, formatting rules and the submission checklist your department will grade.

Unlock for ₹2,000

References

7 sources

  1. CMWSSB — Lake Levels (daily storage, inflow, outflow and rainfall for Chennai reservoirs)
  2. OpenCity — Chennai Lake Levels since 2003 (monthly CSVs sourced from CMWSSB)
  3. Chennai Water Management dataset (daily reservoir levels and rainfall, 2004–2019), Kaggle
  4. Rob J. Hyndman & George Athanasopoulos, Forecasting: Principles and Practice, 3rd ed. (time-series cross-validation and baselines)
  5. scikit-learn — Ensemble methods (Random forests and Gradient boosting)
  6. statsmodels — SARIMAX (Seasonal ARIMA with exogenous regressors)
  7. pandas — Time series / date functionality documentation

Cite this bundle

OnlyProjects. (2026). Chennai Drinking-Water Reservoir Storage Analytics and Dry-Season Forecasting (Python): MCA Data Science & Analytics project bundle [Educational resource]. https://onlyprojects.online/projects/mca-ds-chennai-reservoir-storage-forecasting

Future scope

1 min read

  • Scheduled scraping of the CMWSSB lake-level page with a change detector, replacing the pasted-file workflow.
  • Inflow modelling using catchment rainfall and a simple mass-balance term to separate supply draw from evaporation.
  • Scenario planning: slider-driven what-if analysis (rainfall percentile, draw growth) for ward-level planning discussions.
  • Sequence models (LSTM) as a comparison, only if the tree-model error analysis motivates it.
  • Alert delivery by SMS or e-mail to registered schools and hospitals when Alert or Critical is forecast.
  • Generalisation to other Tamil Nadu reservoir systems (Cauvery basin) using the same pipeline configuration.

Keep browsing

Same degree, same syllabus slot, different idea. Pick the one your guide will actually approve.