Dự đoán bệnh tiểu đường là một trong những ứng dụng nổi bật của trí tuệ nhân tạo trong lĩnh vực y tế. Nhờ vào mô hình học máy, các hệ thống hỗ trợ bác sĩ có thể đưa ra cảnh báo sớm, từ đó giúp bệnh nhân điều chỉnh lối sống, phát hiện sớm nguy cơ và cải thiện hiệu quả điều trị.
Bài viết này hướng dẫn bạn xây dựng mô hình dự đoán bệnh tiểu đường bằng Python dựa trên bộ dữ liệu thực tế Pima Indian Diabetes Dataset. Đây là một ví dụ kinh điển trong lĩnh vực y học và thường được sử dụng để huấn luyện mô hình phân loại.
Nếu bạn từng xem qua bài Giải thích confusion matrix dễ hiểu nhất hoặc đã áp dụng phân tích cảm xúc bằng Python, thì việc xây dựng mô hình y tế sẽ là bước tiến tiếp theo đầy thú vị.
Giới thiệu bộ dữ liệu Pima Indian Diabetes Dataset
Bộ dữ liệu này chứa thông tin y tế của 768 phụ nữ gốc Pima (Mỹ) với các thuộc tính như:
- Số lần mang thai
- Mức glucose trong máu
- Huyết áp
- Chỉ số BMI
- Tuổi
- Kết quả: mắc tiểu đường hay không (0 hoặc 1)
Bạn có thể tải dữ liệu từ link dưới đây:
https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv
Nạp và tiền xử lý dữ liệu
Bước đầu tiên trong việc xây dựng mô hình là đọc dữ liệu vào Python và làm sạch các giá trị bất thường. Việc tiền xử lý dữ liệu không chỉ giúp mô hình hoạt động chính xác hơn mà còn tránh được sai lệch trong việc huấn luyện.
Chúng ta sẽ sử dụng thư viện pandas để đọc dữ liệu từ tệp CSV, đồng thời đặt tên các cột để dễ làm việc. Sau đó, kiểm tra một vài dòng đầu tiên để đảm bảo dữ liệu đã được nạp đúng định dạng.
import pandas as pd
import numpy as np
# Tải dữ liệu về và đọc vào DataFrame
url = 'https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv'
columns = ['Pregnancies', 'Glucose', 'BloodPressure', 'SkinThickness', 'Insulin',
'BMI', 'DiabetesPedigreeFunction', 'Age', 'Outcome']
df = pd.read_csv(url, names=columns)
# Kiểm tra 5 dòng đầu
print(df.head())
Xử lý dữ liệu thiếu và chia tập huấn luyện
Sau khi đọc dữ liệu, bạn sẽ thấy một số cột có giá trị bằng 0 – điều này không thực tế với dữ liệu y tế (ví dụ glucose hoặc BMI không thể là 0). Những giá trị này cần được xử lý để tránh ảnh hưởng đến mô hình.
Chúng ta sẽ thay thế các giá trị bằng 0 trong các cột quan trọng bằng trung vị (median) của từng cột, sau đó chia dữ liệu thành tập huấn luyện và kiểm tra để phục vụ cho mô hình học máy.
cols_with_zero = ['Glucose', 'BloodPressure', 'SkinThickness', 'Insulin', 'BMI']
for col in cols_with_zero:
df[col] = df[col].replace(0, np.nan)
df[col].fillna(df[col].median(), inplace=True)
# Tách tập train/test
from sklearn.model_selection import train_test_split
X = df.drop('Outcome', axis=1)
y = df['Outcome']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
Xây dựng mô hình học máy (Logistic Regression)
Bây giờ, chúng ta sẽ xây dựng mô hình học máy để dự đoán khả năng mắc bệnh tiểu đường. Một trong những mô hình cơ bản nhưng hiệu quả là Logistic Regression.
Chúng ta sử dụng mô hình này vì tính đơn giản, dễ hiểu và phù hợp với bài toán phân loại nhị phân như: mắc bệnh (1) hoặc không mắc bệnh (0).
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, classification_report
model = LogisticRegression(max_iter=1000)
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
print("Accuracy:", accuracy_score(y_test, y_pred))
print(classification_report(y_test, y_pred))
Vẽ confusion matrix để đánh giá
Việc chỉ nhìn vào độ chính xác chưa đủ để đánh giá mô hình y tế. Ta cần xem mô hình đã dự đoán đúng bao nhiêu ca bệnh và bỏ sót bao nhiêu – điều này thể hiện rõ qua ma trận nhầm lẫn (confusion matrix).
Chúng ta sẽ vẽ confusion matrix bằng thư viện sklearn, giúp trực quan hóa hiệu suất mô hình một cách chi tiết.
from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay cm = confusion_matrix(y_test, y_pred) disp = ConfusionMatrixDisplay(confusion_matrix=cm) disp.plot()
Kết luận
Mô hình dự đoán tiểu đường là một ví dụ điển hình trong y học số, giúp phát hiện sớm và cảnh báo bệnh tiềm ẩn. Việc áp dụng các thuật toán học máy đơn giản như Logistic Regression cũng đã đem lại kết quả đáng khích lệ với độ chính xác tương đối cao.
Từ đây, bạn có thể nâng cấp mô hình bằng các phương pháp nâng cao như Random Forest, XGBoost hoặc sử dụng thuật toán tối ưu đặc biệt cho dữ liệu y tế. Bạn cũng có thể triển khai mô hình thành REST API để phục vụ kiểm tra lâm sàng tự động hoặc kết nối với phần mềm y tế chuyên dụng.
Nếu bạn muốn tiếp tục với phần xây dựng giao diện phân tích y tế, hoặc so sánh các mô hình học sâu trên dữ liệu bệnh lý, mình có thể viết tiếp hướng dẫn chi tiết hơn.

