№ 02
Hệ thống cảnh báo sớm nguy cơ bỏ học — tích hợp vào nền tảng e-learning
№ 02
Demo Day Zine
TÀI LIỆU TỔNG HỢP — EDU-GUARD.AI Hệ thống cảnh báo sớm nguy cơ bỏ học sinh viên
PHẦN 1 — BỐI CẢNH VÀ VẤN ĐỀ Vấn đề thực tế: Tỷ lệ sinh viên bỏ học trên các nền tảng MOOC trực tuyến lên tới 76% (dữ liệu XuetangX — KDD Cup 2015, 157,943 lượt ghi danh). Sinh viên rời đi mà không có tín hiệu cảnh báo, gây lãng phí nguồn lực đào tạo và giảm chất lượng giáo dục tổng thể.
Hệ thống hiện tại: Các trường đang sử dụng phương pháp bị động — chỉ phát hiện bỏ học sau khi sinh viên đã ngừng hoàn toàn. Thiếu cơ chế phân tích hành vi thời gian thực, thiếu khả năng dự đoán sớm, và không có công cụ hỗ trợ cố vấn ra quyết định can thiệp.
EDU-GUARD giải quyết bằng cách: Kết hợp Machine Learning (CatBoost + CNN) và Survival Analysis (DeepSurv) để dự đoán xác suất bỏ học VÀ thời điểm bỏ học từ log hành vi 28 ngày đầu, kèm giải thích bằng AI (SHAP + Grad-CAM + LLM).
Người dùng cuối: Cố vấn học tập (Academic Advisor) — người trực tiếp liên hệ và hỗ trợ sinh viên; và Ban Giám hiệu (School Administrator) — người giám sát tỷ lệ rủi ro toàn trường.
PHẦN 2 — KIẾN TRÚC HỆ THỐNG 2.1 Stack kỹ thuật Tầng Công nghệ Frontend Next.js 16, React 19, Tailwind CSS v4, Framer Motion, Recharts, Lucide Icons Backend FastAPI (Python), Uvicorn, Pydantic v2 ML Models CatBoost (classification), CNN 1D (Keras/TensorFlow — feature extractor), DeepSurv (pycox/PyTorch — survival analysis), XGBoost, Random Forest Explainability SHAP TreeExplainer, Grad-CAM, DeepSeek API (LLM synthesis) Data XuetangX MOOC Dataset (KDD Cup 2015): 157,943 enroll_id, ~8 triệu log events 2.2 Luồng dữ liệu Bước 1: CSV thô (log hành vi + thông tin khóa học + thông tin sinh viên) → Bước 2: Merge & Feature Engineering — trích xuất 30+ tabular features trong cửa sổ 28 ngày + CNN 3D tensor (28 ngày × 15 loại hành động) → Bước 3: CNN Feature Extraction — trích xuất 64-dim behavioral embedding từ lớp feature_extractor → Bước 4: Classification — CatBoost VIP nhận vector VIP (tabular + 64 CNN dims) để phân loại risk score → Bước 5: Survival Analysis — DeepSurv dự đoán đường cong sinh tồn S(t) tại 4 mốc landmark (5/7/14/21 ngày) → Bước 6: Explainability — SHAP (top-5 yếu tố), Grad-CAM (ngày nguy hiểm), LLM tổng hợp báo cáo tiếng Việt cho advisor.
2.3 Các thành phần chính Component Vai trò Inference Pipeline (inference.py) Điều phối toàn bộ luồng từ merge data đến output cuối cùng Feature Engine (features.py) Tạo tabular features và CNN 3D tensor từ raw log Survival Pipeline (survival.py) Dự đoán đường cong sinh tồn với 4 mốc landmark DeepSurv riêng biệt Explainability Engine (explainability.py) SHAP + Grad-CAM + LLM streaming giải thích cho từng sinh viên LMS Simulator (simulator_service.py) Sinh dữ liệu giả lập bằng Markov Chain + KDE, kết nối trực tiếp in-memory vào pipeline Dashboard Frontend (Next.js) Giao diện cho advisor: danh sách sinh viên, trang chi tiết, biểu đồ survival, AI report PHẦN 3 — CÁC MODEL AI CatBoost-VIP (Model classification chính)
Bài toán: Phân loại sinh viên có bỏ học hay không dựa trên hành vi 28 ngày đầu Input: Vector VIP = tabular features (30+ cột) + 64 CNN dims Output: risk_score (0–1), risk_level (High/Medium/Low), predicted_dropout (True/False) Kết quả: Threshold tối ưu (F1-optimized) = 0.2484; được chọn làm model chính trong 5 models vì đạt ROC-AUC cao nhất Giới hạn: Khi observation window < 7 ngày, AUC chỉ đạt 0.54–0.62 (không đáng tin) CNN Feature Extractor (Keras 1D-CNN)
Bài toán: Trích xuất đặc trưng hành vi thời gian (temporal behavioral patterns) từ chuỗi log 28 ngày Input: Tensor 3D — shape (N × 28 × 15 action types) Output: 64-dim embedding vector từ lớp feature_extractor (Dense 64, trước sigmoid) Kết quả: Kiến trúc Conv1D(64,5) → Conv1D(128,3) → GlobalAveragePooling → Dense(128) → Dense(64); trained với Focal Loss (gamma=2.0, alpha=0.25) Giới hạn: Không trực tiếp interpretable — cần Grad-CAM để giải thích cho advisor DeepSurv (pycox CoxPH — 4 landmark models)
Bài toán: Dự đoán xác suất sinh viên còn tham gia học tại mỗi mốc thời gian — trả lời "khi nào" thay vì chỉ "có/không" Input: Vector VIP (giống CatBoost) cho mỗi landmark riêng biệt Output: Đường cong S(t) tại các mốc ngày, median_survival_day, urgency_days_left, steepest_drop_period Kết quả: C-index (test, n=5,000) = 0.7231 cho model tổng hợp ban đầu; 4 landmark models (L=5, 7, 14, 21) được train riêng biệt với MLP [256, 128, 64] Giới hạn: Sinh viên có observation < 5 ngày bị skip (không đủ dữ liệu cho survival analysis); landmark_14 có precision thấp (0.528) do event rate thấp tại mốc này LLM Explainer (DeepSeek API)
Bài toán: Tổng hợp kết quả SHAP + Grad-CAM thành báo cáo tiếng Việt 3 mục cho advisor Input: Top-5 SHAP features, day importance peaks từ Grad-CAM, risk score, survival info, confidence flag Output: Báo cáo 3 phần: (1) Phân tích rủi ro, (2) Các yếu tố chính, (3) Đề xuất can thiệp Kết quả: TTFT trung bình 15.7s (range: 13.6s – 17.7s); có retry mechanism (tenacity, 3 attempts) Giới hạn: Latency cao (> 13s TTFT); phụ thuộc API bên ngoài; max_tokens = 1200 đôi khi gây cắt nội dung PHẦN 4 — OUTPUT CHO ADVISOR Dashboard list view: Hiển thị tổng quan gồm 4 stat cards (Tổng sinh viên, High Risk, Medium Risk, Low Risk). Bảng danh sách sinh viên có thể sort theo risk score, filter theo urgency tier (Khẩn cấp / Theo dõi sát / Ổn định). Mỗi dòng hiển thị: enroll_id, risk_score, risk_level, urgency_tier, active_days, late_start_days.
Trang chi tiết sinh viên (StudentDrawer):
Risk Score gauge với màu sắc theo mức (đỏ/vàng/xanh) Confidence flag ("ok" hoặc "low" nếu < 7 ngày dữ liệu) Biểu đồ Survival Curve (Recharts LineChart) hiển thị S(t) tại 4 mốc (ngày 5, 7, 14, 21) Median survival day & urgency_days_left SHAP Top-5 yếu tố ảnh hưởng (tên tiếng Việt + giá trị thực + so sánh trung bình lớp) AI Report 3 mục (streaming LLM) với nút refresh Feedback form: "Hữu ích / Không hữu ích" + ghi chú hành động advisor Urgency tier matrix (3 mức):
Tier Điều kiện Nhãn Khẩn cấp risk_score ≥ 0.70 VÀ urgency_days_left < 10 ngày Cần can thiệp trong 48h Theo dõi sát risk_score ≥ 0.70 VÀ (urgency_days_left ≥ 10 HOẶC không xác định) Theo dõi hàng tuần Ổn định risk_score < 0.70 Không cần hành động ngay Lưu ý: Nếu confidence_flag = "low" (< 7 ngày dữ liệu), hệ thống tự động hạ 1 bậc urgency.
PHẦN 5 — KẾT QUẢ VÀ SỐ LIỆU Model performance:
CatBoost-VIP Threshold tối ưu (F1): 0.2484 DeepSurv C-index (test, n=5,000): 0.7231 4 Landmark models: L=5, L=7, L=14, L=21 (train riêng biệt, kết quả evaluation qua External Test Set) Landmark_14 precision: 0.528 (thấp nhất, cần cải thiện) System performance (batch 500 sinh viên — dữ liệu thực):
Tổng pipeline: 12.827s engineer_tabular: 0.529s build_cnn_tensor: 0.135s cnn_extractor_predict: 1.868s classification_predict_proba: 0.195s predict_batch_survival: 9.846s ensemble_and_urgency: 0.021s LLM TTFT trung bình: 15.7s (13.6s – 17.7s) Dataset:
Tổng enroll_id: 157,943 Nguồn: XuetangX MOOC — KDD Cup 2015 Tỷ lệ dropout: 76% Cửa sổ quan sát: 28 ngày đầu (DAYS_CUTOFF = 28) Dropout median last active: ngày 17 PHẦN 6 — HÀNH TRÌNH PHÁT TRIỂN Vấn đề ban đầu: Phát hiện tỷ lệ bỏ học MOOC lên tới 76% nhưng không có công cụ nào dự đoán sớm — advisor chỉ biết khi sinh viên đã hoàn toàn biến mất.
v1 — MVP:
5 classification models (RF, XGBoost, CatBoost Tab/VIP, XGB VIP) + CNN Feature Extractor Batch prediction API + Next.js Dashboard + JWT Authentication Upload 3 file CSV → nhận danh sách risk score v2 — Production-ready (cải tiến so với v1):
Tích hợp DeepSurv Survival Analysis với 4 landmark models (L=5/7/14/21) — trả lời "khi nào" thay vì chỉ "có/không" Full Explainability Pipeline: SHAP TreeExplainer + Grad-CAM + LLM streaming LMS Simulator tích hợp Markov Chain + KDE, kết nối trực tiếp in-memory vào AI pipeline Fix Data Leakage: chuyển từ Random Split sang Time-based Split Urgency Tier matrix 3 mức (Khẩn cấp / Theo dõi sát / Ổn định) Drift Monitoring script offline + Automation Retrain Pipeline 12+ bug fixes (Event loop blocking, Race condition, Cache eviction, LLM truncation, Session key isolation) Roadmap tiếp theo:
Cải thiện landmark_14 precision (0.528 → target > 0.7) Retrain sau khi sửa ratio features (eps → np.where) Tích hợp database PostgreSQL để lưu lịch sử prediction Giảm LLM TTFT xuống < 3s PHẦN 7 — ĐIỂM NỔI BẬT KỸ THUẬT Time-based Split thay vì Random Split — Dataset có sinh viên nhập học theo 9 cohort thời gian; Random Split gây data leakage temporal. Kết quả: model phải dự đoán "tương lai thực sự", phản ánh đúng hiệu năng production.
CNN Feature Extraction (lớp L-1) thay vì dùng output cuối — Lấy 64-dim embedding từ lớp Dense trước sigmoid, chứa temporal representation phong phú hơn 1 scalar probability. Ghép vào tabular features tạo thành vector VIP cho CatBoost, đạt AUC cao nhất trong 5 models.
Multi-Landmark DeepSurv thay vì 1 model duy nhất — Train 4 model riêng biệt (L=5/7/14/21), mỗi model chỉ nhận sinh viên at-risk tại mốc tương ứng. Hệ thống tự động routing sinh viên đến landmark phù hợp nhất dựa trên số ngày quan sát thực tế.
Direct In-Memory Pipeline cho Simulator — Dữ liệu sinh ra từ LMS Simulator không ghi file CSV, truyền thẳng DataFrame vào AI pipeline qua run_prediction_pipeline(). Loại bỏ hoàn toàn disk I/O, giảm latency và tránh orphan session key.
Urgency hạ bậc tự động khi dữ liệu ít — Khi observation < 7 ngày (confidence_flag = "low"), hệ thống tự động hạ 1 bậc urgency tier. Tránh false alarm cho advisor khi model chưa có đủ signal.
PHẦN 8 — HẠN CHẾ VÀ HƯỚNG CẢI THIỆN LLM Latency cao (TTFT > 13s): Advisor phải chờ trung bình 15.7s để nhận token đầu tiên từ AI Report — vượt xa ngưỡng UX tiêu chuẩn (< 3s). Hướng xử lý: Chuyển sang model nhẹ hơn (DeepSeek V4 Flash), pre-compute explanation cho batch, hoặc cache kết quả LLM theo session.
Stateless Frontend — mất dữ liệu khi F5: Dashboard lưu danh sách sinh viên trên React State, không có API GET để fetch lại từ session_key. Refresh trang → mất toàn bộ kết quả. Hướng xử lý: Xây dựng API /batch/{sessionKey} hoặc tích hợp PostgreSQL để persist prediction results.
Landmark_14 precision thấp (0.528): Cohort at-risk tại mốc 14 ngày có event rate thấp, khiến model khó phân biệt. Hướng xử lý: Tăng train samples, thử threshold riêng cho từng landmark thay vì dùng chung 0.70.
Phụ thuộc vào cấu trúc CSV cố định: Hệ thống yêu cầu đúng 3 file CSV (log, course_info, user_info) với schema cụ thể. Không hỗ trợ LMS API trực tiếp hay định dạng dữ liệu khác. Hướng xử lý: Xây dựng adapter layer hỗ trợ nhiều nguồn dữ liệu (Moodle API, Canvas LMS, v.v.).