Mở Đầu

Trong thời đại dữ liệu ngày càng phong phú, việc đưa ra quyết định nhanh chóng và chính xác là yếu tố then chốt giúp các doanh nghiệp và nhà nghiên cứu đạt được lợi thế cạnh tranh. Cây quyết định (Decision Tree) là một trong những mô hình học máy đơn giản, dễ hiểu và mạnh mẽ, được áp dụng rộng rãi trong các lĩnh vực như tài chính, y tế, marketing, và quản lý rủi ro. Bài viết này sẽ cung cấp cho bạn một hướng dẫn chi tiết, từ những kiến thức cơ bản nhất đến các kỹ thuật nâng cao, nhằm giúp bạn vẽ cây quyết định một cách hiệu quả và tối ưu.

1. Tổng Quan Về Cây Quyết Định

1.1 Định Nghĩa

Cây quyết định là một cấu trúc dạng cây, trong đó mỗi nút nội bộ (internal node) đại diện cho một điều kiện kiểm tra (feature test), mỗi nhánh (branch) đại diện cho kết quả của điều kiện, và mỗi nút lá (leaf node) đại diện cho kết quả dự đoán (class label hoặc giá trị liên tục).

1.2 Ưu Điểm

Cách Vẽ Cây Quyết Định
Cách Vẽ Cây Quyết Định
Ưu điểm Mô tả
Dễ hiểu Cấu trúc cây trực quan, người không chuyên cũng có thể đọc được.
Không yêu cầu chuẩn hoá dữ liệu Không cần chuẩn hoá hoặc chuẩn hoá tính năng.
Xử lý dữ liệu hỗn hợp Có thể làm việc với dữ liệu số và danh mục cùng lúc.
Tự động lựa chọn tính năng Thuật toán tự động chọn các tính năng quan trọng nhất.
Khả năng mở rộng Dễ dàng mở rộng sang các mô hình ensemble như Random Forest, Gradient Boosting.

1.3 Nhược Điểm

  • Dễ bị overfitting khi cây quá sâu.
  • Không ổn định với đổi biến nhỏ trong dữ liệu.
  • Không thể mô hình hoá các mối quan hệ phi tuyến phức tạp nếu không có đủ độ sâu.

2. Các Thuật Toán Xây Dựng Cây Quyết Định

2.1 ID3 (Iterative Dichotomiser 3)

  • Tiêu chí chia: Thông tin lợi nhuận (Information Gain) dựa trên entropy.
  • Ưu điểm: Đơn giản, nhanh chóng.
  • Nhược điểm: Ưu tiên các thuộc tính có nhiều giá trị, dễ overfit.

2.2 C4.5

  • Tiêu chí chia: Gain Ratio (Information Gain được chuẩn hoá).
  • Khả năng: Xử lý dữ liệu mất giá trị, cắt tỉa (pruning) sau khi xây dựng.
  • Ưu điểm: Cải thiện ID3, giảm bias.

2.3 CART (Classification and Regression Trees)

Cách Vẽ Cây Quyết Định
Cách Vẽ Cây Quyết Định
  • Tiêu chí chia: Gini impurity cho bài toán phân loại, MSE cho hồi quy.
  • Cây nhị phân: Mỗi nút chỉ có 2 nhánh (true/false).
  • Cắt tỉa: Sử dụng cost-complexity pruning (CCP) để giảm overfitting.

2.4 CHAID (Chi-squared Automatic Interaction Detector)

  • Tiêu chí: Kiểm định chi-squared cho các biến danh mục, F-test cho biến số.
  • Đặc điểm: Cho phép nhiều hơn 2 nhánh tại mỗi nút.

3. Các Bước Cơ Bản Để Vẽ Cây Quyết Định

Bước 1: Thu Thập và Chuẩn Bị Dữ Liệu

  1. Thu thập dữ liệu: Đảm bảo dữ liệu đại diện cho vấn đề.
  2. Xử lý missing values: Loại bỏ, thay thế bằng mean/median hoặc dùng thuật toán đặc biệt.
  3. Mã hoá biến danh mục: Sử dụng One-Hot Encoding hoặc Label Encoding (đối với các thuật toán như CART không cần).
  4. Chia tập dữ liệu: Train (70-80%), Test (20-30%).

Bước 2: Lựa Chọn Thuật Toán

  • Phân loại: ID3, C4.5, CART, CHAID.
  • Hồi quy: CART (Regression Tree).

Bước 3: Xây Dựng Cây

  1. Tính chỉ số chia (splitting criterion) cho mỗi thuộc tính.
  2. Chọn thuộc tính tốt nhất (có chỉ số cao nhất) để tạo nút gốc.
  3. Tách dữ liệu thành các nhánh dựa trên giá trị thuộc tính.
  4. Lặp lại quá trình cho mỗi nhánh cho đến khi:
  5. Đạt độ sâu tối đa.
  6. Không còn cải thiện chỉ số.
  7. Số mẫu trong nút nhỏ hơn ngưỡng tối thiểu.

Bước 4: Cắt Tỉa (Pruning)

Cách Vẽ Cây Quyết Định
Cách Vẽ Cây Quyết Định
  • Pre-pruning: Dừng sớm khi đạt các tiêu chí (độ sâu, số mẫu tối thiểu).
  • Post-pruning: Xây dựng cây đầy đủ rồi cắt tỉa bằng cross-validation hoặc cost-complexity.

Bước 5: Đánh Giá Mô Hình

  • Đối với phân loại: Accuracy, Precision, Recall, F1-score, ROC-AUC.
  • Đối với hồi quy: RMSE, MAE, R².

Bước 6: Triển Khai và Giải Thích

  • Triển khai: Export mô hình (pickle, joblib) hoặc chuyển thành mã rule.
  • Giải thích: Dễ dàng trích xuất các rule dạng “Nếu … thì …”.

4. Thực Hành: Vẽ Cây Quyết Định Bằng Python

Dưới đây là một ví dụ chi tiết sử dụng thư viện scikit-learn để vẽ cây quyết định cho bộ dữ liệu Iris.

# Bước 1: Import thư viện
import pandas as pd
import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier, plot_tree
from sklearn.metrics import accuracy_score, classification_report
import matplotlib.pyplot as plt # Bước 2: Load dữ liệu
iris = load_iris()
X = pd.DataFrame(iris.data, columns=iris.feature_names)
y = pd.Series(iris.target, name='target') # Bước 3: Chia tập train và test
X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.3, random_state=42, stratify=y) # Bước 4: Khởi tạo và huấn luyện cây (CART)
clf = DecisionTreeClassifier( criterion='gini', # hoặc 'entropy' cho Information Gain max_depth=3, # giới hạn độ sâu để tránh overfitting min_samples_leaf=5, # số mẫu tối thiểu ở lá random_state=42
)
clf.fit(X_train, y_train) # Bước 5: Dự đoán và đánh giá
y_pred = clf.predict(X_test)
print('Accuracy:', accuracy_score(y_test, y_pred))
print(classification_report(y_test, y_pred, target_names=iris.target_names)) # Bước 6: Vẽ cây
plt.figure(figsize=(12,8))
plot_tree(clf, feature_names=iris.feature_names, class_names=iris.target_names, filled=True, rounded=True, impurity=False, proportion=True)
plt.title('Cây Quyết Định - Iris Dataset')
plt.show()

Giải Thích Kết Quả

Cách Vẽ Cây Quyết Định
Cách Vẽ Cây Quyết Định
  • Accuracy thường trên 0.9 cho bộ dữ liệu Iris khi giới hạn độ sâu hợp lý.
  • Cây vẽ hiển thị các điều kiện như petal width (cm) <= 0.8… giúp người dùng hiểu rõ quy tắc phân loại.

5. Kỹ Thuật Nâng Cao Để Tối Ưu Cây Quyết Định

5.1 Grid Search & Cross-Validation

Sử dụng GridSearchCV để tìm siêu tham số tối ưu (max_depth, min_samples_split, min_samples_leaf, criterion).

from sklearn.model_selection import GridSearchCV param_grid = { 'max_depth': 2,3,4,5,6, 'min_samples_leaf': 1,2,4,6, 'criterion': 'gini', 'entropy'
}
grid = GridSearchCV(DecisionTreeClassifier(random_state=42), param_grid, cv=5, scoring='accuracy')
grid.fit(X_train, y_train)
print('Best params:', grid.best_params_)
print('Best CV score:', grid.best_score_)

5.2 Cost-Complexity Pruning (CCP)

path = clf.cost_complexity_pruning_path(X_train, y_train)
ccp_alphas, impurities = path.ccp_alphas, path.impurities # Lựa chọn alpha tối ưu qua cross-validation
best_alpha = ccp_alphasnp.argmin(impurities) # ví dụ đơn giản
pruned_clf = DecisionTreeClassifier(random_state=42, ccp_alpha=best_alpha)
pruned_clf.fit(X_train, y_train)

5.3 Feature Importance

importances = clf.feature_importances_
for name, imp in zip(iris.feature_names, importances): print(f'{name}: {imp:.4f}')

5.4 Ensemble: Random Forest & Gradient Boosting

Cách Vẽ Cây Quyết Định
Cách Vẽ Cây Quyết Định
  • Random Forest: Tạo nhiều cây quyết định trên các bootstrap sample, giảm variance.
  • Gradient Boosting: Xây dựng cây tuần tự, mỗi cây học lỗi của cây trước, giảm bias.
from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier rf = RandomForestClassifier(n_estimators=100, random_state=42)
rf.fit(X_train, y_train) gb = GradientBoostingClassifier(n_estimators=100, learning_rate=0.1, random_state=42)
gb.fit(X_train, y_train)

6. Ứng Dụng Thực Tế Của Cây Quyết Định

Ngành Vấn đề Cách dùng cây quyết định
Tài chính Rủi ro vay vốn Dự đoán khả năng vỡ nợ dựa trên thu nhập, lịch sử tín dụng.
Y tế Chẩn đoán bệnh Phân loại bệnh nhân thành nhóm nguy cơ cao/thấp dựa trên các chỉ số sinh học.
Marketing Phân khúc khách hàng Xác định nhóm khách hàng tiềm năng cho chiến dịch quảng cáo.
Sản xuất Dự đoán lỗi máy Dự báo lỗi thiết bị dựa trên nhiệt độ, áp suất, thời gian vận hành.
Giáo dục Dự đoán thành tích Dự đoán khả năng tốt nghiệp dựa trên điểm trung bình, giờ học, tham gia hoạt động.

7. Những Sai Lầm Thường Gặp Khi Vẽ Cây Quyết Định

  1. Không cắt tỉa: Để cây quá sâu dẫn tới overfitting.
  2. Chọn sai tiêu chí chia: Ví dụ dùng Gini cho dữ liệu mất cân bằng nghiêm trọng.
  3. Bỏ qua việc cân bằng lớp: Khi có lớp không cân bằng, cần dùng kỹ thuật oversampling/undersampling hoặc thay đổi metric.
  4. Không chuẩn hoá dữ liệu: Mặc dù cây không yêu cầu, nhưng khi kết hợp với các mô hình ensemble có thể ảnh hưởng.
  5. Quá phụ thuộc vào một feature: Kiểm tra multicollinearity, loại bỏ các feature lặp lại.

8. Kết Luận

Cây quyết định là một công cụ mạnh mẽ, vừa dễ hiểu vừa linh hoạt, phù hợp cho cả người mới bắt đầu lẫn các chuyên gia dữ liệu. Việc vẽ cây quyết định không chỉ dừng lại ở việc áp dụng thuật toán, mà còn đòi hỏi:

  • Hiểu rõ dữ liệu và tiền xử lý hợp lý.
  • Lựa chọn tiêu chí và siêu tham số phù hợp.
  • Áp dụng cắt tỉa để tránh overfitting.
  • Đánh giá và giải thích mô hình một cách khách quan.

Bằng cách nắm vững các bước và kỹ thuật nêu trên, bạn sẽ tự tin xây dựng các cây quyết định chất lượng, hỗ trợ đưa ra những quyết định kinh doanh và nghiên cứu thông minh hơn. Hãy bắt đầu thực hành ngay hôm nay, khám phá sức mạnh của cây quyết định trong dự án của bạn!

Rate this post
Mục nhập này đã được đăng trong Blog. Đánh dấu trang permalink.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *