CoolFace
Apppublic

bladebutcher/redrob-ranker

sourceHugging Facemitupdated 3mo agoView on Hugging Face
1likes
App README

<div align="center">

Redrob Intelligent Candidate Discovery & Ranking

A multi-signal ranking system that finds the best Senior AI Engineers from 100,000 candidates in 25 seconds

![Python 3.11](https://www.python.org/) ![License: MIT](LICENSE) ![CPU Only](#performance) ![Runtime](#performance) ![Signals](#behavioral-signals) ![Honeypots](#honeypot-detection)

Live Demo | Submission CSV | Methodology

</div>


The Problem

Given 100,000 candidate profiles with rich structured data (skills, career history, behavioral signals, education), rank the top 100 best fits for a Senior AI Engineer — Founding Team position at a product company.

The catch: the dataset contains honeypot profiles (impossible candidates designed to fool naive rankers), keyword stuffers (non-technical people listing AI skills), and consulting-only careers that look impressive on paper but don't match the founding-team requirement.

Naive keyword matching is explicitly the wrong answer. The JD says so.


Results at a Glance

MetricValue
Candidates processed100,000
After coarse filter40,789
Honeypots detected67
Honeypots in top 1000
Runtime25.2 seconds
Memory< 2 GB
GPU requiredNo
LLM API calls0
Network during rankingNone

Top 5 candidates:

RankCandidateTitleCompanyExpKey Signal
1CAND_0071974Senior AI EngineerNetflix7.8yr3/3 ML roles, leadership, LoRA + L2R
2CAND_0018499Senior ML EngineerZomato7.2yr3/3 ML roles, Noida, RecSys + DL
3CAND_0002025Senior AI EngineerApple5.9yr2/2 ML roles, FAISS + TensorFlow
4CAND_0081846Lead AI EngineerRazorpay6.7yrIR + LlamaIndex + pgvector
5CAND_0088025Staff ML EngineerYellow.ai8.6yrPinecone + QLoRA + RAG, Indian AI startup

Every candidate in the top 10 is a genuine AI/ML engineer at a product company, in the 5-9 year experience sweet spot, with production ML evidence in their career descriptions.


How It Works

4-Stage Pipeline

                    ┌─────────────────────────────────────┐
                    │         100,000 candidates           │
                    └──────────────┬──────────────────────┘
                                   │
                    ┌──────────────▼──────────────────────┐
    Stage 0         │     Honeypot Detection (6 rules)     │──── 67 impossible
                    │  date arithmetic, skill impossibility │     profiles flagged
                    └──────────────┬──────────────────────┘
                                   │
                    ┌──────────────▼──────────────────────┐
    Stage 1         │       Coarse Filter                  │──── 59,211 eliminated
                    │  title + description + experience    │     (non-tech, <2yr exp)
                    └──────────────┬──────────────────────┘
                                   │  40,789 candidates
                    ┌──────────────▼──────────────────────┐
    Stage 2         │     Multi-Signal Scoring             │
                    │  8 weighted dimensions per candidate  │
                    └──────────────┬──────────────────────┘
                                   │
                    ┌──────────────▼──────────────────────┐
    Stage 3         │    Rank + Reasoning Generation       │──── submission.csv
                    │  sort, tiebreak, per-candidate text   │     (top 100)
                    └─────────────────────────────────────┘

8 Scoring Dimensions

DimensionWeightWhat It Measures
Title Alignment20%Current title fit to "Senior AI Engineer" (70+ titles scored) + career trajectory titles + headline signal
Skills Match20%3-tier taxonomy (178 skills) with trust multiplier + platform assessment boost + endorsement validation
Career Trajectory20%Production ML evidence in descriptions, headline/summary analysis, AI industry experience, leadership + startup signals
Experience Fit10%Bell curve centered at 7yr (JD sweet spot: 5-9yr)
Behavioral Signals10%18 components from all 23 Redrob platform signals
Location8%Pune/Noida preferred (JD), Tier-1 India acceptable, international with penalty
Anti-Pattern7%Penalties for consulting-only, keyword stuffing, title chasing, CV-only focus
Education5%Field relevance (CS/AI > EE > Mech) + institution tier + ML certification bonus

The Key Insight: Career Descriptions > Listed Skills

The JD warns that keyword matching is a trap. Our career trajectory scorer is the key differentiator:

Candidate A: "Senior AI Engineer" at TCS
  → Skills list: PyTorch, TensorFlow, BERT, FAISS, RAG
  → Career descriptions: "managed client deliverables", "requirement gathering", "stakeholder management"
  → Result: HIGH title score, but ZERO production ML evidence → consulting penalty → ranked LOW

Candidate B: "Software Engineer" at Razorpay
  → Skills list: Python, PyTorch
  → Career descriptions: "built recommendation pipeline serving 2M daily users",
    "deployed embedding model with p99 < 50ms", "A/B tested ranking algorithm"
  → Result: MODERATE title score, but STRONG production ML evidence → ranked HIGH

This is why embeddings fail here — they see Candidate A's keyword list and rank them high. We read what they actually did.


Detailed Scoring Breakdown

Honeypot Detection

Six rules catch impossible profiles before scoring begins:

RuleWhat It CatchesExample
Expert + 0 monthsSkills claimed as "Expert" with zero actual usage time5 "Expert" skills, all 0 months
Calendar overflowJob duration exceeds time between start and end dates"2020-2021" but claims 36 months
Career overflowTotal career months > yearsofexperience x 23yr exp but 120 months of jobs
Future datesStart/end dates in the futureJob starting in 2027
Skill explosionImpossible skill count for experience level50 expert skills with 2yr exp
Perfect signalsSynthetically perfect behavioral scoresAll rates exactly 1.0

Result: 67 honeypots detected, 0 in top 100.

Trust Multiplier

Not all skill claims are equal:

ProficiencyDurationEndorsementsMultiplier
Expert> 0 months10+1.0x (full trust)
Expert> 0 months< 50.9x
Expert0 monthsany0.3x (likely fake)
Advanced> 0 months-0.9x
Intermediate--0.7x
Beginner--0.4x

This single mechanism eliminates most keyword stuffers from the top rankings.

Anti-Pattern Detection

PatternPenaltyHow Detected
Keyword Stuffer-0.80Non-technical title + AI skills listed + zero ML keywords in career descriptions
Consulting Only-0.50Every job at consulting companies (54 tracked: TCS, Infosys, Wipro, Accenture, etc.)
Title Chaser-0.2070%+ jobs under 18 months with 3+ total positions
CV Only-0.15Computer Vision focus only, no NLP/IR/search exposure

Behavioral Signals

All 23 Redrob platform signals are used across 18 weighted components:

ComponentWeightSignal Used
Notice period14%notice_period_days
Recruiter response rate14%recruiter_response_rate
Activity recency11%last_active_date
Open to work7%open_to_work_flag
GitHub activity7%github_activity_score
Interview completion7%interview_completion_rate
Verification trust7%verified_email + verified_phone + linkedin_connected
Saved by recruiters6%saved_by_recruiters_30d
Search appearances4%search_appearance_30d
Avg response time4%avg_response_time_hours
Offer acceptance4%offer_acceptance_rate
Profile completeness4%profile_completeness_score
Applications submitted3%applications_submitted_30d
Profile views3%profile_views_received_30d
Connections2%connection_count
Endorsements2%endorsements_received
Platform tenure1%signup_date
Salary feasibility1%expected_salary_range_inr_lpa

Reasoning Examples

Every candidate gets a specific, fact-based reasoning string. No templates, no hallucination — each claim traces to actual profile fields.

Strong candidate (Rank #1):

Senior AI Engineer at Netflix with 7.8yr exp. based in Vizag, Andhra Pradesh. 3/3 roles in ML/AI; ML leadership experience; startup/early-stage background; skills: LoRA, Learning to Rank, Weaviate, PEFT; 76% recruiter response rate.

Strong candidate (Rank #6, now with concern flag):

Senior NLP Engineer at Mad Street Den with 8.0yr exp. based in Vizag, Andhra Pradesh. 3/3 roles in ML/AI; ML leadership experience; startup/early-stage background; skills: Reinforcement Learning, Weaviate, LoRA, LLMs. Concerns: low recruiter response rate (16%).

31 out of 100 candidates include honest concern flags — the system doesn't hide gaps.


Quick Start

Requirements

  • —Python 3.10+
  • —No GPU, no internet, no API keys

Install & Run

bash
# Install (only pyyaml + tqdm)
pip install -r requirements.txt

# Rank 100K candidates
python rank.py --candidates ./candidates.jsonl --out ./submission.csv

# Validate output format
python validate_submission.py submission.csv

# Run tests
python -m pytest tests/ -v

# Launch sandbox UI
python app.py

Docker (for reproducibility testing)

bash
docker build -t redrob-ranker .
docker run --rm -v $(pwd):/data redrob-ranker \
  python rank.py --candidates /data/candidates.jsonl --out /data/submission.csv

Performance

ConstraintLimitActual
Runtime5 minutes25.2 seconds
Memory16 GB< 2 GB
GPUNot availableNot needed
NetworkNot availableNot needed
DependenciesMinimal2 packages (pyyaml, tqdm)

Project Structure

redrob-ranker/
├── rank.py                        # CLI entry point — orchestrates the 4-stage pipeline
├── config.py                      # All weights, thresholds, and tunable parameters
│
├── pipeline/
│   ├── loader.py                  # Streaming JSONL reader (memory-efficient)
│   ├── honeypot.py                # Stage 0: 6-rule impossible profile detection
│   ├── coarse_filter.py           # Stage 1: fast elimination (100K → 40K)
│   ├── scorer.py                  # Stage 2: composite scoring orchestrator
│   ├── ranker.py                  # Stage 3: final ranking + reasoning generation
│   └── features/
│       ├── title_alignment.py     # 70+ titles scored + headline boost
│       ├── skills_match.py        # 178 skills, 3 tiers, trust multiplier + assessments
│       ├── career_trajectory.py   # THE differentiator — description analysis for ML work
│       ├── experience_fit.py      # Bell curve centered at 7yr
│       ├── location_score.py      # India tier-based (Pune/Noida > Bangalore > Tier-2)
│       ├── education_score.py     # Field relevance + institution + certifications
│       ├── behavioral_signals.py  # 18 components from 23/23 Redrob signals
│       └── anti_patterns.py       # 4 detectors: stuffer, consulting, chaser, cv-only
│
├── jd/
│   ├── requirements.py            # Structured JD representation
│   └── taxonomy.py                # Title hierarchy, skill taxonomy, company classification
│
├── app.py                         # Gradio sandbox (live on HuggingFace Spaces)
├── tests/test_pipeline.py         # 10 tests covering all pipeline components
├── analysis/
│   ├── explore_data.py            # Dataset distribution analysis
│   └── inspect_top100.py          # Top 100 quality validation
├── validate_submission.py         # Official submission format validator
├── submission.csv                 # Final output: 100 ranked candidates with reasoning
├── submission_metadata.yaml       # Hackathon metadata
├── sample_candidates.json         # 50 sample candidates for sandbox/testing
├── requirements.txt               # Minimal: pyyaml + tqdm
└── LICENSE

~1,900 lines of hand-crafted scoring logic across 15 modules.


Design Decisions

Why rule-based over embeddings/LLMs?

ConsiderationEmbeddingsLLM-basedRule-based (ours)
Detects keyword stuffersNoMaybeYes
Reads career descriptionsShallowYesYes
Catches honeypotsNoNoYes
Evaluates behavioral signalsNoNoYes
Explainable decisionsNoPartiallyFully
Runs in 25s on CPUUnlikelyNoYes
Zero dependenciesNoNoYes
Deterministic outputMostlyNoYes

The JD explicitly says keyword matching is the wrong approach. Embeddings are sophisticated keyword matching. We built something that understands context.

Why these weights?

  • —Title + Skills + Career = 60% — what someone is and what they've done dominates
  • —Career Trajectory at 20% — same weight as skills, because doing ML work matters as much as listing ML skills
  • —Behavioral at 10% — availability is a real constraint; a perfect candidate with 0% response rate is useless
  • —Anti-Pattern at 7% — not a score, but a penalty. Catches the candidates that look good on surface but fail deeper inspection
  • —Education at 5% — matters least for a senior role; career speaks louder than degrees

Key taxonomy numbers

CategoryCount
Titles scored70+
Skills in taxonomy178
Skill aliases mapped50+
Consulting companies tracked54
Product companies tracked80+
AI-native companies20+
Location tiers3
Education field tiers3

AI Tools Declaration

ToolUsage
ClaudeArchitecture discussion, code review, iterative development
Claude CodeDevelopment environment and implementation

No candidate data was fed to any LLM. The ranking system uses zero AI inference — it's purely rule-based scoring with hand-crafted features derived from deep JD analysis.


Testing

$ python -m pytest tests/ -v

tests/test_pipeline.py::test_honeypot_detection               PASSED
tests/test_pipeline.py::test_coarse_filter                     PASSED
tests/test_pipeline.py::test_title_scoring                     PASSED
tests/test_pipeline.py::test_experience_fit                    PASSED
tests/test_pipeline.py::test_full_pipeline                     PASSED
tests/test_pipeline.py::test_tiebreak_correctness              PASSED
tests/test_pipeline.py::test_anti_pattern_consulting_only      PASSED
tests/test_pipeline.py::test_anti_pattern_keyword_stuffer      PASSED
tests/test_pipeline.py::test_career_trajectory_leadership_bonus PASSED
tests/test_pipeline.py::test_reasoning_has_content             PASSED

10 passed in 0.74s

<div align="center">

Built for the India Runs Hackathon 2026 | Track 1: Data & AI Challenge

Team Umbrella.co | Priyanshu

</div>