# 3. Data Preprocessing

### 3. Data Preprocessing

#### 3.1. Mục tiêu của bước Preprocessing

Bước Data Preprocessing nhằm chuẩn bị dữ liệu cho quá trình huấn luyện mô hình.\
Trong project `ml-healthcare`, bước này đảm bảo:

* Dữ liệu có định dạng phù hợp cho mô hình.
* Tách rõ biến đầu vào (X) và biến mục tiêu (y).
* Giữ tính tái lập (reproducibility).
* Chuẩn bị dữ liệu nhất quán cho cả Baseline Models và Proposed Model.
* Đảm bảo SHAP sử dụng đúng thứ tự và tên đặc trưng.

***

#### 3.2. Nguồn dữ liệu sử dụng

Toàn bộ pipeline chỉ load dataset từ:

```
data/processed/
```

Lưu ý:

* Trong trường hợp dataset không cần xử lý gì thêm, file trong `processed/` có thể giống hoàn toàn file trong `raw/`.
* Tuy nhiên, `processed/` được xem là phiên bản “experiment-ready” chính thức dùng trong toàn bộ thí nghiệm.

Điều này giúp đảm bảo:

* Không thay đổi dataset giữa các lần chạy.
* Reviewer có thể tái lập kết quả.

***

#### 3.3. Kiểm tra và xác nhận dữ liệu

Trước khi huấn luyện, các bước kiểm tra cơ bản bao gồm:

1. Kiểm tra số dòng và số cột
2. Kiểm tra cột target (`Diabetes_binary`)
3. Kiểm tra kiểu dữ liệu
4. Kiểm tra giá trị thiếu (nếu có)

Trong case study này, dataset:

* Đã ở dạng numeric
* Không có missing values nghiêm trọng
* Không cần encoding categorical

Do đó preprocessing khá nhẹ.

***

#### 3.4. Tách đặc trưng và nhãn

Dataset được chia thành:

* X: toàn bộ đặc trưng đầu vào
* y: biến mục tiêu `Diabetes_binary`

Ví dụ logic:

* X = df.drop("Diabetes\_binary")
* y = df\["Diabetes\_binary"]

Việc tách này giúp pipeline rõ ràng và dễ mở rộng.

***

#### 3.5. Train/Test Split

Dữ liệu được chia thành:

* Training set
* Test set

Mục tiêu:

* Training set dùng để huấn luyện mô hình
* Test set dùng để đánh giá khách quan

Thông thường sử dụng:

* test\_size = 0.2 hoặc 0.3
* random\_state cố định (ví dụ: 42)

Việc cố định random\_state đảm bảo kết quả có thể tái lập.

***

#### 3.6. Chuẩn hóa dữ liệu (nếu cần)

Với một số mô hình như:

* Logistic Regression
* SVM
* KNN

Việc chuẩn hóa (StandardScaler) có thể cần thiết.

Tuy nhiên:

* Với tree-based models (Random Forest, XGBoost, HGB), scaling không bắt buộc.

Trong pipeline có thể:

* Áp dụng scaling trong Baseline Models khi cần.
* Hoặc sử dụng ColumnTransformer để đảm bảo quy trình rõ ràng.

***

#### 3.7. Xử lý mất cân bằng lớp (tùy chọn)

Nếu dữ liệu có mất cân bằng lớp, có thể:

* Sử dụng class\_weight
* Hoặc SMOTE (ở bước nâng cao)

Trong case study này, preprocessing cơ bản không áp dụng resampling trực tiếp, mà sẽ đánh giá hiệu suất thông qua các metrics như:

* Recall
* F1-score
* ROC-AUC

***

#### 3.8. Lưu ý quan trọng cho SHAP

Explainability (SHAP) yêu cầu:

* Tên cột không thay đổi
* Thứ tự feature nhất quán
* Không biến đổi schema giữa train và test

Vì vậy:

* Dataset sau khi tách và split phải giữ nguyên cấu trúc.
* Không được thêm/xóa cột trong các bước sau.

Điều này đảm bảo biểu đồ SHAP phản ánh đúng tác động của từng đặc trưng.

***

#### 3.9. Kết luận bước Preprocessing

Trong project `ml-healthcare`, bước preprocessing:

* Không phức tạp do dataset đã sạch.
* Chủ yếu chuẩn hóa pipeline và đảm bảo tái lập.
* Chuẩn bị nền tảng cho:
  * Baseline Models
  * Proposed Model
  * SHAP Explainability


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://deeplearningcoban.gitbook.io/deeplearningcoban.com/case-study-ung-dung-thuc-te/ml-pipeline-healthcare-case-study-full-code/3.-data-preprocessing.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
