【บันทึกการพัฒนา】ดักสายตา Bias — กับดักการตรวจสอบที่ทำให้แอบมองข้อมูลอนาคต
■ ความหมายของความลำดับดูหน้า (Look-ahead Bias)
Look-ahead Bias คือความผิดพลาดในการตรวจสอบที่อ้างอิงข้อมูลอนาคตที่ในขณะตรวจสอบจริงๆ แล้วไม่น่าจะได้มา ซึ่งอาจถูกนำมาพิจารณาเป็นข้อมูลสนับสนุนการตัดสินใจโดยไม่ตั้งใจ ในโลกของระบบเทรด การทดสอบย้อนหลัง (backtest) ที่ปรากฏผลดีกว่าความจริงถือเป็นสาเหตุหนึ่งที่พบได้บ่อย
แก่นแท้ของปัญหาไม่ได้อยู่ที่ “มีการโกงหรือไม่” แม้ผู้พัฒนาไม่มีความรู้สึกว่ากำลังโกง แต่ด้วยวิธีการทำงานของโลจิสติกส์หรือข้อบกพร่องของลักษณะการทำงานบนแพลตฟอร์ม ผลลัพธ์อาจมีการอ้างอิงข้อมูลในอนาคตโดยอ้อมในหลายกรณี
นอกจากนี้ จำเป็นต้องแยกแยะกับแนวคิดที่คล้ายกันคือ “curve fitting (การเพิ่มประสิทธิภาพเกินไปกับข้อมูลในอดีต)” เพราะ curve fitting คือการปรับให้ข้อมูลในอดีตเข้ากันมากเกินไปทำให้ประสิทธิภาพในการทั่วไปสู่อนาคตลดลง ในขณะที่ Look-ahead Bias เกิดจากการใช้ข้อมูลที่ไม่สามารถได้มาขณะตรวจสอบตั้งแต่แรก จึงมีสาเหตุที่ต่างกัน วิธีการรับมือก็ไม่เหมือนกัน หากผสมผสานทั้งสองอย่างในการออกแบบกระบวนการตรวจสอบ อาจไม่สามารถแก้ไขปัญหาพื้นฐานได้
■ สาเหตุหลักที่เกิดขึ้น
สาเหตุที่พบบ่อยสามารถเรียงได้ดังนี้
อันดับหนึ่งคือการอ้างอิงข้อมูลราคาที่ยังไม่ปิดคงที่ (ไม่มีการปิดราคาสุดท้าย) ในขณะที่แท้จริงราคาคงที่ ณ ขณะนั้นยังไม่ถูกกำหนด การใช้งานราคาต่อเวลาจริงเป็น “ราคาปิด” ในเงื่อนไขการตัดสินใจบ่อยครั้ง ซึ่งความแตกต่างนี้อาจไม่แสดงออกชัดเจน เนื่องจากแพลตฟอร์มและสคริปต์มีความแตกต่างกัน และเป็นสาเหตุที่ทำให้ปัญหายืดเยื้อยาวนานขึ้น
อันดับสองคือการใช้อินดิเคเตอร์ที่มีการรีเพนต์ (rewind/ repaint) บางอินดิเคเตอร์ที่กำหนดให้ผลลัพธ์ในอดีตสามารถถูกแก้ไขภายหลังได้ บนกราฟขณะตรวจสอบอาจดูเป็นสัญญาณที่ดี แต่จริงๆ แล้วเป็นการแก้ไขภายหลัง และข้อมูลที่ได้ในเวลานั้นไม่เหมือนกับข้อมูลจริงที่ได้มาแบบเรียลไทม์ เห็นได้บ่อยในอินดิเคเตอร์กลุ่ม zigzag หรือบางชนิดของ oscillators และควรตรวจสอบลักษณะการ repaint ก่อนนำมาใช้งาน
อันดับสามคือการอ้างอิงข้อมูลที่ยังไม่แน่นอนจากกรอบเวลา (higher time frame) ในโครงสร้างหลายกรอบเวลา โดยในโลจิสติกส์ระยะสั้นอาจออกแบบให้รวมข้อมูลจากกรอบเวลานานขึ้น แต่ต้องตรวจสอบว่าเป็นข้อมูลที่ยืนยันแล้วหรือไม่ก่อน
■ ตัวอย่างเฉพาะ
ตัวอย่างหนึ่งคือสมมติว่า “หากราคาสูงสุด-ต่ำสุดในระหว่างวันถูกทลายระดับกลาง จะเข้าเทรด” หากค่าของราคาสูงสุด-ต่ำสุดนั้นถูกคำนวณโดยอาศัยข้อมูลที่ยังไม่ยืนยัน ณ ตอนวันนั้น หมายถึงข้อมูลที่ไม่ควรมีอยู่ขณะตัดสินใจในการเทรดภายในวันนั้นเอง ในสภาพแวดล้อม backtest ที่โหลดข้อมูลรายวันทั้งหมดพร้อมกัน ความสอดคล้องแบบนี้จะมีโอกาสเกิดขึ้นสูง และยากที่จะตรวจพบ
■ ผลกระทบที่เกิดขึ้น
ผลลัพธ์ที่ตรวจสอบด้วย Look-ahead Bias จะคำนวณโดยอ้างอิงข้อมูลที่ไม่สามารถได้มาจริงในสภาวะตลาดจริง ทำให้เปอร์เซ็นชนะและค่าคาดหวังมีแนวโน้มสูงกว่าความเป็นจริง ยิ่งโลจิสติกส์ที่ได้รับการปรับปรุงให้ดีขึ้นเท่าไร ความแตกต่างระหว่างการทดสอบและการใช้งานจริงในการทดสอบฟอร์เวิร์ดก็จะยิ่งมากขึ้นเท่านั้น คำปรึกษาว่า “Backtest ดีแต่ใช้งานจริงไม่ดี” มีกรณีเยอะเพราะการตรวจสอบมีความผิดเพี้ยนเช่นนี้ และโดยส่วนใหญ่ ผู้พัฒนาก็ไม่มีความตระหนักถึงการล่วงล้ำดังกล่าว ซึ่งเป็นสาเหตุสำคัญที่ทำให้ตรวจพบยาก
■ มาตรการรับมือ
มาตรการแรกคือจำกัดค่าที่ใช้ในการตัดสินใจให้เป็นค่าจากแท่งเทียนที่ยืนยันแล้วเท่านั้น ซึ่งเป็นส่วนที่อาจมองข้ามในการออกแบบโลจิสติกส์ และควรตรวจสอบอย่างชัดเจนเป็นส่วนหนึ่งของการตรวจสอบโลจิสติกส์เดิม โดยเฉพาะหากได้โอนโครงสร้างจากบุคคลที่สามหรือต้นแบบที่มีอยู่มาก่อน
สองคือการนำ Walk-Forward Verification มาใช้งาน ซึ่งเป็นวิธีตรวจสอบโดยแบ่งช่วงตรวจสอบออกเป็นส่วนๆ และคำนวณจากข้อมูลที่ได้มาในแต่ละช่วงเท่านั้น ลดพื้นที่ที่ข้อมูลอนาคตจะรั่วไหลอย่างมีโครงสร้าง
สามคือการทำ Forward Test (การใช้งานจริงในสภาพแวดล้อมเดโม) ควบคู่กับ Backtest และติดตามความแตกต่างของผลงานอย่างต่อเนื่อง การแตกต่างมากอาจเป็นสัญญาณว่าเกิดปัญหาในกระบวนการตรวจสอบ
■ รายการตรวจสอบ
ในทางปฏิบัติแนะนำให้ตรวจสอบดังนี้ มูลค่าที่อ้างอิงในเงื่อนไขการเข้าทราบว่าแท่งเทียนนั้นยืนยันแล้วหรือไม่ อินดิเคเตอร์ที่ใช้งานไม่รีเพนต์หรือไม่ และหากอ้างถึงกรอบเวลาย่อยกว่ากรอบเวลาสูง ตรวจสอบว่าการยืนยันนั้นถูกพิจารณาเมื่อใด และดูว่าผลลัพท์จาก Backtest และ Forward Test ไม่แตกต่างกันมากเกินไป ทั้งสี่ข้อ
นอกจากนี้ Look-ahead Bias ไม่ได้เป็นปัญหากับโลจิสติกส์เดียว แต่สามารถเกิดขึ้นกับการจัดพอร์ตโฟลิโอที่รวม EA หลายตัวได้เช่นกัน แม้แต่การตรวจสอบแต่ละ EA จะเป็นไปอย่างถูกต้อง หากการประเมินค่ารวมของพอร์ตโฟลิโอใช้ข้อมูลก่อนการยืนยันก็จะทำให้ค่าคาดหวังของพอร์ตถูกบิดเบือนไป การวางระบบตรวจสอบตั้งแต่ระยะเริ่มต้นในการพัฒนาจะช่วยลดปัญหาการย้อนกลับในขั้นตอนต่อไปได้
ลักษณะเหล่านี้บางส่วนสามารถตรวจพบได้ง่ายขึ้นโดยผู้ตรวจสอบที่สาม เนื่องจากผู้พัฒนามักมีความคาดหวังเกี่ยวกับการทำงานของโลจิสติกส์และอาจมองข้ามจุดอ่อนบางอย่าง การมีการตรวจสอบโดยบุคคลที่สามเป็นทางเลือกหนึ่งที่ช่วยลดการลิดรอนผลลัพธ์
หากมีความกังวลในความแม่นยำของการตรวจสอบ แนะนำให้เริ่มจากการทบทวนกระบวนการตรวจสอบก่อน ตามที่ปรึกษาได้ที่มุมมองด้านบน