รายละเอียดคอร์ส AI for Investment: from AI to Fundamental Investing

คอร์สนี้เป็นคอร์ส “ประยุกต์ใช้ศาสตร์ Artificial Intelligence ในการลงทุน” ภายในคอร์ส เราจะเขียนโปรแกรมที่สามารถ “เลือกหุ้น” ที่จะลงทุนในระยาว ตั้งแต่ 1 ปีขึ้นไป โดยการใช้เทคนิค Machine learning เพื่อคัดแยกหุ้นที่น่าลงทุนมาให้เรา เป้าหมายของคอร์ส สร้างโปรเจคเพื่อ“คัดแยกหุ้นที่น่าสนใจด้วย Machine Learning” เราจะพาทุกท่านมาสร้าง ตะแกรงร่อนหุ้น เพื่อเฟ้นหาหุ้นที่น่าสนใจท่ามกลางหุ้นนับพันตัว!!! รายละเอียดหัวข้อต่างๆ ที่เราจะได้เรียนรู้จากการเรียนคอร์สนี้ เรียนรู้วิธีการหาข้อมูลหุ้น ข้อมูลงบการเงิน ประเภทข้อมูล ข้อมูลสูงระดับล้านแถว เรียนรู้วิธีการจัดการข้อมูลงบการเงิน และการสร้าง Financial Feature ที่ส่งผลต่อการทำนายด้วย โมเดล Machine Learning การทำความสะอาดข้อมูล (Data Cleaning) เพื่อเตรียมพร้อมสำหรับการสร้างโมเดล AI ความรู้เบื้องต้นเกี่ยวกับ Machine Learning เช่น การแบ่งข้อมูล Train-Test Set ปัญหา Overfittingการหาจุดสมดุลของโมเดล (Bias Variance Tradeoff) Machine…

มาลองใช้ Random Forest ช่วยในการลงทุนกันดีกว่า

บทความนี้ เราจะมาลองใช้ Machine Learning ตัวที่ขึ้นชื่อว่าดีมากอีกตัวหนึ่งคือ Random Forest มาช่วยในการทำนายการเปลี่ยนแปลงของราคาหุ้นกัน ระหว่างที่เรากำลังจัดทำเนื้อหาคอร์สใหม่ ที่ปัจจุบันเสร็จไปแล้วกำลังอยู่ในขั้นตอนการอัดวีดีโอนะครับ และในคอร์สนั้นเราก็มีการใช้ Random Forest ในการทำนายราคาหลักทรัพย์เช่นกัน วันนี้เราเลยเอามาแปะให้เห็นภาพแบบคร่าวๆก่อนนะครับ (เนื้อหาในคอร์สลึกว่านี้เยอะมาก) ทำไมต้อง Random Forest Random Forest เป็นอีกหนึ่งอัลกอริทึ่มที่ได้รับการยอมรับกันอย่างแพร่หลาย และทำผลงานได้ค่อนข้างดี ในขณะที่ตัวโมเดลเองก็ไม่ได้ซับซ้อนจนเกินไป Random Forest เป็นอัลกอริทึ่มที่พัฒนาต่อยอดจากอัลกอริทึ่มพื้นฐานอย่าง Decision Tree ที่มีการใช้ต้นไม้ในการตัดสินใจ โดยในการสร้างต้นไม้ที่ใช้ในการตัดสินใจขึ้นนั้น จะอาศัยหลักการสร้างกฏสำหรับการแบ่งต้นไม้ออกเป็นกิ่งๆ และจัดให้ข้อมูลที่มีเงื่อนไขตรงตามที่กำหนดถูกจัดอยู่ในใบของแต่ละกิ่งที่ได้รับการแบ่งข้างต้น Decision Tree ถือเป็นอัลกอริทึ่มที่พยายามจัดการกับข้อมูลด้วยการสร้างต้นไม้เพียงแต่ 1 ต้น เท่านั้น ทำไม่ยังไม่สามารถจัดการกับข้อมูลที่ซับซ้อนได้อย่างมีประสิทธิภาพ ดังนั้น จึงมีการคิดค้นอัลกอริทึ่มที่ประกอบไปด้วยต้นไม้มากกว่า 1 ต้นในการตัดสินใจ คือ Random Forest หรือ “ป่า” ที่ใช้ในการตัดสินใจ ขึ้นมา ซึ่งในการทำงานของ Random Forest นี้…

การทำ 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 สร้าง 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 ที่ผ่านมาของผู้เขียน ปฏิเสธไม่ได้เลยว่า…

กลยุทธ์ 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…

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

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

ปรากฏการณ์ 26 กุมภาพันธ์ 2020 หุ้นไทยตก 72 จุดในวันเดียว!!! ใช้ Value-at-Risk ประเมินกันดีกว่า (แจก code Python)

วันที่ 26 ก.พ. 2020 ตลาดหลักทรัพย์แห่งประเทศไทยเกิดอาการ “เทกระจาด” หล่นลงวันเดียว ถึง 72.69 จุดนับเป็น นับเป็นหล่นลงวันเดียวถึง 5.05% นับเป็นความเสี่ยงอย่างหนึ่งที่นักลงทุนต้องแบกรับ แต่โชคดีที่เราที่มีวิธีการประเมินความเสี่ยงในการลงทุนเพื่อวิเคราะห์ความเสี่ยงล่วงหน้าทำให้เราสามารถวางแผนรับมือกับความเสี่ยงนี้ได้อยู่แล้ว คือ การใช้ทฎษี Value at Risk เข้ามาช่วย ดังที่เราได้เคยนำเสนอไปแล้วในบทความสองพาร์ทแรกซึ่งหาอ่านได้ที่ Value at Risk (VaR) Part 1: VaR แต่ละแบบมีข้อดีข้อเสียอย่างไร Value-at-Risk Part 2: Cornish-Fisher Expansion – Deal with Fat-tailed ในบทความนี้เราจะนำตัวอย่าง index ตลาดหลักทรัพย์ไทยมาวิเคราะห์ด้วย value at risk ทั้งสองแบบมาวิเคราะห์ให้ดูว่าเราสามารถคาดการณ์ความเสี่ยงในครั้งนี้ล่วงหน้าได้อย่างไร พร้อมทั้งแจกโค้ด python ไปให้เพื่อนๆลองทดลองดูได้อีกด้วย ก่อนอื่นเราจะอธิบายขั้นตอนคร่าวๆก่อนว่าแต่ละโค้ดแต่ล่ะส่วนที่สำคัญทำงานอย่างไรเพื่ออธิบายหลักการทำงานก่อน จากนั้นเราจะนำโค้ดทั้งหมดมาแจกในตอนท้ายของบทความ อธิบายส่วนสำคัญของโค้ด Python เริ่มต้นเราต้อง Import library…

ว่าด้วย Recurrent Neural Networks: Part 1

ไม่ได้เขียนบล็อคซะนานเนื่องจากป่วยไปพักใหญ่ ตอนนี้กลับมา จะเริ่มกลับมาเขียนแล้วครับ โดยเรื่องที่ผมคิดไว้คราวนี้จะเป็น “การทำนายอนาคตของข้อมูล Time series” ครับ เพราะเป็นช่วงเวลาที่พอดีกับที่ผมต้องสรุปผลการทดลองส่งแลปพอดีครับ เลยจะขีด ๆ เขียน ๆ ตามไปด้วยเลยก็แล้วกัน ในยุคที่ Deep Learning กำลังครองโลกอยู่นี้ก็คงหลีกเลี่ยงไม่ได้ที่จะต้องกล่าวถึง Recurrent Neural Network (RNN) แต่ก่อนจะไปถึงจุดนั้นเราจะเริ่มจากอะไรที่เบสิก ๆ ก่อน โดยบทความแรกจะเริ่มตั้งแต่เรื่องพื้นฐาน ว่าด้วย Neural Network จาก Linear regression ไปจนถึง Simple Recurrent Neural Network (Simple RNN) Time series และ Simple Neural Network ข้อมูลของเราจะเป็น “Time series” หรือ “อนุกรมเวลา” ได้ ก็ต่อเมื่อ “มีอินเด็กซ์เวลา” มาเกี่ยวข้องนั่นแหละครับ ตัวอย่างเช่น…