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

รูปบนเป็นตัวอย่าง linear regression ธรรมดาๆตัวหนึง ที่มันทำคือสร้างเส้นมาอธิบายความสัมพันธ์ระหว่างดาต้าในแนวนอน x และ เป้าหมาย y ก็เท่านั้น y= ค่าคงที่ + น้ำหนักของ x ที่จะเอาไว้บอกว่า x มีผลกับ y มากแค่ไหน จากนั้นเราอาจจะมีการเพิ่มรายละเอียดให้โมเดลมันยากขึ้นเช่น ทำให้สมการการอธิบายความสัมพันธ์ของมันเป็นมากกว่าเส้นตรง เช่น polynomial ก็แค่เพิ่มยกกำลังเข้าไปเป็นต้น

แล้วถ้าเรามี feature x มากกว่า 1 ล่ะ มันก็กลายเป็น multiple linear regression เช่น ให้ y อธิบายได้ด้วย x1 และ x2 เป็นต้น ก็เหมือนเราพยายามจะอธิบายราคาหุ้นวันพรุ่งนี้ ด้วย ราคาปัจจัยพื้นฐาน และ ราคาสินทรัพย์อื่นๆ ที่มีผลกับราคาหุ้นที่เราอยากจะทำนายจริงๆ

แล้วถ้าโมเดลที่มันซับซ้อนกว่า linear regression ล่ะ? มันก็แค่เพิ่มความละเอียดใน ค่า x ที่จะไปทำนาย y นั่นแหละครับ ถ้าเป็น ืnural มันก็จะมีการปรับดาต้าไปมาๆ เพื่อหาความสัมพันธ์ที่จำลองมาจากนิวรอนในสมองมนุษย์เรา ก่อนจะถึงขั้นตัดสินใจเท่านั้น
ถ้าคุณว่าพวกนี้มันไม่มีตัวแปรเวลา มาเกี่ยวข้องเลยนี่ถ้าเป็น long short-term memory (LSTM) มันก็จะมี gate หลายๆ แบบไว้บอกความสัมพันธ์ของดาต้าว่า ควรจำของเก่าแค่ไหน ควรจำของใหม่แค่ไหน พูดง่ายๆมันก็ตามชื่ออะครับว่ามัน long term หรือ short term memory แค่ไหนอย่างไร ของดาต้านั้นๆไว้ ถ้าเป็นดาต้าภาษา มันก็จะบอกได้ว่า ควรจะจำประโยคก่อนหน้าที่ว่า เพราะฉันหิวข้าว ……… แค่ไหน ก่อนจะทำนายประโยคต่อจากคำว่า ดังนั้นฉันจะไป XXXX เป็นต้น แต่ดาต้าในการลงทุนของพวกเราเนี่ย ดาต้าหุ้นเนี่ยนะครับ มันสื่อง่ายๆขนาดนั้นเลยเหรอ ก็ “ไม่ใช่” ครับ และนี่ทำให้การหาโมเดลที่มีการจำ/ลืมข้อมูลในอดีตพวกนี้อาจจะใช้งานกับข้อมูลหุ้นไม่ได้เพราะถ้าดาต้าไม่ดีมันก็ไม่มีอะไรให้จำ!!!
เอาเถอะลองเราลองเปลี่ยนปัญหาดูบ้าง สมมุติว่าเราไม่อยากทำนายค่าราคาปิดแล้ว
ลองมาเปลี่ยนเป็นปัญหา Classification กันบ้าง
สมมุติสิ่งที่เราต้องการไม่ใช่การทำนายว่า ราคาหุ้นนั้นๆวันพรุ่งนี้จะเพิ่มขึ้นหรือลดลงแค่ไหนแล้ว แต่จะเป็นสนใจแค่วันพรุ่งนี้หุ้นมันจะขึ้นหรือลง
เราลองมาดู logistic regression เราอาจจะคุ้นเคยว่า มันก็เอาดาต้าไปเข้าฟังก์ชั่น Sigmoid แบบนี้

แต่ถ้าเราพล๊อตตารางการตัดสินใจ (decision boundary)ดู มันก็เหมือนๆ เดิมครับ เราก็พยายามลากเส้นหนึ่งเพื่อการแบ่งข้อมูลออกจากการว่ามันจะขึ้นหรือลง และแน่นอน มันก็สามารถทำคำอธิบายให้มากกว่าเป็นเส้นตรงเหมือน linear regression ก็ได้

ลองเป็น support vector vachine ดูล่ะ แน่นอนครับเราจะได้ โมเดลในการตัดสินใจที่ซับซ้อนขึ้น หน้ากระดาน decision boundary มันก็จะเปลี่ยนเป็น hyperplane และพยายามสร้างจุดตัดสินใจด้วยการ maximum margin แทน

หรือจะเป็น unsupervised อย่าง K-nearest neighbors (KNN) มันก็แค่ดูว่าดาต้าของเราอยู่ตรงไหน อยู่ใกล้ดาต้าคลาสไหนมากกว่ากัน เป็นจำนวน n ตัว ถ้า x ที่เราใช้ในการทำนาย class ว่าหุ้นจะขึ้นหรือลงมันสื่อมาก มันก็เป็นไปได้ที่โมเดลง่ายๆ ก็จะทำผลดีมาก เช่น ฟีเจอร์ที่เราหามา มาตั้ง decision boundary ดูแล้ว ฟีเจอร์ที่เราจะนำมาทำนายวันที่หุ้นพรุ่งนี้จะตกจริงๆ ดันไปตกอยู่ใกล้ ฟีเจอร์ ที่เป็นคลาสที่บอกว่าหุ้นจะตกมากกว่ามันก็ทำได้ครับ แต่คำถามคือดาต้าเรามันสื่อขนาดนั้นหรือเปล่า

โมเดลทุกตัวที่ผมยกมา ผมไม่ได้จะบอกว่ามันไม่ดีหรอกนะครับ มันดีมากแหละ และผมสนับสนุนให้เราเรียนรู้อย่างน้อยก็กว้างๆในหลายๆโมเดลก่อนครับ เราก็จะทราบว่าโมเดลมันก็แค่วิธีการตัดสินใจ based on ดาต้าที่ต่างกันเท่านั้นเอง ถ้าเรารู้กว้างๆแล้วว่าทำงานยังไง เหมาะกับดาต้าแบบไหน เราก็จะสามาเลือกใช้โมเดลให้เหมาะตามดาต้ารูปแบบนั้นๆ
แต่ถ้าถามว่ามันสำคัญมากไหม ผมต้องบอกเลยว่า ไม่ ไม่ครับ มันไม่ได้สำคัญขนาดนั้นเลย
ปัญหาไม่ได้อยู่ที่ว่าคุณจะใช้โมเดลอะไร ปัญหามันอยู่ที่ดาต้าคุณมันมีคุณภาพพอไหม มันสื่อไหม
จุดสำคัญที่สุดที่ทำให้การทำนายอนาคตของหุ้นมันยากกว่า การทำนาย หุ้นวันพรุ่งนี้ แต่แน่นอนว่าผมไม่ได้ใช้ technical analysis แต่ก็นั่นแหละครับ มันก็เป็นความพยายามของเด็กหนุ่มคนหนึงในเวลานั้น ที่จะหา feature ที่จะพาเราออกจาก decision boundary ที่แสนจะ random
ดังนั้นผมอยากให้เราสนใจกับโมเดลให้น้อยลง (แต่ก็ต้องรู้นะครับว่ามันทำงานยังไง) แต่เพิ่มความสนใจกับคุณภาพของดาต้าที่เราเอามาใช้เป็นฟีเจอร์ด้วย
หลักๆ ก็ต้องทำสองอย่าง คือ
- ดาต้าที่คุณนำมาเป็นฟีเจอร์มีคุณภาพจริงๆหรือเปล่า? feature creation (ผมในวัยรุ่นเคยพยายามทำ)
- ถ้าดาต้าไม่มีคุณภาพคุณทำให้มันมีคุณภาพได้หรือเปล่า? feature engineering (หัวข้อวิจัยของผมในตอนนี้)
สองข้อนี้สำคัญกว่าการเรียนรู้โมเดลที่ลึกๆลงไปเยอะครับ ดังคำกล่าวที่ว่า 80-90% ของการทำงานกับดาต้าไม่ใช่สร้างโมเดล แต่เป็นการจัดการกับข้อมูล ผมเห็นด้วยเต็ม 100% ครับ และเราต้องแยกระหว่าง การเพิ่มดาต้าเข้ามาเป็น feature เพื่อให้เราหลีกหนีจาก decision boundary ที่โคตรจะ random ไม่เหมือน decision boundary ทั่วๆไปที่จะทำให้เราเลือกโมเดลได้ง่ายๆ
เราลองมาดู sample data จากข้อมูลลงทุนจริงๆบ้างครับ
โดยผมจะพล๊อต sample feature 2 ตัว มันก็แค่ฟีเจอร์ทั่วๆไปที่เราชอบใช้ๆกัน โดยแบ่งแยกสีตาม คลาส น้ำเงินหุ้นขึ้น แดงหุ้นลง เขียวราไม่เปลี่ยนแปลง โดยเราจะลองทำการตัดสินใจกับ โมเดล Machine Learning ซักตัวหนึงมาหาสมการในการแยกสามคลาสนี้ออกจากกัน

ลองใช้ KNN
ใช้โมเดล KNN ที่ n = 10ตัวมาช่วยเราตัดสินใจในแยกว่าหุ้นวันพรุ่งนี้มันจะขึ้นหรือลง!!!

ด้วยความที่ดาต้ามันแรนด้อมมากๆ เราจึงได้ accuracy ที่ 60.606% ซึ่งมันต่ำในการทำนายทั่วไป แต่สูงมากๆในการทำนายหุ้น มันเหมือนจะดี แต่มีปัญหาอยู่มากมาย ต้องอย่าลืมว่านี่เป็นแค่ข้อมูลสอนไม่ใช่ข้อมูลทดสอบ เมื่อเรานำมาไปใช้กับข้อมูลทดสอบจะพบว่า accuracy ของัมนอยู่ที่ 48.43% ซึ่งนับว่าต่ำมาก
ให้เราจำไว้ด้วยนะครับว่าต่ำของการทำนาย random variable แบบนี้คือการเข้าใกล้ 50% หรือการเดานั่นเองครับ ถ้ามันต่ำแบบมีนัยยะเช่น ทำนายได้ accuracy 32% นี่แปลได้ว่าดาต้าเราอาจจะออกจาก random แล้ว(ต้องเทสจำนวนครั้งมากพอจะไม่ให้เกิด flase discovery ด้วย) เราก็ต้องดีใจระดับหนึงครับแต่ก็นั้นแหละครับ กรณีนี้มันแรนด้อมตั้งแต่ดาต้าแล้วครับผลจึง ~50%
ลองดูดาต้าทั่วๆไปครับ

จากรูปเป็น decision boundary ของการแยกพืชพันธุ์ต่างๆ จะเห็นว่าฟีเจอร์แต่ละตัวมันจะมี Overlap กันบ้างแต่ก็จะเห็นว่ามันมีการความชัดเจนอยู่ในระดับที่สูง ยิ่งข้อมูลี่เป็นฟีเจอร์แยกออกห่างจากกัน ก็มีโอกาสที่พืชจะเป็นเมล็ดพันธ์หนึงๆมากขึ้นเรื่อยๆ การตัดสินใจเลยดูไม่วุ่นวายนัก การใช้โมเดลตามทฤษฎี มันเลยได้ผลลัพธ์ที่ดีไม่เหมือนกับดาต้าหุ้น
ดาต้าสำคัญที่สุด
ดาต้าเป็นสิ่งที่สำคัญที่สุดในการสร้างโมเดลทำนายครับ เรามีโมเดล ไม่ว่าจะทางสถติเหรือ machine learning อะไรพวกนี้เยอะแล้วครับ ทฤษฎีมันก็คือทฤษฎีครับ ผมไม่ได้บอกว่าทฤษฎีใช้ไม่ได้นะครับ มันใช้ได้แน่นอน แต่คุณทำให้ดาต้าของคุณ เหมาะกับการใช้ทฤษฎีที่ว่านั่นหรือเปล่า ถ้าไม่!!! คุณจะใช้ไปทำไมครับ!!!! (อย่างดาต้าที่ผมยกมาเป็นตัวอย่าง คุณจะเอา deep learning มามันก็เท่านั้น!!!)

ในบทความหน้า ผมจะผลการทดลองจากแลปของเราเองมาฝากกันครับ ผมจะทดลองให้ดูเลยว่า ผมใช้ดาต้าตัวเดียวกัน แค่ผ่าน feature engineering อย่างเดียวมันก็ทำให้ผลลัพธ์มันต่างกันราวฟ้ากับเหวแล้ว โดยที่ไม่ได้ใช้ feature อื่นๆเพิ่มจากเดิมเลย ผมแค่ทำดาต้าให้มันสื่อขึ้นเท่านั้น และ ผมจะไม่ใช้ feature engineering แบบตามตำราทั่วๆไปครับ ไม่ใช่แค่มา scaling box-com transform อะไรนั้นมันธรรมดาไปครับ มันช่วยไม่ได้นักหรอก แต่ผมจะยืนยันว่าไม่ใช่ทฤษฎีที่ทำงานไม่ได้ตามโลกแห่งการลงทุน แต่เป็นเราต่างหากที่ต้องเลือกใช้มันให้ถูกต้องครับ นั่นแหละครับมันเป็นสิ่งหนึงที่ทำให้โลกลงทุนมันสนุก เพราะทฤษฎีมันไม่ได้ง่ายตามตำราหนังสือ machine learning ทั่วๆไป และแนวหน้าของการวิจัยมันก็ยังคงต้องหา anomaly ของระบบการเงินเพื่อหาค่ากำไรส่วนต่างจากตลาดอยู่ตลอดเวลา(alpha) ดังนั้นมันจึงพัฒนาตลอดเวลานั่นเอง

ในรูปบนมันก็อีกตัวอย่างหนึงครับ ถ้าเราจะทำงานที่ซับซ้อนมากๆมันก็เหมาะสมแหละครับที่เราจะเอาโมเดลซับซ้อนๆมารับมือกับมัน แต่อย่าลืมว่าของเรามันคือ random problem มันถ้า feature ไม่ดีมันก็เกินกว่าการซับซ้อน คือมันไม่มีความสัมพันธุ์กันด้วยซ้ำ
หวังว่าบทความนี้ของผมจะช่วยดึงผู้อ่านที่กำลังมุ่งมั่นอย่างมากกับกับยึดติดกับ โมเดล ML ที่ต้องยาก ต้องซับซ้อนให้มากๆ กลับมาสนใจสิ่งที่สำคัญยิ่งกว่านั้น ก็คือ ข้อมูลนั่นเองครับ
ปล. ถึงแม้การสร้างโมเดลทำนายมันจะสำคัญมากก็จริง แต่สิ่งที่สำคัญที่สุดจริงๆไม่ใช่การทำนายนะครับ แต่เป็นการจัดการพอร์ต ซึ่งยังไม่ใช่เวลาที่เราจะมาพูดถึง ณ ตอนนี้