Hỗ trợ đồ án, khóa luận Web, App, AI - Uy tín, chất lượng!
Hỗ trợ đồ án, khóa luận Web, App, AI - Uy tín, chất lượng!
Trang Chủ Hướng Dẫn Đồ Án Làm đồ án dự đoán điểm sinh viên bằng Linear Regression
Hướng Dẫn Đồ Án

Làm đồ án dự đoán điểm sinh viên bằng Linear Regression

Chia sẻ
Chia sẻ

Dự đoán điểm số sinh viên là một ứng dụng thực tiễn giúp nhà trường đánh giá năng lực học tập, phát hiện sinh viên yếu cần hỗ trợ sớm. Mô hình học máy Linear Regression (hồi quy tuyến tính) có thể được dùng để dự đoán điểm trung bình hoặc điểm một môn cụ thể dựa trên các yếu tố như giới tính, tình trạng ôn tập, điểm các môn học khác,…

Trong bài viết này, bạn sẽ được hướng dẫn xây dựng một mô hình dự đoán điểm sinh viên bằng Python sử dụng thư viện scikit-learn. Toàn bộ quy trình từ chuẩn bị dữ liệu, huấn luyện, đánh giá đến dự đoán sẽ được trình bày chi tiết kèm mã nguồn theo từng file.

Tải dữ liệu và chuẩn bị dự án

Dữ liệu sử dụng trong bài là bộ “Students Performance in Exams” từ Kaggle.

Link tải:
https://www.kaggle.com/datasets/spscientist/students-performance-in-exams

Hướng dẫn sử dụng:

  • Đăng nhập vào Kaggle để tải file StudentsPerformance.csv

  • Tạo thư mục data/ trong dự án và đặt file CSV vào đó

  • Cấu trúc thư mục ban đầu nên như sau:

student_score_project/
├── data/
│   └── StudentsPerformance.csv
├── train.py
├── evaluate.py
├── predict.py

Đọc và tiền xử lý dữ liệu

Trước khi huấn luyện mô hình, bạn cần đọc dữ liệu từ file CSV và chuyển các dữ liệu dạng text (categorical) về dạng số để mô hình hiểu được.

File: train.py

import pandas as pd

# Đọc dữ liệu từ CSV
df = pd.read_csv('data/StudentsPerformance.csv')

# Chuyển đổi giới tính và tình trạng ôn tập sang số
df['gender'] = df['gender'].map({'female': 0, 'male': 1})
df['test preparation course'] = df['test preparation course'].map({'none': 0, 'completed': 1})

# Tính điểm trung bình từ 3 môn
df['average_score'] = df[['math score', 'reading score', 'writing score']].mean(axis=1)

# Chọn đặc trưng (X) và nhãn (y)
X = df[['gender', 'test preparation course', 'math score', 'reading score']]
y = df['average_score']

Trong bước này, bạn tạo biến X chứa các yếu tố ảnh hưởng đến điểm số, và y là điểm trung bình sẽ được dự đoán.

Huấn luyện mô hình Linear Regression

Sau khi đã có dữ liệu dạng số, bạn chia tập dữ liệu thành hai phần: training và testing. Sau đó, bạn sử dụng thuật toán Linear Regression để huấn luyện mô hình trên tập training.

File: train.py (đặt code dưới đây vào cuối file)

from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
import joblib

# Chia tập train/test (80/20)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Tạo mô hình Linear Regression
model = LinearRegression()

# Huấn luyện mô hình
model.fit(X_train, y_train)

# Lưu mô hình để sử dụng sau
joblib.dump(model, 'model_regression.pkl')

Sau khi chạy đoạn mã trên, mô hình sẽ được lưu lại trong file model_regression.pkl và có thể sử dụng lại ở các bước sau mà không cần huấn luyện lại.

Đánh giá mô hình sau huấn luyện

Bạn cần kiểm tra độ chính xác của mô hình bằng cách đo lường sai số và độ phù hợp của nó trên tập dữ liệu kiểm tra. Trong Linear Regression, các chỉ số thường dùng là Mean Squared Error (MSE)R-squared (R2).

File: evaluate.py

import joblib
from sklearn.metrics import mean_squared_error, r2_score
from sklearn.model_selection import train_test_split
import pandas as pd

# Đọc lại dữ liệu
df = pd.read_csv('data/StudentsPerformance.csv')
df['gender'] = df['gender'].map({'female': 0, 'male': 1})
df['test preparation course'] = df['test preparation course'].map({'none': 0, 'completed': 1})
df['average_score'] = df[['math score', 'reading score', 'writing score']].mean(axis=1)

X = df[['gender', 'test preparation course', 'math score', 'reading score']]
y = df['average_score']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Tải mô hình
model = joblib.load('model_regression.pkl')

# Dự đoán
y_pred = model.predict(X_test)

# Tính sai số và R2
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)

print(f'Mean Squared Error: {mse:.2f}')
print(f'R2 Score: {r2:.2f}')

MSE càng thấp thì sai số càng nhỏ, R2 càng gần 1 thì mô hình càng chính xác.

Dự đoán điểm số cho sinh viên mới

Sau khi huấn luyện, bạn có thể dự đoán điểm trung bình cho một sinh viên mới với thông tin đầu vào.

File: predict.py

import joblib
import numpy as np

# Tải mô hình
model = joblib.load('model_regression.pkl')

# Nhập thông tin sinh viên mới: [gender, test_prep, math, reading]
# Ví dụ: male (1), đã ôn tập (1), điểm toán 75, đọc 80
new_data = np.array([[1, 1, 75, 80]])

# Dự đoán
predicted_score = model.predict(new_data)

print(f'Điểm trung bình dự đoán: {predicted_score[0]:.2f}')

Bạn có thể nhập nhiều dòng dữ liệu vào new_data để dự đoán cho nhiều sinh viên cùng lúc.

Phân tích trọng số các đặc trưng

Linear Regression cung cấp hệ số (trọng số) cho từng đặc trưng đầu vào, cho biết mức độ ảnh hưởng của từng yếu tố đến kết quả dự đoán.

File: train.py (đặt code dưới đây vào cuối file)

# In trọng số từng đặc trưng
print("Trọng số các yếu tố:")
for feature, coef in zip(X.columns, model.coef_):
    print(f"{feature}: {coef:.2f}")

Bạn cũng có thể trực quan hóa bằng biểu đồ:

import matplotlib.pyplot as plt

plt.bar(X.columns, model.coef_)
plt.title('Trọng số các đặc trưng ảnh hưởng đến điểm')
plt.ylabel('Hệ số')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

Biểu đồ này giúp bạn dễ dàng trình bày trong slide hoặc báo cáo về yếu tố nào ảnh hưởng nhiều nhất.

Viết báo cáo cho đồ án

Một đồ án chuẩn nên được trình bày rõ ràng, dễ hiểu. Gợi ý các phần bạn nên đưa vào báo cáo:

  • Mục tiêu và ý nghĩa đề tài

  • Mô tả dữ liệu đầu vào (đính kèm link Kaggle)

  • Cách tiền xử lý dữ liệu

  • Lý do chọn Linear Regression

  • Cấu trúc mô hình

  • Kết quả huấn luyện: MSE, R2

  • Phân tích trọng số

  • Kết luận và hướng phát triển

Bạn nên đính kèm hình minh họa biểu đồ, bảng số liệu, kết quả đầu ra, để tăng tính thuyết phục.

Kết luận

Linear Regression là một mô hình cơ bản nhưng hữu ích trong các bài toán dự đoán điểm số sinh viên. Chỉ với vài chục dòng code, bạn đã có thể hoàn thành một đồ án với đầy đủ dữ liệu, mô hình học máy, đánh giá và kết quả thực tế.

Bài toán này có thể được mở rộng theo nhiều hướng:

  • So sánh với các mô hình khác như Random Forest, XGBoost

  • Triển khai thành web app để sinh viên nhập dữ liệu và xem điểm dự đoán

  • Thêm nhiều đặc trưng đầu vào như số giờ học, điểm danh, điểm kiểm tra nhỏ

Tham Gia Nhóm – Hỗ Trợ Lập Trình

Hỗ Trợ Đồ Án – ThueDoAn.vn

Liên quan
Hướng Dẫn Đồ Án

Checklist 10 bước kiểm tra cuối cùng trước khi nhấn nút nộp đồ án

Thời điểm chuẩn bị nhấn nút nộp đồ án luôn mang lại...

Hướng Dẫn Đồ Án

Tuyệt chiêu đối phó với những giảng viên hướng dẫn ‘khó tính’ nhất

Giai đoạn làm đồ án tốt nghiệp luôn đi kèm với vô...

Hướng Dẫn Đồ Án

Tại sao việc quản lý Source Code bằng Git lại quan trọng hơn bạn nghĩ?

Trong thế giới lập trình hiện đại, mã nguồn chính là linh...

Hướng Dẫn Đồ Án

Những chức năng ‘thừa’ khiến bạn tốn thời gian mà không được cộng điểm

Làm đồ án tốt nghiệp là một cuộc đua thực thụ với...

Hướng Dẫn Đồ Án

Cách xử lý khi đề tài bị trùng lặp ý tưởng với các khóa trước quá nhiều

Lựa chọn đề tài đồ án luôn là bước khởi đầu đầy...

Hướng Dẫn Đồ Án

Làm sao để giải trình với giảng viên khi code bị nghi ngờ là đi chép?

Trong quá trình thực hiện đồ án, việc tham khảo mã nguồn...

Hướng Dẫn Đồ Án

Cảnh báo: Những nguồn share code ‘rác’ trên mạng cần tuyệt đối tránh

Trong quá trình làm đồ án, việc tìm kiếm sự hỗ trợ...

Hướng Dẫn Đồ Án

Sai lầm khi chọn công nghệ quá khó so với năng lực thực tế của bản thân

Chọn đề tài và công nghệ cho đồ án luôn là bước...

Liên Hệ
Liên hệ để được tư vấn & hỗ trợ đồ án CNTT nhé bạn!