Cây quyết định hồi quy (Decision Tree Regression) là một mô hình học máy phi tuyến và hoàn toàn phi tham số. Điều này có nghĩa là thuật toán không áp đặt bất kỳ giả định thống kê nghiêm ngặt nào về phân phối của dữ liệu, cũng như không gò ép mối quan hệ giữa biến đầu vào và biến mục tiêu phải tuân theo một phương trình tuyến tính hay một công thức toán học cố định nào.
Thay vì vậy, nó đưa ra dự báo bằng cách phân chia không gian đặc trưng một cách đệ quy thành các vùng hình chữ nhật nhỏ hơn. Tại mỗi bước phân chia, thuật toán sẽ tự động rà soát và lựa chọn đặc trưng cùng điểm cắt (ngưỡng) tối ưu nhất nhằm mục đích giảm thiểu tối đa phương sai (hoặc Sai số bình phương trung bình - MSE) bên trong các nhóm con vừa được tạo ra. Nhờ vào cơ chế rẽ nhánh linh hoạt này, Cây quyết định sở hữu khả năng tự nhiên trong việc mô hình hóa các mối quan hệ phi tuyến tính và những tương tác cực kỳ phức tạp giữa các biến mà Hồi quy tuyến tính truyền thống không thể tự nắm bắt được, đồng thời loại bỏ hoàn toàn sự phụ thuộc vào các kỹ thuật biến đổi đặc trưng phức tạp.
Khác biệt hoàn toàn với mô hình Hồi quy tuyến tính vốn luôn cố gắng tìm kiếm một phương trình hàm số tổng quát để vẽ một đường thẳng (hoặc siêu phẳng) đi qua toàn bộ dữ liệu, Cây quyết định hồi quy tiếp cận bài toán dự báo bằng các quy tắc logic "Nếu - Thì" (If - Then). Cấu trúc của mô hình được biểu diễn dưới dạng một sơ đồ cây lộn ngược trực quan, bao gồm ba thành phần cốt lõi:
Nút gốc (Root node): Đây là điểm khởi đầu của mô hình, chứa toàn bộ tập dữ liệu huấn luyện ban đầu. Tại đây, thuật toán sẽ rà soát và chọn ra biến số có sức mạnh phân chia tốt nhất để thực hiện phép rẽ nhánh đầu tiên.
Nút quyết định (Decision nodes / Internal nodes): Dữ liệu sau khi đi qua nút gốc sẽ tiếp tục rẽ nhánh xuống các nút trung gian. Mỗi nút này đại diện cho một điều kiện kiểm tra logic mới (ví dụ: Thu nhập > 50 triệu) để tiếp tục xẻ nhỏ không gian dữ liệu.
Nút lá (Leaf nodes): Là điểm dừng cuối cùng của cành cây khi thuật toán đáp ứng điều kiện dừng và không phân chia thêm nữa. Đối với bài toán hồi quy, giá trị dự báo cuối cùng tại một nút lá chính là trung bình cộng của tất cả các giá trị mục tiêu (target variable) thuộc các quan sát huấn luyện rơi vào vùng không gian đó.
Chính vì cơ chế chia không gian thành các vùng tĩnh và gán giá trị dự báo bằng mức trung bình tại mỗi vùng, kết quả của Decision Tree Regressor không tạo ra một đường thẳng mượt mà liên tục, mà mang hình dáng của một hàm hằng từng đoạn (hàm bậc thang).
Dưới góc độ quản trị kinh doanh, mô hình này được đánh giá rất cao về tính minh bạch và tính khả giải (Interpretability) vì nó hoạt động như một "hộp trắng" (White-box). Các nhà quản lý dù không rành về kỹ thuật lập trình vẫn có thể dễ dàng nhìn vào sơ đồ nhánh, truy xuất ngược lại logic ra quyết định của máy tính thông qua các quy tắc "Nếu - Thì" để hiểu rõ lý do thực tế đằng sau mỗi con số dự báo.
Một điểm khác biệt vô cùng quan trọng của Cây quyết định hồi quy (Decision Tree Regression) so với các thuật toán như K-Nearest Neighbors (KNN) hay Hồi quy tuyến tính là mô hình này không yêu cầu chuẩn hóa dữ liệu bằng StandardScaler hay MinMaxScaler.
Nguyên nhân cốt lõi xuất phát từ cơ chế phân chia của thuật toán: cây quyết định hoạt động dựa trên việc rà soát thứ tự và thiết lập các ngưỡng phân chia (thresholds) tuyệt đối độc lập trên từng biến, chứ không hề tính toán dựa trên khoảng cách hình học hay tích vô hướng giữa các vector dữ liệu.
Để dễ hình dung, giả sử bạn đang dự báo giá nhà dựa trên hai biến: Diện tích (tính bằng mét vuông, dao động từ 30 đến 200) và Giá trị tài sản xung quanh (tính bằng tỷ đồng, dao động từ hàng chục đến hàng trăm tỷ).
Nếu dùng thuật toán KNN, sự chênh lệch thang đo khổng lồ này sẽ khiến biến tiền tệ lấn át hoàn toàn biến diện tích, buộc bạn phải dùng StandardScaler để ép chúng về cùng hệ quy chiếu.
Tuy nhiên, với Cây quyết định, thuật toán xử lý từng đặc trưng một cách hoàn toàn độc lập. Nó chỉ đơn giản đặt ra các câu hỏi chia cắt như: "Diện tích có > 100m² không?" hoặc "Giá trị tài sản > 50 tỷ không?". Chính vì vậy, sự chênh lệch về thang đo (scale) giữa các đặc trưng đầu vào hoàn toàn không làm sai lệch hay ảnh hưởng đến kết quả dự báo của mô hình.
💡 Ý nghĩa thực tiễn: Đặc tính không cần chuẩn hóa này mang lại một lợi thế cực lớn trong kinh doanh: Bảo toàn tính giải thích nguyên bản. Khi bạn trình bày sơ đồ cây quyết định cho Ban giám đốc, các nút rẽ nhánh sẽ hiển thị chính xác các con số thực tế (ví dụ: Thu_nhap <= 20.000.000 VNĐ), thay vì hiển thị các con số đã bị chuẩn hóa rất khó hiểu (ví dụ: Thu_nhap <= 1.25 độ lệch chuẩn). Điều này giúp mô hình Cây quyết định trở nên cực kỳ thân thiện và minh bạch đối với những người dùng không chuyên về kỹ thuật.
Sở hữu khả năng tự động học các quy luật phi tuyến tính phức tạp mà không cần dựa trên phương trình cố định, Cây quyết định (Decision Tree) là một thuật toán rất mạnh mẽ. Tuy nhiên, nó lại mang một "gót chân Achilles" chí mạng: cực kỳ dễ rơi vào thảm họa Quá khớp (Overfitting),.
Bản chất của cạm bẫy Quá khớp Sự cố này bắt nguồn từ chính cơ chế "tham lam" (greedy) của thuật toán. Nếu người phân tích không đặt ra bất kỳ ràng buộc nào (ví dụ thiết lập max_depth=None), thuật toán sẽ liên tục xẻ nhỏ không gian dữ liệu một cách vô tận cho đến khi mỗi nút lá chỉ còn chứa một vài quan sát, hoặc đạt đến độ thuần khiết tuyệt đối,,.
Lúc này, thay vì học một quy luật tổng quát, mô hình lại đi "học thuộc lòng" toàn bộ tập dữ liệu huấn luyện, bao gồm cả những biến động ngẫu nhiên, nhiễu (noise) và các giá trị ngoại lệ (outliers). Kết quả là mô hình đạt được một trạng thái ảo tưởng: điểm số dự báo trên tập Huấn luyện (Train) có thể đạt mức hoàn hảo 100% (hoặc sai số bằng 0), nhưng lại thất bại thảm hại khi dự báo các dữ liệu mới trong tập Kiểm tra (Test),. Mô hình lúc này mang phương sai cực cao (High Variance) và hoàn toàn mất đi tính ứng dụng thực tiễn.
Kỷ luật Cắt tỉa (Pruning) và Vai trò của max_depth Để ngăn chặn việc cây phát triển hoang dã, nhà phân tích dữ liệu bắt buộc phải áp dụng các kỹ thuật Cắt tỉa (Pruning) nhằm khống chế độ phức tạp của mô hình,. Trong thư viện scikit-learn, phương pháp phổ biến và trực quan nhất là Cắt tỉa trước (Pre-pruning) thông qua việc can thiệp vào các siêu tham số, đặc biệt là max_depth (Độ sâu tối đa của cây),.
Việc tinh chỉnh max_depth chính là bài toán nghệ thuật đi tìm sự cân bằng Bias-Variance:
Khi max_depth quá nhỏ (ví dụ bằng 1 hoặc 2): Cây quyết định bị cắt quá cụt, dẫn đến mô hình quá đơn giản. Nó sẽ không đủ sức mạnh để nắm bắt các mối quan hệ phức tạp trong dữ liệu, gây ra hiện tượng Kém khớp (Underfitting),.
Khi max_depth quá lớn: Cây mọc quá sâu, dẫn đến thảm họa Quá khớp (Overfitting) như đã phân tích ở trên,.
Điểm tối ưu: Là độ sâu mà tại đó cây đủ chi tiết để phân loại/hồi quy chính xác, nhưng đủ khái quát để không bị nhiễu đánh lừa,. Tương tự như việc tìm số K trong thuật toán KNN, giá trị max_depth tối ưu không bao giờ được chọn bằng cảm tính, mà bắt buộc phải sử dụng công cụ Kiểm định chéo K-lần (K-Fold Cross-Validation) kết hợp với Grid Search để rà soát một cách khoa học,.
(Bên cạnh max_depth, người ta còn có thể kết hợp thêm các siêu tham số khác như min_samples_split - số lượng mẫu tối thiểu để tiếp tục chia nút, hoặc min_samples_leaf - số lượng mẫu tối thiểu bắt buộc phải có ở một nút lá để giới hạn mô hình).
Để minh họa trực quan nguyên lý hoạt động cũng như "gót chân Achilles" của thuật toán Cây quyết định hồi quy, chúng ta sẽ giải quyết một bài toán kinh doanh kinh điển: Dự báo Doanh số bán hàng dựa trên Ngân sách Quảng cáo.
Trong ví dụ này, chúng ta sẽ cố tình huấn luyện đồng thời hai mô hình: một cây được kiểm soát độ sâu (max_depth=3) và một cây phát triển hoàn toàn tự do (max_depth=None) để quan sát rõ hình dáng "hàm bậc thang" và hiện tượng Quá khớp (Overfitting) đã được cảnh báo.
Đặc biệt lưu ý: Trong đoạn mã dưới đây, bước chuẩn hóa dữ liệu (StandardScaler) đã hoàn toàn bị lược bỏ vì Cây quyết định phân chia dữ liệu dựa trên ngưỡng giá trị tuyệt đối chứ không dùng phép tính khoảng cách.
Bạn có thể sao chép toàn bộ đoạn mã dưới đây, dán vào Google Colab và ấn Run để quan sát trực tiếp kết quả:
import numpy as np
import matplotlib.pyplot as plt
from sklearn.tree import DecisionTreeRegressor
# =====================================================================
# BƯỚC 1: TỰ TẠO DỮ LIỆU MÔ PHỎNG (Ngân sách Quảng cáo -> Doanh số)
# =====================================================================
np.random.seed(42)
# X: Ngân sách quảng cáo dao động từ 10 đến 100 triệu VNĐ
# Phải sort (sắp xếp) dữ liệu X để khi vẽ biểu đồ đường thẳng không bị đan chéo
X_budget = np.sort(np.random.uniform(10, 100, 80)).reshape(-1, 1)
# y: Doanh số thực tế (có xu hướng tăng phi tuyến tính và bão hòa) + Nhiễu ngẫu nhiên
y_sales = np.sin(X_budget / 15) * 50 + 100 + np.random.normal(0, 10, X_budget.shape)
# =====================================================================
# BƯỚC 2: HUẤN LUYỆN 2 MÔ HÌNH CÂY QUYẾT ĐỊNH (KHÔNG CẦN CHUẨN HÓA)
# =====================================================================
# Mô hình 1: Cây được khống chế độ sâu (Good Fit / Nắm bắt xu hướng tốt)
tree_good = DecisionTreeRegressor(max_depth=3, random_state=42)
tree_good.fit(X_budget, y_sales)
# Mô hình 2: Cây phát triển tự do (Overfitting / Học thuộc lòng)
tree_overfit = DecisionTreeRegressor(max_depth=None, random_state=42)
tree_overfit.fit(X_budget, y_sales)
# =====================================================================
# BƯỚC 3: DỰ BÁO TRÊN TẬP DỮ LIỆU LIÊN TỤC ĐỂ VẼ ĐƯỜNG RANH GIỚI
# =====================================================================
# Tạo một tập dữ liệu X mới cực kỳ dày đặc (từ 10 đến 100, cách nhau 0.1) để vẽ đường mượt mà
X_test_plot = np.arange(10, 100, 0.1).reshape(-1, 1)
y_pred_good = tree_good.predict(X_test_plot)
y_pred_overfit = tree_overfit.predict(X_test_plot)
# =====================================================================
# BƯỚC 4: TRỰC QUAN HÓA SO SÁNH "GOOD FIT" VS "OVERFITTING"
# =====================================================================
plt.figure(figsize=(12, 6))
# Vẽ các điểm dữ liệu thực tế
plt.scatter(X_budget, y_sales, color='gray', edgecolor='black', label='Dữ liệu thực tế (Có nhiễu)', s=40)
# Vẽ đường dự báo của Cây Depth=3
plt.plot(X_test_plot, y_pred_good, color='green', linewidth=3,
label='Cây Depth=3 (Ổn định, Nắm bắt xu hướng tổng quát)')
# Vẽ đường dự báo của Cây Depth=None
plt.plot(X_test_plot, y_pred_overfit, color='red', linewidth=1.5, alpha=0.8,
label='Cây Depth=None (Overfitting, "Học vẹt" cả nhiễu)')
plt.title('Decision Tree Regression: Bẫy Overfitting trong dự báo Doanh số', fontsize=14, fontweight='bold')
plt.xlabel('Ngân sách Quảng cáo (Triệu VNĐ)', fontsize=12)
plt.ylabel('Doanh số (Triệu VNĐ)', fontsize=12)
plt.legend(loc='upper left')
plt.grid(alpha=0.3)
plt.show()
Phân tích kết quả từ mã nguồn:
Khi bạn chạy đoạn mã trên, một biểu đồ vô cùng trực quan sẽ hiện ra, phản ánh chính xác bản chất toán học của Cây quyết định:
Hình dáng Hàm bậc thang: Khác hoàn toàn với đường thẳng dốc lên của Linear Regression, cả hai đường dự báo màu xanh và màu đỏ đều có hình dáng gấp khúc như các bậc thang. Điều này xảy ra do mô hình phân chia không gian thành các vùng tĩnh và trả về giá trị trung bình tại mỗi vùng đó. Để vẽ được đường bậc thang này một cách chuẩn xác mà không bị đan chéo, chúng ta bắt buộc phải sử dụng hàm np.sort() để sắp xếp dữ liệu trên trục hoành.
Sự ổn định của max_depth = 3 (Đường màu xanh lá): Với độ sâu giới hạn, cây quyết định chỉ tạo ra tối đa 8 vùng không gian ($2^3$). Kết quả là một đường dự báo có các bậc thang rộng, uốn lượn nhịp nhàng theo xu hướng doanh số cốt lõi mà không bị ảnh hưởng bởi các biến động nhỏ lẻ.
Thảm họa Quá khớp khi max_depth = None (Đường màu đỏ): Khi để cây tự do phát triển, nó đã tạo ra hàng chục ngưỡng cắt nhỏ li ti để bám sát và đi qua gần như tuyệt đối từng chấm xám (điểm dữ liệu) trên đồ thị. Mô hình này tuy có sai số huấn luyện (Train Error) gần bằng 0, nhưng nó trở nên cực kỳ hỗn loạn, liên tục nhảy vọt lên xuống thất thường. Bất cứ một giám đốc kinh doanh nào nhìn vào đường màu đỏ cũng sẽ thấy nó hoàn toàn vô dụng để định hướng ngân sách cho tương lai.
Đây là minh chứng trực quan mạnh mẽ nhất để thấy tại sao việc khống chế siêu tham số lại đóng vai trò sinh tử khi sử dụng Decision Tree.
Việc ứng dụng Cây quyết định hồi quy (Decision Tree Regressor) vào phân tích dữ liệu không chỉ dừng lại ở các con số sai số kỹ thuật, mà còn mang lại những giá trị chiến lược to lớn cho công tác quản trị kinh doanh, được thể hiện qua ba khía cạnh cốt lõi sau:
1. Tính minh bạch tuyệt đối của mô hình "Hộp trắng" (White-box Interpretability) Khác với các thuật toán học máy phức tạp thường bị coi là "hộp đen" (black-box) khó giải thích, Cây quyết định mang lại ưu thế vượt trội về tính khả giải (Interpretability) nhờ cấu trúc minh bạch. Mô hình này cho phép các nhà quản lý không chuyên về kỹ thuật dễ dàng truy vết và hiểu rõ quy luật logic đằng sau mỗi dự báo thông qua các quy tắc "Nếu - Thì" trực quan. Ưu điểm này cực kỳ quan trọng trong kinh doanh, vì cách ra quyết định của thuật toán rất gần gũi với tư duy phân tích của con người. Ví dụ, khi phải giải trình với ban giám đốc về dự báo doanh thu hoặc lý do một hồ sơ tín dụng bị từ chối, người phân tích có thể chỉ ra chính xác lộ trình các điều kiện rẽ nhánh (như thu nhập chưa đạt ngưỡng kết hợp với điểm tín dụng thấp) thay vì đưa ra các phương trình toán học trừu tượng.
2. Khám phá các "ngưỡng tác động" (Thresholds) để tối ưu hóa nguồn lực Trong thực tế kinh doanh, mối quan hệ giữa các biến số (chẳng hạn như ngân sách quảng cáo và doanh thu) hiếm khi tuân theo một đường thẳng tuyến tính tăng đều đặn, mà thường tồn tại các điểm bão hòa hoặc những khúc quanh phức tạp. Nhờ cơ chế liên tục thử nghiệm các cách chia dữ liệu nhằm giảm thiểu sai số, Cây quyết định có khả năng tự động khám phá và mô hình hóa các ranh giới phi tuyến này mà Hồi quy tuyến tính truyền thống không thể làm được. Thông qua các nút rẽ nhánh của cây, doanh nghiệp có thể phát hiện ra những "ngưỡng bứt phá" thực sự. Ví dụ, sơ đồ cây có thể tiết lộ rằng chỉ khi ngân sách quảng cáo vượt ngưỡng 50 triệu đồng kết hợp với việc lượng truy cập website đạt một mức nhất định, doanh số mới thực sự bùng nổ. Điều này giúp các giám đốc tối ưu hóa điểm rơi của ngân sách, thiết kế các chiến dịch chính xác hơn thay vì rải tiền mù quáng hoặc lạm dụng giảm giá.
3. Hậu quả chiến lược của thảm họa Quá khớp (Overfitting) Bài học từ biểu đồ thực hành (đường dự báo màu đỏ giật cục ở mục 5.3.4) đưa ra một cảnh báo nghiêm khắc về mặt quản trị. Cây quyết định sở hữu điểm yếu chí mạng là cực kỳ dễ rơi vào trạng thái quá khớp (overfitting) nếu không được thiết lập ràng buộc khống chế độ sâu (max_depth). Khi để cây tự do phát triển quá sâu, nó sẽ "học thuộc lòng" từng điểm dữ liệu lịch sử, bao gồm cả những biến động ngẫu nhiên, sự kiện bất thường hay dữ liệu nhiễu. Nếu doanh nghiệp tin tưởng và ra quyết định dựa trên một mô hình bị Overfitting, họ sẽ tự đưa mình vào rủi ro xây dựng các chiến lược cực kỳ vụn vặt và bất ổn. Bởi lẽ, khi đó doanh nghiệp đang phản ứng thái quá với các yếu tố nhiễu nhỏ lẻ trong quá khứ thay vì nắm bắt được xu hướng tăng trưởng cốt lõi của thị trường trong tương lai.