[DS Blog #27] Nền Tảng Data Science & Machine Learning: Kỹ Thuật Feature Engineering, Đánh Giá Mô Hình Chuyên Sâu & Giải Mã Bộ Tứ Tree-based Models (Random Forest, XGBoost, LightGBM, CatBoost)
1 views
![[DS Blog #27] Nền Tảng Data Science & Machine Learning: Kỹ Thuật Feature Engineering, Đánh Giá Mô Hình Chuyên Sâu & Giải Mã Bộ Tứ Tree-based Models (Random Forest, XGBoost, LightGBM, CatBoost)](/uploads/ai-images/cover-feature-engineering-tree-models.png)
1. Bối cảnh thực tế (Context & Problem Statement)
Trong giới Machine Learning, có một câu danh ngôn kinh điển:
“Applied Machine Learning is basically feature engineering.” (Andrew Ng)
(Học máy ứng dụng về cơ bản chính là nghệ thuật kỹ nghệ đặc trưng).
Dù mô hình học máy có phức tạp đến đâu, nếu dữ liệu đầu vào chứa nhiều nhiễu, bị rò rỉ dữ liệu (Data Leakage) hoặc biến đổi sai cách, mô hình sẽ rơi vào tình trạng "Garbage In, Garbage Out".
Đối với dữ liệu dạng bảng (Tabular Data chiếm các bài toán doanh nghiệp như chấm điểm tín dụng, dự đoán rời bỏ Churn, định giá sản phẩm), các mô hình Cây quyết định dạng Boosting (XGBoost, LightGBM, CatBoost) vẫn luôn vượt trội hơn Deep Learning về cả độ chính xác, tốc độ huấn luyện lẫn khả năng giải thích (Interpretability).
2. Các Khái Niệm & Cơ Chế Cốt Lõi
2.1. Quy Trình Feature Engineering & Xử Lý Biến Phân Loại (Categorical Encoding)
- Xử lý giá trị khuyết thiếu (Missing Value Imputation):
- Biến số: Dùng Median (ít bị ảnh hưởng bởi outliers) hoặc mô hình KNN/MICE Imputer.
- Biến phân loại: Gán nhãn
'Missing'hoặc mode (giá trị xuất hiện nhiều nhất).
- Kỹ thuật Target Encoding (Mã hóa theo nhãn mục tiêu):
- Thay thế giá trị danh mục bằng giá trị trung bình của biến mục tiêu tương ứng với danh mục đó.
- ⚠️ Cạm bẫy Target Leakage (Overfitting): Nếu một danh mục chỉ xuất hiện 1 lần và có , mã hóa trực tiếp sẽ khiến mô hình học vẹt.
- ✅ Giải pháp Smoothing (Làm mịn theo Bayes): (trong đó là số lần xuất hiện của danh mục , là trung bình mục tiêu của danh mục , là trung bình mục tiêu toàn bộ tập dữ liệu, và là trọng số làm mịn).
2.2. Sự Đánh Đổi Độ Lệch & Phương Sai (Bias-Variance Tradeoff)
- High Bias (Underfitting / Chưa khớp): Mô hình quá đơn giản, không học được quy luật dữ liệu (ví dụ: dùng Linear Regression cho dữ liệu phi tuyến).
- High Variance (Overfitting / Quá khớp): Mô hình quá phức tạp, ghi nhớ toàn bộ nhiễu của tập Train Kết quả trên tập Test/Production cực kém.
- Chiến lược Cross-Validation chuẩn mực:
- Stratified K-Fold: Đảm bảo tỷ lệ các nhãn phân loại đồng đều trong từng Fold (bắt buộc cho dữ liệu phân loại).
- TimeSeriesSplit: Không xáo trộn ngẫu nhiên dữ liệu; luôn train trên quá khứ và test trên tương lai (bắt buộc cho dữ liệu chuỗi thời gian để tránh Look-ahead Bias).
2.3. Giải Mã Bộ Tứ Mô Hình Cây: Bagging vs. Boosting
BAGGING (Random Forest):
Tập dữ liệu ---> [Tree 1] (Song song) ---> Lấy trung bình / Bầu chọn
---> [Tree 2]
---> [Tree 3]
BOOSTING (XGBoost / LightGBM / CatBoost):
Tập dữ liệu ---> [Tree 1] ---> Dự đoán lỗi (Residual 1)
---> [Tree 2 học sửa lỗi 1] ---> Residual 2
---> [Tree 3 học sửa lỗi 2]
- Random Forest (Bagging - Bootstrap Aggregating):
- Xây dựng hàng trăm cây quyết định độc lập song song từ các tập con dữ liệu ngẫu nhiên (Bootstrap) và tập con thuộc tính ngẫu nhiên.
- Kết hợp kết quả bằng cách lấy trung bình (Regression) hoặc bầu chọn số đông (Classification) Giúp giảm tối đa Variance.
- XGBoost (eXtreme Gradient Boosting):
- Áp dụng xấp xỉ chuỗi Taylor bậc 2 (Second-order Taylor Expansion) trên hàm mất mát (Gradient và Hessian ).
- Tích hợp thành phần phạt chính quy hóa () và () trực tiếp trên cấu trúc lá cây để chống Overfitting.
- LightGBM (Light Gradient Boosting Machine - Microsoft):
- GOSS (Gradient-based One-Side Sampling): Giữ lại các mẫu có Gradient lớn (chưa học tốt) và lấy mẫu ngẫu nhiên tập nhỏ các mẫu có Gradient nhỏ Tăng tốc độ .
- EFB (Exclusive Feature Bundling): Gom các thuộc tính thưa (Sparse features) không bao giờ cùng nhận giá trị khác 0 vào chung 1 cột.
- Leaf-wise Tree Growth: Phát triển cây theo nhánh có độ giảm mất mát lớn nhất (Best-first) thay vì chia đều theo tầng.
- CatBoost (Categorical Boosting - Yandex):
- Ordered Target Encoding: Tính toán Target Encoding dựa trên các dòng dữ liệu xuất hiện trước đó theo thứ tự thời gian ngẫu nhiên, triệt tiêu hiện tượng Target Leakage.
- Symmetric / Oblivious Trees: Mọi nút ở cùng một độ sâu đều sử dụng chung một điều kiện phân tách Cực kỳ tối ưu cho việc suy luận (Inference) trên CPU.
2.4. Đánh Giá Mô Hình Phân Loại: ROC-AUC vs. PR-AUC
- Confusion Matrix: True Positive (TP), False Positive (FP), True Negative (TN), False Negative (FN).
- Precision (Độ chính xác): (Trong những trường hợp mô hình đoán là Dương tính, có bao nhiêu % là đúng?).
- Recall / Sensitivity (Độ bao phủ): (Trong tất cả các trường hợp thực sự là Dương tính, mô hình bắt được bao nhiêu %?).
- ROC-AUC (Receiver Operating Characteristic): Vẽ đồ thị giữa True Positive Rate (Recall) và False Positive Rate ().
- PR-AUC (Precision-Recall Curve): Vẽ đồ thị giữa Precision và Recall.
3. Các Bảng Markdown So Sánh Chi Tiết
📊 Bảng 1: So Sánh Toàn Diện: Random Forest vs. XGBoost vs. LightGBM vs. CatBoost
| Tiêu chí | Random Forest | XGBoost | LightGBM | CatBoost |
|---|---|---|---|---|
| Họ thuật toán | Bagging (Học song song) | Gradient Boosting (Tuần tự) | Gradient Boosting (Tuần tự) | Gradient Boosting (Tuần tự) |
| Chiến lược phát triển cây | Level-wise (Theo tầng) | Level-wise (Depth-wise) | Leaf-wise (Best-first) | Symmetric (Oblivious Trees) |
| Xử lý Biến Categorical | Cần One-Hot/Ordinal trước | Cần One-Hot hoặc Partition | Tự động gom nhóm Categorical | Xử lý tự động xuất sắc nhất (Ordered Encoding) |
| Tốc độ huấn luyện | Trung bình (Parallel hóa tốt) | Trung bình / Khá | Cực nhanh (Nhờ GOSS + EFB) | Nhanh trên GPU |
| Tốc độ suy luận (Predict) | Trung bình | Nhanh | Rất nhanh | Siêu tốc (Nhờ cây đối xứng) |
| Nguy cơ Overfitting | Rất thấp | Trung bình (Kiểm soát bằng Regularization) | Cao hơn (Cần chỉnh max_depth, min_child_samples) | Thấp (Có cơ chế Ordered Boosting chống Overfit) |
| Khuyến nghị sử dụng | Khi cần baseline ổn định, không cần tinh chỉnh nhiều | Khi dữ liệu vừa phải, cần độ chính xác cao | Tập dữ liệu lớn ( dòng), cần train nhanh | Dữ liệu có nhiều cột phân loại (Text/Categorical features) |
📊 Bảng 2: So Sánh ROC-AUC vs. PR-AUC vs. F1-Score
| Chỉ số đánh giá | Công thức / Bản chất | Khi nào nên sử dụng? | Hành vi trên dữ liệu mất cân bằng (Imbalanced Data) |
|---|---|---|---|
| ROC-AUC | Diện tích dưới đường cong vs. | Tập dữ liệu cân bằng hoặc mức độ mất cân bằng nhẹ ( Positive) | Gây ảo tưởng (Overly Optimistic) vì mẫu số của FPR là TN (rất lớn) khiến FPR luôn nhỏ |
| PR-AUC (Average Precision) | Diện tích dưới đường cong vs. | Dữ liệu mất cân bằng nghiêm trọng (Fraud, Y tế, Churn ) (Chuẩn phỏng vấn) | Rất nhạy và phản ánh trung thực, chỉ tập trung vào lớp thiểu số (Positive Class) |
| F1-Score | Trung bình điều hòa giữa Precision và Recall | Khi cần chọn một ngưỡng phân loại cụ thể (Fixed Threshold) | Phụ thuộc vào ngưỡng Threshold chọn lựa (mặc định thường không tối ưu) |
📊 Bảng 3: So Sánh Các Phương Pháp Mã Hóa Biến Phân Loại (Categorical Encoding)
| Phương pháp | Cơ chế hoạt động | Kích thước dữ liệu sau mã hóa | Nguy cơ Overfitting | Thích hợp cho |
|---|---|---|---|---|
| One-Hot Encoding | Tạo cột nhị phân | Phình to (Tăng cột mới) | Thấp | Danh mục ít giá trị (Low Cardinality: Giới tính, Thứ trong tuần) |
| Ordinal Encoding | Gán số nguyên | Không đổi ( cột) | Thấp | Danh mục có thứ tự tự nhiên (Học vấn, Size áo, Hạng thành viên) |
| Target Encoding (Smoothed) | Gán giá trị trung bình của nhãn mục tiêu | Không đổi ( cột) | Cao (Nếu không áp dụng Smoothing / Out-of-fold) | Danh mục có số lượng giá trị khổng lồ (High Cardinality: Mã bưu điện, ID sản phẩm) |
4. Best Practices & Kỹ Thuật Tinh Chỉnh Mô Hình (Pro-Tips)
💡 Quy tắc chọn Metric khi Huấn luyện Mô hình Phát hiện Gian lận (Fraud Detection)
- Tuyệt đối không dùng Accuracy: Trong bài toán có giao dịch bình thường và gian lận, một mô hình "ngu ngốc" luôn dự đoán là Bình thường sẽ đạt độ chính xác nhưng hoàn toàn vô dụng!
- Tối ưu hóa PR-AUC & Điều chỉnh Ngưỡng Quyết Định (Threshold Tuning):
- Không dùng ngưỡng mặc định .
- Vẽ đồ thị Precision-Recall và chọn ngưỡng xác suất (ví dụ: Threshold ) sao cho tối đa hóa Recall (bắt được gian lận) trong khi vẫn giữ Precision ở mức chấp nhận được (ví dụ ).
💡 Tránh rò rỉ dữ liệu (Data Leakage) khi Chuẩn hóa dữ liệu
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
# ❌ SAI LẦM: Fit scaler trên toàn bộ dữ liệu trước khi split:
# scaler.fit(X)
# X_train, X_test = train_test_split(scaler.transform(X))
# ✅ CHUẨN XÁC: Chỉ fit trên tập Train, sau đó transform cho cả Train và Test:
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train) # Học mean, std từ Train
X_test_scaled = scaler.transform(X_test) # Dùng mean, std của Train áp vào Test
5. Góc Ôn Luyện Phỏng Vấn (Interview Corner)
❓ Câu hỏi 1: Tại sao trên tập dữ liệu mất cân bằng nghiêm trọng (ví dụ 99.9% nhãn 0 và 0.1% nhãn 1), chỉ số ROC-AUC có thể cho kết quả "ảo tưởng" (overly optimistic) trong khi PR-AUC (Precision-Recall AUC) mới phản ánh đúng chất lượng mô hình?
- Gợi ý trả lời:
- Bản chất công thức của ROC-AUC:
- Trục hoành của ROC là .
- Trong tập dữ liệu mất cân bằng nghiêm trọng, số lượng mẫu Âm tính thực tế () là cực kỳ khổng lồ (chiếm ).
- Khi mô hình dự đoán sai tạo ra hàng nghìn kết quả Dương tính giả ( lớn), mẫu số vẫn quá lớn khiến cho tỷ lệ vẫn giữ ở mức cực kỳ nhỏ ().
- Do đó, đường cong ROC vẫn đẩy lên sát góc trên bên trái và chỉ số ROC-AUC vẫn đạt mức rất cao (ví dụ ), che giấu hoàn toàn việc mô hình đang tạo ra quá nhiều báo động giả ().
- Sức mạnh của PR-AUC:
- PR-AUC vẽ mối quan hệ giữa Precision () và Recall ().
- Cả hai trục đều hoàn toàn không chứa trong công thức và chỉ tập trung vào lớp Dương tính thiểu số.
- Nếu mô hình đưa ra nhiều kết quả , Precision sẽ sụt giảm nghiêm trọng ngay lập tức, kéo tụt diện tích PR-AUC xuống mức thấp (ví dụ ), giúp Data Scientist nhận diện chính xác điểm yếu của mô hình.
- Bản chất công thức của ROC-AUC:
❓ Câu hỏi 2: Giải thích hiện tượng Target Leakage khi sử dụng Target Encoding. Làm thế nào để áp dụng kỹ thuật Out-of-Fold (OOF) Target Encoding để khắc phục triệt để?
- Gợi ý trả lời:
- Hiện tượng Target Leakage:
- Nếu ta tính giá trị trung bình của cột mục tiêu trên toàn bộ tập dữ liệu (bao gồm cả dòng hiện tại), nhãn của chính dòng đó đã bị rò rỉ vào biến đầu vào .
- Mô hình sẽ học một quy tắc "ăn gian": Chỉ cần nhìn vào giá trị mã hóa là suy đoán trực tiếp ra nhãn , dẫn đến điểm Train đạt nhưng điểm Test/Production sụp đổ hoàn toàn.
- Giải pháp Out-of-Fold (OOF) Target Encoding (Tương tự K-Fold CV):
- Chia tập Train thành phần (ví dụ ).
- Để mã hóa cho dữ liệu thuộc Fold 1: Ta tính giá trị Target Encoding trung bình chỉ dựa trên 4 Fold còn lại (Fold 2, 3, 4, 5).
- Lặp lại quy trình tương tự cho các Fold khác.
- Đối với tập Test độc lập: Ta sử dụng giá trị Target Encoding trung bình tính trên toàn bộ tập Train (kết hợp công thức Smoothing theo Bayes).
- Đảm bảo không có bất kỳ dòng nào được mã hóa bằng thông tin mục tiêu của chính nó!
- Hiện tượng Target Leakage:
❓ Câu hỏi 3: So sánh chiến lược phát triển cây Leaf-wise (Best-first) của LightGBM và Level-wise (Depth-wise) của XGBoost. Tại sao LightGBM lại có tốc độ huấn luyện vượt trội nhưng lại dễ bị Overfitting hơn nếu không kiểm soát tham số?
- Gợi ý trả lời:
- Level-wise của XGBoost:
- Phát triển cây theo từng tầng hoàn chỉnh: Duyệt qua tất cả các lá ở cùng một độ sâu và phân nhánh đồng thời cho đến khi đạt
max_depth. - Đặc điểm: Cây cân bằng, kiểm soát tốt độ phức tạp nhưng tốn tài nguyên tính toán ở những nhánh không mang lại nhiều độ giảm mất mát (Loss reduction).
- Phát triển cây theo từng tầng hoàn chỉnh: Duyệt qua tất cả các lá ở cùng một độ sâu và phân nhánh đồng thời cho đến khi đạt
- Leaf-wise của LightGBM:
- Tại mỗi bước, thuật toán chỉ chọn duy nhất 1 lá có độ giảm mất mát lớn nhất (Largest loss reduction) trong toàn bộ cây để tiếp tục phân nhánh, bất kể độ sâu của lá đó.
- Lý do vượt trội về tốc độ & độ chính xác: Đạt được hàm mất mát thấp hơn nhiều với cùng một số lượng lá (Leaves) so với Level-wise.
- Lý do dễ bị Overfitting:
- Do phát triển bất đối xứng, một nhánh có thể đâm rất sâu (Deep asymmetric structure), học vẹt các mẫu cục bộ nếu không giới hạn.
- Cách kiểm soát: Luôn thiết lập chặt chẽ tham số
max_depth,num_leaves(thường đặt ) vàmin_data_in_leaf(ngăn chặn việc phân tách các lá có quá ít dữ liệu).
- Level-wise của XGBoost:
6. Tóm Tắt Ghi Nhớ Nhanh (Key Takeaways)
- Tabular Data được thống trị bởi các thuật toán Gradient Boosting (XGBoost, LightGBM, CatBoost).
- Sử dụng PR-AUC thay vì ROC-AUC khi làm việc với tập dữ liệu mất cân bằng nghiêm trọng (Imbalanced Data).
- Luôn áp dụng Smoothing & Out-of-Fold (OOF) khi dùng Target Encoding để triệt tiêu Target Leakage.
- LightGBM nhanh nhất nhờ GOSS + EFB + Leaf-wise, trong khi CatBoost xử lý biến phân loại (Categorical) tự động xuất sắc nhất.
- Luôn
fit()các bước tiền xử lý trên tập Train và chỉtransform()trên tập Test để tránh rò rỉ dữ liệu.
0Claps