8 พฤศจิกายน 2026 · research

Backtest ของคุณอาจทำซ้ำได้มากเกินไป

Backtest ของคุณอาจทำซ้ำได้มากเกินไป

Backtest ที่ทำซ้ำได้อย่างสมบูรณ์แบบอาจน่าเชื่อถือน้อยกว่า backtest ที่ผลขยับเล็กน้อย การทำซ้ำได้พิสูจน์เพียงว่าคุณได้คำตอบเดิมสองครั้ง แต่ไม่ได้บอกว่าคำตอบนั้นขึ้นอยู่กับภาพข้อมูลที่เลือกมาแบบตามอำเภอใจ ปัญหาเฉพาะของไลบรารี หรือค่าเริ่มต้นที่ซ่อนอยู่หรือไม่

ฟังดูเหมือนกำลังโต้แย้งการทำซ้ำได้ ซึ่งไม่ใช่สิ่งที่เราหมายถึง ตรึงการรันไว้เพื่อให้คุณอธิบายได้ จากนั้นจงใจปรับสมมติฐานที่ไม่ควรเป็นตัวตัดสินผล ขั้นแรกทำให้ตรวจสอบย้อนหลังได้ ส่วนขั้นที่สองช่วยบอกว่าผลนั้นมีความหมายหรือไม่

Backtest ที่ทำซ้ำได้พิสูจน์อะไรได้จริง?

หากโค้ด ข้อมูล การตั้งค่า และ random seed เดิมให้รายการเทรดและเมตริกเดิม แสดงว่าคุณควบคุมแหล่งที่มาของความสับสนที่สำคัญอย่างหนึ่งได้แล้ว คุณเปรียบเทียบ “การปรับปรุง” ของ agent กับการรันต้นทางได้ แยกการแก้บั๊กออกจากการเปลี่ยนตารางค่าธรรมเนียมได้ และเพื่อนร่วมงานก็ตรวจสอบบัญชีรายการเดียวกันแล้วพบรายการจับคู่คำสั่งซื้อขายชุดเดียวกันได้

แต่ผลลัพธ์นั้นขึ้นอยู่กับทุกสิ่งที่คุณตรึงไว้ ลองพิจารณากลยุทธ์คริปโตที่ใช้ไฟล์ย้อนหลังซึ่งมีแท่งราคา 1 นาที คุณบันทึกแฮชของไฟล์ ล็อกเวอร์ชันโค้ดไว้ และได้ค่า Sharpe 1.4 ทุกครั้งที่รันซ้ำ หากผู้ให้บริการแก้ไขแท่งราคาหลายแท่งในภายหลัง ความสามารถในการทำซ้ำที่ชัดเจนนั้นก็ยังอธิบายได้เพียงไฟล์ฉบับเก่า ไม่ได้บอกว่าสัญญาณยังอยู่รอดเมื่อใช้ประวัติที่แก้ไขแล้วหรือไม่ หรือแท่งราคาเหล่านั้นมีอยู่ในรูปแบบนั้น ณ เวลาที่เกิดเหตุการณ์จริงหรือไม่

แฮชมีประโยชน์ เพราะทำให้เห็นการพึ่งพาข้อมูลชัดเจน แต่มันไม่ได้พิสูจน์ว่าการพึ่งพานั้นไม่มีผลเสีย

ตรึงการรันไว้ แล้วทดสอบข้อค้นพบ

ผมชอบแยกคำถามออกเป็นสองข้อ เราสร้างการรันเดิมนี้ขึ้นมาใหม่ได้ไหม และข้อสรุปจากงานวิจัยยังคงอยู่ไหมเมื่อมีการเปลี่ยนแปลงที่สมเหตุสมผล ข้อแรกต้องมีบันทึกที่แก้ไขไม่ได้ ส่วนข้อที่สองต้องมีการปรับเปลี่ยนอย่างควบคุมทีละครั้ง

สิ่งที่ควรบันทึกสิ่งที่ควรปรับเปลี่ยนภายหลังสิ่งที่อาจค้นพบ
เวอร์ชันข้อมูลดิบและ checksumการแก้ไขจากผู้ให้บริการหรือแหล่งข้อมูลที่สองการพึ่งพาค่าที่แก้ไขแล้วหรือค่าจำเพาะของผู้ให้บริการ
commit ของโค้ดและเวอร์ชันแพ็กเกจวิธีนำไปใช้แบบอื่นที่ให้ผลเชิงตัวเลขเทียบเท่ากันความอ่อนไหวต่อการเรียงลำดับ การปัดเศษ หรือไลบรารี
ค่าธรรมเนียม funding และสมมติฐานเรื่องการจับคู่คำสั่งซื้อขายช่วงต้นทุนที่มีเหตุผลรองรับการได้เปรียบเพียงเล็กน้อยต้องอาศัยการดำเนินการที่เอื้อเป็นพิเศษหรือไม่
จักรวาลสินทรัพย์และการเป็นสมาชิก ณ เวลานั้นกฎอื่นสำหรับตลาดที่เข้าเกณฑ์การพึ่งพาการตัดสินใจว่าจะรวมหรือตัดอะไรออก

ตัวอย่างเช่น สมมติว่าการจำลองย้อนหลังของกลยุทธ์ฟิวเจอร์สแสดงผลตอบแทนส่วนเกินต่อปี 8% ในกรณีฐาน ลองรันใหม่โดยเพิ่มต้นทุน taker 25% เลื่อนเวลาคำนวณ funding ไปยังรอบชำระครั้งถัดไปที่สังเกตได้ และตัดตัวที่สร้างผลตอบแทนสูงสุด 2 รายการออกทีละรายการ สิ่งเหล่านี้ไม่ใช่ 3 วิธีปรับปรุงโมเดล แต่เป็นการทดสอบตรวจสอบ โดยแต่ละข้อถามว่ารายละเอียดที่เป็นไปได้อย่างหนึ่งเป็นตัวแบกรับผลลัพธ์พาดหัวอยู่หรือไม่

แยกการทดสอบแต่ละข้อออกจากกัน หากคุณเปลี่ยนข้อมูล ตารางค่าธรรมเนียม และเวลาส่งคำสั่งซื้อขายพร้อมกัน ผลที่แย่ลงก็แทบไม่ช่วยวินิจฉัยอะไร และหากการทดสอบข้อใดไม่น่าเกิดขึ้นจริง ให้ระบุว่าเป็นกรณีทดสอบภาวะตึงเครียด แทนการนำเสนอว่าเป็นผลลัพธ์ที่น่าจะเกิดขึ้น

อย่าสับสนระหว่างความเหมือนกันทุกไบต์กับความถูกต้องเชิงตัวเลข

การคำนวณบางอย่างไวต่อการเรียงลำดับ การบวกเลขทศนิยมแบบ floating-point ไม่มีสมบัติการเปลี่ยนหมู่ ดังนั้นการรวมค่า P&L เล็กๆ จำนวนมากในลำดับที่ต่างกันอาจเปลี่ยนตัวเลขหลักท้ายๆ ได้ การลดค่าขนาน ฮาร์ดแวร์ และเวอร์ชันไลบรารีล้วนส่งผลต่อผลลัพธ์ที่ตรงกันทุกประการได้ โดยมากแล้วไม่เป็นปัญหา แต่บางครั้งการเปลี่ยนแปลงตัวเลขเพียงเล็กน้อยอาจพลิกค่าเกณฑ์ เปลี่ยนสถานะการถือครอง และทำให้ส่วนที่เหลือของการจำลองดำเนินไปคนละเส้นทาง

นั่นจึงเป็นเหตุผลที่ผมจะเก็บทั้งไฟล์ผลลัพธ์จริงและค่าความคลาดเคลื่อนที่ยอมรับได้สำหรับการเปรียบเทียบ บันทึกบัญชีรายการเทรด ไม่ใช่แค่ค่า Sharpe สุดท้าย เปรียบเทียบการตัดสินใจและกระแสเงินสดก่อน แล้วจึงเทียบเมตริกภายในค่าความคลาดเคลื่อนที่ระบุไว้ หากส่วนต่าง 1 เซนต์ทำให้ตัดสินใจว่าจะส่งคำสั่งหรือไม่ ให้ตรวจสอบจุดแบ่งนั้นโดยตรง

บันทึกการรันที่มีประโยชน์ควรระบุตัวตนของข้อมูลและโค้ด การตั้งค่า random seed สภาพแวดล้อมที่ใช้ดำเนินการ และผลลัพธ์ระหว่างทางที่เพียงพอให้ไล่ย้อนจากเมตริกไปยังการจับคู่คำสั่งซื้อขายและกระแสเงินสดได้ มีเพียงคะแนนสุดท้ายยังไม่ถือเป็นหลักฐานงานวิจัยที่ทำซ้ำได้

เมื่อใดความแปรผันเป็นเพียงสัญญาณรบกวน และเมื่อใดเป็นข้อค้นพบ

ตัวเลขที่เปลี่ยนไปไม่ได้เป็นเรื่องร้ายแรงทุกครั้ง เมตริกที่คลาดเคลื่อนเล็กน้อยจากลำดับการลดค่าที่ต่างกันอาจไม่ทำให้รายการเทรดเปลี่ยน การเทรดที่เปลี่ยนไปใกล้ค่าเกณฑ์อาจควรตรวจสอบ ส่วนกลยุทธ์ที่สูญเสียผลลัพธ์ส่วนใหญ่เมื่อผู้ให้บริการแก้ไขข้อมูลย้อนหลังเพียงช่วงเล็กๆ ก็ได้เรียนรู้อะไรบางอย่างเกี่ยวกับความเปราะบางของตัวเอง แม้การรันเดิมจะทำซ้ำได้อย่างสมบูรณ์แบบก็ตาม

ผู้วิจารณ์การทดสอบความทนทานมีเหตุผลอยู่ข้อหนึ่ง คือเราสามารถเปลี่ยนสมมติฐานไปเรื่อยๆ จนกลยุทธ์ที่ชอบดูทนทานขึ้น หรือปฏิเสธผลที่น่าเชื่อถือเพียงเพราะสถานการณ์สุดขั้วที่ตั้งใจสร้างขึ้นมาทำให้ผลพังได้ กำหนดรูปแบบการเปลี่ยนแปลงที่เป็นไปได้ไว้ล่วงหน้า รายงานผลทั้งหมด และแยกทางเลือกทั่วไปออกจากกรณีทดสอบภาวะตึงเครียด จากนั้นเก็บกรณีฐานไว้ เพื่อให้นักวิจัยคนอื่นทำซ้ำสิ่งที่คุณเห็นได้อย่างตรงกันทุกประการ

การทำซ้ำได้มอบจุดเริ่มต้นที่เชื่อถือได้ คำถามที่มีประโยชน์อยู่ถัดจากนั้น: ส่วนใดของคำตอบยังคงเดิม เมื่อสิ่งรอบการรันนั้นเปลี่ยนไปในแบบที่คุณคาดหมายได้อย่างสมเหตุสมผล?

การทำซ้ำได้backtestingวิศวกรรมข้อมูลงานวิจัยเชิงปริมาณ
แชร์XLinkedInFacebookRedditHacker NewsWhatsAppTelegramEmail
← บทความทั้งหมด