Girls in the CoEs — how the growth model works
The method behind the note: what goes in, the model written out, how centres and cohorts are compared, the checks run, and what it can’t tell us. Written so someone could rebuild it, or argue with it, without reading the code.
The question
Section titled “The question”At the same centre, how far behind boys are girls when they start, and does that gap widen or close over the two years? Does it differ by subject, by centre, or between cohorts? And for the cohort that has finished, did the gap on our tests show up at JEE?
Why not compare the first and last tests
Section titled “Why not compare the first and last tests”The dashboard takes each centre’s first three tests and its last three and subtracts. Three things go wrong with that:
- Luck at the ends. Three tests are a small sample. A centre whose first three tests went badly for its girls is partly there by luck, and the luck doesn’t repeat, so the gap drifts back and looks like progress. Within the 2027 cohort, the starting gap and the change correlate at −0.48: the worse the start looked, the more the gap “improves”, whatever actually happened.
- Most of the data is ignored. The 2027 cohort sat a median of 16 tests per subject. Endpoints use six.
- The students in the average change. A centre’s average on a given test depends on which girls sat it. With 8 to 29 girls per centre, one strong girl missing a paper moves the number.
The growth model fixes all three: it uses every test, it follows each student rather than the centre’s average, and it separates where a student started from how fast she moved.
What goes in
Section titled “What goes in”| Source | Used for |
|---|---|
fact_student_test_results_overall_pivoted |
Every internal test score, by subject and overall |
dim_student |
Gender and current centre |
jnv_student_outcome_mapping |
Verified CBSE 10th marks (maths, science) |
nvs_fact_ncst_results |
NCST 2026 section scores, for the 2028 cohort |
fact_student_jee_main_results_overall |
JEE Main 2026 outcomes, for the 2026 cohort |
Students: JNV CoE and Dakshana CoE programmes, girls and boys, in three cohorts identified by their current grade label:
| Cohort | Label | Tests used | Students |
|---|---|---|---|
| JEE/NEET 2026 (graduated) | 2025-26, Grade 12 | Jul 2024 to Apr 2026 | 471 |
| JEE/NEET 2027 | 2026-27, Grade 12 | Jul 2025 to Sep 2026 | 716 |
| JEE/NEET 2028 | 2026-27, Grade 11 | Jun 2026 to Sep 2026 | 1,069 |
Each cohort is analysed on its own; no comparison ever puts one cohort’s start against another’s end. For the 2026 cohort a handful of stray tests before July 2024 and anything after JEE Main session 2 (April 2026) are left out.
Tests: major, full-syllabus and part tests (not mock or chapter tests), and only papers sat by at least 20 CoE students in that subject. Papers where every student scored the same are dropped. Overall is the whole paper’s percentage, so it weights the subjects the way the paper does.
Scale: each score is the student’s percentage on that paper minus the average percentage of every CoE student who sat it. So −5 means 5 percentage points below the paper’s average, and a hard paper counts the same as an easy one. Everything stays in percentage points.
Baselines: verified 10th marks: maths marks for Maths, science marks for Physics and Chemistry, their average for Overall (98% linked for the 2026 and 2027 cohorts, 74% for 2028). NCST 2026 section scores for the 2028 cohort only (69% linked, by name and date of birth). NCST sections are 25 questions at 5 marks, so each is out of 125 (Biology 250); the total is out of 500 (engineering) or 625 (medical). The 2025 NCST file has no date of birth or father’s name, so the 2027 cohort can’t be linked.
The model
Section titled “The model”For each cohort and subject, every student’s score on every test is modelled as a line over time: each student has their own starting point and their own slope. Written out:
score(student i, test j) = b0 + b1·time + b2·girl + b3·girl·time the network part + b4·10th marks where they started + centre + centre·time each centre's own level and trend + a_i + c_i·time the student's own line + noisetimeis years since 1 July of the cohort’s Grade 11.girlis 1 for girls and 0 for boys.centreandcentre·timegive every centre its own starting level and its own trend. Girls are therefore compared with boys at their own centre on both where they start and how fast they move. A girls-only centre (Kohima, Kokrajhar, Puducherry) or a boys-only one (Kottayam) has nobody of the other gender to compare with, so it doesn’t enter the gender comparison at all.a_iandc_igive every student their own starting level and slope. The model estimates how much students vary around the average line, and how much of each student’s scores is just noise.
The two numbers that matter:
b2, the gap at the start: how far girls are behind boys with the same 10th marks at the same centre on 1 July of Grade 11.b3, the change per year: how much that gap closes (positive) or widens (negative) each year.
This is a linear mixed model with a random intercept and slope per student, fitted by restricted
maximum likelihood (statsmodels MixedLM). It’s the standard “growth model” in education research.
Because each student is compared with their own earlier scores, it doesn’t matter which students
sat which paper. Someone who missed three tests still contributes the ones they sat.
Why each centre needs its own trend. An earlier version gave each centre its own level but one
shared trend. Then b3 compared the slope of all girls with the slope of all boys, including
girls at girls-only centres and boys at the boys-only one, who have nobody to be compared with. If
those centres’ students happened to improve faster or slower than the network, it leaked into the
gender comparison. For the 2026 cohort that was the difference between Chemistry “closing at +2.0 a
year” and “flat at −1.0”.
The new cohort: starting level only
Section titled “The new cohort: starting level only”The 2028 cohort has a median of three tests each, too few for a slope. For it the model drops the time terms and estimates only the gap, raw and then among students with the same 10th marks, the same NCST score, or both. The NCST and 10th gaps themselves are the average difference between girls and boys at the same centre, one row per student.
Comparing centres
Section titled “Comparing centres”Step 1: fit each centre separately. The same model runs within each centre that has at least five girls and five boys, giving each centre its own starting gap and change, each with its own uncertainty. Fourteen centres qualify in the 2027 cohort and nine in 2026. Medak’s Maths fit (2027) fails because it is mostly a medical-stream centre with very few boys taking Maths, so it is left out.
Step 2: pull each centre toward the network by its own uncertainty. A centre with nine girls has a very uncertain trend: its own estimate is uncertain by 5 to 17 points a year either way. Taken at face value, the centres with the fewest girls would always sit at the top and bottom of the list, by chance. So each centre’s estimate is combined with the network average, weighted by how precise it is (empirical Bayes, with the DerSimonian–Laird estimate of how much centres truly differ):
- First, estimate how much centres really differ, beyond their noise. Call it the between-centre spread.
- A centre whose own estimate is precise compared with that spread keeps most of its own value. A noisy one is pulled most of the way to the network average.
- If centres don’t really differ at all (spread of zero), every centre is pulled all the way to the network average. That is what happens for the 2027 cohort’s Physics trend, which is why every centre’s 2027 Physics arrow is the same length in the note’s chart.
| Between-centre spread in the change (points a year) | Physics | Chemistry | Maths | Overall |
|---|---|---|---|---|
| 2026 cohort | 4.5 | 4.3 | 3.5 | 3.5 |
| 2027 cohort | 0.0 | 3.0 | 4.3 | 2.3 |
Step 3: does any centre stand out? A centre stands out only if its pulled-in estimate is more than about two of its own uncertainties away from the network average. In the 2027 cohort none does, in any subject. In the 2026 cohort one does: Cuttack, in Physics, Chemistry and Overall.
The network average in step 2 against the headline. The headline comes from one model over all students; step 2 averages the centres’ own estimates, weighted by their precision. With each centre given its own trend, the two agree closely:
| Change per year | Physics | Chemistry | Maths | Overall |
|---|---|---|---|---|
| 2026, headline model | −4.9 | −1.0 | −4.2 | −3.3 |
| 2026, average of centres | −4.6 | −0.9 | −3.6 | −2.9 |
| 2027, headline model | −0.9 | +4.2 | +2.5 | +1.3 |
| 2027, average of centres | −1.2 | +3.8 | +2.7 | +0.9 |
Comparing cohorts stage by stage
Section titled “Comparing cohorts stage by stage”The growth model draws a straight line, and the two cohorts are spread over different centres. So the cohorts are also compared without either assumption: the gap is estimated separately in each half-year of the course (July to December of Grade 11, January to June, July to December of Grade 12), with the same model minus the time terms, on only the six centres with girls and boys tested in every stage in both cohorts (Adilabad, Barwani, Chandigarh, Cuttack, Hassan, Kurnool).
Two things are left out of this comparison, for coverage reasons:
- Bundi and Lucknow have no Grade 11 tests on record for the 2026 cohort, so they appear in the Grade 12 stage only. With every centre included, the 2026 Grade 12 gap reads −6.3 instead of −4.8, which would overstate how much that cohort slipped.
- January to April of Grade 12 is too thin: in the 2026 cohort several centres tested one to four students then, and the 2027 cohort hasn’t reached it.
Is one cohort’s trend really better than the other’s? The two cohorts are different students, so their headline estimates are independent, and the difference in trend is tested directly (the difference divided by the combined standard error):
| Change per year | 2026 cohort | 2027 cohort | Difference (95% range) |
|---|---|---|---|
| Overall | −3.3 | +1.3 | +4.7 (+2.1 to +7.2), p < 0.001 |
| Physics | −4.9 | −0.9 | +4.0 (+0.7 to +7.3), p = 0.02 |
| Chemistry | −1.0 | +4.2 | +5.2 (+1.9 to +8.5), p = 0.002 |
| Maths | −4.2 | +2.5 | +6.7 (+3.7 to +9.7), p < 0.001 |
Centre by centre, the chart in the note uses each centre’s pulled-in estimate, which carries some of its cohort’s network shift by construction. So centre-level differences are also checked on each centre’s own estimate alone: Cuttack (−14.4 to +8.4 a year) and Kurnool (−3.8 to +8.5) change clearly; Barwani moves the other way (+1.8 to −6.2) within noise; Bundi’s and Lucknow’s 2026 estimates rest on Grade 12 alone and carry standard errors of 12 to 22 points a year, so they are not compared.
Checking against JEE
Section titled “Checking against JEE”For the 2026 cohort, JEE Main 2026 outcomes are joined to the internal tests. For physical centres Avanti collects every result, and all 397 engineering students have one. Two outcomes are used, both as percentages: qualifying (the JEE Main cutoff for JEE Advanced), and scoring at the 90th percentile or above. Each is compared between girls and boys at the same mixed centre (a linear probability model with centre effects and robust standard errors), then again among students with the same 10th marks, and among students at the same level on our Grade 12 tests (their average on July to December 2025 papers). If the gap shrinks once Grade 12 level is held equal, the internal tests had already measured it.
JEE subject percentiles are compared the same way (jee_subjects.sql): the average for everyone,
the share below the 70th percentile, and girls minus boys after taking away each centre’s own
average. That separates two questions the note keeps apart: which subject is weakest for everyone
(Maths), and in which subjects girls trail boys most (Physics and Maths at JEE; Physics on our
tests).
Checks run
Section titled “Checks run”Does the answer depend on how the model is specified? Each growth estimate was refitted: with no controls; with a shared trend across centres (the old specification); with 10th marks in deciles instead of a straight line; and on mixed centres only with a shared trend.
| Change per year | Physics | Chemistry | Maths | Overall |
|---|---|---|---|---|
| 2026 cohort, headline | −4.9 | −1.0 | −4.2 | −3.3 |
| 10th marks in deciles | −5.0 | −1.0 | −4.2 | −3.4 |
| Mixed centres only, shared trend | −3.2 | −0.2 | −3.8 | −2.3 |
| All centres, shared trend (old) | −1.9 | +2.0 | −4.2 | −0.4 |
| No controls | −1.8 | +2.4 | −3.8 | −0.1 |
| 2027 cohort, headline | −0.9 | +4.2 | +2.5 | +1.3 |
| 10th marks in deciles | −0.9 | +4.2 | +2.5 | +1.3 |
| Mixed centres only, shared trend | −3.0 | +2.6 | +1.4 | −0.8 |
| All centres, shared trend (old) | +0.2 | +2.7 | +3.2 | +1.0 |
| No controls | +0.3 | +2.8 | +4.0 | +1.1 |
The correctly specified rows (headline, deciles, mixed centres only) agree on the conclusions: 2026 widened in Physics, Maths and Overall and held in Chemistry; 2027 is closing in Chemistry, probably in Maths, and not in Physics. The shared-trend and no-control rows are the ones where single-gender centres leak into the comparison.
| 2028 cohort, early gap | Physics | Chemistry | Maths |
|---|---|---|---|
| Same NCST, as a line | −3.6 | −3.0 | −4.2 |
| Same NCST, as a curve | −3.9 | −3.4 | −4.5 |
| Same NCST, in deciles | −4.2 | −3.4 | −4.8 |
| Same NCST and 10th, in deciles | −4.9 | −4.2 | −5.5 |
| Same NCST, overlap only | −4.4 | −3.5 | −5.3 |
Is the movement just the papers changing? The earliest papers were very hard: a paper’s average was about 21% in the 2027 cohort’s first two quarters and 32% by mid-2026, and in Physics and Maths a third or more of students scored under 10% on early papers. Later papers in Chemistry and Maths also spread students out less, which on its own shrinks a gap measured in points. So the headline model was refitted with each score expressed relative to how spread out that paper was:
| Change per year, relative to paper spread (converted to points at a typical spread) | Physics | Chemistry | Maths | Overall |
|---|---|---|---|---|
| 2026 cohort | −2.3 | −1.0 | −2.9 | −2.1 |
| 2027 cohort | −1.3 | +2.7 | +0.8 | +0.3 |
The 2026 widening and the 2027 Chemistry closing survive (all statistically clear); the 2027 Maths closing mostly doesn’t. The note reports points, since that’s the unit people read, and flags Maths.
Who is missing? Students who left the 2027 cohort carry a different grade label and drop out: 15 girls and 8 boys, about 4% of girls. The girls who left averaged 23% on their tests, against 28% for girls who stayed. Because the model follows each student’s own line, their absence doesn’t distort anyone else’s slope; at most it makes the girls’ group slightly stronger than the one that started.
Data checks. Schema documentation read for every table; students counted once each; gender compared case-insensitively; JEE rows flagged as duplicate applications excluded; the 2027 panel’s 716 students checked against the 761 sitting that cohort’s tests; the selection rules cited come from the coe-selection methodology, not from inference.
What it can’t tell us
Section titled “What it can’t tell us”- Why. This describes the gap. It doesn’t show what causes it or what would close it.
- Preparation versus ability. A gap among students with the same NCST and 10th marks can still reflect preparation those tests don’t capture. NCST predicts how admitted students do at Avanti only weakly, so controlling for it can’t settle this.
- Why the cohorts differ. The 2026 cohort started closer and slipped; the 2027 cohort started further behind and is closing. Different selection years, different staff and different centres could each explain that, and this data can’t tell them apart.
- Where a student was. Students are placed at their current centre, so a transfer carries earlier results with them.
- Small centres. Most centres have 8 to 18 girls. The method stops them producing false alarms; it can’t make them informative. Cuttack’s 2026 signal rests on 7 girls.
- Biology and the medical stream. Too few Biology tests for a stable model; left out. JEE outcomes cover the engineering stream only.
- Straight lines. Each student’s path is modelled as a straight line. The stage comparison is there because a gap that closed and then reopened would show as flat.
Reproducing
Section titled “Reproducing”bq query --use_legacy_sql=false --format=csv --max_rows=2000000 --quiet < extract_panel.sql > panel.csvuv run --with pandas --with statsmodels python growth_model.py panel.csv # growth, centres, 2028 leveluv run --with pandas --with statsmodels python stage_gaps.py panel.csv # stage-by-stage, balanceduv run --with pandas --with statsmodels python robustness.py # the checks abovebq query --use_legacy_sql=false --format=csv --quiet < jee_check.sql > jee2026.csvbq query --use_legacy_sql=false --format=csv --quiet < jee_subjects.sqluv run --with pandas --with statsmodels python jee_check.py panel.csv jee2026.csvextract_panel.sql builds the student × test × subject panel. growth_model.py fits the models
and writes the result tables and centre_growth.json; stage_gaps.py writes stage_gaps.json.
Those two aggregates are what the note’s charts read. panel.csv is keyed by student id, so it
stays out of git.