Random Forest trong phân loại cổ phiếu mạnh/yếu
Random Forest
Phần 1: Random Forest không phải công cụ đoán giá, mà là công cụ phân loại xác suất
Khi nghe đến Machine Learning trong chứng khoán, nhiều nhà đầu tư thường kỳ vọng mô hình có thể trả lời một câu rất trực tiếp: ngày mai cổ phiếu nào tăng, cổ phiếu nào giảm, mua mã nào để có lãi. Nhưng trong thực tế, cách tiếp cận này rất dễ thất bại. Giá cổ phiếu ngắn hạn chứa nhiều nhiễu, bị ảnh hưởng bởi dòng tiền, tin tức, tâm lý, thanh khoản, sự kiện bất ngờ và cả các yếu tố không có trong dữ liệu. Nếu cố dùng mô hình để dự báo chính xác giá từng phiên, nhà đầu tư rất dễ rơi vào ảo tưởng rằng mô hình đang thông minh, trong khi thực chất chỉ đang học thuộc dữ liệu quá khứ.
Một cách thực tế hơn là dùng mô hình để phân loại cổ phiếu mạnh/yếu. Thay vì hỏi “ngày mai cổ phiếu này tăng bao nhiêu phần trăm”, ta hỏi: “trong nhóm cổ phiếu đang theo dõi, cổ phiếu nào có xác suất cao thuộc nhóm mạnh hơn thị trường trong 1 tháng tới, 3 tháng tới hoặc một chu kỳ giao dịch nhất định?” Đây là bài toán hợp lý hơn với Random Forest, vì mô hình không cần dự báo một con số giá chính xác, mà chỉ cần học các đặc điểm thường xuất hiện ở nhóm cổ phiếu mạnh và nhóm cổ phiếu yếu.
Random Forest là một mô hình học máy dựa trên nhiều cây quyết định. Một cây quyết định đơn lẻ có thể hiểu như một chuỗi câu hỏi: cổ phiếu có đang nằm trên MA50 không, thanh khoản có tăng so với trung bình 20 phiên không, lợi nhuận quý có tăng không, ROE có cao không, biến động có quá lớn không, sức mạnh tương đối so với VN-Index có tốt không. Mỗi câu hỏi chia dữ liệu thành các nhánh nhỏ hơn, cuối cùng đưa ra dự đoán cổ phiếu thuộc nhóm mạnh hay yếu. Vấn đề là một cây đơn lẻ rất dễ bị overfit, tức học quá kỹ dữ liệu quá khứ và hoạt động kém với dữ liệu mới. Random Forest giải quyết bằng cách tạo ra nhiều cây khác nhau, mỗi cây học trên một phần dữ liệu và một phần biến đầu vào khác nhau, sau đó lấy kết quả tổng hợp. Vì vậy, mô hình thường ổn định hơn một cây quyết định đơn lẻ.

Trong đầu tư cổ phiếu, Random Forest có một lợi thế lớn: nó không bắt buộc mối quan hệ giữa các biến phải tuyến tính. Thị trường tài chính hiếm khi vận hành theo kiểu một biến tăng thì kết quả tăng đều. Ví dụ, thanh khoản tăng có thể là tín hiệu tốt nếu xảy ra ở vùng breakout sau nền tích lũy, nhưng cũng có thể là tín hiệu xấu nếu xảy ra sau một đoạn tăng nóng và giá bắt đầu phân phối. Momentum cao có thể tốt nếu đi kèm dòng tiền ổn định, nhưng có thể nguy hiểm nếu cổ phiếu đã quá xa nền giá. P/E thấp có thể là hấp dẫn nếu lợi nhuận bền, nhưng cũng có thể là bẫy giá trị nếu lợi nhuận sắp giảm. Random Forest có khả năng học các tương tác phi tuyến như vậy tốt hơn nhiều mô hình đơn giản.
Tuy nhiên, cần nhấn mạnh rằng Random Forest không biến dữ liệu xấu thành quyết định tốt. Nếu dữ liệu đầu vào sai, nhãn phân loại sai, có look-ahead bias, survivorship bias, hoặc không tính chi phí giao dịch và thanh khoản, mô hình có thể cho kết quả đẹp trên backtest nhưng vô dụng khi giao dịch thật. Trong thị trường chứng khoán, lỗi nguy hiểm nhất không phải là mô hình chưa đủ phức tạp, mà là nhà đầu tư vô tình đưa thông tin tương lai vào quá khứ. Ví dụ, nếu dùng dữ liệu báo cáo tài chính quý chưa công bố tại thời điểm dự báo, mô hình sẽ có vẻ rất giỏi vì nó đã nhìn thấy tương lai. Khi đem ra giao dịch thật, lợi thế đó biến mất.
Vì vậy, Random Forest nên được xem như một công cụ hỗ trợ sàng lọc, không phải máy ra lệnh mua bán tự động. Nó có thể giúp nhà đầu tư giảm hàng trăm cổ phiếu xuống còn một nhóm đáng quan sát hơn. Nó có thể xếp hạng xác suất cổ phiếu mạnh/yếu. Nó có thể chỉ ra biến nào đang có đóng góp lớn trong mô hình. Nhưng quyết định cuối cùng vẫn cần kiểm tra thanh khoản, tin tức, ngành, định giá, rủi ro sự kiện và bối cảnh thị trường. Một mô hình tốt không thay thế tư duy đầu tư. Nó làm cho tư duy đó có kỷ luật và có thể kiểm chứng hơn.
Phần 2: Muốn dùng Random Forest, phải định nghĩa rõ cổ phiếu “mạnh” và “yếu”
Bước quan trọng nhất trong bài toán này không phải là chạy mô hình, mà là định nghĩa nhãn. Nếu không định nghĩa rõ thế nào là cổ phiếu mạnh/yếu, Random Forest sẽ học một mục tiêu mơ hồ. Nhiều người nói muốn tìm cổ phiếu mạnh, nhưng “mạnh” có thể được hiểu theo rất nhiều cách. Mạnh là tăng giá tuyệt đối trong 20 phiên tới? Mạnh là tăng tốt hơn VN-Index? Mạnh là nằm trong top 20% cổ phiếu có hiệu suất tốt nhất thị trường? Mạnh là vừa có momentum tốt vừa có thanh khoản đủ giao dịch? Mạnh là giảm ít hơn thị trường trong giai đoạn thị trường xấu? Mỗi định nghĩa sẽ tạo ra một mô hình khác nhau.
Một cách thực tế là định nghĩa cổ phiếu mạnh theo relative return, tức mức sinh lời tương đối so với benchmark. Ví dụ, tại mỗi thời điểm, ta tính lợi nhuận 20 phiên tiếp theo của từng cổ phiếu, sau đó trừ đi lợi nhuận 20 phiên tiếp theo của VN-Index hoặc chỉ số ngành. Nếu cổ phiếu nằm trong top 30% về hiệu suất tương đối, gán nhãn “mạnh”. Nếu nằm trong bottom 30%, gán nhãn “yếu”. Nhóm giữa có thể bỏ qua hoặc gán nhãn trung tính. Cách này phù hợp hơn dự báo tăng/giảm tuyệt đối, vì trong một thị trường xấu, một cổ phiếu giảm 3% khi VN-Index giảm 10% vẫn là cổ phiếu mạnh tương đối. Ngược lại, trong thị trường tăng mạnh, một cổ phiếu tăng 2% khi VN-Index tăng 8% có thể là cổ phiếu yếu.
Cũng có thể định nghĩa mạnh/yếu theo mục tiêu giao dịch cụ thể. Nếu nhà đầu tư muốn tìm cổ phiếu cho chiến lược momentum 1–3 tháng, nhãn nên dựa trên lợi nhuận tương lai 20–60 phiên và sức mạnh tương đối. Nếu nhà đầu tư muốn tìm cổ phiếu phòng thủ, nhãn có thể dựa trên khả năng giảm ít hơn thị trường trong các phiên đỏ. Nếu nhà đầu tư muốn tìm cổ phiếu breakout, nhãn có thể dựa trên việc cổ phiếu tăng sau khi vượt nền với thanh khoản cao. Nếu mục tiêu không rõ, mô hình sẽ không biết học điều gì.
Một lỗi rất phổ biến là gán nhãn quá đơn giản: cổ phiếu tăng thì mạnh, giảm thì yếu. Cách này bỏ qua bối cảnh thị trường. Nếu toàn thị trường tăng mạnh, hầu hết cổ phiếu đều tăng, mô hình có thể học rằng chỉ cần mua gần như mọi thứ là đúng. Nếu toàn thị trường giảm sâu, hầu hết cổ phiếu đều yếu, mô hình có thể không phân biệt được cổ phiếu nào thật sự khỏe hơn. Vì vậy, dùng thứ hạng tương đối trong từng thời điểm thường tốt hơn dùng mức tăng giảm tuyệt đối.
Sau khi định nghĩa nhãn, bước tiếp theo là chọn đặc điểm đầu vào. Với phân loại cổ phiếu mạnh/yếu, có thể dùng nhiều nhóm biến. Nhóm đầu tiên là biến giá và momentum: lợi nhuận 5, 20, 60, 120 phiên; khoảng cách so với MA20, MA50, MA200; tỷ lệ cổ phiếu nằm gần đỉnh 52 tuần; mức giảm từ đỉnh gần nhất; số phiên tăng trong 20 phiên gần nhất. Đây là các biến giúp mô hình nhận diện sức mạnh giá.
Nhóm thứ hai là thanh khoản: giá trị giao dịch trung bình 20 phiên, 60 phiên; tỷ lệ thanh khoản hiện tại so với trung bình; độ ổn định của thanh khoản; bid-ask spread nếu có dữ liệu; tỷ lệ giá trị vị thế dự kiến so với thanh khoản trung bình. Với thị trường Việt Nam, thanh khoản là yếu tố cực kỳ quan trọng. Một cổ phiếu có tín hiệu đẹp nhưng thanh khoản quá thấp có thể không giao dịch được với quy mô thực tế. Nếu không đưa thanh khoản vào mô hình hoặc bộ lọc trước mô hình, kết quả có thể nghiêng về các cổ phiếu nhỏ dễ tăng trên dữ liệu nhưng khó mua bán thật.
Nhóm thứ ba là biến cơ bản: tăng trưởng doanh thu, tăng trưởng lợi nhuận, ROE, ROA, biên lợi nhuận gộp, biên lợi nhuận ròng, dòng tiền kinh doanh, tỷ lệ CFO/lợi nhuận sau thuế, nợ vay/vốn chủ sở hữu, chi phí tài chính/lợi nhuận, P/E, P/B, EV/EBITDA nếu có. Những biến này giúp mô hình không chỉ nhìn giá mà còn nhìn chất lượng doanh nghiệp. Tuy nhiên, dữ liệu cơ bản phải xử lý rất cẩn thận về thời điểm công bố. Không được dùng dữ liệu quý nếu tại thời điểm dự báo nhà đầu tư chưa thể biết dữ liệu đó.
Nhóm thứ tư là biến ngành và thị trường. Một cổ phiếu mạnh thường không đứng một mình. Nếu ngành của nó cũng đang mạnh, xác suất tiếp diễn có thể cao hơn. Vì vậy, mô hình nên biết ngành đang có momentum ra sao, bao nhiêu cổ phiếu trong ngành nằm trên MA50, thanh khoản ngành có tăng không, ngành đang mạnh hơn hay yếu hơn VN-Index. Ngoài ra, trạng thái thị trường chung cũng rất quan trọng. Một tín hiệu momentum trong thị trường uptrend có ý nghĩa khác với tín hiệu tương tự trong thị trường downtrend. Nếu Random Forest không có biến về regime thị trường, nó có thể dùng cùng một quy tắc cho mọi bối cảnh, điều này thường không phù hợp.
Một điểm rất quan trọng là phải tách rõ feature tại thời điểm hiện tại và label trong tương lai. Feature là những gì nhà đầu tư biết tại ngày T. Label là kết quả xảy ra sau ngày T, ví dụ lợi nhuận từ T đến T+20. Nếu feature chứa bất kỳ thông tin nào từ sau ngày T, mô hình sẽ bị leakage. Đây là lỗi làm cho nhiều backtest Machine Learning trong tài chính đẹp bất thường. Trong thực chiến, một mô hình trung bình nhưng sạch dữ liệu thường có giá trị hơn mô hình rất đẹp nhưng dính leakage.
Phần 3: Random Forest học được gì từ dữ liệu cổ phiếu?
Khi Random Forest được xây đúng, nó có thể học những mẫu hình khá gần với tư duy của một nhà đầu tư có kinh nghiệm, nhưng theo cách có hệ thống hơn. Ví dụ, mô hình có thể phát hiện rằng cổ phiếu có momentum 60 phiên tốt, thanh khoản tăng so với trung bình, đang nằm trên MA50, ngành cũng mạnh hơn thị trường và ROE ổn định thường có xác suất cao thuộc nhóm mạnh trong 20–60 phiên tiếp theo. Ngược lại, cổ phiếu có momentum yếu, thanh khoản giảm, nằm dưới MA200, lợi nhuận suy giảm và nợ vay cao thường dễ thuộc nhóm yếu.
Điểm hay của Random Forest là nó có thể kết hợp nhiều điều kiện mà không cần nhà đầu tư tự viết luật cứng. Nếu dùng bộ lọc thủ công, nhà đầu tư có thể đặt điều kiện kiểu: lợi nhuận 60 phiên > 10%, giá trên MA50, thanh khoản 20 phiên > 20 tỷ, ROE > 15%. Nhưng thị trường không phải lúc nào cũng tuân theo những ngưỡng cố định. Có giai đoạn cổ phiếu chỉ cần momentum vừa phải nhưng ngành rất mạnh là đủ. Có giai đoạn thanh khoản tăng quá nhanh lại là dấu hiệu phân phối. Có giai đoạn cổ phiếu chất lượng cao nhưng momentum yếu vẫn chưa nên mua. Random Forest có thể học các tương tác giữa nhiều biến thay vì ép mọi thứ vào một công thức đơn giản.
Tuy nhiên, nhà đầu tư cần cẩn trọng với việc diễn giải mô hình. Random Forest có thể cho biết biến nào quan trọng, nhưng “quan trọng” không đồng nghĩa với quan hệ nhân quả. Nếu mô hình nói momentum 60 phiên là biến có đóng góp lớn, điều đó không có nghĩa momentum luôn làm cổ phiếu tăng. Nó chỉ có nghĩa trong tập dữ liệu huấn luyện, biến này giúp phân biệt nhóm mạnh/yếu tốt hơn các biến khác. Nếu thị trường đổi regime, mức độ quan trọng có thể thay đổi. Trong tài chính, quan hệ thống kê có thể suy yếu rất nhanh khi nhiều người cùng khai thác hoặc khi cấu trúc thị trường thay đổi.
Một ứng dụng thực tế là dùng Random Forest để tạo score xác suất. Thay vì mô hình chỉ nói cổ phiếu A mạnh, cổ phiếu B yếu, ta có thể lấy xác suất cổ phiếu thuộc nhóm mạnh. Ví dụ, mô hình cho A xác suất 72%, B 61%, C 48%, D 30%. Nhà đầu tư có thể dùng xác suất này để xếp hạng, sau đó chỉ xem xét top 20–30 cổ phiếu có xác suất cao nhất, rồi kiểm tra thêm bằng phân tích ngành, thanh khoản và điểm mua. Cách dùng này thực tế hơn việc để mô hình tự động mua bán tất cả.
Ví dụ, sau khi chạy mô hình trên toàn bộ thị trường, danh sách top cổ phiếu có xác suất mạnh cao nhất gồm một số mã ngân hàng, chứng khoán và thép. Nếu đồng thời các ngành này cũng đang có dòng tiền tốt, thanh khoản thị trường cải thiện và VN-Index nằm trên MA50, tín hiệu có thể đáng chú ý. Nhưng nếu top list toàn cổ phiếu thanh khoản thấp, tăng nóng nhiều phiên, hoặc nằm trong nhóm có tin đầu cơ, nhà đầu tư cần lọc lại. Mô hình không hiểu hết rủi ro sự kiện, room hô, trần sàn, khả năng kẹt hàng hay tin pháp lý. Đây là phần con người vẫn phải kiểm soát.
Random Forest cũng có thể giúp phát hiện sự khác biệt giữa cổ phiếu “mạnh thật” và “mạnh ảo”. Một cổ phiếu mạnh thật thường không chỉ tăng giá, mà còn có thanh khoản đủ, ngành hỗ trợ, độ rộng thị trường tốt, biến động không quá bất thường và không quá xa khỏi nền giá. Một cổ phiếu mạnh ảo có thể tăng rất nhanh nhưng thanh khoản mỏng, spread rộng, biến động cao, không có xác nhận từ ngành và dễ rơi vào nhóm rủi ro khi thị trường đảo chiều. Nếu feature được thiết kế tốt, mô hình có thể học được một phần khác biệt này.
Nhưng cũng cần nói rõ: Random Forest không xử lý tốt những sự kiện chưa từng có trong dữ liệu. Nếu một doanh nghiệp bất ngờ bị điều tra, cổ phiếu bị hạn chế giao dịch, thị trường gặp khủng hoảng thanh khoản, quy định thay đổi, hoặc một sự kiện địa chính trị lớn xảy ra, mô hình có thể phản ứng chậm. Nó học từ quá khứ, nên những cú sốc ngoài phân phối vẫn là rủi ro lớn. Đây là lý do mô hình phân loại cổ phiếu phải đi cùng risk management, không thể thay thế stop-loss, giới hạn tỷ trọng, bộ lọc thanh khoản và kiểm soát danh mục.
Phần 4: Những lỗi dễ làm mô hình đẹp trên giấy nhưng thất bại khi giao dịch thật
Lỗi đầu tiên là look-ahead bias. Đây là lỗi dùng dữ liệu tương lai để dự báo quá khứ. Ví dụ, mô hình phân loại cổ phiếu mạnh tại ngày 31/3 nhưng lại dùng báo cáo tài chính quý I mà thực tế đến cuối tháng 4 hoặc tháng 5 nhà đầu tư mới biết đầy đủ. Khi đó, backtest sẽ đẹp vì mô hình có thông tin mà nhà đầu tư thật không có. Với dữ liệu tài chính, phải dùng ngày công bố thực tế hoặc giả định độ trễ an toàn. Nếu không xử lý điểm này, mô hình gần như vô nghĩa.
Lỗi thứ hai là survivorship bias. Nếu chỉ lấy dữ liệu các cổ phiếu hiện còn niêm yết, loại bỏ các cổ phiếu đã hủy niêm yết, bị đình chỉ, bị kiểm soát hoặc thanh khoản biến mất, mô hình sẽ học trên một thị trường đã được làm sạch bởi tương lai. Kết quả backtest sẽ tốt hơn thực tế vì những cổ phiếu tệ nhất đã bị xóa khỏi dữ liệu. Ở thị trường Việt Nam, vấn đề này càng quan trọng vì có nhiều cổ phiếu thanh khoản thấp, bị cảnh báo, kiểm soát, hạn chế giao dịch hoặc rời sàn. Một mô hình chỉ học trên các cổ phiếu sống sót có thể đánh giá thấp rủi ro.
Lỗi thứ ba là không tính chi phí giao dịch và slippage. Một mô hình phân loại đúng 55–60% nghe có vẻ tốt, nhưng nếu danh mục đảo hàng quá nhiều, mua bán ở cổ phiếu thanh khoản thấp, chênh lệch giá lớn, chi phí giao dịch và trượt giá có thể ăn hết lợi thế. Backtest dùng giá đóng cửa giả định mua bán dễ dàng thường quá lạc quan. Trong thực chiến, nếu mô hình khuyến nghị một cổ phiếu chỉ giao dịch vài tỷ đồng mỗi phiên, nhà đầu tư không thể mua bán quy mô lớn mà không ảnh hưởng đến giá.
Lỗi thứ tư là overfitting. Random Forest mạnh, nhưng nếu không kiểm soát độ sâu cây, số lượng biến, cách chia dữ liệu và kiểm tra ngoài mẫu, mô hình vẫn có thể học quá kỹ dữ liệu quá khứ. Đặc biệt trong tài chính, số lượng quan sát thật sự hữu ích không lớn như tưởng tượng, vì dữ liệu các cổ phiếu trong cùng thời điểm thường có tương quan cao. Một mô hình có độ chính xác cao bất thường trên tập train nhưng giảm mạnh trên tập test là dấu hiệu cần cảnh giác. Không nên tin mô hình chỉ vì nó chạy tốt trên quá khứ.
Lỗi thứ năm là chia train-test sai cách. Với dữ liệu tài chính, không nên trộn ngẫu nhiên toàn bộ quan sát quá khứ rồi chia train/test như bài toán thông thường. Vì dữ liệu có yếu tố thời gian. Nếu lấy dữ liệu năm 2025 vào train rồi test trên năm 2022, mô hình lại nhìn thấy tương lai. Cách hợp lý hơn là train trên giai đoạn trước, test trên giai đoạn sau; hoặc dùng walk-forward analysis, ví dụ train 2018–2021, test 2022; sau đó train 2018–2022, test 2023; tiếp tục như vậy. Mục tiêu là mô phỏng cách mô hình được dùng trong thực tế.
Lỗi thứ sáu là quên regime thị trường. Một mô hình học trên giai đoạn uptrend mạnh có thể đánh giá cao momentum và thanh khoản tăng. Nhưng khi thị trường bước vào downtrend hoặc sideway thanh khoản thấp, cùng tín hiệu đó có thể kém hiệu quả hơn. Nếu dữ liệu train không đủ nhiều regime, hoặc mô hình không có biến mô tả trạng thái thị trường, kết quả dễ thiếu ổn định. Với thị trường Việt Nam, các giai đoạn tiền rẻ, siết tín dụng, khủng hoảng trái phiếu, phục hồi thanh khoản, dòng tiền đầu cơ mạnh hay yếu đều có đặc điểm rất khác nhau.
Lỗi thứ bảy là dùng quá nhiều biến nhưng không hiểu biến nào có ý nghĩa kinh tế. Machine Learning rất dễ tạo cảm giác rằng càng nhiều feature càng tốt. Nhưng trong tài chính, nhiều biến chỉ là phiên bản lặp lại của nhau. Lợi nhuận 20 phiên, 21 phiên, 22 phiên, khoảng cách MA20, MA21, MA22 có thể tạo ra ảo giác dữ liệu phong phú nhưng không thêm nhiều thông tin. Một bộ feature tốt nên có logic kinh tế rõ: momentum, liquidity, volatility, quality, value, leverage, earnings trend, sector strength, market regime. Mô hình tốt không cần hàng trăm biến nhiễu.
Lỗi cuối cùng là dùng mô hình như tín hiệu mua ngay, không qua bước xây danh mục. Một cổ phiếu được Random Forest đánh giá mạnh không có nghĩa là nên mua full tỷ trọng. Cần kiểm tra xem danh mục hiện tại đã có bao nhiêu cổ phiếu cùng ngành, tương quan rủi ro thế nào, thanh khoản có đủ không, điểm mua có quá xa không, nếu sai sẽ mất bao nhiêu, thị trường chung có ủng hộ không. Quant signal chỉ là đầu vào cho quy trình đầu tư. Nó không thay thế quản trị danh mục.
Phần 5: Cách ứng dụng thực tế cho nhà đầu tư cá nhân tại thị trường Việt Nam
Với nhà đầu tư cá nhân, cách dùng Random Forest hợp lý nhất là biến nó thành một bộ lọc có kỷ luật. Đầu tiên, tạo universe gồm các cổ phiếu đủ thanh khoản, ví dụ giá trị giao dịch trung bình 20 phiên trên một ngưỡng nhất định, không thuộc diện cảnh báo nghiêm trọng, có dữ liệu đủ dài và phù hợp với quy mô tài khoản. Việc lọc universe rất quan trọng. Nếu đưa toàn bộ cổ phiếu thanh khoản thấp vào mô hình, kết quả có thể đẹp trên giấy nhưng khó giao dịch.
Tiếp theo, định nghĩa mục tiêu rõ ràng. Ví dụ, mô hình dự đoán xác suất cổ phiếu nằm trong top 30% hiệu suất tương đối so với VN-Index trong 20 phiên tới. Đây là mục tiêu ngắn-trung hạn, phù hợp với chiến lược momentum có kiểm soát. Nếu muốn khung thời gian dài hơn, có thể dùng 60 phiên. Nhưng không nên đổi mục tiêu liên tục. Một mô hình 20 phiên và một mô hình 60 phiên có logic khác nhau. Tín hiệu ngắn hạn nhạy hơn với giá và thanh khoản, tín hiệu dài hơn cần thêm cơ bản, ngành và chất lượng lợi nhuận.
Sau đó, xây feature theo các nhóm có ý nghĩa. Với dữ liệu giá, dùng momentum 5/20/60 phiên, khoảng cách tới MA20/MA50/MA200, volatility, drawdown từ đỉnh gần nhất. Với thanh khoản, dùng giá trị giao dịch bình quân, tỷ lệ thanh khoản hiện tại so với trung bình, độ ổn định của thanh khoản. Với cơ bản, dùng tăng trưởng lợi nhuận, ROE, biên lợi nhuận, nợ vay, dòng tiền, định giá. Với ngành, dùng sức mạnh tương đối của ngành, số lượng cổ phiếu trong ngành đang trên MA50. Với thị trường, dùng trạng thái VN-Index, độ rộng thị trường, thanh khoản toàn sàn.
Khi mô hình trả kết quả, không nên mua toàn bộ cổ phiếu được dự báo mạnh. Nên dùng nó để xếp hạng. Ví dụ, mỗi tuần chạy mô hình một lần, lấy top 20 cổ phiếu có xác suất mạnh cao nhất. Sau đó nhà đầu tư xem lại thủ công: cổ phiếu có thanh khoản đủ không, có đang tăng quá xa không, ngành có đồng thuận không, có tin tức rủi ro không, có phù hợp danh mục không. Từ top 20 có thể chọn 5–8 mã đưa vào watchlist giao dịch. Đây là cách kết hợp tốt giữa quant và discretionary.
Một ứng dụng khác là dùng Random Forest để cảnh báo cổ phiếu yếu trong danh mục. Nếu một cổ phiếu đang nắm giữ bị mô hình xếp vào nhóm xác suất yếu cao, nhà đầu tư không nhất thiết phải bán ngay. Nhưng đó là tín hiệu cần kiểm tra lại. Có thể cổ phiếu mất momentum, thanh khoản suy giảm, ngành yếu đi, biến động tăng hoặc dữ liệu cơ bản xấu hơn. Mô hình lúc này đóng vai trò như hệ thống cảnh báo sớm, giúp nhà đầu tư tránh Status Quo Bias, tức giữ mã kém hiệu quả chỉ vì đã quen.
Với thị trường Việt Nam, cần đặc biệt chú ý đến thanh khoản, biên độ giá và T+. Một mô hình có thể chọn đúng cổ phiếu tăng mạnh, nhưng nếu cổ phiếu trần nhiều phiên không mua được, hoặc khi giảm thì sàn không bán được, kết quả thực tế sẽ khác xa backtest. Vì vậy, trong mô hình hoặc trong bộ lọc sau mô hình nên có điều kiện loại bỏ những cổ phiếu quá khó giao dịch, spread lớn, giá trị giao dịch thấp, hoặc biến động trần sàn bất thường. Cổ phiếu mạnh nhưng không giao dịch được không phải cơ hội tốt cho mọi nhà đầu tư.
Cuối cùng, cần đánh giá mô hình bằng kết quả danh mục, không chỉ bằng accuracy. Trong đầu tư, độ chính xác phân loại không phải thước đo duy nhất. Một mô hình đúng 52% nhưng chọn được các mã thắng lớn và kiểm soát lỗ tốt có thể có giá trị hơn mô hình đúng 60% nhưng lợi nhuận nhỏ, turnover cao, slippage lớn. Cần nhìn return sau chi phí, maximum drawdown, Sharpe, Sortino, hit rate, average win/loss, turnover, thanh khoản và hiệu quả trong từng regime thị trường. Nếu mô hình chỉ tốt trong uptrend nhưng mất nhiều trong downtrend, phải biết cách giảm tỷ trọng khi thị trường xấu.
Nói ngắn gọn, Random Forest là một công cụ mạnh để phân loại cổ phiếu mạnh/yếu, nhưng sức mạnh của nó nằm ở quy trình, không nằm ở tên mô hình. Định nghĩa nhãn phải đúng. Dữ liệu phải sạch. Feature phải có ý nghĩa. Backtest phải tránh leakage. Kết quả phải kiểm tra ngoài mẫu. Tín hiệu phải đi qua bộ lọc thanh khoản và quản trị danh mục. Nếu làm tốt, Random Forest có thể giúp nhà đầu tư cá nhân xây một hệ thống sàng lọc cổ phiếu có tính kỷ luật hơn rất nhiều so với việc đọc tin, nghe room hoặc chọn mã theo cảm giác.
Machine Learning trong đầu tư không phải để thay thế con người bằng một chiếc máy đoán giá. Nó giúp con người bớt cảm tính hơn, kiểm chứng giả thuyết tốt hơn và ra quyết định có cấu trúc hơn. Với Random Forest, câu hỏi hay nhất không phải là “mô hình có đoán đúng mã tăng không”, mà là “mô hình có giúp mình phân biệt nhóm cổ phiếu đáng ưu tiên với nhóm nên tránh một cách ổn định hơn không”. Nếu trả lời được câu hỏi đó, Random Forest mới thật sự có giá trị trong đầu tư.
