cassionData Analysis

Dataset

School attendance and dropout — 2024 term

Two joinable synthetic files — a roster of 1,200 students across 24 schools and 70,245 daily attendance records — built so dropout is only visible if you look for consecutive absences rather than a term average.

syntheticEducationKoboToolboxStudent attendanceDropout analysisSchool feeding
Rows
71,447
Variables
6
Period
One term, 5 February to 26 April 2024
Licence
CC BY 4.0
Completeness
99%

Standards and methodologies

Sustainable Development Goals (SDG)

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
student_idstringPseudonymous student identifier. The key that joins the roster to the attendance file.—
school_idstringPseudonymous school identifier, SCH01 to SCH24.—
gradeintegerGrade level the student was enrolled in, 1 to 8.—
feeding_programmebooleanWhether the student's school operated a school feeding programme that term.true, false
attendance_datedateSchool day the attendance was recorded for. Weekdays only, 5 February to 26 April 2024.—
presentbooleanWhether the student was marked present that day.true, false

Provenance

Source
Synthetic, generated by scripts/generate/school_attendance_2024.py
Collection method
Simulated daily classroom attendance registers and enrolment roster
Geography
Anonymised education district, 24 schools
Period
One term, 5 February to 26 April 2024

Data quality

  • Simulated records. No real student is represented and every identifier is generated.
  • Attendance rows exist only for days a school was open. A date with no row is a closure, not an absence — the distinction changes the dropout ranking completely, and nothing in the file marks which is which.
  • Overall attendance is about 88%. Schools running a feeding programme sit around 90% against 85% without, so the effect is real but small enough that a naive comparison of raw means overstates it.
  • Around 7% of students disengage during the term. Attendance decays over roughly three weeks before stopping, which is what makes early warning possible at all.

Known issues

  • SCH07 and SCH18 have no attendance rows for the fifteen school days from 11 to 29 March, a strike period. Counted as absences, both schools look like a dropout emergency.
  • SCH09 recorded attendance with Y and N instead of true and false for about 30% of its rows. A boolean cast will silently turn those into missing values.
  • Two students appear on the roster twice after a transfer that was never de-registered. Joining attendance to the roster fans their rows out and double-counts them.
  • About 3% of roster rows are missing grade, and a small number of attendance days were never marked either way.

Worked examples

Python

Dropout risk from attendance patterns

Joins roster to attendance, builds consecutive-absence features per student, and ranks dropout risk before term end.

R

Attendance and the school feeding programme

Compares attendance between schools with and without feeding programmes, excluding the strike period so the closure does not masquerade as absence.