Series: Machine Learning Fundamentals – Bài 20
Ở bài trước, chúng ta đã tìm hiểu Decision Tree – một mô hình có khả năng học các quy tắc từ dữ liệu dưới dạng một chuỗi câu hỏi.
Decision Tree có một lợi thế rất lớn: dễ hiểu và dễ giải thích.
Nhưng nó cũng có một điểm yếu đáng kể:
Một Decision Tree đơn lẻ có thể rất nhạy cảm với dữ liệu và dễ Overfitting.
Nếu một cây chưa đủ ổn định, điều gì sẽ xảy ra nếu chúng ta huấn luyện 100, 500 hay thậm chí 1.000 cây, sau đó để chúng cùng đưa ra quyết định?
Đó chính là ý tưởng đứng sau Random Forest.
Random Forest là gì?
Random Forest là một thuật toán Ensemble Learning kết hợp nhiều Decision Tree để tạo ra một mô hình dự đoán ổn định hơn.
Thay vì:
Data
↓
Decision Tree
↓
Prediction
Random Forest hoạt động gần giống:
┌→ Tree 1 ─→ Prediction 1
│
├→ Tree 2 ─→ Prediction 2
Training Data ───┼→ Tree 3 ─→ Prediction 3
│
├→ ...
│
└→ Tree N ─→ Prediction N
↓
Voting / Averaging
↓
Final Prediction
Mỗi Decision Tree đưa ra một dự đoán.
Random Forest tổng hợp các dự đoán đó để tạo ra kết quả cuối cùng.
Tại sao lại cần nhiều cây?
Giả sử bạn muốn dự đoán một khách hàng có khả năng rời bỏ dịch vụ hay không.
Một Decision Tree đưa ra:
Churn
Nhưng cây này có thể đã học quá nhiều từ một số mẫu cụ thể trong Training Set.
Thay vì tin vào một cây, chúng ta hỏi 100 cây:
Tree 1 → Churn
Tree 2 → No Churn
Tree 3 → Churn
Tree 4 → Churn
Tree 5 → No Churn
...
Tree 100 → Churn
Nếu:
- 73 cây → Churn
- 27 cây → No Churn
Random Forest có thể đưa ra:
Final Prediction → Churn
Ý tưởng rất giống việc tham khảo ý kiến của một tập thể thay vì chỉ hỏi một người.
Nhưng để cách này hiệu quả, các cây không nên giống hệt nhau.
Và đây là nơi chữ “Random” xuất hiện.
Random Forest “Random” ở đâu?
Random Forest tạo ra sự khác biệt giữa các cây chủ yếu thông qua hai cơ chế:
1. Bootstrap Sampling
2. Random Feature Selection
Hai yếu tố này giúp các cây học từ những góc nhìn khác nhau của dữ liệu.
1. Bootstrap Sampling
Giả sử Training Set có 10.000 mẫu.
Thay vì cho mọi Decision Tree học chính xác cùng 10.000 mẫu đó, Random Forest tạo ra nhiều tập dữ liệu khác nhau bằng Bootstrap Sampling.
Bootstrap Sampling là lấy mẫu có hoàn lại.
Ví dụ dữ liệu ban đầu:
A B C D E
Một Bootstrap Sample có thể là:
A C C D E
Sample khác:
B B C E A
Một mẫu có thể xuất hiện nhiều lần, trong khi một số mẫu khác không xuất hiện.
Sau đó:
Bootstrap Sample 1 → Tree 1
Bootstrap Sample 2 → Tree 2
Bootstrap Sample 3 → Tree 3
...
Bootstrap Sample N → Tree N
Nhờ vậy, mỗi cây nhìn thấy một phiên bản hơi khác của Training Data.
2. Random Feature Selection
Random Forest còn tạo thêm sự khác biệt bằng cách không cho mỗi Split nhìn thấy toàn bộ Feature.
Giả sử dataset có:
Age
Income
Credit Score
Debt Ratio
Location
Purchase History
Một Decision Tree thông thường có thể xem xét cả 6 Feature để tìm Split tốt nhất.
Random Forest có thể chỉ cho một Node xem:
Age
Credit Score
Location
Node tiếp theo lại được xem:
Income
Debt Ratio
Purchase History
Việc chọn ngẫu nhiên Feature khiến các cây trở nên khác nhau hơn.
Tại sao cần làm các cây khác nhau?
Nếu chúng ta tạo 100 Decision Tree giống hệt nhau:
Tree 1 = Tree 2 = Tree 3 = ... = Tree 100
thì việc Voting gần như không có ý nghĩa.
Nếu Tree 1 sai, rất có thể 99 cây còn lại cũng sai theo cùng một cách.
Random Forest cố gắng tạo ra các cây đa dạng.
Tree 1 → học Pattern A
Tree 2 → học Pattern B
Tree 3 → học Pattern C
Tree 4 → học Pattern D
Một cây có thể mắc lỗi ở một nhóm dữ liệu.
Nhưng các cây khác chưa chắc mắc cùng lỗi đó.
Khi tổng hợp kết quả, những sai lệch riêng lẻ có thể được giảm bớt.
Đây là một trong những ý tưởng cốt lõi của Ensemble Learning.
Bagging là gì?
Cơ chế này liên quan đến một kỹ thuật gọi là:
Bagging – Bootstrap Aggregating
Tên gọi mô tả gần như toàn bộ quy trình:
Bootstrap
Tạo nhiều dataset bằng Bootstrap Sampling.
Aggregating
Tổng hợp dự đoán của nhiều mô hình.
Có thể hình dung:
Dataset
↓
Bootstrap Sampling
↙ ↓ ↘
Data 1 Data 2 Data 3
↓ ↓ ↓
Tree 1 Tree 2 Tree 3
↘ ↓ ↙
Aggregate
↓
Prediction
Random Forest có thể xem là một dạng Bagging được bổ sung thêm Random Feature Selection.
Bạn có thể xem phần mô tả thuật toán chi tiết trong tài liệu Random Forest của Scikit-learn.
Classification: Các cây bỏ phiếu
Trong bài toán Classification, các cây có thể đưa ra các Class khác nhau.
Ví dụ:
Tree 1 → Spam
Tree 2 → Spam
Tree 3 → Not Spam
Tree 4 → Spam
Tree 5 → Not Spam
Kết quả:
Spam = 3 votes
Not Spam = 2 votes
Final Prediction:
Spam
Trong thực tế, thư viện có thể tổng hợp xác suất dự đoán của các cây thay vì chỉ hiểu đơn giản là đếm phiếu cứng, nhưng Voting là cách trực quan tốt để hiểu nguyên lý.
Regression: Lấy trung bình
Nếu bài toán là dự đoán giá nhà:
Tree 1 → 3,8 tỷ
Tree 2 → 4,1 tỷ
Tree 3 → 3,9 tỷ
Tree 4 → 4,0 tỷ
Tree 5 → 4,2 tỷ
Random Forest Regression có thể lấy trung bình:
Prediction ≈ 4,0 tỷ
Các dự đoán cực đoan của một vài cây vì vậy ít ảnh hưởng hơn đến kết quả cuối cùng.
Random Forest giảm Overfitting như thế nào?
Một Decision Tree sâu thường có:
- Bias thấp
- Variance cao
Nói đơn giản:
Cây học Training Data rất tốt nhưng có thể thay đổi mạnh khi dữ liệu thay đổi.
Random Forest kết hợp nhiều cây để giảm Variance.
Single Decision Tree
Low Bias
High Variance
↓
Dễ Overfitting
Random Forest
Nhiều cây khác nhau
↓
Aggregate Predictions
↓
Lower Variance
↓
Ổn định hơn
Đây là một trong những lý do Random Forest thường tổng quát hóa tốt hơn một Decision Tree đơn lẻ.
Nhưng Random Forest có hết Overfitting không?
Không.
Random Forest giảm nguy cơ, chứ không làm Overfitting biến mất hoàn toàn.
Hiệu suất vẫn phụ thuộc vào:
- Chất lượng dữ liệu.
- Feature.
- Hyperparameter.
- Mức độ Noise.
- Kích thước dataset.
- Cách đánh giá mô hình.
Do đó, Cross Validation và Model Evaluation vẫn rất quan trọng.
Out-of-Bag Samples – một tính năng thú vị
Bootstrap Sampling tạo ra một hiện tượng đặc biệt.
Vì lấy mẫu có hoàn lại, một số quan sát trong Training Set sẽ không xuất hiện trong Bootstrap Sample của một cây.
Những quan sát đó được gọi là:
Out-of-Bag Samples (OOB).
Ví dụ:
Original Data
A B C D E F
Bootstrap Sample
A A B D E F
OOB Samples
C
Mẫu C không được Tree đó sử dụng để Training.
Vì vậy, nó có thể được dùng như một quan sát độc lập để đánh giá Tree.
Khi tổng hợp trên toàn bộ Forest, chúng ta có thể tính Out-of-Bag Error mà không cần tạo thêm một Validation Set riêng cho mục đích này.
Feature Importance
Random Forest còn thường được sử dụng để đánh giá mức độ quan trọng của Feature.
Ví dụ:
| Feature | Importance |
|---|---|
| Credit Score | 0.31 |
| Income | 0.24 |
| Debt Ratio | 0.21 |
| Age | 0.13 |
| Location | 0.08 |
| Customer ID | 0.03 |
Từ đó Data Scientist có thể phân tích Feature nào đóng vai trò lớn trong dự đoán của mô hình.
Tuy nhiên cần lưu ý:
Feature Importance không đồng nghĩa với quan hệ nhân quả.
Một Feature được mô hình sử dụng nhiều không có nghĩa Feature đó là nguyên nhân gây ra kết quả.
Ngoài ra, các cách tính Feature Importance khác nhau cũng có những hạn chế riêng.
Những Hyperparameter quan trọng
n_estimators
Số lượng cây trong Forest.
Ví dụ:
n_estimators = 100
nghĩa là xây dựng 100 cây.
Nhiều cây hơn thường giúp kết quả ổn định hơn đến một mức nào đó, nhưng cũng tăng thời gian tính toán.
max_depth
Độ sâu tối đa của mỗi cây.
Giới hạn độ sâu có thể giúp kiểm soát độ phức tạp.
max_features
Số Feature được xem xét tại mỗi Split.
Đây là Hyperparameter đặc biệt quan trọng vì nó ảnh hưởng đến mức độ khác biệt giữa các cây.
min_samples_split
Số mẫu tối thiểu để một Node được phép chia.
min_samples_leaf
Số mẫu tối thiểu phải tồn tại trong một Leaf.
Những Hyperparameter này có thể được tối ưu bằng các kỹ thuật đã tìm hiểu ở bài trước như:
Grid Search + Cross Validation hoặc Random Search + Cross Validation.
Decision Tree và Random Forest khác nhau thế nào?
| Decision Tree | Random Forest |
|---|---|
| Một cây | Nhiều cây |
| Dễ trực quan hóa | Khó trực quan hóa toàn bộ |
| Dễ giải thích | Khó giải thích hơn |
| Variance cao | Thường giảm Variance |
| Dễ Overfitting | Thường chống Overfitting tốt hơn |
| Training nhanh | Tốn tài nguyên hơn |
| Một dự đoán | Tổng hợp nhiều dự đoán |
Decision Tree thắng về Interpretability.
Random Forest thường thắng về độ ổn định và predictive performance.
Random Forest có cần Feature Scaling không?
Thông thường là không.
Ví dụ:
Age = 25
Income = 25.000.000
Khoảng cách về thang đo giữa hai Feature không gây ra vấn đề giống như với các thuật toán dựa trên khoảng cách như KNN.
Decision Tree chủ yếu tìm các Threshold:
Age < 30?
Income < 18.500.000?
Do đó, Standardization hoặc Min-Max Scaling thường không phải yêu cầu bắt buộc cho Random Forest.
Khi nào nên sử dụng Random Forest?
Random Forest là một lựa chọn baseline mạnh cho nhiều bài toán dữ liệu dạng bảng (Tabular Data), đặc biệt khi:
- Có quan hệ phi tuyến.
- Có nhiều Feature.
- Muốn một mô hình tương đối mạnh mà không cần preprocessing quá phức tạp.
- Decision Tree đơn lẻ bị Overfitting.
- Cần đánh giá Feature Importance.
- Muốn xây dựng baseline trước khi thử các mô hình Boosting.
Google cũng có tài liệu riêng về Decision Forests, bao gồm Random Forest và các phương pháp dựa trên cây khác. Google Machine Learning – Decision Forests
Random Forest có phải mô hình mạnh nhất?
Không.
Không tồn tại một thuật toán Machine Learning luôn tốt nhất cho mọi dataset.
Trong nhiều bài toán Tabular Data, các thuật toán Boosting như:
- Gradient Boosting
- XGBoost
- LightGBM
- CatBoost
có thể đạt hiệu suất cao hơn.
Nhưng cách chúng xây dựng nhiều cây hoàn toàn khác Random Forest.
Random Forest tạo nhiều cây tương đối độc lập rồi tổng hợp chúng.
Gradient Boosting lại xây dựng các cây tuần tự, trong đó cây sau cố gắng sửa sai cho các cây trước.
Đây là bước tiến tiếp theo rất quan trọng.
Kết luận
Random Forest là thuật toán Ensemble Learning kết hợp nhiều Decision Tree để tạo ra một mô hình ổn định hơn.
Ba ý tưởng quan trọng nhất cần nhớ là:
Bootstrap Sampling → tạo nhiều tập Training khác nhau.
Random Feature Selection → khiến các cây trở nên đa dạng.
Aggregation → tổng hợp dự đoán của nhiều cây.
Thay vì cố gắng tạo ra một Decision Tree hoàn hảo, Random Forest sử dụng nhiều cây không hoàn hảo nhưng khác nhau, rồi kết hợp chúng để tạo ra một dự đoán đáng tin cậy hơn.
Đây cũng là một trong những tư tưởng quan trọng nhất của Ensemble Learning:
Nhiều mô hình yếu hoặc không hoàn hảo, nếu được kết hợp đúng cách, có thể tạo thành một hệ thống mạnh hơn.
Tài liệu tham khảo
Scikit-learn – Random Forests
Đọc tài liệu Scikit-learn
Google Machine Learning – Decision Forests
Đọc tài liệu Google Machine Learning
Khóa học tại MCNA Technology School
Nếu bạn muốn thực hành Decision Tree, Random Forest và xây dựng mô hình Machine Learning bằng Python trên dữ liệu thực tế, có thể tham khảo:
🤖 Combo 5 khóa AI & Power BI
🐍 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

