AICTE 2026 | IBM SkillsBuild University Engagement | Problem Statement No. 35
A machine learning project that classifies rural road and bridge construction projects into their correct PMGSY scheme (PMGSY-I, PMGSY-II, PMGSY-III, RCPLWEA, PM-JANMAN) using physical and financial project characteristics.
- Problem Statement
- Objective
- Dataset
- Approach
- Results
- Key Insights
- Tech Stack
- Project Structure
- How to Run
- Limitations and Future Work
- Author
The Pradhan Mantri Gram Sadak Yojana (PMGSY) is a flagship rural development program in India, providing all-weather road connectivity to unconnected habitations. Over the years, the program has evolved through multiple schemes, each with distinct objectives and funding mechanisms:
- PMGSY-I / PMGSY-II / PMGSY-III — general rural connectivity phases
- RCPLWEA — Road Connectivity Project for Left Wing Extremism Affected Areas
- PM-JANMAN — connectivity for Particularly Vulnerable Tribal Groups
Manually classifying thousands of ongoing and completed projects into the correct scheme is slow, inconsistent, and does not scale, making monitoring, budget allocation, and impact assessment difficult for government planners.
Design, build, and evaluate a multi-class classification model that predicts the correct PMGSY scheme for a project based on its physical and financial characteristics, while properly handling severe class imbalance and evaluating performance using metrics that don't hide poor performance on underrepresented but policy-critical classes.
- Source: AI Kosh — Government of India open data platform
- Size: 2,189 district-level records across 32 states and 702 districts
- Target variable:
PMGSY_SCHEME(5 classes)
| Scheme | Records |
|---|---|
| PMGSY-I | 706 |
| PMGSY-III | 692 |
| PMGSY-II | 684 |
| RCPLWEA | 55 |
| PM-JANMAN | 52 |
RCPLWEA and PM-JANMAN together make up under 5% of the data, creating a significant class imbalance problem.
- Data Cleaning — dropped a fully empty column caused by a trailing comma in the source CSV, imputed 52 missing
COST_OF_WORKS_SANCTIONEDvalues using the median - Exploratory Data Analysis — examined class distribution, missing values, numeric feature spread, correlation between features, and geographic clustering of the minority classes
- Domain Validation — confirmed that RCPLWEA concentrates in Left-Wing-Extremism-affected states (Jharkhand, Chhattisgarh, Bihar) and PM-JANMAN concentrates in tribal-belt states (Chhattisgarh, Madhya Pradesh, Jharkhand), validating
STATE_NAMEas a genuine, policy-driven signal - Feature Engineering — dropped the high-cardinality
DISTRICT_NAMEcolumn, engineered four ratio-based features (completion_rate,cost_per_road_work,cost_per_km,balance_rate), and one-hot encodedSTATE_NAME - Train/Test Split — stratified 80/20 split to preserve class proportions in both sets
- Modeling — trained and compared Logistic Regression (with feature scaling and class weighting) and Random Forest (with class weighting)
- Evaluation — accuracy, macro F1-score, per-class precision/recall, confusion matrix, and feature importance analysis
| Model | Accuracy | Macro F1 |
|---|---|---|
| Logistic Regression | 87.2% | 0.808 |
| Random Forest | 91.3% | 0.814 |
Random Forest achieved the strongest overall performance, including perfect classification for PM-JANMAN. On RCPLWEA specifically, the two models showed an interesting trade-off: Logistic Regression had higher recall but weaker precision (frequent false alarms), while Random Forest had perfect precision but low recall (missed most true cases). The confusion matrix showed RCPLWEA is most often confused specifically with PMGSY-III, rather than being randomly misclassified.
Top contributing features included LENGTH_OF_ROAD_WORK_COMPLETED, EXPENDITURE_OCCURED, and the engineered cost_per_km ratio, validating the feature engineering approach.
- Accuracy alone would have been misleading here; macro F1 was essential for surfacing that the minority classes weren't actually being handled well despite a high overall accuracy score
- Geographic features carry genuine, real-world policy signal (not spurious correlation), confirmed by cross-referencing scheme clustering against each scheme's actual purpose
- Model errors are concentrated and interpretable (RCPLWEA vs PMGSY-III), which makes a human-in-the-loop review process realistic for deployment rather than needing to distrust the model broadly
- Platform: IBM Cloud Lite services, IBM Watson Studio (Jupyter Notebook)
- Language: Python 3
- Data handling: Pandas, NumPy
- Visualization: Matplotlib, Seaborn
- Machine Learning: Scikit-learn (Logistic Regression, Random Forest, StandardScaler, LabelEncoder, stratified train/test split, classification metrics)
- Storage: IBM Cloud Object Storage
├── PMGSY_Classification.ipynb # Main notebook: EDA, cleaning, modeling, evaluation
├── PMGSY_DATASET.csv # District-wise PMGSY dataset (AI Kosh)
├── PS35_Report.docx # Written project report
└── README.md # This file
- Upload
PMGSY_DATASET.csvas a data asset in your IBM Watson Studio project - Open
PMGSY_Classification.ipynbin a Watson Studio Jupyter Notebook environment - Use the "Insert to code" panel to generate the Cloud Object Storage connection cell for the dataset (or supply your own COS credentials)
- Run all cells sequentially (Kernel → Restart & Run All recommended for a clean run)
Note: if you clone or share this notebook, remove any IBM Cloud API credentials from the data-loading cell first.
- RCPLWEA and PM-JANMAN have very few samples (~50-55 each); more historical data would likely improve reliability further, especially for RCPLWEA
- One-hot encoding
STATE_NAMEinto 32 separate columns likely diluted its individual feature importance ranking, even though state-level geography is a meaningful signal; target or frequency encoding could be tried instead - Additional features that better separate RCPLWEA from PMGSY-III could improve recall on this class without sacrificing precision
- Multi-year or temporal data, if available, could help track how scheme classification patterns evolve over time
- Cross-validation (stratified k-fold) would give a more robust performance estimate than a single train/test split
Lahari (Baswa Vinaya Sangeeta Lahari) B.Tech Computer Science, GITAM University Visakhapatnam GitHub: bvslahari007 LinkedIn: vinaya-sangeeta-lahari-baswa