การแบ่งข้อมูล train & test เบื้องต้น

การใช้ข้อมูล และ การแบ่งข้อมูล ตรงนี้แล้วแต่เทคนิคของแต่ละคนเลยครับ เพราะต้องใช้ให้เหมาะกับโมเดล และกลยุทธ์ที่จะใช้

สมัยก่อนผมทำงี้ (สมมติตลาด 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 กับราคาหรือพฤติกรรมตลาดในอดีตมากเกินไป

ทริกสำคัญที่ต้องพิจารณาให้เด็ดขาดดดด

  1. กลยุทธ์การเทรดที่จะใช้ เช่น scalping, momentum, trend following,…
  2. timeframe ที่จะใช้
  3. ความถี่ในการเทรดที่ต้องการ
  4. ระยะเวลาเฉลี่ยในการถือ position (hold) ที่ต้องการ
  5. performance indicator ต่างๆ เช่น Max DD ที่รับได้, profit (%) ที่คาดหวัง, sharpe ratio ที่คาดหวัง,…

ข้อ 3, 4 มีผลต่อ ความถี่ในการสร้างผลตอบแทน และ cashflow

เช่น สมมติเราต้องการใช้กลยุทธ์ momentum + trend following กับหุ้นใน SET50 แต่ดันใช้ TF D1 แล้วอยากให้เกิด ผลตอบแทนหรือ cashflow ทุก 3 วัน….. เอ่อ แบบนี้ก็ไม่รอดละครับ กลยุทธ์ กับ เป้าหมาย และ แนวทาง มันขัดแย้งกัน

ข้อ 1-5 ข้างบนสำคัญมากครับ

ลำดับในการออกแบบโมเดลและบอทนะครับ

  1. กำหนดเป้าหมายการลงทุน สำหรับโมเดลและบอทตัวที่กำลังจะสร้าง
  2. กำหนดกลยุทธ์การลงทุน (trading strategy) เช่น momentum, trend following, scalping, swing,… แต่ถ้าไม่ถนัด หรือไม่มีประสบการณ์ แนะนำ 1) ศึกษาและฝึก 2) ง่ายกว่าคือ ไม่ต้องศึกษา แต่ให้ฝึกทำตามเวิร์กช็อปในคอร์ส ซึ่งถือเป็นการใช้กลยุทธ์แบบเดียวกับที่ผมใช้ ติดตรงไหนจะได้ปรึกษากันได้
  3. สรุป ทบทวน 2 ข้อข้างบน และแจกแจงออกเป็น 5 ข้อตามด้านบน
  4. ออกแบบ model architecture (ขั้นตอนนี้เรื่องใหญ่ ไว้ขอแยกไปอธิบายแบบละเอียดๆ นะครับ) ถ้ายังไม่ชำนาญให้ทำตามเวิร์กช็อปในคอร์ส และใช้เทมเพลตโค้ดตามในคอร์ส ผมก็ใช้พวกนี้ทำโมเดลและบอทรันจริงนะ ดังนั้นไม่ต้องกลัวเหงา ^^
  5. ออกแบบการแนวทางการเทรนโมเดลต่างๆ เช่น การเทรนโมเดลสำหรับ predict signal, การเทรนโมเดลสำหรับ predict SL, TP, position size, การเทรนโมเดลอื่นๆ
  6. กำหนดเป้าหมายของแต่ละโมเดลในข้อ 5 ให้สอดคล้องกับข้อ 1 และ 2
  7. กำหนด candidate ML/DL/RL algorithm ที่จะใช้ในข้อ 5 สำหรับการเทรนโมเดลส่วนต่างๆ
  8. ออกแบบการจัดการ training data & test data ว่าจะแบ่งอย่างไร จะ train, validate, test ด้วยเทคนิคแบบไหน เทคนิคที่ต้องพิจารณาเช่น split validation, walk forward, monte carlo, shuffle, simulate noise (spread, missing value, incident, delay, anomaly,…)
  9. prepare environment โดยแบ่งเป็น 3 ส่วน ได้แก่: training, test (models) & backtest, production (live trade)
  10. จากนั้นก็เริ่มบรรเลง: train, validate, test, ประกอบร่าง, backtest, optimize, prepare deployment & execution, deploy, execute

ไว้ว่างๆ จะมาวาดรูปประกอบ และ อัพเดตให้ละเอียดเพื่อให้เข้าใจง่ายขึ้นนะครับ

จริงๆ ยังมีเทคนิคการแบ่งข้อมูล train & test อื่นๆ อีกมากมาย ไว้จะมาแนะนำกันเพิ่มครับ

สรุป สำหรับการแบ่งข้อมูล train & test เบื้องต้น

แบ่งข้อมูล ให้เหมาะสมกับ trading strategy และ รูปแบบการเทรนโมเดล ครับ

Leave a Reply

Discover more from

Subscribe now to keep reading and get access to the full archive.

Continue reading