Data SciencePortfolio projects with Indian public data

Does more education mean less unemployment for young Indians? PLFS

PK
Pankit Kumar
Sr. Data Scientist at Parexel (a Goldman Sachs–backed company) · 27 September 2026 · 5 min read
In this article (7 sections)

Related programme: the Data Science course (6 months; ₹1,30,000 (inclusive of GST) · EMI from ₹5,000/month).

The short answer

A counter-intuitive pattern often reported for India is that young graduates show higher unemployment rates than young people with less schooling. This project tests that claim directly with the Periodic Labour Force Survey. You will pull unemployment rates by general education level and age group from MoSPI's eSankhyiki portal. Then you separate two things the headline rate blends together: how many people are in the labour force, and how many of those are looking for work. You end with a clear answer about the pattern, with the survey's limits stated, and a model of how the composition of the labour force drives it.

Data and filters

MoSPI's eSankhyiki PLFS page offers indicators including the labour force participation rate (LFPR), worker population ratio (WPR) and unemployment rate (UR), with filters for age group, general education, gender, sector, state, weekly status, year type and year. The downloaded file carries the columns Year Type, Year, Frequency, Indicator, State, Gender, Sector, Agegroup, Weekly Status, Religion, Socialgroup, General Education, Quarter, Month, Value and Unit.

Check which age groups and education categories the portal offers in your download. The breakdown is set by the survey's tabulation, not by you, and you should not assume it matches any particular list. Read the Metadata tab for the definitions of each status approach.

The identity that makes this a data science project

Three published indicators are linked by an identity. For any group:

text
UR = 1 - WPR / LFPR

Here WPR is workers as a share of the population and LFPR is the labour force as a share of the population. So if you download all three, you can check the published UR against the other two. Where they disagree beyond rounding, you have found a definitional mismatch in your filters. That check is worth more than any chart.

The identity also shows why a high UR for graduates does not simply mean "education hurts". UR is conditional on being in the labour force. If many less-educated young people are working in low-paid informal jobs, and more educated young people can afford to wait for a suitable job, UR rises with education even though no one's prospects worsened.

Why hiring and policy teams care

Staffing firms, edtech companies, skilling programmes and state labour departments plan around who is looking for work and how long they wait. A candidate who can reconcile three survey indicators, explain a composition effect and refuse to over-claim from cross-sectional survey data will stand out in any research-oriented data science interview.

Code: reconcile, then decompose

The values below are synthetic. The education labels are illustrative placeholders rather than the portal's exact categories, and the numbers are invented.

python
import pandas as pd

d = pd.DataFrame({
    "education": ["Up to primary", "Middle", "Secondary", "Higher secondary", "Graduate", "Postgraduate"],
    "LFPR": [52.0, 48.0, 40.0, 35.0, 58.0, 62.0],
    "WPR": [50.4, 45.6, 36.4, 30.8, 45.2, 49.6],
    "UR_published": [3.1, 5.0, 9.0, 12.0, 22.1, 23.5],
    "pop_share": [0.18, 0.17, 0.22, 0.20, 0.18, 0.05],
})

d["UR_implied"] = (1 - d["WPR"] / d["LFPR"]) * 100
d["check_gap"] = (d["UR_published"] - d["UR_implied"]).round(2)
print(d[["education", "UR_published", "UR_implied", "check_gap"]].round(2))
bad = d[d["check_gap"].abs() > 0.2]
print("rows failing the identity check:", list(bad["education"]))

# Composition: who makes up the unemployed pool?
d["labour_force"] = d["pop_share"] * d["LFPR"] / 100
d["unemployed"] = d["labour_force"] * d["UR_published"] / 100
d["share_of_unemployed"] = d["unemployed"] / d["unemployed"].sum()
overall_ur = d["unemployed"].sum() / d["labour_force"].sum() * 100
print(d[["education", "UR_published", "share_of_unemployed"]].round(3))
print("overall youth UR from parts:", round(overall_ur, 2))

# Counterfactual: overall UR if every group had the graduates' participation rate
cf = d.assign(LFPR=d.loc[d["education"] == "Graduate", "LFPR"].iloc[0])
cf_lf = cf["pop_share"] * cf["LFPR"] / 100
print("overall UR with equal participation:",
      round((cf_lf * cf["UR_published"] / 100).sum() / cf_lf.sum() * 100, 2))

In the synthetic sample, one row is deliberately inconsistent, and the check catches it. With real data, a failing row usually means that one indicator was filtered under current weekly status and another under usual status, or that one included a different age band.

The population shares here are invented. With real data you would need a source for the education mix of the population, and PLFS reports may not give it in the portal's table. If you cannot source it, skip the composition step and keep the reconciliation and the rate comparison.

Analysis plan

  1. 1Choose one age band for youth, one status approach, one sector breakdown and one year type. Write them down.
  2. 2Download UR, LFPR and WPR by general education for both genders.
  3. 3Reconcile UR against the identity for every row.
  4. 4Plot UR by education, separately for men and women and for rural and urban. The pattern may differ sharply by gender.
  5. 5Compare the same education gradient for an older age group. If the gradient flattens with age, that supports a "waiting for the right job" reading over a "no jobs for graduates" reading. It does not prove it, since this is not panel data.
  6. 6State uncertainty. For small cells, such as postgraduate women in one state, the survey estimate is imprecise.

Deliverables

  • A line chart of UR by education level, with lines for men and women, youth and an older band.
  • A reconciliation table showing published and implied UR and the difference for every cell.
  • A short written argument, under 300 words, on what the pattern does and does not show.
  • A README with the source, download date, every filter value, the identity check, uncertainty notes and limitations.

Interview questions

  • Derive the identity linking UR, WPR and LFPR.
  • Why can UR rise with education even if education improves job prospects?
  • How would you test the "waiting for a better job" explanation with data you do not have here?
  • One cell fails your reconciliation by 1.5 points. Walk me through your debugging.
  • Why is comparing youth and older age bands in one survey round not the same as following a cohort?

The companion female LFPR by state project uses the same survey for a different question. Reconciling published indicators and reasoning about composition effects are central skills in our Data Science programme.

PK
Pankit Kumar
Lead Instructor, NeuraPath Academy

Pankit Kumar has 10 years in Data Science & AI, building and shipping production systems in regulated pharma and clinical environments. He is a freelance trainer at Boston Institute of Analytics, AnalytixLabs and Scaler, and has taught this material to thousands of working professionals.

This article is part of our Data Science programme — 6 months. From data foundations to machine learning, deep learning and deployment.

Explore Data Science
Counselling is free · no obligation

Not sure which programme fits?

Tell us your background and we will map it to the right entry point — including saying so when a cheaper programme is the better fit. A counsellor replies within one working day.