CatBoost Là Gì? Thuật Toán Gradient Boosting Cho Categorical Data

Gemini_generated_image_rv363nrv363nrv36

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):

$$\text{Category Value} \approx \text{Mean of Target for that Category}$$

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$:

$$\text{Encoding}_i = \frac{\sum_{j < i, x_j = x_i} y_j + a \cdot P}{\sum_{j < i, x_j = x_i} 1 + a}$$

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ẽ?

  1. 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.

  2. 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ó coi NaN như 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:

  1. Ordered Target Encoding: Mã hóa biến danh mục an toàn, triệt tiêu Target Leakage.

  2. 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.

  3. 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

  1. CatBoost Official Documentation: Tài liệu chính thức CatBoost

  2. Prokhorenkova et al. (2018): CatBoost: unbiased boosting with categorical features – NeurIPS Paper.

  3. 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

Chỉ mục