Series: Machine Learning Fundamentals – Bài 24
Ở bài trước, chúng ta đã khám phá LightGBM – một framework Gradient Boosting tập trung tối ưu tốc độ và dung lượng bộ nhớ nhờ Histogram-based Learning, Leaf-wise Growth, GOSS và EFB.
Nhưng trong các bài toán dữ liệu dạng bảng (Tabular Data) thực tế, bạn sẽ liên tục gặp phải loại dữ liệu này:
City: "Hanoi", "HCMC", "Da Nang", "Hai Phong"...
Job: "Developer", "Teacher", "Doctor", "Data Analyst"...
Device: "iPhone", "Samsung", "Xiaomi", "Oppo"...
Đây là các Categorical Features (biến phân loại).
Với XGBoost hay Decision Tree truyền thống, quy trình xử lý quen thuộc sẽ là:
Categorical Features
↓
One-Hot Encoding / Label Encoding
↓
High Dimensionality / Spurious Ordering
↓
Gradient Boosting Training
Nếu danh mục có hàng trăm, hàng nghìn giá trị (High Cardinality):
-
One-Hot Encoding làm bùng nổ số lượng cột (Sparse Matrix), tiêu tốn RAM khủng khiếp.
-
Label Encoding vô tình gán thứ tự vô lý (ví dụ: Hanoi = 1, HCMC = 2 $\rightarrow$ HCMC > Hanoi?).
Đó chính là lúc CatBoost thể hiện sức mạnh vượt trội.
CatBoost là gì?
CatBoost là viết tắt của:
Categorical + Boosting
Đây là một framework Gradient Boosting dựa trên Decision Tree, được phát triển bởi Yandex vào năm 2017.
Tài liệu chính thức mô tả CatBoost là một thư viện mã nguồn mở giúp xử lý hiệu quả các biến phân loại mà không cần tiền xử lý phức tạp, đồng thời giảm thiểu Overfitting nhờ thuật toán Boosting tiên tiến. Xem thêm tại CatBoost Documentation.
XGBoost → Tối ưu Regularization & Hardware Acceleration
LightGBM → Tối ưu Tốc độ & Dataset lớn (Histogram + Leaf-wise)
CatBoost → Tối ưu Xử lý Categorical Features & Anti-Overfitting
Vấn đề của Target Encoding thông thường
Một cách phổ biến để mã hóa biến danh mục là Target Encoding (thay Category bằng trung bình của Target):
Giả sử dữ liệu có cột City = “Hanoi”:
Row 1: Hanoi → Target = 1
Row 2: Hanoi → Target = 1
Row 3: Hanoi → Target = 0
Giá trị mã hóa cho “Hanoi” = $\frac{1 + 1 + 0}{3} = 0.67$.
Tuy nhiên, cách này gặp phải rủi ro cực lớn: Target Leakage (Rò rỉ dữ liệu).
Khi tính trung bình trên toàn bộ dataset, thông tin của chính quan sát đó đã bị dùng để dự đoán cho chính nó.
Giải pháp của CatBoost: Ordered Target Encoding
Để triệt tiêu Target Leakage, CatBoost giới thiệu kỹ thuật Ordered Target Encoding.
Ý tưởng rất tự nhiên: Chỉ dùng dữ liệu trong quá khứ để tính toán cho hiện tại.
Thuật toán đảo ngẫu nhiên (Permutation) thứ tự các dòng dữ liệu:
Original Order
↓
Random Permutation
↓
Row 1 (t=1) → Dùng làm quá khứ cho Row 2
Row 2 (t=2) → Tính Target Encoding từ Row 1
Row 3 (t=3) → Tính Target Encoding từ Row 1 & Row 2
...
Công thức tính giá trị mã hóa cho dòng thứ $i$:
Trong đó:
-
$y_j$: Giá trị Target của các dòng đứng trước dòng $i$.
-
$P$: Giá trị Prior (thường là trung bình Target toàn bộ dataset).
-
$a$: Trọng số Smoothing (tránh chia cho 0 hoặc nhiễu khi nhóm có quá ít mẫu).
Nhờ cơ chế này, thông tin của nhãn không bao giờ bị rò rỉ ngược về tương lai.
Oblivious Trees – Cấu trúc cây đối xứng đặc trưng
Khác với XGBoost (Depth-wise/Loss-guide) hay LightGBM (Leaf-wise), CatBoost xây dựng các Oblivious Trees (cây đối xứng hay Symmetric Trees).
Trong một Oblivious Tree, mọi Node ở cùng một độ sâu đều dùng chung một điều kiện Split.
Level-wise / Unbalanced Tree Oblivious Tree (CatBoost)
ROOT ROOT
/ \ / \
A B Feature 1 < 0.5?
/ \ / / \
C D E Node A Node B
/ / \ / \
F F2 < 10? F2 < 10? F2 < 10? F2 < 10?
Tại sao cây đối xứng lại mạnh mẽ?
-
Chống Overfitting cực tốt: Cấu trúc đối xứng hoạt động như một hình thức Regularization tự nhiên, ngăn cây mọc quá sâu lệch về một nhánh.
-
Tốc độ Inference nhanh kỷ lục: Nhờ cấu trúc đồng nhất, cây đối xứng có thể chuyển đổi trực tiếp thành các câu lệnh điều kiện dạng Bitwise (Vectorization) trên CPU/GPU.
Ordered Boosting – Chống lỗi Prediction Drift
Trong Gradient Boosting chuẩn, Gradient tại mỗi vòng lặp được tính dựa trên mô hình đã được huấn luyện với chính dữ liệu đó. Điều này gây ra Prediction Drift (Lệch dự đoán).
CatBoost giải quyết bằng Ordered Boosting:
-
Duy trì nhiều mô hình trung gian $M_1, M_2, …, M_n$.
-
Mô hình $M_i$ chỉ được huấn luyện trên $i$ mẫu đầu tiên.
-
Residual (sai số) cho mẫu thứ $i+1$ được tính từ mô hình $M_i$.
Dataset Permutation
↓
Train M_1 on Row 1 → Compute Residual for Row 2
Train M_2 on Row 1, 2 → Compute Residual for Row 3
Train M_3 on Row 1, 2, 3 → Compute Residual for Row 4
Cách làm này tốn nhiều tài nguyên hơn, nhưng giúp Gradient ước tính hoàn toàn không bị chệch.
CatBoost và khả năng tự động kết hợp Feature (Feature Combinations)
Nhiều mô hình thất bại vì các biến độc lập không thể hiện rõ Pattern khi đứng một mình, nhưng lại rất mạnh khi kết hợp với nhau.
Ví dụ:
-
User_IDđộc lập $\rightarrow$ Ít ý nghĩa. -
Categoryđộc lập $\rightarrow$ Ít ý nghĩa. -
User_ID+Category$\rightarrow$ Hành vi mua sắm đặc trưng!
CatBoost tự động tạo ra các kết hợp biến danh mục (Feature Combinations) ngay trong quá trình xây cây:
Split Level 1: City
↓
Split Level 2: Combine (City + Device)
↓
Split Level 3: Combine (City + Device + Age_Group)
Điều này tiết kiệm hàng giờ đồng hồ làm Feature Engineering thủ công.
So sánh XGBoost, LightGBM và CatBoost
| Tiêu chí | XGBoost | LightGBM | CatBoost |
| Xử lý Categorical | Cần Encoding trước | Hỗ trợ Integer Categorical | Hỗ trợ trực tiếp cực mạnh |
| Chiến lược cây | Level-wise / Depth-wise | Leaf-wise | Oblivious Tree (Symmetric) |
| Tốc độ Training | Trung bình | Rất nhanh | Tốt (Rất nhanh với GPU) |
| Tốc độ Predict | Trung bình | Nhanh | Siêu nhanh |
| Tuning nỗ lực | Cần Tune nhiều | Cần Tune cẩn thận | Mặc định (Default) đã rất tốt |
| Nguy cơ Overfit | Trung bình | Cao (nếu num_leaves lớn) | Thấp nhất |
Các Hyperparameter quan trọng trong CatBoost
iterations (hoặc n_estimators)
Số lượng cây tối đa tạo ra trong quá trình Boosting.
learning_rate
Tốc độ học. CatBoost thường tự động điều chỉnh chỉ số này dựa trên dataset và iterations.
depth
Độ sâu của cây đối xứng. Giá trị tối ưu thường nằm trong khoảng 4 đến 10 (mặc định là 6).
l2_leaf_reg
Hệ số Regularization L2 cho giá trị tại các lá. Giúp kiểm soát Overfitting.
cat_features
Mảng chứa chỉ số hoặc tên của các cột Categorical. Đây là thông số bắt buộc truyền vào nếu muốn CatBoost bật cơ chế Ordered Target Encoding.
Python
# Ví dụ khai báo trong Python
from catboost import CatBoostClassifier
cat_features = ['City', 'Job', 'Device']
model = CatBoostClassifier(
iterations=1000,
depth=6,
learning_rate=0.03,
cat_features=cat_features
)
Dữ liệu có cần Scale hay xử lý Missing Values không?
-
Feature Scaling: Không cần. Giống các thuật toán Decision Tree khác, CatBoost dựa trên thứ tự (Rank) của dữ liệu liên tục để tìm Split Threshold.
-
Missing Values: CatBoost có cơ chế tự động xử lý giá trị thiếu (
NaN). Với Numerical Features, nó coiNaNnhư giá trị nhỏ nhất hoặc lớn nhất tùy thuộc vào hướng giảm Loss.
Khi nào nên sử dụng CatBoost?
CatBoost là lựa chọn hàng đầu khi:
-
Dataset chứa nhiều biến Categorical (đặc biệt là biến có số lượng nhóm lớn như User ID, Postal Code, Product Category…).
-
Cần mô hình Baseline tốt ngay lập tức mà không mất nhiều thời gian Tune Hyperparameter.
-
Tốc độ suy luận (Inference Speed) cần cực nhanh khi triển khai vào ứng dụng thực tế.
-
Dữ liệu dạng bảng (Tabular Data) thuộc các bài toán:
-
Fraud Detection (Phát hiện gian lận)
-
Recommendation Systems (Hệ thống gợi ý)
-
Credit Scoring (Chấm điểm tín dụng)
-
Churn Prediction (Dự đoán khách hàng rời bỏ)
-
Một Workflow triển khai thực tế
Raw Tabular Data
↓
Khai báo danh sách `cat_features`
↓
Train / Validation / Test Split
↓
CatBoost Baseline (Tham số Mặc định)
↓
Đánh giá bằng Cross Validation
↓
Tune `depth`, `l2_leaf_reg` nếu cần
↓
Export Model sang C++ / ONNX / Java (Tối ưu Inference)
↓
Deployment
Kết luận
CatBoost đã hoàn thiện “Bộ ba quyền lực” của Gradient Boosting trên dữ liệu dạng bảng cùng với XGBoost và LightGBM.
Ba điểm cốt lõi cần nhớ về CatBoost:
-
Ordered Target Encoding: Mã hóa biến danh mục an toàn, triệt tiêu Target Leakage.
-
Oblivious Trees: Cấu trúc cây đối xứng giúp chống Overfitting và tăng tốc dự đoán vượt trội.
-
Ordered Boosting: Giúp Gradient được tính toán không chệch (unbiased), đảm bảo mô hình tổng quát hóa tốt.
Tài liệu tham khảo
-
CatBoost Official Documentation: Tài liệu chính thức CatBoost
-
Prokhorenkova et al. (2018): CatBoost: unbiased boosting with categorical features – NeurIPS Paper.
-
Yandex Research Project: CatBoost trên GitHub
Khóa học tại MCNA Technology School
Nếu bạn muốn thực hành Machine Learning, Python và xây dựng các mô hình trên dữ liệu thực tế, có thể tham khảo:
-
🤖 Combo 5 khóa AI & Power BI: Xem khóa học AI & Power BI
-
🐍 Combo Python: Xem Combo Python
Tác giả: Bùi Đình Tuyển – Data Analyst tại MCNA Technology School
📞 Hotline: 0939.866.825 (Mr. Minh Khang)
🌐 Website: MCNA Technology School
📍 Hà Nội: 30 Trung Liệt, Đống Đa | Liền kề 44B TT2 Văn Quán, Hà Đông
📍 TP.HCM: 50B Phan Tây Hồ, Cầu Kiệu

