One in three students who enrol online never finish, and institutions usually notice too late. This system predicts dropout risk from week 2 of 8, explains every score in behaviours an advisor can check, and says out loud when it doesn’t know.
100% synthetic data Trains on a CPU No cloud, no login, no PII 110 tests passing
student_high_risk_001
Held-out test student · week 8 of 8
Six weeks of warning. The score crossed the flag line in week 2 and kept climbing. This student did not finish — and the model never trained on them.
0.789
ROC-AUC at week 2
Early enough to act on
0.876
ROC-AUC by week 8
Useful early, better later
28.4%
Sent to a human
Rather than guessing
0.038
Calibration error
0.30 really means ~30%
The problem
Four constraints decide the whole design. Every engineering decision traces back to one of them.
95% accuracy in the final week is useless — the student has gone. Performance is reported per week, never pooled into one flattering number.
Week 3 predicted with week 7 data gives beautiful metrics and a worthless system. Causality is enforced in the architecture and proved by tests.
Missing a struggling student is a real harm; an unnecessary check-in costs five minutes. The threshold is tuned on F2, capped at a 40% flag rate.
A score without a reason can’t be argued with or overruled. No endpoint does anything to a student, and the language is supportive by contract.
The system
Synthetic LMS logs in, a triage list an advisor can work through on a Monday morning out.
500 students, 8 weeks, 7 behavioural archetypes.
25 weekly features, every one from weeks ≤ t.
59,951 parameters serve every prediction week.
Nine FastAPI endpoints with OpenAPI docs.
Triage, reasoning, fairness and a model card.
Which behaviours moved the number, in real units against the cohort average — with safeguards that stop the explanation contradicting itself.
Monte Carlo Dropout escalates 28.4% of predictions for human review instead of guessing.
Fairness across gender, age group and academic background — published including the parts that did not work.
Eleven models trained under identical conditions, and the comparison published even though HATF loses.
Inside the model:multi-scale causal convolutions (k = 1/3/7)unidirectional LSTMmasked temporal attentionMC-dropout head, 30 passes
Results
Measured on held-out test students (500 students × 8 weeks, seed 42) and regenerated by every pipeline run.
Bars start at 0.700, not zero, so the trend is visible. Each week uses only weeks 1..t, and this synthetic task tops out around 0.91 — so the curve is close to its ceiling from week 4 onwards.
The intervals are the result. The test split is 83 students and the bootstrap resamples at the student level. Wide intervals are a real property of this POC, not something to round away.
The uncomfortable part
Eleven models, identical splits, seed, class weighting, calibration and threshold. A baseline table you only publish when you win is not a baseline table.
| Model | ROC-AUC | Params |
|---|---|---|
| Transformer | 0.875 | 40,449 |
| CNN | 0.870 | 8,321 |
| LSTM | 0.869 | 28,097 |
| Attention-CNN | 0.866 | 20,081 |
| CNN-LSTM | 0.863 | 38,529 |
| HATF (fixed windows) | 0.857 | 59,873 |
| Random Forest | 0.854 | — |
| Logistic Regression | 0.853 | — |
| SVM | 0.845 | — |
| HATF (proposed) | 0.845 | 59,951 |
Best-to-worst spread is 0.030 AUC; the 95% interval on any single model is about ±0.05. Eighty-two test students cannot rank eleven architectures. Capacity is also mismatched — 59,951 parameters against 320 training students, while a CNN gets within 0.03 on 8,321. On the 1,200-student profile HATF moves from last to 6th.
A product reason, not a metric one. At statistically indistinguishable accuracy it is the only model here that also produces attention, adaptive-window usage and MC-dropout uncertainty — everything the explanation layer and the review rule are built on.
0.000000
Counterfactual invariance
Every demographic of every test student rewritten, the model re-run. Largest change: zero.
No change
From the fairness penalty
It moved every held-out gap by 0.0000. A free no-op rather than a trade-off — reported as one.
Run it
Everything runs locally on CPU. No API keys, no database, no login — the whole pipeline takes about ninety seconds.
make install # venv + dependencies
make pipeline # data → features → train → predict
make api # http://localhost:8000/docs
make web # http://localhost:3000Windows: .\make.ps1 — or docker compose up --build to skip the toolchain.
The dashboard is a pure client of this API — it holds no model and no data of its own.
The research
Jha · Mathur · Purohit · Soni · Singhal · Joshi — PiCET-2026, in press with IET Conference Proceedings (Scopus). The paper reports F1 94.2% and AUC 96.1% on 7,935 real students; this POC runs on synthetic data and reports its own numbers, so the two are not comparable. What it delivers is one of the paper’s own future-work items — the dashboard that gets the prediction in front of an educator in time.