โมเดลไหนเหมาะกับการลงทุนที่สุด? ต้องใช้โมเดลที่ซับซ้อนขนาดไหนถึงจะมีประสิทธิภาพเพียงพอ? โมเดลยิ่งยากยิ่งดีจริงหรือไม่?

พักหลังมานี้ผมได้รับคำถามหลังไมค์มาค่อนข้างบ่อย ว่าโมเดลไหนกันแน่ที่ลงทุนได้ผลดีที่สุด ผมจะสอนถึงไป deep learning หรือเปล่า คำตอบคือทำแน่ครับ แต่มันเป็นควรจะแยกไว้ต่างหากอีกเรื่องหนึงเลย แต่เอาเถอะ มาที่คำถามกันว่าโมเดลไหนดีที่สุดกันก่อน ในความคิดของผมอันที่จริง ปัญหานี้นับเป็นปัญหาของมือใหม่อย่างหนึ่งครับ คือความคิดที่เป็น myth ที่ว่า machine learning model ยิ่งลึกซึ้ง ยิ่งซับซ้อนมากๆ จะยิ่งดี ความคิดที่ว่า โมเดลพื้นฐานอย่าง linear หรือ logistic regression เป็นโมเดลที่แย่ เพราะง่ายเกินไป! ถ้าเพิ่มความละเอียดไปเป็น support vector machine มันก็จะยิ่งได้ผลลัพธ์ที่ดียิ่งขึ้น หรือ เพิ่มรายละเอียดไปถึงโมเดลที่ลึกซึ่งมากขึ้นอย่างโมเดลที่โด่งดังในช่วง 4 -5 ปีมานี้่อย่าง neural network deep learning ก็จะยิ่งดีขึ้นไปอีก โมเดลยิ่งซับซ้อนยิ่งดีจริงหรือเปล่า? คำตอบของผมคือ ไม่ครับ ไม่จริงซะทีเดียว ML หลายๆโมเดลมันก็เป็นแค่การแก้ปัญหาเชิง geometric เท่านั้น แล้วโมเดลไหนเหมาะกับปัญหาของเราทีสุด? คำตอบสั้นๆ ก็คือ…

8 เทคนิคง่ายๆ ป้องกัน Overfitting เพื่อโมเดล Machine Learning ที่มีประสิทธิภาพ

บทความที่แล้ว เราได้คุยกันถึงเรื่อง Overfitting ของโมเดล Machine Learning (ML) และ ความสำคัญระดับสุดยอดของมันกันไปแล้ว วันนี้เราจะมาคุยกันถึงเรื่องวิธีการป้องกันการเกิด Overfitting อย่างง่ายๆ กันค่ะ ขอให้ผู้อ่านใส่ใจในเรื่องนี้ให้มาก ท่องไว้เลยค่ะ โมเดล ML ไม่ว่าจะเป็นโมเดลพื้นฐาน หรือ โมเดลระดับที่มีความซับซ้อนสูง ถ้าเกิด Overfitting ขึ้นแล้วก็พังไม่เป็นท่าได้เหมือนกันค่ะ แถมเป็นการพังพินาศแบบที่ผู้สร้างไม่ทันตั้งตัวด้วย เกริ่นนำกันไปพอสมควรแล้ว เรามาดูกันดีกว่า ว่าวิธีการง่ายๆ ที่สามารถนำมาใช้ในการป้องกันปัญหาการ Overfitting นี้มีอะไรบ้าง แต่ก่อนอื่น ถ้าผู้อ่านท่านใด ยังไม่แน่ใจว่า Overfitting คืออะไร และ เกิดขึ้นได้อย่างไร สามารถกลับไปอ่านบทความก่อนหน้าที่เราเขียนไว้ก่อนได้ที่ Overfitting vs. Underfitting อธิบายด้วยตัวอย่าง ฉบับเข้าใจง่ายที่สุดในโลก 1. Hold Out วิธีการแรกในการป้องกันการเกิด Overfitting วิธีแรกเลยก็คือ การแบ่งข้อมูลออกเป็น ชุดข้อมูลสอน (Train set) และ ชุดข้อมูลทดสอบ…

Update Course 2021

หลังจากห่างหายกันไปนาน จากคอร์สแรกในปี 2019 ในที่สุดพวกเราก็หมดภาระทางวิชาการเสียที พอกลับมามีเวลามองดูคอร์สเก่าของเราแล้ว ผมก็พบว่ามันผ่านมาสองปีแล้ว ข้อมูลหลายอย่างก็เก่าไปบ้าง ผมจึงตัดสินใจทำคอร์สนี้ขึ้นมาใหม่ให้ทุกคนได้เข้าไปดูกันได้ที่ https://algoaddict.com/p/python-for-finance ผมจะมีการปรับโครงของคอร์สให้มีเนื้อหาเชื่อมโยงกัน ปรับปรุงโค้ดให้เหมาะสมยิ่งขึ้นไม่ว่าจะเพิ่มประสิทธิภาพให้โค้ด วิธีการเรียกใช้งานฟังก์ชั่น หรือ สไตล์ชื่อตัวแปรเล็กๆน้อยๆ สิ่งที่ยังเหมือนเดิมคือ คอร์สนี้คือ คอร์ส “Python for Finance” ไม่ใช่ “Algorithmic Trading” เราจะไม่ได้เน้นหนักทางการสร้างโมเดลเพื่อการลงทุนที่กำไรมาก ๆ ไม่มีการบอก “Magic Formula” ที่ทำให้รวยได้ แต่อย่างใด algoaddict 2019 คอร์สสำหรับการอัพเดตครั้งแรก ณ ปี 2021 นี้ จะแบ่งออกเป็น 9 session หลักๆ ประกอบด้วยวีดีโอ 129 วีดีโอ ความยาวเกือบๆ 15 ชั่วโมง ไม่นับที่ผมยังค้างทุกคนอยู่ไม่ได้อัพเดตของเก่าและของใหม่ที่ผมจะอัพเดตมาในอนาคต และไม่ได้นับ คือ machine learning, beta, alpha และอย่างอื่นที่ยังไม่ได้เพิ่มเข้ามาในตอนนี้…

Overfitting vs. Underfitting อธิบายด้วยตัวอย่าง ฉบับเข้าใจง่ายที่สุดในโลก

การเกิด Overfitting หรือ Underfitting เป็นปัญหาที่มองข้ามไม่ได้เลยสำหรับการใช้ Machine Learning (ML)ในการแก้ปัญหาต่างๆ การพัฒนาโมเดล ML ทุกครั้ง ผู้พัฒนาจะต้องคำนึงถึงการ Overfitting และ Underfitting เสมอ บทความนี้ เราจะมาดูกันว่า เจ้า Overfitting และ Underfitting นี้คืออะไร และ จะมีวิธีใดบ้างในการจัดการกับมัน อะไรคือ Overfitting? บทความนี้เราจะมาทำความเข้าใจ Overfitting ด้วยตัวอย่างกันค่ะ ลองนึกตามนะคะ มีชาวต่างชาติชื่อนายจอนนี่ ต้องการเรียนภาษาไทย โดยไม่เคยเรียนมาก่อนหน้านี้เลย แต่ดันเคยได้ยินว่ามีคนไทยคนหนึ่ง ชื่อว่าคุณสุนทรภู่ เป็นนักเขียนชาวไทยที่ยิ่งใหญ่ที่สุด มีผลงานออกมานับไม่ถ้วน ได้รับการยกย่องด้านการใช้ภาษาไทยเป็นอย่างมากในประเทศไทย ถ้าต้องการเชี่ยวชาญภาษาไทยให้ได้แบบไทยแท้ๆ ก็ต้องศึกษาผลงานของคุณสุนทรภู่นี่แหละ จอนนี่จึงตัดสินใจเลยว่า 1 ปีจากนี้ เขาจะศึกษาผลงานของคุณสุนทรภู่ แบบ Non-stop เลย เรียกว่าตื่นนอนก็ขังตัวเองอยู่ในห้องสมุด และอ่านๆๆๆๆๆๆ จำๆๆๆๆๆๆ เฉพาะงานเขียนของคุณสุนทรภู่เท่านั้น หนึ่งปีผ่านไป จอนนี่มั่นใจแล้วว่า เค้ารู้จักงานเขียนของคุณสุนทรภู่…

Backtesting Part3: Adjusting entry exit prices

หลังจากเพิ่มเติม stoploss ไปแล้ว เราจะมาเพิ่มรายละเอียดกับการ Backtest กับอีกซักหน่อยหนึง จากบทความที่แล้ว ยังมีความไม่สมจริงอยู่บางอย่างคือ การคิดกำไรเมื่อตอนเราเปิดสัญญา Long หรือ Short การคิดคำนวณแบบนี้มันคงไม่มีปัญหาอะไรถ้าเราจริงๆ ถ้าเรามีสัญญา Long อยู่ หุ้นขึ้นจาก 10 บาท ไป 12 บาทเราก็ควรจะได้กำไร (12/10)-1 = 0.2 หรือคิดเป็นกำไร 20% อยู่แล้วถ้าเรามีหุ้นตัวนั้นอยู่ใน Portfolio ของเรา แต่มันยังมีเคสความไม่สมจริงอยู่ คือในกรณีที่เราเข้าซื้อวันแรก สมมุติว่า เรามีสัญญาณซื้อวันที่ 5มกราคม เราก็จะต้องไปซื้อหุ้นเข้าพอร์ตนะวันที่ 6 หรือวันถัดมานั่นเอง ถ้าราคาหุ้น วันที่ 5 ปิดที่ 10 บาท ราคาเปิดของวันที่ 6 เปิดที่ 11 บาท และไปปิดที่ 12 บาท ในกรณีนี้ การคำนวณโดยใช้ (ราคาปิดเมื่อวาน/ราคาปิดวันนี้)-1…

Machine Learning สร้าง Color Codes ทำเองได้ ง่ายนิดเดียว ไม่เกิน 10 นาทีเสร็จ [แจกโค้ด]

เคยเห็นโพส Color Codes เจ๋งๆ บน Social Media กันมั้ยคะ? วันนี้ Algoaddict ชวนมาลองสร้าง Color Code กันเองแบบง่ายๆ ด้วยการประยุกต์ใช้ Machine Learning ที่ชื่อว่า K-mean Clustering เข้ามาช่วยในการวิเคราะห์ค่าสี ต้องลองทำแล้วจะรู้ว่า ง่ายมากๆ ไม่เกิน 10 นาที ได้ Color Codes ให้รูปสวยๆ ของเรา แน่นอนค่ะ สาย Social Media, Graphic Designers และ Web designers ห้ามพลาด! Idea เราจะมาตรวจจับค่าสีในรูปภาพที่ต้องการ และทำการคำนวณนำ้หนักของค่าสีแต่ละค่าที่ประกอบขึ้นเป็นรูปภาพนั้นๆ สุดท้ายเราจะนำข้อมูลเหล่านี้มาสร้าง Color Codes สวยๆ กันค่ะ โปรแกรมนี้เป็นโปรแกรมที่ ง่าย สะดวก และทำได้รวดเร็ว แถมยังถือเป็นโอกาสเรียนรู้การประยุกต์ใช้งาน K-mean…

Backtesting Part2: Adding Stoploss

หลังจากเราทำ backtest แบบง่ายๆไปกันแล้ว เรามาลองเพิ่มรายละเอียดให้กับมันโดยใช้การหยุดการขาดทุน หรือ Stoploss กันดีกว่าครับ เราจะใช้ Technical Analysis indicator ซักตัวหนึงมาใช้เพื่อรักษาระดับกำไรของเราไว้ ในบทความนี้ก็ยังคงพื้นๆอยู่ครับ แต่หลังจากโพสนี้ ยังมีรายละเอียดเกี่ยวการ backtest อีกหลายอย่าง เช่น ความสมจริงของราคาซื้อ-ขาย การเก็บ log วันที่ซื้อ-ขาย หรือปัญหาทาง assumption ทางคณิตศาสตร์ของการ backtest (รวม vectorize ด้วย) ที่เราจะมาพูดคุยและค่อยๆประกอบมันกันครับ เราจะใช้อินดิเคเตอร์ชื่อดังอย่าง Average True Range (ATR) มาช่วยในการรักษาระดับกำไรของเรา อินดิเคเตอร์ตัวนี้ถูกคิดค้นโดยคุณ J. Welles Wilder Jr. ที่เปิดตัวในหนังสือในตำนานทางเทคนิคคอลชื่อ New Concepts in Technical Trading Systems คุณคนนี้เค้ายังคิดค้นเทคนิคอลอินดิเคเตอร์ที่เรารู้จักกันดี และยังใช้กันอยู่ในทุกวันนี้อีกหลายตัวด้วยกัน เช่น Relative strength index(RSI), Average…

Backtesting Part1: อย่างง่าย แบบ Non-vectorization ฉบับจับมือทำ [แจกโค้ด]

อย่างที่เรารู้กันมาว่าการเขียนโปรแกรม Python ให้ดีคือการหลีกเลี่ยงการใช้ foor loop ที่อาจจะส่งผลให้โปรแกรมทำงานได้ช้าลง เราจะนำไป Optimization ก็อาจจะทำให้ใช้เวลามากเกินจำเป็น แต่บางครั้งก็มีความจำเป็นที่จะต้องทำแบบ Non-Vectorization บ้างเหมือนกัน บทความนี้ขอชวนทุกท่านมาทดลองทำ Backtesting ด้วยตัวเองแบบง่ายๆ กันครับ โดยบทความชุดนี้จะเป็นบทความชุด ในบทความแรกนี้จะไม่มีรายละเอียดมากนัก แต่จะทำเป็น Building blog ให้เราค่อยๆเพิ่มเติมรายละเอียดให้กับการเขียน Backtest เพิ่มเติมต่อไปครับ ทำเองใช้เอง ไม่ต้องง้อใคร เพื่อทดสอบสมมุติฐานของเราในเบื้องต้น มือใหม่ก็เข้าใจได้ แถมแจกโค้ดไปรันกันเองให้หนำใจไปเลย ใครที่เพิ่งเริ่มต้นศึกษา ยิ่งได้ทดลองทำด้วยตัวเอง ก็จะช่วยให้เข้าใจหลักการของการทำ Backtest มากขึ้นไปอีกครับ เกริ่นนำกันมาพาพอสมควรแล้ว อย่าเสียเวลาเลยครับ เรามาเริ่มต้นทำกันดีกว่า กับ Backtesting ฉบับจับมือทำ Step 1: Import Libraries ที่จำเป็น ก่อนอื่นเรามาเริ่มต้นด้วยการ Import ไลบรารี่ที่จำเป็นกันก่อน ในที่นี้เราจะ 4 ไลบรารี่ด้วยกัน ดังนี้ Step 2: ดึงข้อมูลหุ้นจาก…

เรียน 4 skills หลัก Data Science ผ่านโปรเจคคูลๆ แบบไม่น่าเบื่อ สำหรับผู้เริ่มต้น

ในปัจจุบัน ต้องยอมรับแบบไม่มีเงื่อนไขว่าการวิเคราะห์ข้อมูล ได้กลายมาเป็นปัจจัยหลักของแทบทุกธุรกิจไปเรียบร้อยแล้ว หนึ่งในทักษะที่ถูกถามหากันมากที่สุดในการสมัครงานก็คือ ทักษะการวิเคราะห์ข้อมูลแบบ Data Scientist นั่นเอง ทำให้ผู้ที่มีความสามารถในด้านนี้ได้เปรียบกันไปเต็มๆ ข่าวดีก็คือ ทักษะนี้สามารถสร้างได้เองงโดยไม่ต้องกลับเข้าไปลงทะเบียนเข้าเรียนใหม่ค่ะ โดยเฉพาะอย่างยิ่ง ในยุคเทคโนโลยีข่าวสารแบบนี้ แหล่งเรียนรู้มีมากมายนับไม่ถ้วน เพียงแต่หาให้เจอ เลือกแหล่งเรียนรู้ที่เหมาะสมเท่านั้น บทความนี้ Algoaddict จึงขออาสาพาผู้อ่านที่สนใจเริ่มต้นหาความรู้เพื่อเพิ่มพูนทักษะด้านการวิเคราะห์ข้อมูลมาเรียน Skill หรือทักษะหลักๆ ที่จำเป็นสำหรับการทำงานด้าน Data Science ผ่านโปรเจคที่หลากหลายกันค่ะ รับรองว่า เรียนสนุก ไม่น่าเบื่อ จนลืมเวลาไปแน่นอนค่ะ ไปดูกันเลยค่ะ ว่าทักษะเหล่านี้มีอะไรบ้าง และ โปรเจคไหนที่ได้รับเลือกมาในการเรียนทักษะนั้นๆ ค่ะ SKILL 1 การเก็บรวบรวมข้อมูล (Data Collection) Data collection หรือ การเก็บรวมรวมข้อมูล เป็นทักษะที่สำคัญอย่างหนึ่งของ Data Science ในช่วงการทำงาน หรือ ทำวิจัยด้าน AI / Machine Learning ที่ผ่านมาของผู้เขียน ปฏิเสธไม่ได้เลยว่า…

The more, the merrier ยิ่งคนเยอะ ยิ่งมันส์! มาดูคำกล่าวนี้ใช้กับ Machine Learning ได้มั้ย

เคยได้ยินคำกล่าวที่ว่า “The more, the merrier“ ที่แปลว่า “ยิ่งคนเยอะ ยิ่งสนุก หรือ ยิ่งดี” ที่มักถูกใช้กันบ่อยๆ ในภาพยนต์ฝรั่ง เวลามีเพื่อนจัดปาร์ตี้ แล้วมีคนอนุญาติเจ้าภาพขอพาเพื่อนมาเพิ่ม เจ้าภาพส่วนใหญ่ก็จะบอกว่า Of course, the more, the merrier … ได้แน่นอน ยิ่งคนเยอะยิ่งสนุก!! วันนี้เราจะพาไปดูกันว่า เจ้าสถานการณ์ยิ่งเยอะยิ่งดี หรือ ยิ่งเยอะยิ่งเจ๋ง จะให้กับจำนวน Machine Learning ่ที่ใช้ในการทำนายในระบบเทรดได้หรือไม่? ผ่านการทดลองง่ายๆกันค่ะ ก่อนอื่นมาดูอัลกอริทึ่ม Machine Learning ที่จะใช้กันก่อน ในที่นี้เราจะเลือกอัลกอริทึ่มที่ไม่ซับซ้อน เพื่อที่เราจะได้เห็นประสิทธิภาพของการเพิ่มจำนวน “ตัวทำนาย” ให้ชัดๆ ไม่โดนประสิทธิภาพและความซับซ้อนของอัลกอริทึ่มเข้ามาทำให้ไขว้เขว ชนิดของ Machine Learning อัลกอริทึ่มมีจำนวนมาก ถึงขนาดที่ว่าถ้าจะให้ลิสส์ออกมาก็อาจจะไม่สามารถลิสส์ออกมาให้ครบถ้วนได้ ดังนั้น ในที่นี้ เราจะทำการเลือก Machine Learning ออกมา 6 ตัว…

กลยุทธ์ Day of Week ของคุณ Larry R. Williams ทำงานได้จริงไหม

สองสามวันก่อนผู้เขียนได้ อ่านหนังสือ “Long-term secrets to short-term trading” (มีเวอร์ชั่นแปลไทยโดยใช้ชื่อว่า กลยุทธ์เก็งกำไรเทรดระยะสั้น) ของคุณ Larry R. Williams ก็เลยอยากทดลองใช้กลยุทธ์ในการวิเคราะห์ข้อมูลหุ้นตามคุณ Larry ด้วยภาษา Python ดูซะหน่อย จึงถือโอกาสหยิบยกการทดลองนี้มาให้เพื่อนๆ ได้ดูกัน ถือเป็นการฝึกมือภาษา Python และทำความรู้จักกับข้อมูลหุ้นให้มากขึ้นกันไปในตัวด้วยค่ะ สมมุติฐานเริ่มต้น คุณ Larry ได้ตั้งสมมุติฐานของกลยุทธ์นี้ไว้ว่า “ราคาของหลักทรัพย์ในแต่ละวันของสัปดาห์มีลักษณะนิสัย (Characteristic) บางวันมีการปรับตัวขึ้นของราคามากกว่าวันอื่นๆ ในขณะที่บางวันที่การปรับตัวของราคาลดลงมากกว่าวันอื่นๆ อย่างมีนัยยะสำคัญ เช่น หุ้นอย่าง Google อาจจะมีลักษณะของการมีแรงซื้อเข้ามามากใน วันเริ่มต้น ของสัปดาห์ และ มีแรงขายมากใน วันสุดท้าย ของสัปดาห์ ถ้าหุ้นเหล่านั้นมีลักษณะนิสัยแบบที่ว่าจริง เราก็น่าจะสามารถนำข้อมูลนี้มาใช้ประโยชน์ในการสร้างกลยุทธ์การลงทุนได้” ผู้เขียนจึงขออาสา พามาทดลองกลยุทธ์ที่ว่านี้ไปด้วยกันค่ะ บทความนี้ผู้เขียนจะขอใช้หุ้นใน Dow Jones Industrial Average (DJIA) ในการทดลองนะคะ เราจะนำหุ้นเหล่านี้วิเคราะห์ลักษณะเฉพาะ (Characteristic)…

กลยุทธ์ง่ายๆ อย่างการเลือกหุ้นผู้ชนะ ทำกำไรได้จริงหรือ [แจก Code Portfolio Selection with Python]

สวัสดีครับ ไม่ได้เขียน blog ซะนาน วันนี้มีโอกาสได้กลับมาอัพเดต blog กันซะหน่อย วันนี้เรามาวอร์มอัพ Python กับการ backtest แบบง่ายๆกันดีกว่าครับ สมมุติว่าเราต้องการซื้อหุ้นด้วยเงื่อนไขสุดเบสิค คือ ถ้าเราซื้อหุ้นเฉพาะที่ “เป็นหุ้นผู้ชนะ” ในช่วงนี้ผ่านมาแล้วถือไว้ซักระยะหนึ่ง เราจะสามารถทำกำไรได้หรือไม่? ลองมาขยายความกันหน่อยดีกว่า ว่าเงื่อนไขนี้เป็นอย่างไร ทำการเรียงหุ้นใน pool (กลุ่มของหุ้นที่เราเลือกมา) ทั้งหมด ที่มีผลงานดีที่สุดในช่วงเวลาที่ p โดยที่ p อาจจะเป็น 1 สัปดาห์ 1 เดือน 3 เดือน ฯลฯ ผ่านมา เลือกหุ้นที่ทำผลงานได้ดีที่สุดมา n ตัว แล้วถือไว้ใน portfolio ของเราเป็นช่วงเวลา อีก q หนึง (หรือจะมากกว่าน้อยกว่าก็แล้วแต่เราจะดีไซน์) คิดผลกำไร / ขาดทุนของช่วงเวลาที่ถือหุ้นเหล่านั้นไว้ใน portfolio (ช่วงเวลา q) ให้เราเริ่มกระบวนการเดิมซ้ำคือการไปเรียงลำดับผลงานของหุ้นใน portfolio…