cassionData Analysis

Dataset

Water point functionality monitoring — 2024

2,629 synthetic monitoring visits to 242 water points across three districts, monthly through 2024 — the repeat-visit structure a functionality rate needs and a household survey cannot provide.

syntheticWASHKoboToolboxWater point functionalityHousehold water accessChlorination monitoring
Rows
2,629
Variables
15
Period
2024-01 to 2024-12
Licence
CC BY 4.0
Completeness
99%

Standards and methodologies

Sphere StandardsSustainable Development Goals (SDG)Core Humanitarian Standard (CHS)

Files

Files are versioned by filename. A corrected release ships as .v2.csv rather than replacing the file in place, so an analysis pinned to v1 keeps reproducing.

Data dictionary

VariableTypeDescriptionAllowed values
water_point_idstringPseudonymous water point identifier, unique except where a point was re-registered after a handover.—
districtcategoricalDistrict the point sits in. Shares its codes with the WASH household survey, so the two files join.Nord-Ouest, Centre, Sud-Est
communitystringCommunity code within the district, in the form XX-01.—
source_typecategoricalType of water point. Reliability and the number of people served differ sharply between them, which is what makes the choice of denominator matter.handpump-borehole, protected-well, piped-scheme-tap, protected-spring, rainwater-scheme
installed_yearintegerYear the point was constructed or rehabilitated. Failure risk rises with age beyond about eight years.—
managementcategoricalWho is responsible for operation and repair. The strongest predictor of how long a broken point stays broken.community-committee, private-operator, utility, ngo-managed
users_estimatedintegerPeople the point is estimated to serve. The denominator for a population-weighted functionality figure. Blank for a handful of springs never surveyed.—
visit_datedateDate of the monitoring visit. Rounds are scheduled monthly but land wherever the vehicle got there.—
roundintegerScheduled monitoring round, 1 to 12. A missing round for a point means the visit was not made, not that the point was fine.—
functional_statuscategoricalStatus observed at the visit. Partially functional means running at reduced yield, which is service, not failure.functional, partially-functional, non-functional, abandoned
days_since_breakdowndaysintegerDays the point has been out of service at the time of the visit. Blank where the point is working.—
yield_litres_per_minuteL/minfloatMeasured flow. Blank where the point is not running. Falls in the dry months.—
free_residual_chlorine_mglmg/LstringFree residual chlorine at the point. The operational target is 0.2 to 0.5 mg/L. Recorded as a string, because a reading below the field kit's detection limit is written as "<0.1" rather than as a number. Blank where not tested.—
queue_minutesminutesintegerWaiting time observed at the point. Blank where the point is not running. Sphere puts the acceptable queue at under 30 minutes.—
fee_collectedbooleanWhether a user fee was being collected at the time of the visit.true, false

Provenance

Source
Synthetic, generated by scripts/generate/water_point_monitoring_2024.py
Collection method
Simulated monthly monitoring visits with observed status, flow measurement and point-of-collection chlorine testing on a subsample
Geography
Three anonymised districts, eighteen communities — the same codes as the WASH household survey
Period
2024-01 to 2024-12

Data quality

  • Fully generated. No real water point is described and no community code refers to a real place.
  • Functionality is three different numbers here and they are not competing estimates of one quantity. 74.4% of visits find a point running; 33.9% of points are running at every visit they receive; and 83.3% of the people served have a working point, because the piped schemes serve the most users and break least. State which one you computed.
  • Seasonality is real and it is not breakdown. Functionality runs 67.8% across the dry months against 79.4% across the wet ones, and the swing is entirely in two source types: protected wells go from 74.7% wet to 36.4% dry, while handpump boreholes barely move. Forty-six points fail only in dry months and recover with the rains; thirty-four are still down at the last three visits of the year; eighty-two never fail at all.
  • Management predicts downtime more than source type does. The median broken point managed by a community committee has been down 68 days at the time of the visit, against 29 for one managed by a private operator.
  • Reference figures for a correct analysis: overall visit-level functionality about 74%, protected wells the worst source type at about 58% and piped taps the best at about 97%, and about 62% of tested piped taps inside the 0.2 to 0.5 mg/L chlorine range.

Known issues

  • Monitoring rounds are missed, and not at random. Nord-Ouest's rounds collapse from about 77 points a month to between 51 and 60 during the rains, when the roads are impassable, so it made 82.7% of its due visits against Sud-Est's 96.3%. The consequence is that Nord-Ouest reads as the best district at 76.4% and is the least certain: if every missed visit had found a broken point it would be 63.2%, a band 13.2 points wide against Sud-Est's 2.6. A broken point is also slightly likelier to be skipped — the visit before a missed round found a failure 26.7% of the time against 24.7% otherwise.
  • Free residual chlorine is left-censored. 271 readings are recorded as the string "<0.1" because they fell below the field kit's detection limit. They are measurements, not missing values — dropping them raises apparent compliance with the 0.2 to 0.5 mg/L range from 61.9% to 67.8%, and coercing them to a number silently turns them into nulls.
  • One community records yield in litres per hour rather than per minute, which puts 56 readings above 90 L/min. The values are plausible for a piped scheme and impossible for a handpump, so the error only shows against the source type.
  • Thirty-seven visits record a point as functional and also carry a days_since_breakdown value, which is the previous month's answer carried forward on a paper form. The status is the reliable field.
  • Two points were handed over between programmes and re-registered under new identifiers, so the register counts them twice and the functionality denominator is two points too large.

Worked examples

Python

Three functionality rates from one register

Computes visit-level, point-level and population-weighted functionality from the same file, and shows what each one is a statement about.

Described here; the notebook is still being written.

Seasonal failure against abandonment

Separates points that fail every dry season and recover from points that fail once and never return, using the visit sequence rather than the status field.

Described here; the notebook is still being written.

R

Three functionality rates from one register

The same three denominators built with dplyr, alongside the missed-visit bias that moves the first of them.

Described here; the notebook is still being written.