Skip to content
All projects
NLP · Machine Learning

Resume Screening AI

ResumeAI analyses uploaded PDF resumes using a TF-IDF vectoriser and XGBoost classifier to predict job categories with 80.9% accuracy across 22+ roles - with results delivered in under 1 second.

Resume Screening AI preview

Tech stack

PythonXGBoostTF-IDFNLPStreamlit

Impact

80.9%
Accuracy
22+
Job Categories
< 1s
Analysis Time

Problem Statement

Recruiters manually screen hundreds of resumes per role, leading to unconscious bias and massive time costs. The goal was an automated NLP system to predict a candidate's job category from raw resume text - instantly and accurately.

Dataset

2,484 labelled resume PDFs spanning 22+ job categories including Data Science, HR, Engineering, Finance, and more. PDFs were parsed with PyPDF2 and cleaned with regex before feature extraction.

Architecture

Two-stage pipeline: (1) TF-IDF vectorisation to convert resume text into weighted term features; (2) XGBoost multi-class classifier for category prediction. A Streamlit front end handles PDF upload, text extraction, prediction, and confidence-score display.

Model Selection

XGBoost was chosen over Logistic Regression and Random Forest for its superior gradient boosting on sparse TF-IDF vectors and fast inference. TF-IDF outperformed Word2Vec for short-document classification.

Training Process

Trained with 80/20 stratified split, label encoding, and hyperparameter tuning via GridSearchCV on learning rate, max depth, and estimators. Model serialised with joblib for sub-second Streamlit inference.

Evaluation Metrics

80.9%
Test Accuracy
22+
Categories
< 1s
Inference

Results

Live Streamlit app at resume-screening-ai-01.streamlit.app - upload any PDF resume and get instant job-category predictions with confidence scores across 22 roles.

Key Learnings

  • 1TF-IDF + XGBoost is a powerful, fast baseline for short-document NLP tasks.
  • 2Resume text quality varies wildly - robust PDF parsing is as important as the model.
  • 3Confidence scores add recruiter trust that raw predictions alone don't provide.

Want to dig deeper?

Explore the code, or get in touch if you'd like to talk through the approach.