A machine learning project that predicts a suitable career/job role for a student based on academic performance, technical skills, extracurricular activities, and personal traits.
The notebook explores the problem in two passes: an initial exploration on a general "career prediction" dataset, followed by the main pipeline — feature selection + model comparison (Decision Tree, SVM, XGBoost) — trained on a student-performance dataset, ending in a simple interactive prediction script.
- Input: Student academic scores (SSLC, HSC, CGPA), project/lab experience, skill ratings (aptitude, programming, problem-solving, etc.), extracurricular activity, learning style, and college-related attributes.
- Output: A predicted career/job role (e.g. Database Developer, Portal Administrator, Systems Security Administrator, Business Systems Analyst).
- Approach: Categorical features are label/ordinal-encoded, the most relevant features are selected via Chi-Squared and Mutual Information statistics, and several classifiers are trained and compared.
| Dataset | Source | Used for |
|---|---|---|
career_pred.csv |
vaishnavipatil29/Career-Guidance-ML-Project | Initial data exploration |
career_compute_dataset.csv |
Nantha-1998/404-CODER | Main model training pipeline |
- Load data — read the student dataset directly from a raw GitHub CSV URL with pandas.
- Clean data — drop rows with missing values.
- Encode features — convert categorical/object columns to numeric codes (
categorydtype →.cat.codes, plusLabelEncoderfor the targetROLEandlearning_style). - Feature selection — score features with
SelectKBestusing Chi-Squared (chi2) and Mutual Information (mutual_info_classif) to keep the most predictive attributes. - Train/test split — separate splits are made per model (different
test_size/random_state) for Decision Tree, SVM, and XGBoost. - Train & evaluate models:
- Decision Tree (with and without feature selection)
- SVM (with and without feature selection)
- XGBoost
- Compare accuracies — results are plotted in a bar chart.
- Predict — an interactive script collects a new student's feature values from the console and outputs the predicted role using the trained Decision Tree model.
| Model | Accuracy |
|---|---|
| Decision Tree (without feature selection) | 40% |
| Decision Tree (with feature selection) | 50% |
| SVM (without feature selection) | 60% |
| SVM (with feature selection) | 70% |
| XGBoost | 93.3% |
flowchart TD
A["Raw CSV Dataset\ncareer_compute_dataset.csv"] --> B["Data Cleaning\ndropna()"]
B --> C["Categorical Encoding\ncat.codes / LabelEncoder"]
C --> D["Feature / Target Split\nX (25 features), y (ROLE)"]
D --> E["Feature Selection\nChi-Squared & Mutual Info\n(SelectKBest)"]
E --> F1["Train/Test Split\n(Decision Tree)"]
E --> F2["Train/Test Split\n(SVM)"]
E --> F3["Train/Test Split\n(XGBoost)"]
F1 --> G1["Decision Tree\nClassifier"]
F2 --> G2["SVM\nClassifier"]
F3 --> G3["XGBoost\nClassifier"]
G1 --> H["Accuracy Comparison\n(bar chart)"]
G2 --> H
G3 --> H
G1 --> I["Best / Selected Model"]
I --> J["Interactive Prediction\n(console input per feature)"]
J --> K["Predicted Career Role"]
- Language: Python (Jupyter Notebook)
- Data handling: pandas, numpy
- Visualization: matplotlib, seaborn
- Machine learning: scikit-learn (
LabelEncoder,OrdinalEncoder,SelectKBest,chi2,mutual_info_classif,DecisionTreeClassifier,SVC,train_test_split,accuracy_score),imbalanced-learn(SMOTE),xgboost
- Clone the repository:
git clone https://github.com/shreyagoyal9/Smart-Career-Recommendation-System.git cd Smart-Career-Recommendation-System - Install the dependencies:
pip install numpy pandas scikit-learn matplotlib seaborn xgboost imbalanced-learn
- Open and run the notebook:
jupyter notebook Smart-Career-Recommendation-System.ipynb
- Run the cells in order — the last cells prompt for feature values in the console and print the predicted career role.
- The dataset is loaded directly from raw GitHub URLs, so an internet connection is required to run the notebook.
- Feature and target columns are entirely numeric/label-encoded before modeling — no free-text NLP is involved.
- XGBoost gave the best accuracy in the notebook's experiments, though results depend on the random
train_test_splitseed used for each model.