# dataset\_registry.py

Trong case study này, mình dùng vài datasets:

```py
#ACTIVE_DATASET = "sklearn_diabetes"
#ACTIVE_DATASET = "kaggle_health_100k"
ACTIVE_DATASET = "kaggle_early_stage_640"
#ACTIVE_DATASET = "cdc_brfss_2021"
```

{% hint style="info" %}
Nhớ uncomment 1 ACTIVE\_DATASET. Các datasets được khai bao trong dataset\_registry.py
{% endhint %}

```py
from pathlib import Path

PROJECT_ROOT = Path(__file__).resolve().parents[1]
DATA_DIR = PROJECT_ROOT / "data" / "processed"

DATASETS = {

    "kaggle_health_100k": {
        "path": DATA_DIR / "kaggle_diabetes_health_indicators_classification_100000_records.csv",
        "target": "diagnosed_diabetes",
        "slug": "kaggle_health_100k",
        "task": "classification",
        "include_columns": [
            "age","gender","ethnicity","education_level","income_level",
            "employment_status","smoking_status","alcohol_consumption_per_week",
            "physical_activity_minutes_per_week","diet_score",
            "sleep_hours_per_day","screen_time_hours_per_day",
            "family_history_diabetes","hypertension_history",
            "cardiovascular_history","bmi","waist_to_hip_ratio",
            "systolic_bp","diastolic_bp","heart_rate",
            "cholesterol_total","hdl_cholesterol","ldl_cholesterol",
            "triglycerides","glucose_fasting"
        ]
    },

    "kaggle_early_stage_640": {
        "path": DATA_DIR / "kaggle_early_stage_diabetes_risk_prediction_640_records.csv",
        "target": "class",
        "slug": "kaggle_early_stage_640",
        "task": "classification",
        "include_columns": None
    },

    "cdc_brfss_2021": {
        "path": DATA_DIR / "cdc_brfss_2021_diabetes_health_indicators_classification_67136_records.csv",
        "target": "Diabetes_binary",
        "slug": "cdc_brfss_2021",
        "task": "classification",
        "include_columns": None
    },

    "sklearn_diabetes": {
        "path": DATA_DIR / "sklearn_diabetes_progression_regression_442_records.csv",
        "target": "disease_progression",
        "slug": "sklearn_diabetes",
        "task": "regression_to_binary",
        "include_columns": None
    },
}

#ACTIVE_DATASET = "sklearn_diabetes"
#ACTIVE_DATASET = "kaggle_health_100k"
ACTIVE_DATASET = "kaggle_early_stage_640"
#ACTIVE_DATASET = "cdc_brfss_2021"


def get_active_config():
    cfg = DATASETS[ACTIVE_DATASET]
    if not cfg["path"].exists():
        raise FileNotFoundError(cfg["path"])
    return cfg
```

### Nguồn gốc các datasets sử dụng trong project

Trong quá trình phát triển pipeline và thử nghiệm mô hình, project sử dụng nhiều bộ dữ liệu khác nhau để:

* Kiểm tra tính ổn định của pipeline
* So sánh hiệu suất mô hình trên quy mô dữ liệu khác nhau
* Đánh giá khả năng tổng quát hóa

Danh sách các dataset được cấu hình trong `dataset_registry.py` gồm:

***

#### 1. sklearn\_diabetes

**Nguồn:** Thư viện `scikit-learn`\
**Tên gốc:** Diabetes dataset (built-in dataset)

* Được cung cấp trực tiếp trong thư viện scikit-learn
* Số mẫu: 442
* Số đặc trưng: 10
* Loại bài toán: gốc là regression

Trong project này, dataset được sử dụng chủ yếu để:

* Kiểm tra nhanh pipeline
* Debug preprocessing
* Test logic huấn luyện

Do quy mô nhỏ và không phải dataset phân loại nhị phân chuẩn về tiểu đường, dataset này **không được dùng làm case study chính trong luận văn**, mà chỉ phục vụ kiểm thử kỹ thuật.

***

#### 2. kaggle\_health\_100k

**Nguồn:** Nền tảng Kaggle

Đây là dataset dạng tabular về chỉ số sức khỏe (health indicators), thường được trích xuất từ khảo sát sức khỏe cộng đồng.

* Số mẫu: \~100,000
* Đặc trưng: BMI, Smoking, Physical Activity, HighBP, HighChol, Age, v.v.
* Target: Diabetes\_binary

Dataset này phù hợp cho:

* Thử nghiệm trên dữ liệu lớn
* Đánh giá độ ổn định của model
* Thực hiện SHAP với quy mô thực tế

***

#### 3. kaggle\_early\_stage\_640 (Dataset đang active)

**Nguồn:** Kaggle

Đây là dataset về **phát hiện tiểu đường giai đoạn sớm (Early Stage Diabetes Risk Prediction)**.

* Số mẫu: 640
* Đặc trưng: triệu chứng và chỉ số lâm sàng cơ bản
* Loại bài toán: Binary classification

Dataset này thường gồm các biến như:

* Polyuria
* Polydipsia
* Sudden weight loss
* Weakness
* Genital thrush
* Visual blurring
* v.v.

Ưu điểm:

* Phù hợp bài toán phân loại nhị phân rõ ràng
* Cấu trúc đơn giản
* Dễ minh họa Explainability (SHAP)

Vì vậy, dataset này được chọn làm **case study chính** trong pipeline hiện tại.

***

#### 4. cdc\_brfss\_2021

**Nguồn:** Khảo sát BRFSS của Centers for Disease Control and Prevention

BRFSS (Behavioral Risk Factor Surveillance System) là khảo sát sức khỏe quy mô lớn tại Hoa Kỳ.

* Số mẫu: \~67,000 (sau khi tiền xử lý)
* Dữ liệu khảo sát dân số
* Bao gồm các chỉ số về sức khỏe, hành vi, bệnh lý

Ưu điểm:

* Quy mô lớn
* Phản ánh dữ liệu dân số thực
* Phù hợp nghiên cứu về fairness và bias

Dataset này phù hợp để:

* Đánh giá mô hình ở mức dân số
* Phân tích mất cân bằng lớp
* Nghiên cứu fairness

***

### Lý do chọn kaggle\_early\_stage\_640 làm dataset chính

Trong pipeline hiện tại:

```
ACTIVE_DATASET = "kaggle_early_stage_640"
```

Dataset này được chọn vì:

1. Phù hợp bài toán binary classification
2. Dễ giải thích bằng SHAP
3. Kích thước vừa phải, thuận tiện minh họa
4. Có ý nghĩa lâm sàng rõ ràng

Các dataset còn lại được giữ để:

* So sánh bổ sung
* Kiểm tra độ ổn định của pipeline
* Mở rộng nghiên cứu sau này

### Cấu hình include\_columns trong dataset\_registry

Trong `dataset_registry.py`, ngoài các thông tin như:

* path
* target\_column
* problem\_type

project có thể sử dụng thêm cấu hình:

```
"include_columns": [...]
```

***

#### 1. Mục đích của include\_columns

`include_columns` được sử dụng để:

1. Xác định chính xác các feature được dùng trong huấn luyện
2. Loại bỏ các cột không cần thiết
3. Đảm bảo thứ tự feature ổn định
4. Tăng tính tái lập (reproducibility)

Điều này đặc biệt quan trọng khi:

* Dataset có nhiều cột dư thừa
* Có cột ID hoặc metadata
* Muốn đảm bảo SHAP nhận đúng thứ tự feature

***

#### 2. Ví dụ cấu hình

```
DATASETS = {
    "kaggle_early_stage_640": {
        "path": DATA_DIR / "kaggle_early_stage_640.csv",
        "target_column": "class",
        "include_columns": [
            "Age",
            "Gender",
            "Polyuria",
            "Polydipsia",
            "sudden weight loss",
            "weakness",
            "visual blurring",
            "class"
        ]
    }
}
```

Trong đó:

* Các feature được liệt kê rõ ràng
* Target có thể nằm trong include\_columns nhưng sẽ được tách riêng sau

***

#### 3. Tại sao không dùng df.drop() trực tiếp?

Nếu chỉ dùng:

```
X = df.drop("target", axis=1)
```

Thì:

* Thứ tự cột có thể thay đổi nếu dataset thay đổi
* Nếu thêm cột mới trong tương lai, pipeline có thể bị ảnh hưởng
* SHAP có thể không còn tương thích với model đã train

Trong khi đó, `include_columns` giúp:

> “Đóng băng cấu trúc feature” ở cấp độ dataset.

***

#### 4. Vai trò của include\_columns đối với SHAP

SHAP phụ thuộc rất mạnh vào:

* Tên cột
* Thứ tự cột
* Số lượng feature

Nếu feature order thay đổi giữa các lần chạy:

* SHAP values sẽ không còn đúng
* Biểu đồ feature importance có thể sai lệch

Do đó, `include_columns` giúp đảm bảo:

* Feature matrix luôn có cấu trúc cố định
* Explainability luôn nhất quán

***

#### 5. Khi nào không cần include\_columns?

Có thể bỏ qua nếu:

* Dataset rất đơn giản
* Không có cột dư thừa
* Không có nguy cơ thay đổi schema

Tuy nhiên, trong project nghiên cứu và luận văn, nên giữ cấu hình này để đảm bảo tính chuyên nghiệp.

***

#### 6. Kết luận phần Dataset

Với cấu trúc:

* raw/
* processed/
* dataset\_registry.py
* ACTIVE\_DATASET
* include\_columns

Project `ml-healthcare` đã:

* Chuẩn hóa quản lý dữ liệu
* Đảm bảo tính tái lập
* Sẵn sàng cho Explainability (SHAP)
* Phù hợp với kiến trúc ML pipeline end-to-end


---

# 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/2.-dataset-and-eda-kham-pha-du-lieu/dataset_registry.py.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.
