การทำ Recursive Feature Section ง่ายๆ ใน Python Sklearn ที่ช่วยให้การเขียนโค้ดเลือก Feature ไม่ยุ่งยากอีกต่อไป [แจก Source Code]

อะไรคือ Feature Section? Feature Selection แปลเป็นไทยได้ตรงตัวเลยก็คือ “การเลือกฟีเจอร์” หรือ การเลือกคุณลักษณะของข้อมูลที่เหมาะสมสำหรับการทำงานของ Machine Learning ถ้าพูดให้ง่ายขึ้นอีกก็คือ เลือกว่าคอลัมน์ไหนในตัวข้อมูลที่เราจะเลือกใช้งานนั่นเอง จากบทความที่แล้ว ในเรื่อง “พอกันทีกับความผิดพลาดเดิมๆ ด้วยการสร้างโมเดล Machine Learning ด้วยฟีเจอร์ทั้งหมดที่มี!“ จากบทความที่แล้ว ผู้อ่านก็จะเห็นแล้วว่าการโยนฟีเจอร์ทั้งหมดเข้าไปทำงานทันทีโดยไม่ผ่านกระบวนการใดๆ เลย สามารถก่อให้เกิดปัญหาใหญ่ๆได้หลายอย่าง ดังนั้น ในบทความนี้ เราจึงขอนำเสนอหนึ่งในวิธีการพื้นฐานที่ใช้สำหรับการเลือกฟีเจอร์ที่มีชื่อว่า “Recursive Feature Selection” ซึ่งเป็นวิธีการที่ไม่ซับ สามารถนำมาประยุกต์ใช้ในการเลือกฟีเจอร์สำหรับมือใหม่ได้อย่างไม่ยากค่ะ ทำให้สามารถหลีกเลี่ยงปัญหาที่อาจจะเกิดขึ้นได้จากการมีฟีเจอร์ที่มากเกินไปได้ระดับหนึ่งค่ะ Recursive Feature Selection “Recursive Feature Selection” เป็น โมดูลนึงที่ Sklearn เตรียมเอาไว้ให้ผู้ใช้ที่ต้องการทำ Machine Learning ด้วย Python ได้เรียกใช้เพื่อการกำหนดการเลือกฟีเจอร์ที่จะนำมาใช้งานได้อย่างไม่ยาก โมดูนี้มีหลักการทำงานที่ง่ายๆ คือ การวนลูปเลือกฟีเจอร์ หรือกลุ่มของฟีเจอร์ แล้วทำการทดสอบการสร้างโมเดลด้วย Machine Learning…

พอกันทีกับความผิดพลาดเดิมๆ ด้วยการสร้างโมเดล Machine Learning ด้วยฟีเจอร์ทั้งหมดที่มี!

จริงอยู่ที่มีโลกแห่งความเป็นจริงในปัจจุบัน ข้อมูลนั้นหาได้ง่ายมาก เมื่อเราสนใจเรื่องใดเรื่องนึง ก็มักจะมีข้อมูลที่เกี่ยวข้องอยู่นับไม่ถ้วน ส่งผลให้เมื่อเราทำการเก็บข้อมูลเพื่อนำมาใช้ในการสร้างโมเดล Machine Learning ด้าต้าของเราก็จะมีจำนวน คอลัมน์ หรือ ฟิลด์ ที่เกี่ยวข้ออยู่มากมายนั่นเอง การมีคอลัมน์มาก หมายถึง เรามี information ที่ใช้ในการอธิบายข้อมูลมากขึ้น สามารถอธิบายข้อมูลได้ละเอียดขึ้น มีมิติในการมองข้อมูลมากขึ้น ลักษณะแบบนี้ ฟังดูดีกันใช่มั้ยคะ? แต่มันจะดีสำหรับเจ้า Machine Learning ในการเรียนรู้รึเปล่า? ตอบได้เลยว่า “ไม่ดี” ค่ะ การมีฟีเจอร์เยอะแยะมากมาย มีโอกาสเกิดการซ้ำซ้อนกันได้สูง (Redundant Features) หรือ ฟีเจอร์บางตัวแทบจะไม่มีความสัมพันธ์ (Irrelevant Features) กับสิ่งที่เราทำนายเลยด้วยซ้ำ เจ้าความซ้ำซ้อน และ ความไม่เกี่ยวข้อง ตัวนี้เอง ที่ก่อให้เกิดผลเสียต่อการเรียนรู้ของโมเดล Machine Learning โดยเฉพาะอย่างยิ่ง ในกรณีที่จำนวนข้อมูลมีจำกัด (มีจำนวนแถวข้อมูลน้อย ในขณะที่มีจำนวนคอลัมน์เยอะ) ดังนั้น ในการสร้างโมเดล Machine Learning นั้น เราไม่นิยมโยนฟีเจอร์ที่มีอยู่ทั้งหมดมาใช้งานตู้มเดียวเลย เนื่องด้วย…

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

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

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…

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: ดึงข้อมูลหุ้นจาก…

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 ตัว…

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

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

Alternative bars อีกทางเลือกของการวิเคราะห์ข้อมูลเพื่อการลงทุน

เคยคิดกันมั้ย ว่าข้อมูลหุ้นที่เรานำมาวิเคราะห์กันในทุกๆ วันนี้ ข้อมูลที่มีหน้าตาที่คุ้นเคย อย่างราคาของวันนั้นๆ OHLC (Open-High-Low-Close) และ Volume ที่เกิดขึ้นในวันๆ หนึ่ง มันเหมาะสมเพียงใด ที่เราจะนำมาใช้ในการ วัดความเป็นความตาย (นี่ก็เวอร์ไป) ….. ในการตัดสินใจว่า จะลงทุนในหุ้นตัวใด เมื่อไหร่ เป็นจำนวนเท่าใด เคยนั่งคิดกันมั้ยว่า เจ้าข้อมูลตัวนี้มันสมเหตุสมผลหรือไม่ หรือ มีข้อมูลอื่นๆ ที่อาจจะนำมาลองใช้ได้หรือไม่ วันนี้ เราเลยนำบทความเกี่ยวกับ “ข้อมูลหุ้นทางเลือก” หรือ “Aternative bars” มาเล่าสู่กันฟังค่ะ โดยบทความนี้เราได้เอามาจาก คุณ Harkishan Singh Baniya ที่เค้าเอาไอเดียมาจาก Advances in Financial Machine Learning. ของคุณ marcos lopez de prado อีกทีหนึงนะคะ link บทความต้นฉบับ ที่นี่ บทความเก่าของเราเองที่เคยเขียนในเรื่องนี้ สามารถอ่านได้ที่นี่ อะไรคือ…

กรองสัญญาณเทรดง่ายๆ ด้วย K-mean clustering

สวัสดีครับ ห่างหายจากการอัพบล๊อคกันไปนานมาก เนื่องจากติดภารกิจหลายเดือน วันนี้จะกลับมาเขียนอัพบล็อคตามปรกติแล้วครับ ขอถือโอกาสมาปัดฝุ่นกันด้วยไอเดียง่ายๆ ที่ใช้ในการกรองสัญญาณเทรดด้วย Machine Learning กันก่อนก็แล้วกันครับ ข้อมูล ในที่นี้เราจะใช้ ขอมูลหุ้น MSFT(microsoft corporation) เป็นตัวอย่างในการทดลองนี้นะครับ โดยใช้ข้อมูลในการทดลองตั้งแค่ปี 2016 จนถึงปี 2018 เริ่มทำงาน โดยแรกเริ่ม เราจะใช้กลยุทธ์อย่าง Trend Following แบบธรรมดาๆ คือ ใช้ Feature หรือ indicator แค่ Simple Moving Average (SMA) 2 เส้น เท่านั้น SMA1 เส้นเร็ว xx วัน โดยผมจะปรับให้สั้นเพื่อให้เกิด noise SMA2 เส้นช้า yy วัน โดยผมจะปรับให้สั้นเพื่อให้เกิด noiseเช่นกัน จากนั้น ก็ประยุกต์ใช้ไอเดียง่ายๆ ที่ทราบกันอยู่แล้วคือ ให้ SMA1…

10 ไอเดียใช้ Machine Learning ในงาน Finance พร้อมแนะนำ paper ไปอ่านกันให้จุใจรับปีใหม่ (part 2)

เมื่อพูดถึงการใช้ Machine Learning ในงานด้านการลงทุนแล้ว คนส่วนใหญ่มักจะนึกถึง “การทำนาย” ราคาข้องหุ้นเป็นหลัก แต่จริงๆ แล้ว Machine Learning ไม่ได้ทำได้เพียงแค่การทำนายค่าราคาเท่านั้นในการลงทุน บทความนี้จะพาไปดู ไอเดียต่างๆ ในการนำ Machine Learning มาใช้ในการด้านการลงทุน โดยการสรุปของคุณ Marcos Lopez de Prado อดีตหัวหน้าทีมนักวิจัย Machine Learning แห่ง AQR Capital และ CIO แห่ง True Positive Technologies (TPT) CIO of True Positive Technologies (TPT) มาดูกันเลยค่ะว่า 10 ทางเลือกในการใช้ Machine Learning ในการลงทุน จะมีอะไรกันบ้าง บทความที่แล้ว เราได้เขียนเกี่ยวกับไอเดียการใช้ Machine Learning ใน 3…

10 ไอเดียใช้ Machine Learning ในงาน Finance พร้อมแนะนำ paper ไปอ่านกันให้จุใจรับปีใหม่ (part 1)

เมื่อพูดถึงการใช้ Machine Learning ในงานด้านการลงทุนแล้ว คนส่วนใหญ่มักจะนึกถึง “การทำนาย” ราคาข้องหุ้นเป็นหลัก แต่จริงๆ แล้ว Machine Learning ไม่ได้ทำได้เพียงแค่การทำนายค่าราคาเท่านั้นในการลงทุน บทความนี้จะพาไปดู ไอเดียต่างๆ ในการนำ Machine Learning มาใช้ในการด้านการลงทุน โดยการสรุปของคุณ Marcos Lopez de Prado อดีตหัวหน้าทีมนักวิจัย Machine Learning แห่ง AQR Capital และ CIO แห่ง True Positive Technologies (TPT) CIO of True Positive Technologies (TPT) มาดูกันเลยค่ะว่า 10 ทางเลือกในการใช้ Machine Learning ในการลงทุน จะมีอะไรกันบ้าง 1. Price Prediction (การทำนายราคา) ปัญหายอดฮิตของ Machine…