การใช้ข้อมูล และ การแบ่งข้อมูล ตรงนี้แล้วแต่เทคนิคของแต่ละคนเลยครับ เพราะต้องใช้ให้เหมาะกับโมเดล และกลยุทธ์ที่จะใช้
สมัยก่อนผมทำงี้ (สมมติตลาด FX)
1. training data คือ 2000 – 2017
2. test data คือ 2018 – ปัจจุบัน
แต่พบว่า เหมาะกับกลยุทธ์ที่ถือหน่อย เช่น ถือเฉลี่ย 3 วัน เทรดไม่บ่อยมาก เพราะสมัยก่อนผมถนัดเทรดแบบนี้
ต่อมาพบว่า
1. test data มีช่วงกว้างไป พักหลังผมอยากทำบอทเทรดสั้นขึ้นกว่าเดิม
2. test data กว้างแบบนั้นเหมาะกับ TF M15 มากกว่า และเทรดแบบเล่นรอบนิดนึง ทำให้ช่วง SL, TP จะค่อนข้างกว้าง เลยกะว่าไว้ว่างๆ จะทำบอทเทรดแบบนี้ คือ เทรดไม่บ่อยมาก ถือนานนิดนึง เฉลี่ยถือไม่เกิน 5 วัน
พักหลังผมกำลังหันมาทำแบบนี้
1. เทรนโมเดลแบบ ‘warm up’ โดยเทรนกับ training data ปี 2000 ถึงปัจจุบันลบ 1 ปี วัตถุประสงค์เพื่อ ให้อัลกอริธึม ML ได้เห็นได้เรียนกับข้อมูลพฤติกรรมราคาที่หลากหลายที่สุด และ ‘warm up’ ในการปรับค่า weight ต่างๆ ไปในตัว
2. เทรนโมเดลกับ training data ประมาณ 1 ปีย้อนหลัง ไม่รวม 1-3 เดือนล่าสุด โดยเทรนแบบ overfit หน่อย
แล้ว test กับ test data (out sample) 1-3 เดือนล่าสุด
เทคนิคนี้จะไม่สนใจการ backtest ระยะยาวหลายปีแบบที่ฮิตๆ กัน แต่เน้น backtest ระยะสั้น แค่ไม่กี่สัปดาห์
ข้อเสียคือ ถ้าเอาโมเดลที่ได้ไป backtest ย้อนหลังหลายปีมากๆ ผล backtest มักเละเทะเลย อาจมีบางช่วงที่ดี บางช่วง draw down อาจหนัก
ข้อดีคือ โมเดล react กับพฤติกรรมราคาที่เปลี่ยนไปได้เร็วกว่า แต่การจะใช้เทคนิคนี้ต้องมีระบบ continuous learning ที่ทำให้โมเดลเรียนรู้ข้อมูลล่าสุดใหม่ๆ ต่อไปได้เรื่อยๆ อัตโนมัติ หรือกึ่งอัตโนมัติ โดยเรียนรู้เพิ่มเติมอย่างน้อยเดือนละครั้ง
อีกเทคนิคคล้ายกับอันบน แต่นำ walk forward มาใช้ (สังเกตตัวอย่างในเวิร์กช็อป RL-TEP) ในโค้ดท่อน walk forward และ continuous learning
แบบนี้ครับ (เวอร์ชั่น ณ ปัจจุบัน ใช้ได้กับใน RL เท่านั้น ไว้จะอัพเดตโค้ดในท่อน ML Signal Modeling ให้รองรับการเทรนแบบ walk forward ได้เร็วๆ นี้)
1) จังหวะแรกเป็นการทำ pretrain model
1. เทรนโมเดลแบบ ‘warm up’ กับ training data ปี 2000 – 2020
2. test กับ test data ปี 2021 ถึงปัจจุบัน แบบขำๆ ไม่เน้นความแจ่มมาก ขอแค่อย่าเละเทะเกินไปพอ
จากนั้นก็จะได้ pretrained RL-TEP model ออกมาชุดนึง (default มันจะ save checkpoint จนได้โเดลใหม่ๆ ทุก 5,000 step ระหว่างเทรน RL-TEP)
2) นำ pretrained model ตัวที่ต้องการมาเทรนต่อ
1. เทรนต่อแบบ walk forward กับ training data ปี 2021 ถึงเดือน มิ.ย. 2023
2. test กับ test data ประมาณ 1-3 เดือน เช่น เดือน ก.ค. 2023 ถึงปัจจุบัน (ขณะพิมพ์นี้เป็นวันที่ 19 ก.ย. 2023)
แบบนี้จะได้โมเดลที่ react กับสภาวะปัจจุบันได้เร็ว แต่ overfit นิดๆ
แต่แนวคิดเบื้องหลังคือ เราสนใจปัจจุบันและอนาคตมากกว่าอดีต เราจึงไม่ควรไปสนใจผล backtest กับราคาหรือพฤติกรรมตลาดในอดีตมากเกินไป
ทริกสำคัญที่ต้องพิจารณาให้เด็ดขาดดดด
ข้อ 3, 4 มีผลต่อ ความถี่ในการสร้างผลตอบแทน และ cashflow
เช่น สมมติเราต้องการใช้กลยุทธ์ momentum + trend following กับหุ้นใน SET50 แต่ดันใช้ TF D1 แล้วอยากให้เกิด ผลตอบแทนหรือ cashflow ทุก 3 วัน….. เอ่อ แบบนี้ก็ไม่รอดละครับ กลยุทธ์ กับ เป้าหมาย และ แนวทาง มันขัดแย้งกัน
ข้อ 1-5 ข้างบนสำคัญมากครับ
ลำดับในการออกแบบโมเดลและบอทนะครับ
ไว้ว่างๆ จะมาวาดรูปประกอบ และ อัพเดตให้ละเอียดเพื่อให้เข้าใจง่ายขึ้นนะครับ
จริงๆ ยังมีเทคนิคการแบ่งข้อมูล train & test อื่นๆ อีกมากมาย ไว้จะมาแนะนำกันเพิ่มครับ
สรุป สำหรับการแบ่งข้อมูล train & test เบื้องต้น
แบ่งข้อมูล ให้เหมาะสมกับ trading strategy และ รูปแบบการเทรนโมเดล ครับ