This project builds a multi-class classification model to predict the operational status of water wells across Tanzania.
# Predicting Water Well Functionality in Tanzania
This project builds a multi-class classification model to predict the operational status of water wells across Tanzania with classes, functional, functional needs repair, or non functional, using data from the Tanzanian Ministry of Water via DrivenData's Pump It Up competition.
The goal is to help the Ministry and NGO partners prioritize maintenance resources by identifying which wells are likely broken or at risk, shifting from reactive to proactive repair scheduling. Models explored include Logistic Regression, Decision Tree, and a tuned Random Forest, evaluated using macro recall to minimize the number of broken wells that go undetected.
---
## Notebooks
| Notebook | Description |
|---|---|
| `EDA.ipynb` | Business understanding, exploratory data analysis, feature selection, train/val/test split, and preprocessing pipeline |
| `first_model_classification.ipynb` | Baseline Dummy Classifier, Logistic Regression, and Decision Tree with depth tuning and feature importances |
**Run the notebooks in order.** `EDA.ipynb` generates the processed data files that notebooks first depend on.
---
## Getting Started
### 1. Clone the repository
```bash
git clone
github.com
cd tanzania-water-wells
```
### 2. Install dependencies
```bash
pip install pandas numpy matplotlib seaborn scikit-learn jupyter
```
### 3. Download the data
Create a free account at DrivenData and download:
- `training_set_values.csv`
- `training_set_labels.csv`
Place both files in the `data/` folder.
### 4. Run the notebooks in order
```bash
jupyter notebook
```
Open and run `EDA.ipynb` first, then `first_model_classification.ipynb`, then `second_model_classification.ipynb`.
---
## Data
- **Source:** DrivenData — Pump It Up: Data Mining the Water Table
- **Size:** 59,400 wells × 40 features
- **Target:** `status_group` — one of `functional`, `functional needs repair`, `non functional`
- **Split …