All projects

AI & ML / Eduvos · ITDAA4 / 2026

Finding patterns in student performance

Find engagement patterns and compare pass/fail models while keeping feature selection and preprocessing inside training-only pipelines.

scikit-learnpandasK-MeansPCA
Confusion matrices generated by a fresh execution of the supplied data-mining notebook

ENGINEERING PERSPECTIVE

Inside the work

Separate descriptive pattern finding from prediction. The notebook explores engagement groups, then asks whether a classifier can predict pass/fail without being handed the outcome through leaked features.

pandas / NumPy
Inspect tabular features, missingness and analytical summaries.
scikit-learn
K-Means/PCA for segmentation; pipelines for train-only imputation, encoding, feature selection and classification.
STEP 1 / 3

Inspect and segment

Explore academic engagement, scale clustering features and use PCA to inspect the resulting groups.

Source-derived walkthrough

What it is

Analyse tutorial attendance and academic performance, segment students with clustering, and compare pass/fail classifiers on a separate AI-usage dataset.

Why it was built

Investigate academic engagement patterns, then compare classification approaches using a separate AI-usage dataset.

My contribution

Individual named/commented notebook, including exploratory analysis, clustering and supervised pipelines. Raw CSV provenance remains unconfirmed and the data is excluded from public publication.

How it works

Use scaled K-Means features and PCA for segmentation. For classification, remove identifier/outcome leakage columns, split 80/20 with stratification, and fit imputation, encoding and SelectKBest inside training pipelines. Compare Logistic Regression and a depth-limited Decision Tree.

  1. 01Clean data
  2. 02EDA / segmentation
  3. 03Stratified split
  4. 04Train-only preprocessing
  5. 05Compare classifiers

Technical implementation

  • Academic analysis uses 1,348 records; the separate AI-usage dataset contains 8,000 rows and 26 columns.
  • K-Means candidates span k=2..8, with k=2 used in the notebook; scaling and PCA support the cluster interpretation.
  • A stratified 80/20 split with random_state=42 precedes training-only imputation, categorical encoding, scaling and SelectKBest(k=15). student_id, final_score and performance_category are excluded from classifier inputs.
  • Logistic Regression and a Decision Tree with max_depth=5 are evaluated on the same held-out split. The positive class is passed.

Analytical case study

ACCURACY94.75%
PASS F10.971
FAIL RECALL71.8%
TEST SIZE1600
TRUE / PREDICTEDFAILPASSFAIL12750PASS341389

Genuine aggregate results from the reproduced notebook. Passed is the positive class; only 177 test examples failed versus 1,423 passed. Overall accuracy and positive-class F1 do not establish equally good failure detection. No student-level records are exposed.

Data contracts and missing values

student_performance.csv: 1348 rows / 13 columns

, academic_year, gender, qualification, study_level, modules, module_credits, grade_average, modules_passed, pass_rate, passed_all_modules, tutorial_classes_attended, tutorial_class_modules

Missing cells: 11. grade_average: 3 · tutorial_classes_attended: 4 · tutorial_class_modules: 4

ai_impact_student_performance_dataset.csv: 8000 rows / 26 columns

student_id, age, gender, grade_level, study_hours_per_day, uses_ai, ai_usage_time_minutes, ai_tools_used, ai_usage_purpose, ai_dependency_score, ai_generated_content_percentage, ai_prompts_per_week, ai_ethics_score, last_exam_score, assignment_scores_avg, attendance_percentage, concept_understanding_score, study_consistency_index, improvement_rate, sleep_hours, social_media_hours, tutoring_hours, class_participation_score, final_score, passed, performance_category

Missing cells: 2708. ai_tools_used: 1362 · ai_usage_purpose: 1346

Column names and aggregate missing-cell counts only. Input provenance/redistribution remains unresolved. Train-only imputation, encoding, scaling and SelectKBest avoid fitting preprocessing on the test data. Target-derived fields and student_id are excluded from predictor inputs.

Results & evidence

  • Fresh local execution reproduced 94.75% Logistic Regression accuracy and 92.8125% Decision Tree accuracy.
  • Rounded historical positive-class F1 scores: 0.971 and 0.960 respectively.

Engineering challenges

Direct outcome columns can leak the target. Strong positive-class scores in an imbalanced dataset can obscure poor detection of the smaller failing class.

Scope & limitations

The positive class is “passed”; these F1/recall values do not directly describe detection of students needing support. A single held-out split is not external validation. Raw datasets remain local pending provenance review.

What I learned

Treat preprocessing as part of the model, interpret metrics in their class context and separate segmentation from predictive validation.

What I would improve now

Record original dataset sources/licences, add cross-validation and class-aware reporting, inspect subgroup performance and avoid operational decisions from an unvalidated coursework model.

NEXT PROJECTConnecting students with tutors