Problem Statement
Students with the same quiz score can need very different help. Fixed curricula ignore response time, confidence, and prior performance, so a student who guessed correctly and one who truly understood the topic get the same next step. This project turns those learning signals into individual study recommendations.
Proposed Solution
The app takes quiz inputs and evaluates them with either a rule-based engine or a decision tree classifier. It returns a recommendation, the next topic, a practice count, and a revision flag, explains the reasoning behind each result, and compares both methods in a Streamlit dashboard.
Key Features
- Rule-based recommendation engine using score thresholds, response time, confidence, and previous score.
- Decision tree training and prediction pipeline for personalized recommendations.
- Explainability output showing the reasoning steps and the decision tree's split path.
- Interactive Plotly dashboards for topic performance, recommendation distribution, score trends, and student-versus-dataset comparison.
- Evaluation module comparing the rule-based engine and the decision tree using standard classification metrics.
- Synthetic dataset generator for model training and experimentation.
System Architecture Flow
Engineering Challenges
- Rules, helpers, and the dataset generator could drift apart, so score and time thresholds are centralized in one helper module.
- Overfitting on a small synthetic dataset was reduced with noisy label generation and a maximum tree depth of 4.
- Prediction reliability was improved by saving the trained model, auto-training it if missing, and keeping the feature order fixed between training and prediction.
Lessons Learned
- Designing transparent AI that can be explained to a non-technical user instead of a black-box prediction.
- Balancing rule-based logic with machine learning so the system stays interpretable and testable.
- Leading a three-person team, dividing work across the recommendation engine, UI, and documentation.
Results
On the project's synthetic dataset: the decision tree reached about 85% accuracy (F1 about 0.84) compared with about 80% accuracy (F1 about 0.79) for the rule-based engine.