Skip to content

Reverification of "India's School-Exit Cohort: Pathways, Supply and Returns"

Internal working note (no access: public frontmatter → withheld from docs.avantifellows.org).

Re-run 13 September 2026 against BigQuery through the Avanti Data Assistant run_query tool, independently of the chat session that produced india-education-pathways-analysis.md, which is kept in the repository as a working record and is not part of this published report. Every PLFS figure was recomputed from plfs_fact_persons (and plfs_fact_households for the terciles) at visit = 'V1', weight_annual IS NOT NULL, weighted, with exact weighted medians (cumulative-weight, not APPROX_QUANTILES). AICTE, NMC, MoE, AISHE and NIRF figures were re-read from their tables. Segment definitions are the document’s own (§2) unless a row below says otherwise.

Headline: the numbers reproduce. Of the roughly 200 figures checked, all but a handful match to the document’s stated rounding, and the handful that do not are labelling or definition issues in the document, not errors in the warehouse or the arithmetic. The schema bug the document reports (§2, “known bug”) is real and is fixed in this commit.


§2 — the three engineering tiers, CY2025, ages 25–34

Section titled “§2 — the three engineering tiers, CY2025, ages 25–34”
Code Doc: pop / WPR / reg-wage / also-grad / median Re-run
03 48.1 L / 79.0 / 64.1 / 100% / ₹40,000 48.1 / 79.0 / 64.1 / 100.0 / 40,000
08 25.4 L / 87.4 / 53.2 / 18% / ₹20,000 25.4 / 87.4 / 53.2 / 17.9 / 20,000
13 7.7 L / 78.4 / 59.8 / 100% / ₹38,000 7.7 / 78.4 / 59.8 / 100.0 / 38,000

Pooling impact at ages 22–35: doc 64.2 L → 75.0 L (+17%), median ₹40,000 → ₹38,500. Re-run: 64.2 → 75.0, 40,000 → 38,500. Exact.

§2 — gedu_lvl cannot recover the entry route (CY2025, ages 20–59)

Section titled “§2 — gedu_lvl cannot recover the entry route (CY2025, ages 20–59)”

Doc: 13,447 below-graduate-diploma rows, zero at gedu 08/10, 197,271 no-tech rows at 08/10. Re-run: 13,447 / 0 / 197,271 (9,619 sit at ‘11’, 3,828 at ‘12’/‘13’). Exact. gedu_lvl vocabulary on CY2025: 01–08, 10–13; no ‘09’. Confirmed. tedu_lvl labels confirm 13 is “Diploma/certificate (graduate+) in engineering/technology”, not a degree.

Segment Doc % Re-run %
Below secondary 38.9 38.86
Secondary stopped 13.2 13.21
HS stopped 16.5 16.45
General graduate 17.3 17.30
General PG 4.5 4.52
General diploma/cert (gedu 11) 0.4 0.37
Engineering degree 2.7 2.71
Medicine degree 0.5 0.52
Other technical degree 1.7 1.68
Graduate-level diploma (12–16) 1.3 1.32
Polytechnic diploma (08) 1.5 1.44
Sub-degree diploma, medicine (09) 0.4 0.37
Sub-degree diploma, other (07,10,11) 1.2 1.26
Any tertiary 31.5 31.49

Cross-checks: 18–20-year-olds with HS or above 52.1% (doc 52.1); 30–34 below secondary 48.2% (doc 48). MoE 2024: Class XII passed 1,29,29,386 (doc 1.29 cr); Class X 1,63,37,153 (doc 1.63 cr); Science 61.0 L, Arts 49.2 L, Commerce 16.8 L, Vocational 2.3 L (doc 61 / 49 / 17 / 2). All match.

Public = Government + Govt aided + State Government University + Central University + Deemed (Govt); private = Private-Self Financing + Deemed (Pvt) + State Private University. Every cell of the document’s table reproduces exactly: Engineering UG 1,42,995 (72.6%) / 11,10,342 (65.1%) / 88.6% / 4,27,088 vacant; Engineering diploma 3,41,694 (67.7%) / 6,35,261 (41.5%) / 65.0% / 4,82,089; Management PG 18,162 / 3,85,040 / 1,64,585; Engineering PG 34,594 / 1,02,384 / 88,387; MCA 9,292 / 60,959 / 20,241; Pharmacy UG 5,036 / 50,105 / 16,685; totals 5,52,389 / 23,51,147 (the totals include Hotel Management’s 616 public and 7,056 private seats).

NMC 2024-25: Government 60,324 (51.0%), Trust 46,016, Society 7,500, Private 4,350. Exact.

AICTE national trend, Engineering UG fill: 62.4% (2012-13) → 51.4% (2018-19) → 65.9% (2021-22). Institutions 3,364 → 2,897 (−467). Diploma fill 67.8% → 50.7%. Matches.

§5 — seat counts used for the quality ratios

Section titled “§5 — seat counts used for the quality ratios”

NIRF DCS sanctioned UG-4Y intake, 2023-24, NOT superseded: NITs 30 institutes, 20,681 seats (doc 30 / 20,681 — exact). IITs 22 institutes, 14,497 seats (doc 23 / 14,741) — the document’s IIT figure came from a different source (probably a JoSAA seat matrix); NIRF DCS is what its NIT figure used. The government-vs-private top-100 tagging is name-inferred and was not re-done here (see §3 below).

§6 — income terciles, ages 25–29, CY2025

Section titled “§6 — income terciles, ages 25–29, CY2025”

Persons joined to households on (hh_id, release_id, IFNULL(seg,'~'), visit); MPCE cumulative distribution person-weighted (weight_annual summed over persons); cut at 50 / 80.

Outcome Doc: bottom / mid / top / share from top Re-run
Engineering degree 0.4 / 1.7 / 9.2 / 75% 0.4 / 1.7 / 9.2 / 75.0
Medicine degree 0.1 / 0.4 / 1.7 / 70% 0.1 / 0.4 / 1.7 / 70.0
Polytechnic (08) 0.7 / 1.8 / 2.8 / 41% 0.7 / 1.8 / 2.7 / 41.6
General grad/PG 14.8 / 23.3 / 35.2 / 36% 14.8 / 23.2 / 35.2 / 35.5
HS stopped 15.6 / 18.8 / 15.0 / 20% 15.6 / 18.8 / 15.0 / 20.1
Below secondary 52.2 / 34.5 / 15.5 / 9% 52.2 / 34.5 / 15.5 / 8.7

§7.1 — cross-section, ages 25–34, CY2025

Section titled “§7.1 — cross-section, ages 25–34, CY2025”
Segment Doc: WPR / reg-wage % / UR / median Re-run
Engineering degree 79.0 / 64.3 / 10.7 / 40,000 79.0 / 64.1 / 10.7 / 40,000
Polytechnic (08) 87.4 / 53.2 / 7.5 / 20,000 87.4 / 53.2 / 7.5 / 20,000
ITI-type (narrow) 79.4 / 36.7 / 6.3 / 15,400 78.9 / 35.7 / 6.4 / 15,100
General grad/PG 59.0 / 29.0 / 12.3 / 20,000 59.7 / 30.1 / 13.2 / 20,000 (see §2.1 below)
HS stopped 64.9 / 20.0 / 3.5 / 15,000 64.8 / 20.1 / 3.7 / 15,000
Secondary stopped 67.5 / 17.4 / 2.0 / 14,850 67.6 / 17.5 / 2.1 / 15,000

WPR here is principal-or-subsidiary status, as the document defines it.

§7.2 — pseudo-panel endpoints (cohort 1990–94)

Section titled “§7.2 — pseudo-panel endpoints (cohort 1990–94)”

Regular-wage share, doc “27 → 33”: polytechnic 45 → 54, general grad 27 → 35, ITI (broad) 37 → 29, HS 17 → 21. Re-run at annual_2018_19 ages 25–29 and calendar_2025 ages 31–35: 45.3 → 54.4, 26.5 → 34.8, 37.3 → 29.2, 17.3 → 21.2. Matches.

Wage ratios at the first panel point (2018-19, ages 25–29): engineering / general graduate 1.67 (doc 1.67), polytechnic / HS 1.45, graduate / HS 1.50, ITI / HS 1.20 — all inside the ranges the document quotes. At 2025 ages 31–35: polytechnic / HS 1.60, graduate / HS 1.50, grad+PG / HS 1.67, ITI / HS 1.07, engineering / graduate 2.0 (doc “2.0× at 33–38”).

Cross-cohort, same age 30–34, nominal medians 2018-19 (cohort 1985–89) → 2023-24 (cohort 1990–94): engineering ₹30,000 → ₹42,000 (+40%), polytechnic ₹18,000 → ₹20,000 (+11%), general graduate ₹18,000 → ₹21,000 (+17%), HS ₹12,000 → ₹15,000 (+25%). Settled 14 September 2026: CPI Combined runs 140 in 2018-19 to 184 in 2023-24, a rise of 31.4% (Economic Survey 2025-26 Statistical Appendix Table 4.3). On that deflator the polytechnic falls 15.4% in real terms and engineering gains 6.5%. The document’s −13% / +9% used an unstated deflator of roughly 28%; the direction was right and the divergence is slightly wider than it claimed. The analysis document now carries the corrected pair.

Government-job share and private regular-wage share, ages 25–54, CY2025, reproduce exactly for every tedu-defined segment (engineering 11.7 / 55.4; other technical 25.7 / 27.8; polytechnic 12.1 / 42.4; ITI 9.3 / 27.6), and all government/private medians match (50k/45k, 48k/25k, 35k/22k, 32k/16k, 45k/28k vs doc 28.5k, 35.5k/20k vs doc 35k/20k, 22k/15k vs doc 21.5k/15k).

§7.4: share of ₹50k+ earners in government 20.9 / 49.2 / 73.1 / 59.4 / 46.4 / 63.0 / 85.8 / 83.1 (doc 20.9 / 49.2 / 73.1 / 58.9 / 46.4 / 62.0 / 85.8 / 84.9); private p90 95k / 85k / 60k / 70.85k / 45k / 45k / 30k / 25.6k (doc 95k / 85k / 60k / 72k / 45k / 45k / 30k / 25k); government p50 all match. The “% ≥ ₹50k” column reproduces only as a share of the whole segment population (engineering 30.4, polytechnic 6.9), not of regular-wage earners (45.3, 12.7) — see §2.2 below.

§7.5, CY2025 ages 31–35: engineering 60.4 / 56.3 / 43.8 / 19.8, polytechnic 26.2 / 19.9 / 10.8 / 30.1, ITI broad 6.7 / 3.1 / 1.1 / 60.0, HS 4.1 / 2.4 / 0.8 / 58.8 — all exact. General grad/PG: see §2.1.

AICTE Engineering DIPLOMA, cut='inst_type': public 942 → 1,412 institutions, 2.77 L → 3.42 L intake, 2.28 L → 2.31 L enrolled, 82% → 68% fill; private 2,117 → 2,180 (peak 2,736 in 2014-15), 7.31 L → 6.35 L (peak 9.47 L), 4.55 L → 2.63 L, 62% → 41%. Every figure exact. ~1.1 L empty government seats (110,211). State cut 2021-22: Tamil Nadu 1,78,081 at 35.1% (1,15,572 vacant, 24% of national), Punjab 33.8%, Rajasthan 32.9%, UP 45.5%, Kerala 76.5%, Odisha 76.3%, Bihar 71.0%. Passouts 2021-22: public 1,33,290, private 1,75,971 (doc 1.33 L / 1.76 L); 2020-21 (54,072) and 2022-23 (0) are indeed unusable.

§10 — regular-wage jobs per 1,000 working-age (15–59), annual_2018_19 vs calendar_2025

Section titled “§10 — regular-wage jobs per 1,000 working-age (15–59), annual_2018_19 vs calendar_2025”

All eleven sector rows reproduce exactly (Manufacturing 28.1 → 35.4, Trade 15.0 → 19.9, Info & communication 4.6 → 7.8, Health 5.8 → 8.8, Households 5.1 → 7.1, Finance 5.3 → 6.7, Hospitality 3.6 → 5.0, Construction 3.6 → 4.6, Public admin 8.9 → 9.3, Education 18.8 → 18.6, Transport 11.5 → 11.0). Stock/absorption rows for engineering (6.7 → 11.2; 3.3 → 6.9; 50% → 61%), polytechnic (6.5 → 8.0; 2.6 → 3.9; 41% → 48%), ITI broad (8.4 → 17.5; 2.4 → 4.4; 28% → 25%) and secondary/HS (270 → 284; 31.8 → 38.1; 12% → 13%) match. General grad/PG: see §2.1.

AISHE 2023-24 UG enrolment (ug_discipline): Arts 1.09 cr, Science 45.7 L, Engineering & Technology 43.9 L, Commerce 40.8 L, Medical Science 21.3 L (doc 1.09 cr / 46 L / 44 L / 41 L / 21 L). AISHE college directory by management: Private Un-Aided 69.0%, Private Aided 11.0%, State + Central Government 13.5% (doc “20% government” also counts the 4.8% ‘University’ and 1.3% ‘Local Body’ rows).


2. Where the document should be corrected or clarified

Section titled “2. Where the document should be corrected or clarified”

2.1 The “General graduate / PG” segment is not what §2 says it is

Section titled “2.1 The “General graduate / PG” segment is not what §2 says it is”

§2 defines it as tedu_lvl='01' AND gedu_lvl IN ('12','13'). With that definition the re-run gives 98.8 → 120.1 per 1,000 stock and 30.6 → 36.1 regular-wage jobs (§10), and 18.8 / 15.1 / 9.3 at the §7.5 thresholds. The document’s figures (92.6 → 107.5; 27.9 → 30.9; 17.7 / 14.0 / 8.4) reproduce exactly only when graduates who report formal vocational training (voc = '1') are removed — 6.1 → 12.6 per 1,000 people who then appear in no row of the stock table, since the ITI-type definition excludes graduates too. The same exclusion accounts for the ~1-point gaps in §7.1 and §7.3 (general PG 16.4 vs 17.3, general graduate 9.6 vs 10.4, HS 5.4 vs 5.7 government share). Fix: either state the exclusion in the segment table, or restore those people to the general segment. It does not change any conclusion — absorption falls from 31.0 to 30.0 either way.

2.2 §7.4 “% ≥ ₹50k” is a share of the whole segment, not of regular-wage earners

Section titled “2.2 §7.4 “% ≥ ₹50k” is a share of the whole segment, not of regular-wage earners”

The header says “(regular wage, 25–54)”, which reads as a share of salaried people. It is the share of everyone in the segment (engineering 30.1 = 45.3% of regular-wage earners × 67% who are regular-wage). Say which. The ceiling comparison the section makes is unaffected.

2.3 §7.3 “% self-emp” is principal-or-subsidiary; the other columns are principal-only

Section titled “2.3 §7.3 “% self-emp” is principal-or-subsidiary; the other columns are principal-only”

Self-employment reproduces as pas IN ('11','12','21') OR sas IN (...) (engineering 15.7, polytechnic 33.5, HS 44.2), while “% in govt job” and “% private reg-wage” are principal status only. Not wrong, but the three columns do not sum against one basis; label it.

2.4 §7.2 finding 1 depends on pooling PG into “general graduate”

Section titled “2.4 §7.2 finding 1 depends on pooling PG into “general graduate””

“The general graduate is slightly ahead of polytechnic on conditional wage at every age” holds at the first panel point (2018-19, ages 25–29: ₹15,000 vs ₹14,500) and, with graduates and postgraduates pooled, at every later point. With graduates alone it does not: 2020-21 ages 31–35 ₹20,000 vs ₹20,000; CY2025 ages 31–35 ₹22,500 vs ₹24,000; CY2025 ages 36–40 ₹25,400 vs ₹30,000. The 1.5–1.67× range the section quotes for “general degree” is the graduate-only figure at its low end and the pooled figure at its high end. Either say “graduate or postgraduate” or soften the finding.

  • §3 cohort map: polytechnic (08) is 1.44%, which rounds to 1.4, not 1.5; per 2.5 crore that is 3.6 L, not 3.7 L. “Any tertiary” 31.5 is still right.
  • §4 trend: “intake cuts (16.3 L → 12.5 L)”. 2012-13 approved intake was 15.5 L; 16.3 L is 2013-14 and the peak was 17.05 L in 2014-15. The 12.5 L for 2021-22 is right.
  • §10: “~126 → ~157 per 1,000”. Summing the same sector table gives 126.3 → 153.6. Use ~154, or say where the extra 3 come from.
  • §12: “~4.2 L/year over 2012–2019” diploma passouts. The mean of 2012-13 to 2018-19 is 4.41 L; of 2012-13 to 2019-20, 4.34 L. Neither is 4.2. The gap to the PLFS-implied 2.5–3.0 L per cohort is therefore slightly larger than stated, which strengthens rather than weakens §12’s point.
  • §5: IITs 23 / 14,741 does not come from NIRF DCS (22 / 14,497 for 2023-24) although the NIT figure does. Name the source for the IIT row.
  • §7.1 ITI-type (narrow): the re-run gives 78.9 / 35.7 / 6.4 / ₹15,100 against 79.4 / 36.7 / 6.3 / ₹15,400 — close, and the residual is most likely a slightly different voc_dur set or the gedu_lvl='11' handling. Not material.
  • weight_suspect does not exist on the loaded table yet; the literal weight_annual <= 1000000 is the filter to use, as gotcha 15 says. The example queries now carry it.
  • voc_typ / voc_dur are populated only in calendar_2024 and calendar_2025 (12,437 and 34,302 V1 rows), confirming the document’s “CY2024/25 only” for the narrow ITI definition.
  • etyp_pas (the government-job test) is populated on every release except calendar_2021.
  • Neither the seven-release pseudo-panel nor its stated contamination on annual_2022_23 and annual_2020_21 was re-run here. The three-point figures above were computed with both filters applied and match, which is consistent with the document’s statement that those points were clean.

  • The NIRF top-100 / top-50 government-vs-private tagging (§5) is name-inferred and hand-checked in the original; it was not redone. The seat totals it rests on are checked above.
  • DGT / NCVT ITI counts and vacancy (§4), NITI Aayog, Ideas for India, and the papers in §11 — outside the warehouse.
  • §12’s lateral-entry reconciliation is arithmetic on public quota ranges, not a measurement, as the document itself says.
  • §7.2 findings 2, 4 and 5 beyond the endpoint and same-age checks reported above; the full seven-release series with both filters is still the open item the document lists in §14.1.
  • Any figure in §13’s caveats about cell sizes: the cell counts in the re-run (polytechnic 960–2,599 rows, ITI narrow 1,249–3,492, medicine 507–1,368) are consistent with the ranges given.

  • docs/schemas/external/plfs_fact_persons.yaml: gotcha 4 rewritten — engineering degree-holders are tedu_lvl = '03' alone, with the three-tier code structure and the measured pooling impact; new gotcha 23 on gedu_lvl (highest level, ‘11’ outranks ‘10’, no ‘09’, entry route not derivable); tedu_lvl and gedu_lvl column descriptions rewritten; all four example queries now filter visit = 'V1' and the multi-release ones weight_annual <= 1000000, and the two engineering examples use '03' alone.
  • plfs_fact_households.yaml, plfs_dim_nco.yaml, plfs_dim_nic.yaml: the same '03','13' pooling in their example queries changed to '03'.
  • tests/golden_questions.md: question 41 added.
  • analysis/nirf/reconciliation/overlay_plfs.py still describes its PLFS anchor as tedu_lvl IN ('03','13') (comment and provenance table). Not changed here — it documents what that analysis actually ran, and re-running it is that analysis’s decision.