Decision support, not a verdict. Risk flags indicate that a student may benefit from timely support and should be reviewed by an educator or advisor. All data shown is synthetic.
Predictions use weeks 1–5 only. Week 2 is the earliest supported.
What this page is for
“Should I reach out to this student, and what would I say?”
Everything below is based only on weeks 1–5. Read it top to bottom: the score, then why the model gave it, then how sure it is, then what you could do.
Risk score
40%
Out of 100 students who behaved like this one, about 40 did not finish.
In plain English
Out of 100 students who behaved like this one, roughly this many did not finish the course.
How it's worked out
The model reads the student's weeks so far and produces a number, which is then corrected (“calibrated”) so the percentage means what it says.
What it tells you
A description of a pattern, not a judgement about a person. A high score means this student's behaviour resembles students who struggled.
Why it's here at all
It gives a teacher a place to start when they have 500 students and time to contact ten.
Confidence
86%
The model was run 30 times and the answers mostly agreed, so this score is stable.
In plain English
How much the model agrees with itself.
How it's worked out
The model is run 30 times with small random changes switched on. If all 30 runs land close together, confidence is high; if they scatter, it's low.
What it tells you
High confidence means the score is stable. Low confidence means the model is genuinely unsure about this particular student.
Why it's here at all
A score with no confidence attached invites more trust than it deserves.
What counts as good
Higher is steadier — but low confidence is honesty, not failure.
Uncertainty
±0.072
Those repeated runs mostly landed within 7 percentage points of each other — moderate spread.
In plain English
The plus-or-minus on the risk score, like the margin of error on a poll.
How it's worked out
How spread out those 30 runs were.
What it tells you
±0.05 means the 30 runs mostly landed within 5 percentage points of each other.
Why it's here at all
It's what turns 'the model is unsure' into something you can act on.
What counts as good
Smaller is steadier.
Needs human review
Not flagged
The repeated runs agreed, and the score isn't sitting on the borderline.
In plain English
The system saying: don't act on me alone for this student.
How it's worked out
Triggered when the 30 runs disagree too much, or when the score sits right on the borderline where a nudge either way would flip the decision.
What it tells you
A prompt to look at the student's situation yourself, not a conclusion.
Why it's here at all
A system that never admits doubt gets trusted in exactly the cases where it shouldn't be.
The same assessment, written out as a teacher would say it.
At week 5, this student shows some early warning signs (risk score 40%). This is an opportunity for a light-touch check-in. The model draws on the whole history so far fairly evenly rather than singling out any particular week. The signals contributing most are that assignments submitted is below the cohort average (1.0 vs 1.3 over weeks 3-5); late submissions is above the cohort average (1.0 vs 0.2 over weeks 3-5); irregularity of study times is above the cohort average (0.57 vs 0.47 over weeks 3-5). On the positive side, course material views is above the cohort average. Model confidence is 86% with moderate uncertainty - repeated stochastic passes agree on this estimate.
How to read this: Each dot is a separate prediction, made using only the weeks up to that point. The shaded band is how much the model wavered — a wide band means unsure, not worse.
Weeks 2–8. The vertical line marks the week you have selected.
In plain English
Out of 100 students who behaved like this one, roughly this many did not finish the course.
How it's worked out
The model reads the student's weeks so far and produces a number, which is then corrected (“calibrated”) so the percentage means what it says.
What it tells you
A description of a pattern, not a judgement about a person. A high score means this student's behaviour resembles students who struggled.
Why it's here at all
It gives a teacher a place to start when they have 500 students and time to contact ten.
How to read this: taller bars are weeks that counted for more in this particular judgement. This comes straight out of the model — it is the model reporting on itself, not a guess about it.
HATF learns its own time windows rather than being given a fixed one. These are the weights it chose for this student — a volatile learner gets read through a short window, a slow drifter through a long one.
Week-to-week swings
Short-term shifts
Slow, sustained trends
How to read this: for each signal we replace it with the cohort average, re-run the model, and see how far the score moves. Bars to the right pushed the risk up; bars to the left pulled it down. This shows what the model is sensitive to — it is not a claim that the behaviour caused anything.
| Signal | This student |
|---|
Supportive actions an advisor could take this week.
GET /students/student_high_risk_001/explanation?week=5{
"student_id": "student_high_risk_001",
"week": 5,
"risk_probability": 0.4018,
"risk_level": "medium",
"confidence_score": 0.8569,
"uncertainty_std": 0.0716,
"uncertainty_level": "moderate",
"requires_human_review": false,
"review_reason": null,
"decision_threshold": 0.26,
"top_attention_weeks": [
{
"week": 5,
"attention_weight": 0.211
},
{
"week": 4,
"attention_weight": 0.2035
},
{
"week": 3,
"attention_weight": 0.1976
}
],
"attention_is_concentrated": false,
"attention_spread": 0.0183,
"attention_weights": [
{
"week": 1,
"weight": 0.1927
},
{
"week": 2,
"weight": 0.1952
},
{
"week": 3,
"weight": 0.1976
},
{
"week": 4,
"weight": 0.2035
},
{
"week": 5,
"weight": 0.211
}
],
"temporal_window_usage": [
{
"scale_weeks": 1,
"label": "1-week window",
"usage": 0.3767
},
{
"scale_weeks": 3,
"label": "3-week window",
"usage": 0.3466
},
{
"scale_weeks": 7,
"label": "7-week window",
"usage": 0.2767
}
],
"top_behavioral_indicators": [
{
"feature": "assignment_submissions",
"label": "Assignments submitted",
"group": "assessment",
"unit": "per week",
"impact_on_risk": 0.1159,
"direction": "increases risk",
"observed_value": 1,
"cohort_average": 1.35,
"observed_display": "1.0",
"cohort_display": "1.3",
"comparison": "below the cohort average",
"window": "weeks 3-5",
"higher_is_better": true,
"concerning_side": true
},
{
"feature": "late_submissions",
"label": "Late submissions",
"group": "assessment",
"unit": "per week",
"impact_on_risk": 0.1092,
"direction": "increases risk",
"observed_value": 1,
"cohort_average": 0.2,
"observed_display": "1.0",
"cohort_display": "0.2",
"comparison": "above the cohort average",
"window": "weeks 3-5",
"higher_is_better": false,
"concerning_side": true
},
{
"feature": "time_of_day_entropy",
"label": "Irregularity of study times",
"group": "temporal",
"unit": "0-1 score",
"impact_on_risk": 0.0235,
"direction": "increases risk",
"observed_value": 0.57,
"cohort_average": 0.47,
"observed_display": "0.57",
"cohort_display": "0.47",
"comparison": "above the cohort average",
"window": "weeks 3-5",
"higher_is_better": false,
"concerning_side": true
},
{
"feature": "cum_missing_activities",
"label": "Missed activities so far",
"group": "assessment",
"unit": "cumulative",
"impact_on_risk": 0.0235,
"direction": "increases risk",
"observed_value": 4.67,
"cohort_average": 2.97,
"observed_display": "4.7",
"cohort_display": "3.0",
"comparison": "above the cohort average",
"window": "weeks 3-5",
"higher_is_better": false,
"concerning_side": true
}
],
"protective_indicators": [
{
"feature": "content_views",
"label": "Course material views",
"group": "activity",
"unit": "per week",
"impact_on_risk": -0.0896,
"direction": "reduces risk",
"observed_value": 11.33,
"cohort_average": 8.41,
"observed_display": "11",
"cohort_display": "8.4",
"comparison": "above the cohort average",
"window": "weeks 3-5",
"higher_is_better": true,
"concerning_side": false
},
{
"feature": "quiz_score_observed",
"label": "Weeks with a graded quiz",
"group": "assessment",
"unit": "0/1 flag",
"impact_on_risk": -0.0641,
"direction": "reduces risk",
"observed_value": 0.67,
"cohort_average": 0.59,
"observed_display": "0.67",
"cohort_display": "0.59",
"comparison": "above the cohort average",
"window": "weeks 3-5",
"higher_is_better": true,
"concerning_side": false
},
{
"feature": "login_count",
"label": "Logins",
"group": "activity",
"unit": "per week",
"impact_on_risk": -0.0394,
"direction": "reduces risk",
"observed_value": 5,
"cohort_average": 4.37,
"observed_display": "5.0",
"cohort_display": "4.4",
"comparison": "above the cohort average",
"window": "weeks 3-5",
"higher_is_better": true,
"concerning_side": false
},
{
"feature": "session_minutes",
"label": "Time on platform",
"group": "activity",
"unit": "minutes/week",
"impact_on_risk": -0.0163,
"direction": "reduces risk",
"observed_value": 19.84,
"cohort_average": 19.62,
"observed_display": "20",
"cohort_display": "20",
"comparison": "above the cohort average",
"window": "weeks 3-5",
"higher_is_better": true,
"concerning_side": false
}
],
"natural_language_explanation": "At week 5, this student shows some early warning signs (risk score 40%). This is an opportunity for a light-touch check-in. The model draws on the whole history so far fairly evenly rather than singling out any particular week. The signals contributing most are that assignments submitted is below the cohort average (1.0 vs 1.3 over weeks 3-5); late submissions is above the cohort average (1.0 vs 0.2 over weeks 3-5); irregularity of study times is above the cohort average (0.57 vs 0.47 over weeks 3-5). On the positive side, course material views is above the cohort average. Model confidence is 86% with moderate uncertainty - repeated stochastic passes agree on this estimate.",
"recommended_actions": [
"Review upcoming assessment deadlines with the student and agree a realistic plan.",
"Offer academic support: office hours, tutoring, or a worked review of recent work.",
"Ask whether their routine has changed - work shifts, caring responsibilities, a timetable clash.",
"Suggest agreeing one fixed study slot a week, and check whether it holds."
],
"method_note": "Important weeks come from the model's attention weights. Indicator impact is measured by occlusion: each signal is replaced with the cohort average and the change in risk is recorded. This shows what the model is sensitive to - it is not a causal claim.",
"responsible_ai_note": "This is a decision-support signal, not a judgement about the student. It highlights a possible opportunity for timely support and should be reviewed by an educator or advisor alongside context the LMS cannot see."
}Attention is effectively uniform here (spread 0.018 across 5 weeks). The model is drawing on the whole history evenly rather than singling out a week, so no week is highlighted — calling one “most important” would be reading noise. This is a known property of the synthetic cohort; see Limitations.
In plain English
How much the model leaned on each individual week when judging this student.
How it's worked out
Read directly out of the model's attention layer — this is the model reporting on itself, not a guess about it.
What it tells you
A tall bar on week 4 means the model's opinion rests heavily on what happened in week 4.
Why it's here at all
It points a teacher at when things changed, not just that they did.
| Cohort |
|---|
| Effect |
|---|
Assignments submitted Assessment | 1.0 | 1.3 | +11.6% |
Late submissions Assessment | 1.0 | 0.2 | +10.9% |
Irregularity of study times Timing | 0.57 | 0.47 | +2.4% |
Missed activities so far Assessment | 4.7 | 3.0 | +2.4% |
Course material views Activity | 11 | 8.4 | -9.0% |
Weeks with a graded quiz Assessment | 0.67 | 0.59 | -6.4% |
Logins Activity | 5.0 | 4.4 | -3.9% |
Time on platform Activity | 20 | 20 | -1.6% |
Values averaged over weeks 3-5.
Before you act
How this was computed