Rừng ngẫu nhiên hồi quy (Random Forest Regression) là một thuật toán thuộc nhóm học kết hợp (Ensemble Learning), được xây dựng dựa trên việc kết hợp sức mạnh của nhiều Cây quyết định (Decision Tree) độc lập lại với nhau.
Thay vì đặt cược toàn bộ niềm tin vào một Cây quyết định duy nhất vốn rất dễ rơi vào bẫy quá khớp (overfitting) và thiếu ổn định, thuật toán này hoạt động theo triết lý "Trí tuệ đám đông" (Wisdom of Crowds): kết hợp nhiều mô hình dự báo yếu để tạo thành một mô hình tổng hợp mạnh mẽ và vượt trội hơn. Về mặt logic, nếu một cây đơn lẻ đưa ra dự báo sai lệch do học nhầm phải các điểm dữ liệu nhiễu, các cây khác trong khu rừng sẽ bù đắp và sửa chữa những sai lệch đó.
Để đảm bảo các "chuyên gia" trong đám đông này thực sự đa dạng và không đưa ra những quyết định giống hệt nhau, Random Forest sử dụng một kỹ thuật cốt lõi có tên là Bagging (viết tắt của Bootstrap Aggregating). Quá trình này diễn ra qua hai cơ chế trọng tâm:
Kỹ thuật lấy mẫu Bootstrap: Từ tập dữ liệu huấn luyện ban đầu chứa N quan sát, thuật toán sẽ tiến hành lấy mẫu ngẫu nhiên có hoàn lại (random sampling with replacement) để tạo ra B tập dữ liệu con (bootstrap samples). Điểm đặc biệt của việc lấy mẫu có hoàn lại là một điểm dữ liệu có thể xuất hiện nhiều lần trong cùng một tập con, hoặc hoàn toàn không xuất hiện. Mỗi tập dữ liệu con này sau đó sẽ được sử dụng để huấn luyện một Cây quyết định hoàn toàn riêng biệt. Nhờ vậy, mỗi cây sẽ được phát triển dựa trên một góc nhìn hơi khác nhau của bộ dữ liệu gốc, giúp tăng tối đa tính đa dạng cho toàn bộ mô hình.
Cơ chế lấy trung bình kết quả dự báo (Aggregating): Khi cần đưa ra ước lượng cho một điểm dữ liệu mới, thuật toán sẽ cho điểm dữ liệu đó đi qua toàn bộ B cây trong rừng. Kết quả dự báo cuối cùng của mô hình đối với bài toán hồi quy chính là trung bình cộng của tất cả các dự báo từ các cây thành phần đó. Về mặt toán học, cơ chế này được biểu diễn qua công thức:
Dưới góc nhìn toán học thống kê, cơ chế lấy trung bình cộng từ hàng trăm cây không bị tương quan mạnh với nhau sẽ giúp mô hình làm giảm đáng kể phương sai (Variance) tổng thể. Điều này giúp Random Forest khắc phục triệt để nhược điểm quá khớp của mô hình Cây quyết định đơn lẻ, gia tăng độ ổn định và mang lại độ chính xác cực kỳ cao khi triển khai trên các tập dữ liệu kinh tế phức tạp.
Nếu chỉ sử dụng duy nhất kỹ thuật lấy mẫu Bagging (Bootstrap Aggregating) thì các cây trong rừng vẫn có nguy cơ giống hệt nhau. Giả sử trong tập dữ liệu của bạn có một biến số mang sức mạnh dự báo áp đảo hoàn toàn so với các biến còn lại. Khi đó, dù bạn có tạo ra hàng trăm tập dữ liệu con khác nhau, thì ở ngay nút rẽ nhánh đầu tiên (Root Node), hầu hết các cây quyết định đều sẽ chọn chính cái "biến mạnh nhất" đó để chia tách. Kết quả là chúng ta sẽ tạo ra một khu rừng gồm hàng trăm cái cây có cấu trúc gần như tương đồng nhau (bị tương quan cao với nhau). Về mặt toán học thống kê, việc lấy trung bình kết quả từ các mô hình có độ tương quan cao sẽ không giúp làm giảm phương sai (Variance) hiệu quả.
Để giải quyết triệt để vấn đề này, Rừng ngẫu nhiên (Random Forest) bổ sung thêm một cơ chế thứ hai mang tính đột phá: Ngẫu nhiên hóa đặc trưng (Feature Randomness).
Thay vì rà soát toàn bộ $p$ biến đầu vào để tìm điểm cắt tối ưu như Cây quyết định truyền thống, thuật toán Random Forest thiết lập một quy tắc khắt khe: tại mỗi nút phân chia, thuật toán chỉ được phép chọn ngẫu nhiên một tập con gồm m biến (thông thường được thiết lập là m = p/3 đối với bài toán hồi quy).
Lý do cơ chế này giúp mô hình trở nên ổn định và mạnh mẽ hơn:
Khử tương quan (De-correlate) giữa các cây: Bằng cách giới hạn số lượng biến được phép "tham gia ứng cử" tại mỗi điểm rẽ nhánh, thuật toán đôi khi sẽ chủ động "che khuất" đi biến dự báo mạnh nhất. Cú ép buộc này tạo cơ hội cho các biến số yếu hơn – nhưng vẫn chứa đựng thông tin hữu ích – được lựa chọn để thực hiện phân tách ở các nút trên cùng của cây. Nhờ đó, mỗi cây trong rừng sẽ phát triển theo một định hướng hoàn toàn khác, tạo ra một quần thể các cây vô cùng đa dạng và ít tương quan với nhau.
Triệt tiêu phương sai và chống Overfitting: Chính nhờ sự đa dạng và độc lập về cấu trúc của các cây thành phần, khi chúng ta tiến hành lấy trung bình (ở bài toán hồi quy) hoặc bỏ phiếu (ở bài toán phân lớp) ở bước cuối cùng, phương sai tổng thể của toàn bộ hệ thống sẽ được triệt tiêu ở mức tối đa. Cơ chế khử tương quan này giúp Random Forest đạt được độ ổn định vượt trội, cải thiện đáng kể khả năng tổng quát hóa trên dữ liệu thực tế và khắc phục hoàn toàn điểm yếu Quá khớp (Overfitting) vốn có của cây quyết định đơn lẻ.
1. Giải bài toán đánh đổi Bias - Variance để giảm phương sai
Như đã phân tích ở mô hình Cây quyết định đơn lẻ, nếu để cây tự do phát triển, nó có khả năng học rất sâu các quy luật phi tuyến phức tạp trong dữ liệu, nhờ đó duy trì được độ chệch (Bias) ở mức thấp. Tuy nhiên, nhược điểm là phương sai (Variance) cực kỳ cao do cây học thuộc lòng cả các nhiễu ngẫu nhiên, dẫn đến hiện tượng quá khớp (Overfitting).
Rừng ngẫu nhiên (Random Forest) giải quyết trọn vẹn sự đánh đổi (Bias-Variance tradeoff) này thông qua cơ chế lấy trung bình. Bằng cách kết hợp hàng trăm cây quyết định được huấn luyện trên các tập dữ liệu bootstrap khác nhau và sử dụng các nhóm biến ngẫu nhiên, thuật toán tạo ra một quần thể các cây có phương sai cao nhưng ít tương quan với nhau,. Khi tổng hợp lại bằng cách lấy trung bình cộng, những sai lệch ngẫu nhiên của từng cây sẽ tự động triệt tiêu lẫn nhau, làm cho phương sai tổng thể của mô hình giảm xuống đáng kể, trong khi độ lệch (Bias) hầu như không tăng,. Kết quả là Random Forest vừa giữ được sức mạnh dự báo cao, vừa khắc phục hiệu quả rủi ro Overfitting, tạo ra sự ổn định tuyệt vời trên dữ liệu thực tế,.
2. Cơ chế Đánh giá Tầm quan trọng của biến (Feature Importance)
Mặc dù việc gộp hàng trăm cây khiến Random Forest mất đi sơ đồ rẽ nhánh trực quan của mô hình gốc, thuật toán lại cung cấp một công cụ phân tích cực kỳ đắt giá thay thế: Tầm quan trọng của đặc trưng (Feature Importance),.
Cơ chế tính toán mức độ đóng góp của từng biến được đo lường dựa trên nguyên lý mức độ giảm độ vẩn đục trung bình (Mean Decrease in Impurity - MDI). Đối với bài toán hồi quy, tiêu chí đo lường độ vẩn đục này chính là sai số bình phương trung bình (MSE),. Quá trình tính toán diễn ra như sau:
Tại mỗi nút phân chia, thuật toán đo lường mức độ giảm sai số (MSE) của dữ liệu trước và sau khi bị chia nhánh bởi một biến cụ thể,.
Biến số nào được thuật toán ưu tiên chọn để rẽ nhánh nhiều lần và mang lại mức độ giảm sai số càng lớn thì sẽ được hệ thống đánh giá có tầm quan trọng càng cao.
Giá trị Feature Importance cuối cùng của một biến chính là giá trị trung bình của tất cả các mức giảm sai số này, được tính tổng hợp trên toàn bộ hàng trăm cây quyết định cấu thành nên khu rừng,.
Dưới góc nhìn kinh doanh, cơ chế này giúp người phân tích dễ dàng xác định được chính xác đâu là những yếu tố đang chi phối kết quả dự báo, từ đó giúp doanh nghiệp tập trung nguồn lực vào những biến số quan trọng nhất để tối ưu hóa chiến lược vận hành,.
Dự báo nhu cầu (Demand Forecasting) trong quản lý chuỗi cung ứng và bán lẻ là một bài toán hồi quy có tầm quan trọng kinh tế to lớn, giúp các tập đoàn lớn tối ưu hóa lượng hàng tồn kho và giảm thiểu chi phí vận hành. Trong ví dụ này, chúng ta sẽ mô phỏng một bộ dữ liệu về doanh số bán hàng hằng ngày của một sản phẩm, chịu ảnh hưởng bởi các yếu tố như: Giá bán, Thời vụ (Tháng, Quý) và Khuyến mãi (Promotion).
Thay vì đi tìm một phương trình đường thẳng, chúng ta sẽ sử dụng Rừng ngẫu nhiên hồi quy (Random Forest Regressor) để học các quy luật phi tuyến và các điểm gãy (ví dụ: lượng mua đột ngột tăng vọt khi có khuyến mãi kết hợp với mùa cao điểm).
Bạn có thể sao chép đoạn mã dưới đây, dán vào Google Colab và chạy trực tiếp. Dữ liệu sẽ được tự động sinh ra bằng numpy và pandas nên không cần tải thêm bất kỳ file CSV nào.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score
# =====================================================================
# BƯỚC 1: TỰ TẠO DỮ LIỆU MÔ PHỎNG (Chuỗi cung ứng)
# =====================================================================
np.random.seed(42)
# Tạo chuỗi thời gian 365 ngày (1 năm)
days = pd.date_range(start='2023-01-01', periods=365)
df = pd.DataFrame({'Date': days})
# Trích xuất đặc trưng thời gian (Feature Engineering)
df['Month'] = df['Date'].dt.month
df['Quarter'] = df['Date'].dt.quarter
# Giả lập biến Khuyến mãi (Promotion: 0 = Không, 1 = Có)
df['Promotion'] = np.random.choice([0, 1], size=365, p=[0.8, 0.2])
# Giả lập Giá bán (Price: dao động từ 50 đến 100 USD)
df['Price'] = np.random.uniform(50, 100, size=365)
# Giả lập Nhu cầu (Demand - Biến mục tiêu):
# Nhu cầu chịu ảnh hưởng bởi: Mức nền + Tính mùa vụ + Khuyến mãi - Tác động của giá + Nhiễu
seasonality = np.sin(df['Month'] * np.pi / 6) * 50 # Biến động hình sin theo tháng
df['Demand'] = (
200
+ seasonality
+ (df['Promotion'] * 80) # Khuyến mãi làm tăng 80 đơn vị
- (df['Price'] * 1.5) # Giá tăng làm giảm nhu cầu
+ np.random.normal(0, 10, 365) # Nhiễu ngẫu nhiên
)
# =====================================================================
# BƯỚC 2: CHUẨN BỊ DỮ LIỆU & CHIA TẬP HUẤN LUYỆN
# =====================================================================
# Đặc trưng đầu vào (Bỏ cột Date vì đã trích xuất Tháng, Quý)
X = df[['Month', 'Quarter', 'Promotion', 'Price']]
y = df['Demand']
# Chia tập Train (80%) và Test (20%)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# =====================================================================
# BƯỚC 3: HUẤN LUYỆN MÔ HÌNH RANDOM FOREST
# =====================================================================
# Khởi tạo mô hình với 100 cây quyết định
rf_model = RandomForestRegressor(n_estimators=100, random_state=42, n_jobs=-1)
rf_model.fit(X_train, y_train)
# =====================================================================
# BƯỚC 4: DỰ BÁO VÀ ĐÁNH GIÁ MÔ HÌNH
# =====================================================================
y_pred_rf = rf_model.predict(X_test)
print("--- KẾT QUẢ ĐÁNH GIÁ MÔ HÌNH RANDOM FOREST ---")
print(f"MAE : {mean_absolute_error(y_test, y_pred_rf):.2f} (Sai số tuyệt đối trung bình)")
print(f"RMSE : {np.sqrt(mean_squared_error(y_test, y_pred_rf)):.2f} (Căn bậc hai sai số bình phương trung bình)")
print(f"R2 : {r2_score(y_test, y_pred_rf):.4f} (Hệ số xác định)")
# =====================================================================
# BƯỚC 5: TRỰC QUAN HÓA FEATURE IMPORTANCE (TẦM QUAN TRỌNG CỦA BIẾN)
# =====================================================================
importances = rf_model.feature_importances_
indices = np.argsort(importances)[::-1]
feature_names = X.columns
plt.figure(figsize=(10, 6))
sns.barplot(x=importances[indices], y=[feature_names[i] for i in indices], palette="viridis")
plt.title("Tầm quan trọng của các yếu tố đối với Nhu cầu hàng hóa (Feature Importance)", fontsize=14, fontweight='bold')
plt.xlabel("Mức độ quan trọng (Gini Importance)", fontsize=12)
plt.ylabel("Biến đầu vào", fontsize=12)
plt.tight_layout()
plt.show()
--- KẾT QUẢ ĐÁNH GIÁ MÔ HÌNH RANDOM FOREST ---
MAE : 8.30 (Sai số tuyệt đối trung bình)
RMSE : 11.02 (Căn bậc hai sai số bình phương trung bình)
R2 : 0.9380 (Hệ số xác định)
Phân tích kết quả thực nghiệm:
Hiệu suất dự báo xuất sắc (R² cao): Khi thực thi đoạn mã, bạn sẽ thu được hệ số xác định R^2 dao động ở mức khá cao (tùy thuộc vào nhiễu ngẫu nhiên, thường trên 0.85). Điều này minh chứng rằng thông qua cơ chế tổng hợp kiến thức từ 100 cây quyết định, Random Forest đã triệt tiêu được phương sai và nắm bắt xuất sắc các quy luật ẩn (như tác động gộp của khuyến mãi và mùa vụ). Các chỉ số MAE và RMSE nhỏ cho thấy sai số dự đoán trung bình (số lượng đơn vị hàng hóa lệch so với thực tế) nằm ở ngưỡng an toàn để doanh nghiệp tự tin lên kế hoạch tồn kho.
Chẩn đoán "Hộp đen" bằng Feature Importance: Một trong những điểm mạnh cốt lõi của Rừng ngẫu nhiên là khả năng giải thích tác động của các biến đầu vào thông qua thuộc tính feature_importances_. Thay vì đưa ra các hệ số góc như Hồi quy tuyến tính, thuật toán đánh giá tầm quan trọng dựa trên việc một biến đã giúp làm giảm bao nhiêu độ vẩn đục (MSE) trên toàn bộ quần thể các cây. Khi nhìn vào biểu đồ cột được xuất ra:
Nếu Price (Giá bán) hoặc Month (Tháng/Mùa vụ) chiếm các thanh đồ thị dài nhất, điều này phản ánh đúng thực tiễn kinh tế học: nhu cầu của sản phẩm này có độ co giãn theo giá rất cao và chịu ảnh hưởng mạnh bởi chu kỳ thời vụ.
Biến Promotion cũng sẽ hiển thị mức độ đóng góp rõ ràng. Nếu tỷ trọng của nó cao, nhà quản trị chuỗi cung ứng biết rằng họ bắt buộc phải tích trữ thêm lượng lớn hàng hóa (Safety Stock) mỗi khi có lịch chạy chiến dịch quảng cáo.
Việc ứng dụng mô hình Rừng ngẫu nhiên hồi quy (Random Forest Regressor) không chỉ giúp giải quyết bài toán sai số toán học mà còn mang lại những thay đổi mang tính nền tảng trong tư duy vận hành của doanh nghiệp, tập trung vào hai khía cạnh chiến lược sau:
1. Tối ưu hóa chuỗi cung ứng và Kế hoạch S&OP (Sales and Operations Planning) Trong lĩnh vực bán lẻ và logistics, dự báo chính xác nhu cầu tiêu dùng (Demand Forecasting) mang lại một giá trị kinh tế khổng lồ. Trong thực tế, sự biến động của nhu cầu nếu không được dự báo chuẩn xác sẽ tạo ra "Hiệu ứng roi da" (Bullwhip Effect) – nơi một sai lệch nhỏ từ phía người tiêu dùng sẽ bị khuếch đại lũy tiến dọc theo chuỗi cung ứng, dẫn đến tình trạng tích trữ tồn kho dư thừa hoặc thiếu hụt hàng hóa nghiêm trọng.
Nhờ khả năng học các quy luật phi tuyến phức tạp từ dữ liệu lịch sử (như tác động gộp của mùa vụ, giá cả và khuyến mãi), Rừng ngẫu nhiên giúp doanh nghiệp tiên lượng chính xác các đỉnh điểm của nhu cầu (Peak Demand). Dữ liệu dự báo có độ tin cậy cao này là đầu vào sống còn cho hệ thống S&OP, giúp các nhà quản trị:
Thiết lập mức tồn kho an toàn (Safety Stock) và lượng đặt hàng kinh tế (EOQ) tối ưu, giải phóng nguồn vốn lưu động đang bị chôn vùi trong kho bãi.
Tránh hiện tượng "cháy kệ" (Stock-outs), đảm bảo trải nghiệm khách hàng và tối đa hóa doanh thu.
Chuyển đổi hoàn toàn mô hình vận hành từ "Phản ứng thụ động" (đợi rủi ro xảy ra mới khắc phục) sang Chuỗi cung ứng tiên đoán chủ động (Predictive Supply Chain).
2. Sự đánh đổi chiến lược: Độ chính xác (Black-box) vs. Tính minh bạch (White-box) Khi quyết định nâng cấp từ Cây quyết định đơn lẻ lên Rừng ngẫu nhiên, ban lãnh đạo doanh nghiệp đang thực hiện một sự đánh đổi chiến lược cốt lõi trong Khoa học dữ liệu: Hy sinh tính khả giải (Interpretability) để đổi lấy sức mạnh dự báo và độ ổn định cao.
Cây quyết định vốn được xem là một "hộp trắng" (White-box) vô cùng trực quan, cho phép các nhà quản lý dễ dàng nhìn vào sơ đồ và hiểu ngay logic phân loại thông qua các quy tắc "Nếu - Thì". Ngược lại, Rừng ngẫu nhiên tổng hợp ý kiến từ hàng trăm cây khác nhau, biến mô hình thành một "hộp đen" (Black-box), làm suy giảm tính minh bạch và rất khó để giải thích chi tiết cơ chế vi mô đằng sau mỗi con số dự báo.
Tuy nhiên, trong môi trường kinh doanh đầy nhiễu động, sự đánh đổi này là hoàn toàn xứng đáng vì Rừng ngẫu nhiên giúp triệt tiêu phương sai, khắc phục triệt để điểm yếu "học vẹt" (Overfitting) để mang lại kết quả dự báo cực kỳ ổn định. Hơn nữa, để bù đắp cho nhược điểm "hộp đen", doanh nghiệp có thể sử dụng công cụ Tầm quan trọng của đặc trưng (Feature Importance) hoặc các công cụ AI giải thích được (Explainable AI như SHAP). Các công cụ này đóng vai trò như một bản chụp X-quang, giúp ban giám đốc biết chính xác yếu tố nào (ví dụ: sự thay đổi về giá hay chương trình khuyến mãi) đang chi phối mạnh nhất đến nhu cầu, từ đó đưa ra các chiến lược can thiệp chính xác nhất.