Trang chủBlogKinh nghiệm TradingMột cách dùng Regression thực tế trong nghiên cứu cổ phiếu
Một cách dùng Regression thực tế trong nghiên cứu cổ phiếu
Kinh nghiệm Trading

Một cách dùng Regression thực tế trong nghiên cứu cổ phiếu

Regression trong lựa chọn cổ phiếu

Ngọc Hải LươngNgọc Hải Lương
1/11/2026
10 phút phút đọc
27 lượt xem

Regression trong Quant không nhất thiết phải dùng để đoán chính xác giá cổ phiếu ngày mai. Một cách thực tế hơn là dùng model để ước lượng return tương lai và xếp hạng cổ phiếu trong cùng một universe. Ví dụ với VN100, mỗi cuối tuần có thể dùng Momentum, volatility, thanh khoản, valuation, ROE, tăng trưởng lợi nhuận hoặc earnings revision để dự báo excess return 20 phiên tới. Giá trị của model khi đó không nằm ở việc dự báo một mã sẽ tăng đúng 4,2%, mà ở việc nhóm được xếp hạng cao có thực sự outperform nhóm thấp hay không. Trong tài chính, prediction thường rất nhiễu, nhưng ranking vẫn có thể hữu ích nếu nó đủ ổn định để chuyển thành quyết định phân bổ vốn.

SLQk5ib9OmkUBT4PHD6G25_A5ZaaszaSayyUbgB2xNdmJy45diBBh4yEpBQpoM0BRYFUVlhYVbpz8l8MjAZw00Lrtv0vgb1dzrJI9D325uuse-CmEYirdX8WTlUanrnnGudYj68CBh-xlEsJtnqmJRGAfVVA4lVdDu02xrQfIQxyiIpVp9sL04fzjfSGpbc5.jpg

Điểm này cũng khiến Regression trong Quant khác khá nhiều so với những bài toán Machine Learning thông thường. Một model có R² không cao vẫn có thể tạo ra portfolio tốt nếu nó phân biệt tương đối tốt giữa cổ phiếu mạnh và yếu. Ngược lại, một model fit rất đẹp trên dữ liệu lịch sử nhưng không giữ được thứ hạng ngoài mẫu thì gần như không có giá trị đầu tư. Vì vậy, phần quan trọng nhất không phải chọn thuật toán nào ngay từ đầu mà là thiết kế đúng bài toán, đúng dữ liệu và đúng cách kiểm tra.

PHẦN 1. TARGET VÀ DỮ LIỆU QUAN TRỌNG HƠN VIỆC CHỌN MODEL

Nếu mục tiêu là stock selection, target phải phản ánh đúng thứ mình muốn khai thác. Dự báo raw return có thể khiến model chủ yếu học market beta. Trong giai đoạn thị trường tăng mạnh, những cổ phiếu beta cao thường tăng nhiều hơn và model có thể trông khá tốt dù thực tế chỉ đang học mức độ nhạy với thị trường. Một cách khác là dự báo excess return so với VN100 hoặc so với ngành. Khi đó model phải tìm ra sự khác biệt giữa các cổ phiếu thay vì chỉ đoán hướng chung của thị trường.

Feature cũng phải được xây đúng thời điểm. Momentum hay volatility khá dễ vì giá đã tồn tại. Nhưng dữ liệu tài chính phức tạp hơn nhiều. ROE của quý II không thể được sử dụng từ ngày 30/6 nếu doanh nghiệp phải đến tháng 7 hoặc tháng 8 mới công bố báo cáo. Nếu database gán số liệu vào ngày cuối quý thay vì ngày công bố thực tế, model sẽ vô tình nhìn thấy tương lai và backtest đẹp hơn thực tế. Đây là một lỗi rất hay gặp vì dataset nhìn vẫn hoàn toàn “sạch”, model vẫn chạy bình thường, nhưng toàn bộ kết quả đã bị sai ngay từ timestamp.

Universe cũng cần được xử lý point-in-time. Nếu hôm nay lấy danh sách VN100 hiện tại rồi kéo dữ liệu về 7–8 năm trước, những cổ phiếu từng nằm trong VN100 nhưng sau đó suy giảm hoặc bị loại sẽ biến mất khỏi lịch sử. Kết quả là backtest chỉ giữ lại những doanh nghiệp đã sống sót tới hiện tại, tạo survivorship bias. Trong thực tế, một model chạy từ năm 2018 phải được chấm điểm trên đúng universe mà nhà đầu tư thực sự nhìn thấy ở năm 2018, không phải universe được biết sau này.

Sau khi dữ liệu sạch, model đầu tiên nên đơn giản. Ridge Regression là một baseline hợp lý vì các feature tài chính thường tương quan với nhau rất mạnh. Momentum 20 ngày, Momentum 60 ngày và khoảng cách với MA60 có thể đang nói gần cùng một câu chuyện. P/E, P/B và EV/EBITDA cũng có thể cùng phản ánh valuation. Ridge giúp giảm ảnh hưởng của việc nhiều biến cùng đo một loại thông tin và tạo ra một baseline đủ rõ để so sánh với model phức tạp hơn.

Sau đó mới đáng thử Random Forest, Gradient Boosting hoặc các model phi tuyến khác. Nếu Gradient Boosting cải thiện rất mạnh in-sample nhưng chỉ ngang Ridge ngoài mẫu, phần complexity thêm vào chưa tạo được giá trị thực. Ngược lại, nếu model phi tuyến liên tục cải thiện ranking ở nhiều giai đoạn và nhiều market regime khác nhau, lúc đó mới có lý do tin rằng các interaction giữa feature đang chứa thông tin mà linear model bỏ lỡ. Trong Quant, model phức tạp chỉ đáng giữ khi nó thắng baseline ở những nơi mà researcher chưa từng dùng để tối ưu.

PHẦN 2. BACKTEST PHẢI GIỐNG CÁCH MODEL SẼ CHẠY NGOÀI THỰC TẾ

Với dữ liệu tài chính, random split 80/20 thường không phải lựa chọn tốt. Nếu dữ liệu tháng 5/2021 nằm trong train còn tháng 6/2021 nằm trong test, hai tập vẫn thuộc gần như cùng một market regime. Volatility, thanh khoản, nhóm ngành dẫn dắt và nhiều quan hệ giữa các feature có thể rất giống nhau. Model tưởng như đang được kiểm tra trên dữ liệu mới nhưng thực tế chỉ đang đối diện với một môi trường gần giống dữ liệu vừa học.

Cách hợp lý hơn là train trên quá khứ rồi test trên tương lai theo từng giai đoạn. Ví dụ train 2017–2020, test 2021; sau đó train đến hết 2021 và test 2022; tiếp tục như vậy. Walk-forward như vậy giúp nhìn rõ hơn model hoạt động trong những điều kiện nào. Có thể model rất tốt trong bull market nhưng yếu khi thị trường đảo chiều. Có thể Momentum đóng góp phần lớn kết quả ở một giai đoạn còn fundamental lại quan trọng hơn ở giai đoạn khác. Một con số R² trung bình toàn kỳ không cho mình thấy những điểm này.

Data leakage cũng thường nằm ở những bước rất nhỏ. Nếu chuẩn hóa toàn bộ dữ liệu trước rồi mới chia train/test, thông tin về phân phối tương lai đã lọt vào training. Nếu dùng toàn bộ lịch sử để chọn 20 feature tốt nhất rồi mới walk-forward, phần feature selection đã nhìn thấy tương lai. Tương tự với PCA, winsorization, normalization theo ngành hoặc bất kỳ bước preprocessing nào: mọi thứ phải được fit trên training window rồi mới áp dụng sang test window.

Một dạng leakage khác đến từ chính researcher. Giả sử mình giữ 2025–2026 làm out-of-sample. Lần đầu kết quả không đẹp, mình thêm Momentum 120 ngày. Sau đó đổi horizon từ 10 lên 20 ngày, thêm sector-neutralization, rồi thay ngày rebalance. Sau vài chục lần thử, performance 2025–2026 trở nên rất tốt. Trên giấy nó vẫn được gọi là out-of-sample, nhưng thực tế researcher đã dùng chính giai đoạn đó để huấn luyện strategy thông qua các quyết định chỉnh sửa. Final holdout vì thế chỉ thật sự có ý nghĩa khi được mở rất muộn, sau khi gần như toàn bộ thiết kế đã được khóa.

Khi đánh giá model, R² cũng không nên là tiêu chí duy nhất. Return từng cổ phiếu chứa rất nhiều noise, nên một model có R² thấp vẫn có thể hữu ích nếu prediction tạo được ranking tốt. Trong thực tế, mình sẽ nhìn thêm Rank IC, spread giữa các nhóm cổ phiếu và tính monotonic của các bucket. Nếu chia universe thành năm nhóm theo prediction và nhóm cao nhất liên tục outperform nhóm thấp nhất qua nhiều năm, đó là bằng chứng thực tế hơn việc chỉ nhìn error metric.

Quan trọng hơn nữa là sự ổn định. Một average Rank IC tốt nhưng chủ yếu đến từ đúng một năm có thể không đáng tin bằng một signal vừa phải nhưng dương ở nhiều giai đoạn. Tương tự, nếu Top 10 mã tạo gần như toàn bộ lợi nhuận còn phần còn lại của ranking không có cấu trúc, signal đó có thể rất mong manh. Một model đáng tin thường không chỉ tạo một vài winner mà phải cho thấy một mối quan hệ tương đối đều giữa score và realized return.

PHẦN 3. PREDICTION CHỈ CÓ GIÁ TRỊ KHI BIẾN THÀNH PORTFOLIO ĐƯỢC

Giả sử model đã xếp hạng VN100 khá tốt. Lúc này mới bắt đầu bài toán khó hơn: biến prediction thành danh mục. Một cách đơn giản là mỗi tuần chọn Top 20% cổ phiếu có expected return cao nhất rồi rebalance. Nhưng ngay ở bước này, performance của model và performance của strategy có thể bắt đầu khác nhau rất nhiều.

Hai model có Rank IC gần giống nhau nhưng một model thay đổi ranking rất mạnh mỗi tuần, còn model kia ổn định hơn. Trước transaction cost, hai portfolio có thể tương đương. Sau phí và slippage, model turnover cao có thể mất phần lớn alpha. Đây là lý do một prediction tốt chưa chắc đã tạo strategy tốt. Trong thực tế, turnover đôi khi quan trọng không kém predictive power.

Thanh khoản cũng phải được đưa vào ngay từ đầu. Nếu model liên tục thích các mã midcap có thanh khoản thấp, backtest dùng giá Close có thể cho kết quả đẹp nhưng khả năng triển khai vốn thật rất hạn chế. Khi quy mô danh mục tăng, market impact trở thành một phần của bài toán. Một alpha chỉ tồn tại khi giao dịch lượng vốn rất nhỏ khác hoàn toàn với một alpha có thể scale lên mức lớn hơn.

Sector concentration cũng cần kiểm tra. Nếu model liên tục overweight Banking trong một giai đoạn nhóm ngân hàng tăng mạnh, performance có thể đến từ sector allocation chứ không phải stock selection. Khi đó nên thử thêm phiên bản sector-neutral hoặc giới hạn trọng số ngành quanh benchmark. Nếu performance vẫn còn, evidence về stock-selection signal mạnh hơn. Nếu performance giảm gần hết, ít nhất mình biết model đang thực sự kiếm tiền từ đâu.

Size, Momentum và Quality exposure cũng tương tự. Một Gradient Boosting phức tạp có thể trông như một alpha mới nhưng thực tế chỉ đang tăng exposure vào Momentum khi Momentum hoạt động tốt. Vì vậy sau khi model chạy, cần phân tích xem P&L được giải thích bao nhiêu bởi các factor quen thuộc. Không phải để loại bỏ mọi exposure, mà để hiểu đúng nguồn lợi nhuận và tránh gọi một factor cũ bằng một cái tên mới.

Một model tốt cũng nên sống sót khi điều kiện thay đổi nhẹ. Nếu target 20 ngày tốt, thử 15 và 30 ngày. Nếu Momentum 60 ngày quan trọng, thử 50 hoặc 70. Thay ngày rebalance, tăng transaction cost, loại các mã đóng góp P&L lớn nhất hoặc giảm universe xuống nhóm thanh khoản tốt hơn. Performance không cần giữ nguyên, nhưng nếu chỉ cần thay một tham số nhỏ là toàn bộ lợi thế biến mất, khả năng overfit khá cao.

Đây là chỗ model đơn giản thường có lợi thế. Ridge có thể không phải model có performance cao nhất trong notebook, nhưng nếu ranking ổn định, turnover thấp và exposure dễ hiểu, nó có thể dễ đưa vào production hơn. Random Forest hay Gradient Boosting chỉ thực sự đáng thêm vào khi phần improvement còn tồn tại sau out-of-sample, transaction cost và các bài stress test khác nhau.

Cuối cùng, Regression trong Quant nên được nhìn như một mắt xích trong cả pipeline: dữ liệu đúng thời điểm → feature → prediction → ranking → portfolio → chi phí giao dịch → risk control → monitoring. Nếu một mắt xích bị sai, model tốt đến đâu cũng khó tạo ra một strategy thật sự.

Vì vậy, điểm cuối cùng không nằm ở việc model dự báo chính xác bao nhiêu phần trăm hay R² cao đến đâu. Thứ quan trọng hơn là sau khi đi qua point-in-time data, walk-forward test, transaction cost, liquidity constraint, sector exposure và portfolio construction, signal còn giữ được bao nhiêu giá trị có thể đầu tư được. Đó mới là khoảng cách giữa một Regression model chạy đẹp trên notebook và một Quant strategy có khả năng chạy bằng tiền thật.