Predicting rural water point failure in Zambia with real UN OCHA data (SDG 6). Finds a corrupted label and two target-leakage traps, validates on held-out districts, and reports an honest weak result that a one-line age rule matches.
# 💧 Which Water Points Are Broken? A Failure Model for Rural Zambia
> **4,026 rural water points across 61 Zambian districts. One in eight was dry on the day somebody walked to it.** This project asks whether the ones that will fail can be identified in advance, and answers honestly: only a little, and almost entirely because of how old the pump is.
The headline result of this project is not a score. It is that **three separate things in the data would each have produced a model that looked excellent and predicted nothing**, and that finding them is most of the work.
---
## 🗺️ The data
Every point is a real well, borehole or tap stand, recorded by a field enumerator between 2012 and 2022, with GPS coordinates, installation year, water source, pump technology, and whether water actually came out on the day of the visit.
The data comes from the **Water Point Data Exchange**, published through the **UN OCHA Humanitarian Data Exchange**. Nothing here is simulated.
---
## 🧨 The problem this solves
A borehole that stops working does not announce it. In rural Zambia the failure is discovered by the people who walked to it, and it is fixed when somebody with a vehicle, a pump part and a budget happens to hear about it. Between those two moments, a village goes back to unsafe water.
**SDG 6.1** commits to universal, equitable access to safe drinking water by 2030. In practice the binding constraint is rarely building new water points. It is that a large share of the ones already built are not working, and nobody knows which ones until somebody checks.
A district water officer has one vehicle, a small crew and several hundred water points. The question is not "what is the average failure rate." It is **"which ones do I drive to first."**
That is a ranking problem, and ranking is something a model can do even when it cannot classify confidently.
---
## 🔍 What the project does
```mermaid
flowchart TD
A[📥 WPdx export, 6,643 rows 54 columns, UN OCHA HDX] --> B{ …