Bỏ qua, đến nội dung chính
Stockup

Look-ahead bias trong dữ liệu lịch sử

Sai lệch phát sinh khi thông tin chỉ có được sau này (ví dụ danh mục VN30 hiện tại) được dùng để phân tích hoặc tái tạo dữ liệu của một giai đoạn quá khứ, trong khi thực tế thông tin đó tại giai đoạn ấy có thể khác — khiến kết quả phân tích phản ánh sai bối cảnh thị trường lịch sử.

Look-ahead bias trong dữ liệu lịch sử là gì — dữ liệu backtest chứa thông tin biết trước tương lai

Look-ahead bias trong dữ liệu lịch sử là lỗi khi bộ dữ liệu dùng để backtest vô tình chứa thông tin chỉ có được sau thời điểm đó — ví dụ dùng danh mục VN30 hiện tại để tính cho cả giai đoạn quá khứ. Đây là lỗi ở cấp độ xây dựng dữ liệu, khác với look-ahead bias ở tín hiệu giao dịch.

Định nghĩa đầy đủ

Look-ahead bias trong dữ liệu lịch sử là lỗi xảy ra khi dữ liệu dùng để kiểm định chiến lược chứa thông tin mà tại thời điểm lịch sử tương ứng trên thực tế chưa thể biết được — phổ biến nhất là dùng thành phần rổ chỉ số VN30 tại thời điểm hiện tại để áp dụng ngược cho toàn bộ giai đoạn quá khứ.

Những điều cần nhớ

  • Look-ahead bias dữ liệu xảy ra ở khâu xây dựng bộ dữ liệu, khác look-ahead bias tín hiệu giao dịch xảy ra ở khâu logic chiến lược
  • Danh mục rổ chỉ số VN30 được xem xét định kỳ và có thể thay đổi thành phần theo thời gian
  • Dùng danh mục rổ chỉ số hiện tại để backtest cho quá khứ là dạng phổ biến nhất của lỗi này ở cấp độ thành phần chỉ số
  • Lỗi này khó phát hiện hơn vì không hiện rõ trên biểu đồ giá, chỉ lộ ra khi đối chiếu lịch sử thay đổi thành phần rổ theo từng thời điểm
  • Phòng tránh bằng cách dùng đúng thành phần rổ chỉ số tại từng thời điểm lịch sử tương ứng, không dùng danh sách hiện tại áp ngược lại

Look-ahead bias ở cấp độ dữ liệu khác gì ở cấp độ tín hiệu giao dịch

Hai lỗi này thường bị nhầm là một nhưng xảy ra ở hai khâu khác nhau của quy trình kiểm định chiến lược. Look-ahead bias trong tín hiệu giao dịch nằm trong logic backtest — ví dụ dùng giá đóng cửa của một phiên để ra quyết định mà giả định khớp được ngay tại giá đó cùng phiên, điều không thể xảy ra trong thực tế. Look-ahead bias ở dữ liệu xảy ra sớm hơn nhiều, ngay từ khâu chuẩn bị bộ dữ liệu đầu vào — trước khi bất kỳ dòng logic chiến lược nào chạy trên dữ liệu đó. Nói cách khác, dù logic backtest được viết cẩn thận tới đâu, nếu bộ dữ liệu đầu vào đã sai ngay từ gốc, kết quả kiểm định vẫn phản ánh sai điều kiện thị trường lịch sử.

Ví dụ điển hình: danh mục VN30 thay đổi theo thời gian

Rổ chỉ số VN30 không cố định — HOSE xem xét định kỳ và có thể đưa cổ phiếu mới vào hoặc loại cổ phiếu ra khỏi rổ dựa trên các tiêu chí về vốn hoá và thanh khoản. Vấn đề phát sinh khi một người xây dựng dữ liệu lịch sử chỉ lấy đúng 1 danh sách thành phần rổ VN30 tại thời điểm hiện tại, rồi áp dụng danh sách đó cho toàn bộ giai đoạn quá khứ 5-10 năm trước — trong khi thực tế, tại các thời điểm đó, thành phần rổ đã khác.

Ví dụ minh hoạ: một cổ phiếu X gia nhập rổ VN30 vào năm gần đây; nếu backtest 1 chiến lược liên quan tới rổ VN30 cho giai đoạn 5 năm trước và vẫn tính cổ phiếu X là thành phần rổ trong suốt cả 5 năm đó (trong khi thực tế X chưa từng thuộc rổ ở giai đoạn đầu), kết quả backtest sẽ phản ánh sai điều kiện thị trường thực tế tại thời điểm đó — chiến lược "biết trước" một thông tin mà nhà giao dịch tại thời điểm lịch sử đó không thể biết.

Dòng thời gian minh hoạ 1 mã gia nhập rổ VN30, so sánh dùng đúng lịch sử với dùng danh sách hiện tại

Cách xây dựng dữ liệuThành phần rổ VN30 dùng cho quá khứ
Đúng lịch sử (point-in-time)Đúng thành phần rổ tại từng thời điểm quá khứ tương ứng
Dùng danh sách hiện tại (sai)Thành phần rổ hiện tại, áp ngược cho toàn bộ giai đoạn quá khứ

Bảng minh hoạ khái niệm 2 cách xây dựng dữ liệu, không phải danh sách mã cổ phiếu thật.

Vì sao lỗi này khó phát hiện hơn look-ahead bias ở tín hiệu

Look-ahead bias ở tín hiệu giao dịch thường dễ bị nghi ngờ hơn vì kết quả backtest "quá đẹp" một cách bất thường — hiệu suất cao bất thường, tỷ lệ thắng gần như tuyệt đối. Ngược lại, look-ahead bias ở dữ liệu không tạo ra dấu hiệu rõ ràng như vậy trên biểu đồ hiệu suất; nó âm thầm làm sai lệch chính bối cảnh thị trường mà chiến lược được kiểm định trên đó. Chỉ khi đối chiếu trực tiếp lịch sử thay đổi thành phần rổ chỉ số theo từng mốc thời gian với dữ liệu đang dùng, người xây dựng dữ liệu mới phát hiện ra sự khác biệt. Đây cũng là lý do lỗi này thường bị bỏ sót ở cả những người đã có kinh nghiệm với kiểm định chiến lược — trọng tâm chú ý thường dồn vào logic tín hiệu chứ không phải vào cách bộ dữ liệu gốc được xây dựng.

Cách phòng tránh khi xây dựng hoặc chọn dữ liệu lịch sử

Nguyên tắc chung là dữ liệu dùng cho từng thời điểm lịch sử chỉ nên chứa thông tin đã biết tại đúng thời điểm đó — thường gọi là dữ liệu "point-in-time". Với danh mục rổ chỉ số, điều này có nghĩa cần một bảng lịch sử ghi rõ thành phần rổ đã thay đổi vào những mốc thời gian nào, thay vì chỉ có 1 danh sách duy nhất tại hiện tại. Khi chọn nguồn dữ liệu lịch sử, nên ưu tiên nguồn có công bố rõ phương pháp xây dựng dữ liệu point-in-time, hoặc tự đối chiếu thủ công với thông báo thay đổi rổ chỉ số do HOSE công bố theo từng kỳ. Nguyên tắc này áp dụng song song với việc lọc dữ liệu nhiễu — cả hai đều là bước làm sạch dữ liệu cần thực hiện trước khi dữ liệu được đưa vào kiểm định chiến lược, không phải bước có thể bỏ qua hoặc xử lý sau.

Câu hỏi thường gặp

Look-ahead bias trong dữ liệu có giống survivorship bias không?

Có liên quan chặt chẽ; dùng danh mục hiện tại (chỉ gồm các mã đang tồn tại/thuộc rổ) cho quá khứ vừa mang tính chất look-ahead (biết trước thành phần tương lai) vừa có thể mang tính survivorship (bỏ sót mã đã rời rổ hoặc huỷ niêm yết).

Lỗi này chỉ xảy ra với dữ liệu liên quan tới rổ chỉ số thôi sao?

Đây là ví dụ điển hình nhất, nhưng nguyên tắc chung áp dụng cho bất kỳ thông tin nào chỉ xác định được sau một mốc thời gian nhất định mà bị đưa ngược vào dữ liệu của giai đoạn trước đó.

Làm sao kiểm tra dữ liệu của mình có bị lỗi này không?

Đối chiếu ngày công bố thay đổi thành phần rổ chỉ số (hoặc thông tin tương tự) với ngày dữ liệu tương ứng trong bộ dữ liệu backtest, đảm bảo mỗi thời điểm lịch sử chỉ dùng thông tin đã biết tại đúng thời điểm đó.

Khác biệt với look-ahead bias trong tín hiệu giao dịch là gì?

Look-ahead bias tín hiệu giao dịch xảy ra trong logic backtest, ví dụ dùng giá đóng cửa để ra quyết định mà giả định khớp được ngay tại giá đó cùng phiên; look-ahead bias dữ liệu xảy ra sớm hơn, ngay từ khâu xây dựng bộ dữ liệu đầu vào.

Có công cụ tự động phát hiện lỗi này không?

Không có công cụ tự động phổ biến áp dụng chung cho mọi trường hợp; cách phòng tránh chủ yếu vẫn là quy trình xây dựng dữ liệu cẩn thận, dùng đúng lịch sử thay đổi thành phần rổ chỉ số tại từng thời điểm.

Lỗi này có ảnh hưởng tới bước kiểm tra chất lượng dữ liệu ban đầu không?

Có; đây là một trong những điểm nên được rà soát ngay ở bước kiểm tra chất lượng dữ liệu trước khi kiểm định, cùng với các lỗi khác như dữ liệu nhiễu hoặc thiếu phiên giao dịch. Đưa bước rà soát này vào checklist chuẩn bị dữ liệu giúp phát hiện sớm thay vì để tới khi đã kiểm định xong mới nghi ngờ kết quả.

Nguồn tham khảo

  • HOSE – Quy tắc xây dựng và tính chỉ số VN30

Lưu ý rủi ro: Nội dung trên đây là để tham khảo về phương pháp xử lý dữ liệu, không phải khuyến nghị đầu tư. Chứng khoán phái sinh dùng đòn bẩy — lãi và lỗ đều được khuếch đại.

Xem thêm bài look-ahead bias trong tín hiệu giao dịch là gì và look-ahead bias ở danh mục VN30 trong dữ liệu lịch sử (phân tích chuyên sâu), cùng checklist kiểm tra chất lượng dữ liệu lịch sử VN30F1M. Muốn tránh lỗi dữ liệu "biết trước tương lai" khi backtest theo rổ VN30? Đăng ký bản tin StockUp để nhận hướng dẫn xử lý dữ liệu đúng cách.

Chia sẻ bài viết

fin

Bài viết liên quan