Hiện nay, đa phần các sinh viên ở trường đại học hay gặp phải các vấn đề lo âu. Sự khủng hoảng về mặt tâm lý có thể gây nguy hiểm đến sức khỏe của học sinh. Mục đích của project này là thống kê và phân tích xem những yếu tố nào đang gây ra sự trầm cảm đối với học sinh.
Bên cạnh đó, để dự đoán tình trạng của một sinh viên có trầm cảm hay không, project sẽ sử dụng mô hình phân loại Logistic Regression và dựng một trang web để người dùng có thể tương tác.
Source code:
Dataset
- Dữ liệu của project được lấy từ Kaggle. Bộ dữ liệu này được thu thập bởi một cuộc khảo sát do sinh viên Đại học thực hiện trên Google Forms nhằm kiểm tra tình hình học tập và sức khỏe tâm thần hiện tại của họ.
- Link: Dataset
Data Exploration
- Ngôn ngữ chính được mình sử dụng là Python và phân tích trên Google Colab.
- Trước khi phân tích một dữ liệu nào đó, ta phải nhìn sơ qua thông tin về tập dữ liệu.
- Dữ liệu sẽ gồm các cột sau đây, đây là những cột trên form khảo sát.
- Timestamp
- Choose your gender
- Age
- What is your course?
- Your current year of Study
- What is your CGPA?
- Marital status
- Do you have Depression?
- Do you have Anxiety?
- Do you have Panic attack?
- Did you seek any specialist for a treatment?
- Đọc dữ liệu này trong Python bằng
pd.read_csv
và xem 5 hàng đầu tiên của dữ liệu, ta thấy: - Sử dụng
.info()
để xem chi tiết về data (kiểu dữ liệu, shape, null, ..)
Data Cleaning
- Để việc phân tích chính xác và ý nghĩa, ta phải thực hiện các bước làm sạch dữ liệu.
- Để thực hiện các làm sạch, chúng ta phải thực hiện các bước như sau:
- Đổi các tên cột thành một dạng nhất quán để thuận tiện cho việc phân tích.
- Kiểm tra xem dataset có null không và fill null (nếu có). Ở dataset này, sẽ có một dữ liệu null và mình đã fill nó bằng giá trị trung bình của features tương ứng.
- Kiểm tra xem dataset có duplicated không? Nếu có, ta phải drop nó đi. Ở dataset này, hiện không có dữ liệu bị trùng lặp.
- Những giá trị không nhất quán về kiểu dữ liệu, ta cần phải xử lý.
- Ở cột
year
, có những bạn học sinh nhập year, có bạn nhập Year. Để thống nhất cho việc phân tích, mình chỉ giữ lại số biểu thị năm học (1,2,3,4,…). - Ở cột
cgpa
, có thông tin bị vướng khoảng trắng'3.50 - 4.00'
và'3.50 - 4.00 '
. - Mình cũng cắt bỏ bớt thông tin giờ phút điền form của học sinh, chỉ giữ lại ngày tháng năm điền.
- Ở cột
- Ngoài ra, để dễ dàng cho thống kê hay sử dụng các phương pháp nâng cao như Machine Learning, chúng ta nên encoder các biến phân loại (ở dây là những biến chứa Yes/No,…)
- Sau khi làm sạch các bước trên đã nêu, data của mình sẽ trông như sau:
Descriptive Statistics Analysis
Project này mình sẽ chia thành 2 phần: phân tích thống kê và dự đoán. Bây giờ mình sẽ thực hiện quy trình phân tích trước nhé !
Ở quá trình này, mình sẽ thực hiện quy trình EDA, vẽ các biểu đồ và thực hiện thống kê để trả lời cho một số key question.
Data Analysis Process
Những kết quả mà mình đã thực hiện được tóm tắt như sau:
- Khảo sát được thực hiện trong 10 ngày, từ ngày 8/7/2020 đến ngày 18/7/2020. Độ tuổi trung bình của sinh viên tham gia là 20 tuổi.
- Trong khảo sát trên, có 101 sinh viên đã tham gia từ năm 1 đến năm 4. Trong đó, sinh viên năm 1 và năm 2 chiếm tỉ lệ nhiều nhất:
- Mặc dù phần trăm tham gia khảo sát của sinh viên năm 3 không nhiều nhưng tỉ lệ khủng hoảng (panic) của họ là nhiều nhất (gần phân nửa sinh viên năm 3 tham gia khảo sát có triệu chứng khủng hoảng).
- Sinh viên nữ chiếm đa số trong tổng số người tham gia khảo sát (74,3%). Tuy nhiên, tỉ lệ khủng hoảng ở hai giới tính lại chênh lệnh không nhiều.
- Dựa trên CGPA, có thể thấy nhóm sinh viên có GPA từ 3.00-4.00 chiếm đa số ở triệu chứng lo âu, khủng hoảng và trầm cảm.
- Trong những sinh viên có triệu chứng trầm cảm, thì những bạn học ngành Engineering có số lượng nhiều nhất.
- Đa số những người không có triệu chứng lo âu hay khủng hoảng thì sẽ không trầm cảm.
- Điều đặc biệt trong cuộc khảo sát này là tất cả những sinh viên đã kết hôn đều trầm cảm.
- Hầu hết những người trầm cảm chưa từng tìm kiếm giải pháp chữa trị (82,9% những người trầm cảm chưa từng điều trị).
Summary
- Qua những phân tích và thống kê ở trên, ta có thể rút ra một số kết luận quan trọng.
- Từ đó, nhà trường có thể đưa ra những giải pháp để làm giảm những tình trạng gây ảnh hưởng đến sức khỏe tinh thần của sinh viên.
Forecasting Depression
- Ở phần này, mình sẽ sử dụng lại data đã được làm sạch trước khi thống kê để áp dụng mô hình.
- Vì mục đích chính của mình là dự đoán sinsh viên trầm cảm dựa trên các thông tin mà họ cung cấp. Do đó, mình sẽ sử dụng thuật toán phân loại Logistic Regression.
Feature Engineering
Do chúng ta muốn xem liệu cgpa có tác động đến trầm cảm hay không. Do đó, trước khi áp dụng mô hình ta cần Encoder các khoảng cpga thành các giá trị (0-4).
Sự tương quan của các features được thể hiện như sau:
Feature Selection - Split Dataset
- Lựa chọn các biến features, target và chia tập dữ liệu tỉ lệ là 80/20.
Train - Predict - Evalute Model
- Sau khi train model xong, ta sẽ đánh giá các thông số của mô hình.
- Với dataset này thì model có score là 76,19%. Các chỉ số precision, recall, F1 được thể hiện như hình.
- Vì như tìm hiểu ở trên, biến kết hôn sẽ ảnh hưởng khá lớn đối với label 1 (trầm cảm). Do đó, với dataset trên thì việc model dự đoán có xu hướng bias nếu người dùng lựa chọn đã kết hôn.
- Nếu muốn model có thể chính xác hơn thì tương lai có thể thu thập thêm data, tạo data ảo sao cho dữ liệu vẫn được balanced,…
Model Serving
- Để cho mọi người có thể sử dụng model dự đoán mà mình đã build ở trên, mình sẽ sử dụng thư viện
joblib
để lưu model lại và sử dụng nó dưới dạng website. - Mình sẽ sử dụng
streamlit
của python, một thư viện có thể giúp mình tạo ra giao diện web một cách đơn giản. - Giao diện web của mình sẽ trông như thế này:
Link website: Link
Sinh viên có thể nhập hoặc lựa chọn cung cấp thông tin của mình và khi nhấn “Diagnosis” sẽ cho ra kết quả là bạn có nguy cơ trầm cảm hay không.
Summary
- Do model có xu hướng bias như mình đã đề cập ở trên nên tương lai mình có thể thu thập thêm dữ liệu để khiến việc dự đoán đáng tin cậy hơn.
- Cuối cùng, qua project này, mình hi vọng phần nào đã có thể cho mọi người có một cái nhìn về tình trạng sức khỏe sinh viên ở các trường đại học hiện nay.
- Cùng với đó, qua những kết quả thống kê cũng như mô hình dự đoán, nhà trường có thể đưa ra các biện pháp chăm sóc sinh viên tốt hơn.