RANDOM FOREST CÓ THỰC SỰ TỐT HƠN HỒI QUY ĐƠN GIẢN KHI DỰ BÁO CỔ PHIẾU?
RANDOM FOREST
RANDOM FOREST CÓ THỰC SỰ TỐT HƠN HỒI QUY ĐƠN GIẢN KHI DỰ BÁO CỔ PHIẾU?
Một mô hình Machine Learning có thể dự báo rất tốt trên dữ liệu quá khứ, nhưng khi kiểm tra ở giai đoạn mới lại thua cả một mô hình hồi quy đơn giản. Vì sao chuyện này xảy ra và làm thế nào để biết mô hình nào thực sự đáng sử dụng?
Khi bắt đầu học Machine Learning cho Quant, nhiều bạn thường đi theo một lộ trình khá giống nhau. Ban đầu sử dụng Linear Regression để dự báo lợi suất cổ phiếu, sau đó chuyển sang Ridge, Random Forest, Gradient Boosting hoặc XGBoost vì nghĩ rằng mô hình càng phức tạp thì khả năng dự báo càng tốt. Khi chạy thử, Random Forest đôi khi cho kết quả rất ấn tượng trên tập huấn luyện: sai số thấp, đường dự báo bám khá sát dữ liệu thực tế và các chỉ số đánh giá có vẻ vượt trội so với hồi quy tuyến tính. Nhưng khi chuyển sang một giai đoạn thị trường chưa được sử dụng để huấn luyện, hiệu quả có thể giảm mạnh. Có trường hợp mô hình dự báo còn kém hơn việc luôn dự báo lợi suất gần 0%. Điều này khiến nhiều người đặt câu hỏi liệu Machine Learning có thực sự phù hợp với thị trường tài chính hay không, hay chỉ đang tạo ra những kết quả đẹp trên dữ liệu lịch sử.
Theo mình, câu hỏi đáng nghiên cứu không phải Random Forest có tốt hơn Ridge Regression hay không, mà là trong điều kiện dữ liệu, mục tiêu dự báo và phương pháp kiểm định nào, sự phức tạp bổ sung của Random Forest thực sự mang lại giá trị. Trong Quant Research, chúng ta không lựa chọn mô hình chỉ vì tên thuật toán hiện đại hoặc chỉ số huấn luyện tốt. Mỗi mô hình là một cách biểu diễn những quan hệ có thể tồn tại trong dữ liệu. Nếu quan hệ tương đối đơn giản và ổn định, một mô hình tuyến tính có regularization có thể hoạt động rất tốt. Nếu lợi suất phụ thuộc vào những tương tác phi tuyến giữa Momentum, Volatility, thanh khoản và trạng thái thị trường, những mô hình cây có thể có lợi thế. Nhưng nếu dữ liệu chứa quá nhiều nhiễu hoặc số quan sát không đủ đại diện, mô hình linh hoạt hơn cũng có thể học được những đặc điểm ngẫu nhiên không còn tồn tại trong tương lai.
Để hiểu rõ hơn, chúng ta có thể sử dụng một bài toán cụ thể: dự báo lợi suất 5 phiên tiếp theo của một nhóm cổ phiếu Việt Nam, sau đó so sánh Ridge Regression với Random Forest trên cùng dữ liệu, cùng tập Features, cùng giai đoạn kiểm định và cùng benchmark. Đây là bài thực hành tương đối phù hợp với những bạn đã biết Python cơ bản, pandas và scikit-learn, đồng thời muốn bước từ việc huấn luyện mô hình sang nghiên cứu định lượng có thể kiểm chứng.
PHẦN 1. TẠI SAO RANDOM FOREST CÓ THỂ THẮNG TRONG TẬP HUẤN LUYỆN NHƯNG THUA KHI DỰ BÁO NGOÀI MẪU?
Trước tiên, chúng ta cần hiểu hai mô hình đang học dữ liệu theo những cách khác nhau. Ridge Regression là một dạng hồi quy tuyến tính có bổ sung regularization L2, nghĩa là mô hình tìm các hệ số để giảm sai số dự báo nhưng đồng thời hạn chế độ lớn của những hệ số đó. Giả sử chúng ta dùng Momentum 20 phiên, Volatility 20 phiên, khối lượng giao dịch tương đối và biến động VN-Index để dự báo lợi suất 5 phiên tới. Ridge sẽ ước lượng tác động tuyến tính của từng biến trong mối quan hệ với lợi suất mục tiêu, với mức độ co hệ số phụ thuộc vào tham số alpha. Nếu hai biến tương quan mạnh, chẳng hạn Momentum 10 phiên và Momentum 20 phiên, regularization có thể giúp hạn chế các hệ số trở nên quá nhạy cảm với những thay đổi nhỏ trong dữ liệu. Mô hình không tự động tìm ra mọi quan hệ phức tạp, nhưng chính sự đơn giản và cơ chế kiểm soát hệ số có thể là lợi thế khi dữ liệu tài chính có tỷ lệ tín hiệu trên nhiễu rất thấp.
Random Forest hoạt động theo cách khác. Thay vì chỉ ước lượng một quan hệ tuyến tính, mô hình xây dựng nhiều cây quyết định từ các mẫu dữ liệu và kết hợp dự báo của chúng. Mỗi cây có thể chia dữ liệu theo những điều kiện như Momentum lớn hơn một ngưỡng nhất định, Volatility thấp hơn một mức cụ thể hoặc thanh khoản đang cao hơn trung bình. Nhờ vậy, Random Forest có khả năng học những quan hệ phi tuyến và sự tương tác giữa các biến mà Ridge không tự biểu diễn nếu chúng ta chỉ cung cấp các Features gốc. Chẳng hạn, một tín hiệu Momentum có thể liên quan tích cực đến lợi suất tương lai trong nhóm cổ phiếu thanh khoản tốt nhưng không có hiệu quả tương tự trong nhóm thanh khoản thấp. Hoặc tác động của Momentum có thể thay đổi khi volatility thị trường tăng mạnh. Đây là những mối quan hệ mà Random Forest có thể biểu diễn thông qua các nhánh điều kiện. Với hồi quy tuyến tính, chúng ta vẫn có thể mô hình hóa những hiệu ứng này bằng cách chủ động tạo các biến tương tác, nhưng chúng không tự xuất hiện khi chỉ đưa các biến ban đầu vào Ridge.
Tuy nhiên, khả năng học được nhiều cấu trúc hơn cũng tạo ra một rủi ro rất lớn. Trong dữ liệu chứng khoán, nhiều quan hệ chỉ xuất hiện do ngẫu nhiên. Một nhóm cổ phiếu có Momentum cao, thanh khoản lớn và Volatility thấp có thể tạo lợi suất tốt trong một giai đoạn tăng trưởng mạnh của thị trường, nhưng quan hệ đó không nhất thiết duy trì khi chính sách tiền tệ, dòng vốn hoặc cấu trúc thị trường thay đổi. Nếu Random Forest được phép chia dữ liệu thành quá nhiều nhóm nhỏ, nó có thể học rất kỹ những trường hợp đặc biệt của quá khứ. Khi đó, sai số trên tập huấn luyện giảm mạnh nhưng khả năng dự báo trên dữ liệu mới lại không được cải thiện. Đây chính là một biểu hiện của overfitting. Cần hiểu rằng Random Forest đã sử dụng việc lấy mẫu và kết hợp nhiều cây để giảm độ biến động của dự báo so với một cây quyết định đơn lẻ, nhưng nó không loại bỏ hoàn toàn rủi ro overfitting, đặc biệt khi bản thân tín hiệu dự báo yếu và dữ liệu thay đổi theo thời gian.
Một tham số khá đáng chú ý trong scikit-learn là min_samples_leaf, tức số lượng quan sát tối thiểu được yêu cầu ở mỗi nút lá của cây. Nếu tham số này quá nhỏ, cây có thể chia dữ liệu đến những nhóm chỉ gồm một vài quan sát, khiến kết quả dễ bị ảnh hưởng bởi những biến động giá bất thường. Khi tăng min_samples_leaf, mỗi nhóm phải chứa nhiều quan sát hơn, làm dự báo của cây có xu hướng mượt và ít phụ thuộc vào những trường hợp riêng lẻ. Tương tự, max_depth giúp giới hạn độ sâu của cây, max_features kiểm soát số lượng Features được xem xét tại từng lần phân chia, còn n_estimators là số cây được kết hợp. Những tham số này đều ảnh hưởng đến sự đánh đổi giữa khả năng học dữ liệu và độ ổn định của mô hình. Tuy nhiên, không có một giá trị tối ưu chung cho mọi bài toán. Việc tăng từ 100 lên 500 cây cũng không bảo đảm cải thiện khả năng dự báo, bởi vấn đề có thể không nằm ở số lượng cây mà ở chất lượng tín hiệu và cách mô hình đang học nhiễu.
Có một chi tiết thực tế nữa là Random Forest Regression thường tạo dự báo bằng cách lấy trung bình các giá trị mục tiêu trong những nút lá. Vì vậy, một Random Forest tiêu chuẩn thường khó ngoại suy ra những mức lợi suất nằm ngoài phạm vi đã quan sát trong dữ liệu huấn luyện. Nếu thị trường xuất hiện một cú sốc lớn hoặc lợi suất tương lai vượt xa những trạng thái từng được học, dự báo có thể không theo kịp mức biến động thực tế. Hồi quy tuyến tính có thể ngoại suy theo các hệ số đã học, nhưng điều đó cũng không có nghĩa dự báo sẽ chính xác hơn; đôi khi ngoại suy tuyến tính lại tạo ra những con số phi thực tế. Đây là sự khác biệt cần hiểu khi so sánh mô hình, đặc biệt với những bài toán tài chính có phân phối lợi suất lệch, đuôi dày và các trạng thái thị trường thay đổi bất thường.
Về mặt học thuật, nghiên cứu Empirical Asset Pricing via Machine Learning của Shihao Gu, Bryan Kelly và Dacheng Xiu, công bố trên The Review of Financial Studies năm 2020, là một tài liệu khá đáng đọc. Nhóm tác giả so sánh nhiều phương pháp Machine Learning trong bài toán dự báo phần bù rủi ro cổ phiếu và tìm thấy lợi thế của một số phương pháp phi tuyến, đặc biệt là mô hình cây và mạng neural, so với nhiều phương pháp truyền thống trong phạm vi nghiên cứu. Một kết luận đáng chú ý là những tương tác phi tuyến giữa các biến dự báo có thể chứa thông tin mà mô hình tuyến tính đơn giản bỏ sót. Tuy nhiên, kết quả này được xây dựng trên dữ liệu và thiết kế nghiên cứu cụ thể, không phải bằng chứng rằng Random Forest luôn tốt hơn Ridge, càng không phải bằng chứng rằng cứ dùng Random Forest trên cổ phiếu Việt Nam là sẽ tạo ra lợi nhuận. Điều nên học từ nghiên cứu là cách so sánh các họ mô hình trên cùng một bài toán, xác định nguồn cải thiện và đánh giá ngoài mẫu, thay vì chỉ chọn thuật toán có kết quả đẹp nhất.
PHẦN 2. THỰC HÀNH VỚI CỔ PHIẾU VIỆT NAM: SO SÁNH RIDGE VÀ RANDOM FOREST SAO CHO CÔNG BẰNG?
Nếu tự làm project này, mình sẽ bắt đầu bằng một tập khoảng 30–50 cổ phiếu trên HOSE, ưu tiên những mã có lịch sử dữ liệu tương đối đầy đủ và thanh khoản phù hợp với mục đích học tập. Có thể sử dụng giai đoạn 2020–2025 để tạo một bộ dữ liệu gồm giá điều chỉnh, khối lượng, các biến thị trường và danh sách cổ phiếu. Khi chuyển từ bài tập sang nghiên cứu chiến lược nghiêm túc, cần xây dựng universe dựa trên điều kiện có thể quan sát tại từng thời điểm, bao gồm những trường hợp cổ phiếu bị loại khỏi danh sách, ngừng giao dịch hoặc không còn đủ điều kiện thanh khoản. Nếu chỉ lấy danh sách cổ phiếu hiện tại rồi chạy lại toàn bộ lịch sử, kết quả có thể bị Survivorship Bias. Đối với bài tập đầu tiên, có thể dùng một tập cổ phiếu cố định nhưng phải ghi rõ đây là phiên bản phục vụ học phương pháp và không được xem là bằng chứng về hiệu quả đầu tư có thể triển khai trong quá khứ.
Bài toán mục tiêu nên được xác định trước khi lựa chọn thuật toán. Chẳng hạn, tại cuối phiên T, chúng ta muốn sử dụng những thông tin đã biết đến thời điểm đó để dự báo lợi suất từ giá đóng cửa T đến giá đóng cửa T+5, với công thức Forward Return 5D = Close(T+5)/Close(T) - 1. Đây là một mục tiêu phù hợp để nghiên cứu khả năng dự báo lợi suất, nhưng khi chuyển sang mô phỏng giao dịch, cần tính lại lợi nhuận theo mức giá thực sự có thể mua được. Nếu tín hiệu chỉ được tạo sau khi thị trường đóng cửa, chương trình không được giả định đã mua tại giá đóng cửa T. Một cách khác là định nghĩa Target ngay từ đầu dựa trên thời điểm dự kiến thực hiện lệnh, chẳng hạn lợi suất giữa giá thực hiện có thể giao dịch trong phiên tiếp theo và mức giá thoát vị thế sau năm phiên. Hai cách đặt Target phục vụ hai mục tiêu khác nhau và không nên trộn lẫn khi đánh giá.
Về Features, mình sẽ bắt đầu bằng một tập nhỏ gồm Momentum 5 phiên, Momentum 20 phiên, Volatility 20 phiên, khối lượng tương đối so với trung bình 20 phiên, mức lệch của giá so với MA20 và lợi suất VN-Index trong năm phiên gần nhất. Đây là những biến tương đối dễ tính bằng pandas và có thể giải thích được ý nghĩa kinh tế. Momentum đo xu hướng giá gần đây, Volatility phản ánh mức độ biến động, khối lượng tương đối giúp quan sát sự thay đổi của hoạt động giao dịch, còn biến động thị trường cung cấp thêm bối cảnh chung. Tất nhiên, những biến này không được bảo đảm có khả năng dự báo lợi suất. Chúng chỉ là tập giả thuyết ban đầu để kiểm tra. Trong một nghiên cứu có kiểm soát, cần lưu công thức tính, thời điểm dữ liệu khả dụng và quy tắc xử lý dữ liệu thiếu cho từng biến. Khi dữ liệu có nhiều cổ phiếu, cũng phải bảo đảm các phép tính rolling được thực hiện riêng theo từng mã, tránh tình trạng giá của cổ phiếu này bị đưa vào cửa sổ tính của cổ phiếu khác.
Một nguyên tắc quan trọng là Ridge và Random Forest phải được so sánh trên cùng tập quan sát, cùng định nghĩa Target, cùng Features gốc và cùng giai đoạn kiểm định. Chúng ta không thể sử dụng dữ liệu 2020–2025 cho Random Forest nhưng chỉ sử dụng 2023–2025 cho Ridge, hoặc cho Random Forest thêm nhiều Features rồi kết luận mô hình đó tốt hơn. Tương tự, nếu một mô hình được tối ưu hàng trăm lần còn mô hình kia chỉ dùng tham số mặc định, kết quả phản ánh cả sự khác biệt về công sức tuning. Với Ridge, nên sử dụng StandardScaler bên trong Pipeline, bởi mức phạt L2 chịu ảnh hưởng của thang đo các biến. Random Forest thường không cần chuẩn hóa theo cách tương tự, nhưng những bước xử lý dữ liệu thiếu, lọc mẫu và kiểm tra chất lượng phải được thiết kế nhất quán. Cần hiểu rằng cùng dữ liệu đầu vào không nhất thiết đồng nghĩa mọi phép biến đổi đều phải giống nhau; mỗi thuật toán có thể cần một pipeline phù hợp, miễn là các phép biến đổi được học từ đúng tập huấn luyện và không sử dụng thông tin của tập kiểm định.
Với dữ liệu chuỗi thời gian tài chính, mình sẽ chia tập theo thời gian thay vì dùng train_test_split với shuffle=True. Một thiết kế minh họa có thể sử dụng dữ liệu 2020–2022 để huấn luyện, năm 2023 để lựa chọn tham số và giai đoạn 2024–2025 để kiểm tra ngoài mẫu. Tuy nhiên, không chỉ cần phân chia theo ngày T của quan sát. Nếu Target là lợi suất T đến T+5, những quan sát ở cuối tập huấn luyện có thể sử dụng giá nằm trong giai đoạn validation để tính nhãn. Do đó, phải loại các quan sát có thời điểm kết thúc nhãn vượt qua ranh giới của tập tương ứng. Với dữ liệu nhiều cổ phiếu, cần chia theo ngày giao dịch cho toàn bộ universe, không chia ngẫu nhiên từng dòng khiến cổ phiếu A ở một ngày nằm trong train trong khi cổ phiếu B cùng ngày lại nằm trong test. Nếu sử dụng Walk-Forward Validation, chúng ta có thể lặp lại quá trình huấn luyện trên những giai đoạn liên tiếp để xem mô hình có giữ được chất lượng qua nhiều trạng thái thị trường không. Với các nhãn lợi suất chồng lấn, cần cân nhắc thêm khoảng loại trừ phù hợp và phương pháp suy luận thống kê xử lý sự phụ thuộc giữa các quan sát.
Ở bước huấn luyện, mình sẽ bắt đầu với cấu hình tương đối đơn giản thay vì mở một cuộc tìm kiếm tham số quá lớn. Ridge có thể được thử với một số mức alpha được xác định trước, còn Random Forest có thể bắt đầu với 200–300 cây và một vài cấu hình min_samples_leaf, max_depth hợp lý để kiểm soát độ phức tạp. Những tham số này chỉ được lựa chọn dựa trên tập validation hoặc các lần kiểm định theo thời gian trong giai đoạn phát triển. Sau khi chốt mô hình, chúng ta mới đánh giá trên tập test chưa từng được dùng để quyết định tham số. Việc liên tục xem kết quả test rồi quay lại chỉnh min_samples_leaf, bổ sung Features hoặc đổi cửa sổ Momentum sẽ làm tập test mất đi tính độc lập. Một project tốt cần lưu số lần thử nghiệm, tham số của từng phiên bản và lý do lựa chọn mô hình, thay vì chỉ giữ lại cấu hình thắng cuộc.
Điểm mình muốn nhấn mạnh ở đây là việc so sánh công bằng không chỉ nằm ở một dòng code như ridge.fit() hay random_forest.fit(). Nó nằm ở toàn bộ quy trình từ dữ liệu, Target, Features, cách chia thời gian, preprocessing cho đến cách tính chỉ tiêu đánh giá. Nếu một bước sử dụng dữ liệu tương lai hoặc hai mô hình được đặt trong những điều kiện khác nhau, bảng kết quả cuối cùng có thể rất đẹp nhưng khó có ý nghĩa nghiên cứu. Đây cũng là lý do mình thường khuyến khích người học chạy Ridge trước như một baseline tương đối mạnh, sau đó mới thêm Random Forest để kiểm tra xem sự linh hoạt của mô hình cây có thực sự cải thiện được điều gì hay không.
PHẦN 3. ĐÁNH GIÁ KẾT QUẢ: RANDOM FOREST DỰ BÁO CHÍNH XÁC HƠN CÓ ĐỒNG NGHĨA ĐẦU TƯ TỐT HƠN?
Sau khi huấn luyện hai mô hình, bước tiếp theo không nên là chọn ngay mô hình có R² cao hơn hoặc MAE thấp hơn. Trong Quant Research, chúng ta cần phân biệt giữa chất lượng dự báo một con số và khả năng sử dụng dự báo đó để ra quyết định đầu tư. Nếu mục tiêu là dự báo chính xác lợi suất 5 phiên tới, MAE, RMSE và Out-of-Sample R² là những chỉ tiêu cần quan sát. MAE cho biết độ lệch tuyệt đối bình quân giữa lợi suất dự báo và lợi suất thực tế, còn RMSE phạt những sai số lớn mạnh hơn vì sử dụng bình phương sai số. Với Out-of-Sample R², mình khuyến khích xác định rõ baseline. Một cách tính hữu ích là lấy 1 trừ tỷ số giữa tổng sai số bình phương của mô hình và tổng sai số bình phương của mô hình tham chiếu, chẳng hạn dự báo lợi suất bằng 0 hoặc bằng trung bình lịch sử được xác định đúng thời điểm. Nếu Out-of-Sample R² âm theo định nghĩa này, nghĩa là mô hình đang dự báo kém hơn baseline được lựa chọn. Đây không phải tình huống hiếm trong dữ liệu lợi suất cổ phiếu, bởi biến động ngắn hạn chứa rất nhiều nhiễu và phần có thể dự báo thường tương đối nhỏ.
Hãy thử một bảng kết quả giả định từ cùng bài toán dự báo lợi suất 5 phiên của 30–50 cổ phiếu Việt Nam. Những con số dưới đây chỉ dùng để minh họa cách so sánh,

Nếu chỉ nhìn cột Train MAE, Random Forest rõ ràng vượt trội. Sai số của nó thấp hơn rất nhiều so với Ridge. Nhưng khi chuyển sang tập test, kết quả đảo ngược. Ridge có Test MAE thấp hơn, trong khi Random Forest thậm chí kém hơn baseline dự báo lợi suất bằng 0. Một khả năng là mô hình cây đã học quá kỹ những cấu trúc xuất hiện trong giai đoạn huấn luyện nhưng không còn ổn định trong giai đoạn kiểm định. Tuy nhiên, chỉ từ bảng này chưa đủ để chứng minh overfitting là nguyên nhân duy nhất. Chúng ta còn phải kiểm tra xem phân phối dữ liệu có thay đổi, những Features nào đang mất khả năng dự báo, có lỗi dữ liệu hay không và mức độ nhạy cảm với những tham số đã chọn. Điểm quan trọng là mô hình chiến thắng trong tập huấn luyện chưa chắc là mô hình đáng tin hơn ở tương lai. Nếu người nghiên cứu chỉ công bố kết quả train hoặc chọn một giai đoạn test có lợi cho Random Forest, việc so sánh sẽ không còn nhiều ý nghĩa.
Trong bài toán lựa chọn cổ phiếu, mình còn quan tâm đến Rank Information Coefficient (Rank IC), tức tương quan thứ hạng Spearman giữa điểm dự báo và lợi suất thực tế của các cổ phiếu trong cùng một thời điểm. Giả sử chúng ta không cần biết chính xác FPT sẽ tăng 1,2% hay 1,8% trong năm phiên tới, mà chỉ cần biết FPT có được xếp cao hơn những cổ phiếu có triển vọng kém hơn hay không. Khi đó, khả năng xếp hạng có thể quan trọng hơn việc dự báo chính xác từng phần trăm lợi suất. Để tính đúng, nên tính Rank IC theo từng ngày có đủ số cổ phiếu hợp lệ, rồi tổng hợp kết quả theo thời gian, thay vì trộn tất cả quan sát cổ phiếu và ngày giao dịch vào một phép tương quan chung. Ngoài giá trị trung bình, cần xem phân phối Rank IC, tỷ lệ kỳ có IC dương và độ ổn định giữa những giai đoạn thị trường. Một mô hình có Rank IC trung bình dương nhưng toàn bộ lợi thế chỉ xuất hiện trong vài tháng đặc biệt vẫn cần được xem xét thận trọng. Với lợi suất tương lai chồng lấn, việc đánh giá mức ý nghĩa thống kê còn cần kiểm soát tính phụ thuộc theo thời gian.
Bước tiếp theo mới là chuyển dự báo thành một chiến lược danh mục giả lập. Chẳng hạn, tại cuối mỗi tháng, sử dụng Ridge và Random Forest để xếp hạng cùng một nhóm 30 cổ phiếu, mỗi mô hình lựa chọn năm mã có dự báo lợi suất cao nhất và phân bổ vốn bằng nhau. Cả hai danh mục phải sử dụng cùng ngày tái cân bằng, cùng điều kiện thanh khoản, cùng phương pháp mô phỏng khớp lệnh và cùng mức phí. Đồng thời, cần xây dựng ít nhất hai benchmark: một danh mục chia đều toàn bộ 30 cổ phiếu và một chiến lược Momentum đơn giản không sử dụng Machine Learning. Nếu Random Forest có Rank IC cao hơn Ridge nhưng danh mục tạo ra turnover lớn, thường xuyên thay đổi cổ phiếu và phải mua bán trong những phiên thanh khoản kém, lợi thế dự báo có thể bị chi phí giao dịch làm mất đi. Ngược lại, Ridge có thể dự báo sai lệch nhiều hơn về mặt giá trị tuyệt đối nhưng vẫn tạo ra thứ hạng tương đối ổn định, giúp danh mục có mức thay đổi vị thế thấp hơn. Tất nhiên, đây là những khả năng cần kiểm tra chứ không phải ưu điểm mặc định của Ridge. Chỉ khi đánh giá cả chất lượng dự báo lẫn kết quả danh mục, chúng ta mới biết mô hình nào mang lại giá trị cho mục tiêu đầu tư.
Một vấn đề mình thấy khá nhiều người mới bỏ qua là sự ổn định của kết quả khi thị trường thay đổi. Giả sử Random Forest hoạt động rất tốt trong giai đoạn thị trường đi lên, nhưng dự báo kém khi thị trường đảo chiều. Điều này có thể xuất phát từ việc mô hình học những mối quan hệ phụ thuộc mạnh vào trạng thái thị trường. Để kiểm tra, có thể chia kết quả theo từng năm, nhóm cổ phiếu, ngành và những giai đoạn có mức volatility khác nhau. Đồng thời, thực hiện Walk-Forward Analysis bằng cách mở rộng tập huấn luyện theo thời gian, huấn luyện lại hai mô hình trên cùng lịch và đánh giá trên các giai đoạn tiếp theo. Một mô hình chỉ thắng trong một lần chia dữ liệu nhưng liên tục thua khi đổi cửa sổ kiểm định chưa đủ cơ sở để kết luận có lợi thế ổn định. Ngược lại, nếu Random Forest vượt Ridge trên nhiều giai đoạn, nhiều nhóm cổ phiếu và vẫn tạo ra cải thiện sau chi phí, khi đó chúng ta có bằng chứng mạnh hơn rằng các quan hệ phi tuyến mang lại giá trị bổ sung trong bài toán nghiên cứu.
Ngoài ra, mình sẽ kiểm tra mức độ phụ thuộc của Random Forest vào từng nhóm Features. scikit-learn cung cấp feature_importances_, nhưng không nên mặc định đây là bằng chứng nhân quả hoặc là cách xác định chính xác biến nào đang tạo alpha. Chỉ tiêu importance dựa trên mức giảm impurity của cây có những hạn chế, đặc biệt khi các biến có đặc điểm phân phối khác nhau. Nếu Momentum 5 phiên và Momentum 20 phiên tương quan cao, việc diễn giải tầm quan trọng riêng lẻ của mỗi biến còn phức tạp hơn. Có thể sử dụng Permutation Importance trên dữ liệu chưa được dùng để huấn luyện, thử loại từng nhóm Features hoặc kiểm tra khả năng dự báo khi bổ sung một nhóm biến mới. Tuy nhiên, ngay cả Permutation Importance cũng cần được diễn giải thận trọng khi các Features tương quan mạnh. Nếu một mô hình cho kết quả tốt nhờ những biến không có cơ chế kinh tế rõ ràng và hiệu quả biến mất khi thay đổi một chi tiết nhỏ trong dữ liệu, đó là lý do để tiếp tục kiểm tra chứ chưa phải để triển khai giao dịch.
Với một project học tập, mình nghĩ sản phẩm cuối nên gồm một notebook Python và một bảng so sánh có cấu trúc rõ ràng. Notebook thực hiện các bước từ đọc dữ liệu, tính Features, tạo Target, chia mẫu theo thời gian, huấn luyện Ridge và Random Forest đến tạo dự báo. Bảng so sánh ghi lại phiên bản dữ liệu, tập Features, tham số, MAE, RMSE, Out-of-Sample R², Rank IC và kết quả danh mục sau chi phí. Phần cuối là một báo cáo nghiên cứu ngắn khoảng 3–5 trang giải thích mô hình nào thắng ở từng chỉ tiêu, sự khác biệt có ổn định không và những hạn chế của nghiên cứu. Nếu muốn thực hành sâu hơn, có thể thử ba cấu hình Random Forest với mức độ phức tạp khác nhau, chẳng hạn thay đổi min_samples_leaf và max_depth theo một danh sách giá trị đã xác định trước. Sau đó, quan sát xem Train MAE và Validation MAE thay đổi thế nào. Đây là một bài tập rất tốt để hiểu sự đánh đổi giữa khả năng học dữ liệu và khả năng tổng quát hóa, thay vì chỉ học thuộc rằng tăng tham số này hoặc giảm tham số kia sẽ hạn chế overfitting.
Có một câu hỏi cuối cùng mà mình nghĩ người làm Quant nên tập thói quen đặt ra: Nếu Random Forest chỉ cải thiện một chút về sai số dự báo nhưng phức tạp hơn đáng kể, liệu cải thiện đó có đáng để sử dụng không? Trong nghiên cứu học thuật, một mức cải thiện nhỏ về Out-of-Sample R² có thể rất đáng quan tâm nếu được kiểm định chặt chẽ trên lượng dữ liệu lớn và có cơ chế kinh tế hợp lý. Nhưng trong vận hành thực tế, chúng ta còn phải tính đến chi phí nghiên cứu, giám sát mô hình, chất lượng dữ liệu, thời gian huấn luyện lại và khả năng phát hiện khi mô hình suy giảm hiệu quả. Một mô hình Ridge dễ giải thích, ít tham số và hoạt động ổn định có thể là lựa chọn phù hợp hơn nếu Random Forest không tạo ra cải thiện đáng kể trong quyết định đầu tư. Ngược lại, nếu những quan hệ phi tuyến thực sự tồn tại và được xác nhận qua kiểm định ngoài mẫu, không có lý do gì để từ chối Random Forest chỉ vì nó phức tạp hơn. Vấn đề không nằm ở việc ưu tiên mô hình đơn giản hay phức tạp một cách tuyệt đối, mà là lựa chọn mức độ phức tạp tương xứng với bằng chứng thực nghiệm.
LỜI KẾT
Khi học Machine Learning cho Quant, mình nghĩ không nên bắt đầu bằng câu hỏi mô hình nào mạnh nhất. Thay vào đó, hãy bắt đầu từ một bài toán tài chính cụ thể, một tập dữ liệu có thể kiểm tra, một baseline đơn giản và một phương pháp đánh giá được xác định từ trước. Ridge Regression và Random Forest là một cặp mô hình rất phù hợp để học, bởi chúng giúp người nghiên cứu thấy rõ sự khác biệt giữa quan hệ tuyến tính có regularization và khả năng học các cấu trúc phi tuyến thông qua cây quyết định.
Nếu Random Forest thắng trong tập huấn luyện nhưng thua ngoài mẫu, đó không phải bằng chứng rằng Machine Learning vô dụng. Nó cho thấy chúng ta cần kiểm tra mức độ phức tạp, chất lượng dữ liệu, sự thay đổi của thị trường và quá trình lựa chọn mô hình. Nếu Ridge thắng, điều đó cũng không chứng minh quan hệ giữa các biến tài chính luôn tuyến tính. Có thể dữ liệu chưa đủ lớn, Features chưa phù hợp hoặc cấu hình Random Forest chưa được kiểm soát tốt. Điều quan trọng là kết quả phải được đọc trong đúng phạm vi nghiên cứu và những giả định đã sử dụng.
