TutorTrace Project Story

Inspiration

Most learning platforms adapt using simple scores or difficulty changes, but they rarely model why a student is struggling. TutorTrace was inspired by the idea that two identical wrong answers can represent completely different learning problems. We wanted to build an adaptive tutor that understands knowledge as a probability, recognizes misconception patterns, checks prerequisite gaps, and explains every learning decision it makes.

What it does

TutorTrace maintains a separate probability of mastery for each skill using Bayesian Knowledge Tracing rather than assigning students a single score. For a correct response, mastery is updated using:

$$ P(L \mid \text{Correct}) = \frac{P(L)(1 - P(S))} {P(L)(1 - P(S)) + (1 - P(L))P(G)} $$

It also considers response time, explicit “I don't know” answers, misconception-tagged distractors, prerequisite weaknesses, and memory decay. Based on these signals, TutorTrace selects the next question using an explainable adaptive policy and tells the learner why that question was chosen. On the teacher side, it aggregates effective mastery across students and highlights class-wide weaknesses that may require intervention.

How we built it

We first fitted Bayesian Knowledge Tracing parameters offline using the ASSISTments 2009–2010 Skill Builder dataset, using 82,550 training interactions and 19,725 test interactions. The resulting parameters initialize TutorTrace's eight-skill learner model, while the live inference engine is implemented in pure Python and exposed through a FastAPI backend.

The core BKT transition follows:

$$ P(L_{\text{next}}) = P(L \mid \text{observation}) + \left(1 - P(L \mid \text{observation})\right)P(T) $$

Around this probabilistic core, we built modular components for response-aware evidence, misconception fingerprinting, prerequisite traversal, explicit uncertainty, exponential memory decay, cold-start diagnostics, and epsilon-greedy question selection. The frontend acts only as a presentation layer—the backend remains the single source of truth for mastery updates and adaptive decisions.

Challenges we ran into

One of the biggest challenges was mapping real ASSISTments skills to our own eight-skill taxonomy without overstating the scientific validity of those mappings. We also had to carefully separate probabilistic mastery from heuristic signals such as misconceptions, response speed, and memory decay so that one signal did not incorrectly corrupt another.

Accomplishments that we're proud of

We built a complete adaptive learning loop rather than just a quiz interface: fitted BKT priors, response-aware mastery updates, misconception tracking, prerequisite pivots, memory decay, explainable question selection, and teacher analytics. We also created extensive unit, API, and end-to-end tests that verify entire learner journeys from cold start to prerequisite diagnosis and recovery.

What we learned

We learned that effective educational AI is not just about generating content; it is fundamentally about modeling the learner's state under uncertainty. We also learned that combining probabilistic ML with interpretable rules and structured reasoning can often produce a system that is more trustworthy, testable, and educationally meaningful than an opaque black-box model.

What's next for TutorTrace

Next, we want to persist learner state in PostgreSQL or Redis, expand the question bank, calibrate response-time and memory-decay models using longitudinal data, and replace the simulated classroom with live student analytics. Longer term, TutorTrace could evolve into a full curriculum-aware learning platform with richer skill graphs, teacher dashboards, spaced revision, and personalized learning pathways.

Built With

Share this project:

Updates

Submission history