Attrition target list — Overtime OFF · cut-off: High & above
OVERTIME OFF
2
ON TARGET LIST
Colour bands, never raw scores — the same privacy rule the real app follows. Toggle Overtime and watch the list swell and redden: in this data, working overtime raises attrition from ~10% to ~30%.
drag: risk cut-off
▶ Open the live app

See it: who's on the list, live

This is the shape of the real app, running right here on the page — no video, no screenshot. Each row is an anonymised employee (Rec-####, never a name), banded LowMediumHighVery High by attrition risk, and sorted so the people to talk to first sit at the top. Flip Overtime on and the target list grows as the model's strongest driver kicks in; drag the cut-off to decide how wide to cast the net. The score itself is never shown — a manager sees who and how urgent, not a number to argue with.

Role
Solo — data engineering, ML, decision-support app
Dataset
IBM HR Employee Attrition — 1,470 employees, 237 left (16.1%)
Stack
Python, pandas, scikit-learn, 8-model benchmark, self-contained HTML app
Champion
Logistic Regression — recall-first (68% recall, fully interpretable)
Status
Deployed · attrition.aegishumanai.com

Attrition is expensive and quiet. A good employee doesn't leave on a Tuesday out of nowhere — the signal builds for months in things HR already records: overtime, pay position, how long since the last promotion, tenure, distance from home. The question this project answers is the one a manager actually acts on: who, right now, is most likely to leave — and therefore worth a retention conversation this quarter? Not a verdict, not a number on someone's file — a ranked, privacy-safe shortlist.

The data

Source: IBM's widely used HR Analytics Employee Attrition dataset — 1,470 employees across Research & Development, Sales, and Human Resources, each described by 30-plus attributes (income, role, overtime, tenure, satisfaction, commute) with a Yes/No attrition label. It is imbalanced by nature: only 237 employees (16.1%) left, which is exactly why headline accuracy is a trap — a model that predicts "nobody leaves" scores 84% and is useless.

Overtime is the loudest signal — and it's real. In this data, employees working overtime leave at 30.5% versus 10.4% for those who don't — nearly triple. That is why the live app makes Overtime a first-class toggle, and why the demo above reshapes the whole list the moment you flip it.

Eight models, one honest leaderboard

Every model was tuned by a genuine hyperparameter search inside the reusable AEGIS model-execution framework, then ranked on the full picture — accuracy, precision, recall, F1, ROC-AUC and MCC — not a single flattering metric. The board below is ordered by ROC-AUC:

RankModelAccuracyPrecisionRecallF1ROC-AUCMCC
1CatBoost80.3%0.4180.5960.4910.80950.383
2Extra Trees84.4%0.5110.5110.5110.80730.418
3Logistic Regression  ★ served78.9%0.4050.6810.5080.80690.406
4SVM85.0%0.5710.2550.3530.80240.311
5Random Forest84.0%0.5000.3400.4050.79280.324
6LightGBM85.4%0.5830.2980.3940.78930.345
7XGBoost85.0%0.5650.2770.3710.78590.322
8HistGradientBoosting85.4%0.5770.3190.4110.76940.354

Why Logistic Regression ships — even at rank 3

On raw ROC-AUC the boards are a photo finish: CatBoost (0.8095), Extra Trees (0.8073) and Logistic Regression (0.8069) are separated by a rounding error. So the tie-breaker is the job. This is a retention target list — its whole value is catching the people who will actually leave, so the metric that matters is recall. And on recall it isn't close:

Logistic Regression catches 68% of real leavers — versus 60% for CatBoost and 51% for Extra Trees. It flags more of the people you'd otherwise lose, and it does so with a fully interpretable linear model whose reasons a manager can actually be told. Higher-accuracy tree models here buy their headline number by predicting "stays" more often — precisely the wrong bias for a list whose purpose is not to miss anyone.

This is the site's recurring discipline in one decision: transparency over accuracy theater. The flashiest number (85% accuracy) is left on the table on purpose, because it would mean quietly missing half the at-risk employees. The champion is named for the decision it serves, and the honest board above shows exactly what that choice costs and buys.

Built as a decision tool, not a scoreboard

Names never appear. Every employee is a neutral Rec-#### tag; the app carries no PII. It is a prioritisation aid for a manager who already knows their team, not a surveillance list.
Bands, not scores. The raw probability is deliberately hidden — the interface shows a colour band (Low → Very High) and a rank, so the conversation is "who do I check on first," not "why is Alice a 0.62." Risk is a prompt to talk, not a verdict to enforce.
Scope it, then act. Two pull-downs, an Overtime toggle and sliders build the view; the list re-sorts by risk and can be exported to CSV for the managers who own the follow-up. Viewers are read-only.
Self-contained and always-on. The whole app is a single HTML file — the champion's logic baked in, no server round-trip, nothing to spin down — served on its own subdomain behind the same always-on infrastructure as the rest of the AEGIS apps.

Why the visual matters

A probability is easy to nod at and forget. Binding it to a ranked, colour-banded list of real seats — with the single strongest driver (overtime) under the manager's thumb — turns "16% baseline attrition" into "these five people, this month, starting with the two in red." The point of the project is pre-emptive retention, and the interface is built to make the next conversation obvious.

📬 Get new-app alerts Contact us