Educational platforms such as OpenStax organize textbook content according to official learning standards. Manually assigning standards to thousands of sections is slow, subjective, and difficult to scale.
In this project, we frame the task as a text classification problem:
Given a textbook section, automatically predict the most appropriate educational standard.
Our system processes hierarchical textbook data, extracts meaningful textual representations, trains lightweight machine-learning models, and generates predictions for previously unseen textbook content.
Input: textbook sections stored in hierarchical JSON format
Output: predicted educational standard code (e.g., HSG.CO.A.1)
Task type: multi-class text classification
Evaluation metric: classification accuracy
Goal: reduce manual labeling effort and improve consistency across curricula
Data comes from the OpenStax Education Track challenge.
Two JSON files are provided:
training.json — labeled sections from three textbooks
testing.json — an unseen textbook used for evaluation
Each section is associated with one or more standards.
We flatten the hierarchy:
Book → Concept → Domain → Cluster → Item → Standard
into structured rows for modeling.
Traverse the nested JSON structure
Extract:
section description/text
hierarchical context (book, concept, domain, cluster)
identifiers and URLs
Construct rows:
(id, model_text, label)
Convert text into numeric features using TF-IDF
Include unigrams and bigrams
Filter rare/common tokens
Normalize formatting
Baseline:
Logistic Regression
Improvements:
Add hierarchical context into text input
Linear Support Vector Machine (LinearSVC)
Class weighting for rare standards
Hyperparameter tuning via cross-validation
Stratified cross-validation on training set
Book-level hold-out simulations
Accuracy comparison between baseline and tuned models
Error analysis across similar standards
Strong baseline accuracy with simple models
Adding hierarchical context consistently improved performance
Linear SVM slightly outperformed logistic regression
Most errors occurred between highly similar standards
Distribution of predicted standards
Validation accuracy across tuning experiments
Model-wise performance comparison
(See outputs/ for charts.)
datathon-openstax/ │ ├── data/ │ ├── training.json │ └── testing.json │ ├── src/ │ ├── flatten_openstax.py │ ├── ingest_to_mongo.py │ ├── train_baseline.py │ ├── train_tuned.py │ ├── report_metrics.py │ └── gemini_explain.py │ ├── outputs/ │ ├── predictions.csv │ ├── tuning_results.csv │ └── chart_*.png │ ├── README.md └── requirements.txt
pip install -r requirements.txt
python src/ingest_to_mongo.py
Baseline:
python src/train_baseline.py
Tuned model:
python src/train_tuned.py
python src/report_metrics.py
After running the pipeline:
outputs/predictions.csv — final submission file
outputs/tuning_results.csv — hyperparameter experiments
outputs/chart_*.png — performance visualizations
✅ GitHub repository with reproducible code ✅ predictions.csv submission file ✅ Performance plots ✅ Presentation slides ✅ 2–3 minute demo video
Saves educators time when aligning curriculum
Improves consistency across textbooks
Enables scalable educational publishing
Can extend to multilingual textbooks
Transformer-based language models
Multi-label classification
Modeling hierarchical standards
Active learning for rare classes
Cross-language generalization
Tugba Irem Demirci — Modeling & Data Pipeline Ayse Sule Ekiz — Presentation, Storytelling & Packaging