Nonlinear Kernel-Based Data Analysis
บทความก่อนหน้าผมได้แนะนำเรื่องของ SVM ที่ใช้เทคนิค Kernel trick ในการวิเคราะห์ข้อมูลประเภท Nonlinear ไปแล้ว บทความนี้มาลองดูของจริงทำงานจริง ในข้อมูลจริงกันดีบ้าง
โดยผมสาธิตให้ดูการนำ DataSet ของ GOLD มาวิเคราะห์ ด้วย SVM โดยใช้ Dataset ที่มีโครงสร้างข้อมูล หลากหลาย ทั้งหมวด ราคา, ปริมาณซื้อขาย , Market info, OrderBook , Fundamental และ Market Event แต่อันนี้ไม่ขอลงรายละเอียดเบื้องหลังการทำงาน เนื่องจากเป็นงานวิจัย และไม่ได้กล่างกระบวนการทำ Feature Selection เอาให้เห็นภาพคราวๆละกันว่า ผมใช้ Feature หลักแค่ 5 ตัว
ไอเดียของระบบเทรดนี้ ใช้ SVM เป็นตัว Data Analysis เพื่อทำการ กรอง(Filter) ข้อมูลก่อนเข้าไปในระบบ และใช้ประเมินภาวะตลาด >> เพื่อจำแนก การตอบสนอง ด้วย sub system ที่มี Strategies และ Tactic (Risk Management, Trading Plan ) ที่แตกต่างไป ตรงนี้ทำให้ เพิ่มประสิทธิภาพของ Trading system และใช้ในการลด ความเสี่ยง ที่เกิดต่อระบบภาพ
ดังนั้น จะเห็นเราไม่ได้ใช้ Machine Learning ในการคาดเดาตลาด ทิศทางราคา เพราะรู้อยู่แล้วว่า มันไม่มีทางไป คาดเดาอนาคตเหล่านั้นได้แน่นอน แก่นของ Machine Learning ไม่อยู่แค่การ prediction มันใช้ทำอะไรได้มากมาย ถ้าเข้าใจจริงๆ ได้ลองทำเชิงลึกจริงๆ
Data Analysis & Treatment
- การทำ Quant สายนี้ไม่ใช่เรื่องของ model มันเป็นเรื่องของ Data หรือ Big Data ดังนั้นเวลาเกิน 50% หมดไปกับ ข้อมูล ครับ นี้คืองานของ Quantitative Data Analysis ของแท้ที่หนีไม่ได้เลย
- กระบวนการจัดการ การคลีน การย่อย การวิเคราะห์ข้อมูลเบื้องต้น ผมสาธิตไอเดียง่ายๆ ที่ทำให้ พวกเราลองหัดทำ เช่น
> การทำ Exploratory data analysis
> การทำ Descriptive Analysis,
> การวิเคราะห์ Correlation Matrix ,
> การ exploration ข้อมูล รวมถึงการย่อยเช่น PCA และอื่นๆ
เริ่มจากการ Check ค่าเฉพาะของตัวแปรแต่ละตัวก่อนด้วย Univariate Plots
ภาพแรกตัวอย่างการทำ Correlation Matrix เพื่อ scan ข้อมูล ขจัด bias ที่มี และวิเคราะห์ pattern ความสำคัญของ ชุดข้อมูล
รัน Descriptive Analysis ตรวจสอบค่าเบื้องต้น
สุ่ม select ข้อมูลบางส่วน เพื่อดูผล
ทำ 3D plot เพื่อตรวจสอบข้อมูลในการ clean อีกครั้ง
Data Modelling
เนื่องจากโปรเจคนี้เป็นงานวิจัยเฉพาะ ขออนุญาตไม่ลงรายละเอียดมาก ด้านข้อมูล แต่เล่ากระบวนการทำงาน คราวๆให้ฟัง เพื่อเป็นไอเดียแนวทาง ต่อจากตอนแรก เราได้ Validation Data set เรียบร้อยแล้ว ต่อจากนี้จะ เริ่มกระบวนการด้วยงาน Feature Selection
โดยผมใช้ Feature Selection Algorithms ชื่อว่า Filter Methods เอาค่าสถิติ และ domain knowledge มาเป็น Key ในการคัดเลือก Feature จากโครงสร้างข้อมูลทั้งหมดจำนวนหลายสิบฟีเจอร์ที่มีการเก็บบันทึกบน database ขั้นตอนนี้สำคัญมาก เพราะช่วยเรื่องลดความซ้ำซ้อน เพิ่มประสิทธิภาพการเทรน เพิ่มความถูกต้อง รวมถึงแก้ปัญหา over fitting ไปในตัวด้วย
ขั้นตอนต่อไป เราทำส่วนของ การย่อย(decomposition) ตัวแปรที่ไม่สำคัญ และเป็นการลด features redundancy และช่วยบีบอัด feature space ไปในตัวส่วนนี้ผมใช้ Principal Component Analysis (PCA) รายละเอียด อธิบายแล้วใน Link นี้ [PCA]
เมื่อข้อมูลพร้อม ผลจากการทำ PCA ได้ตามที่เราต้องการ เราจะทำการแบ่งข้อมูล สำหรับ Training และ Testing เนื่องจากตอนทำงาน ขนาดของข้อมูลค่อนข้างใหญ่ ดังนั้นจะแบ่งข้อมูล สำหรับ Testing ราว 40% และใช้ Training ตัว model ราว 60%
Build Model
ตัวอย่างนี้ เนื่องจากเราทำการศึกษาเบื้องต้น มาแล้ว ดังนั้น การเลือก Model การประเมิน 10-fold cross validation ในแต่ละ Algorithm จึงไม่ได้ โดย ผมจะใช้ Gaussian kernel บน Support Vector Machine เพื่อทำ multi classification โดยอ่านรายละเอียดได้จาก [ Link ]
แผนกระบวนการแผนงาน
ขั้นตอนต่อจากนี้ Training Model ซึ่งใช้เวลาพอควรเพราะ ต้องทำ กับข้อมูลมากพอควร เพื่อให้ได้ค่าเบื้องต้น ที่ยอมรับได้ พอเสร็จ ก็ลองเอา initial training ไปรัน prediction กับ testing data ที่แบ่งไว้ แล้วประเมิน ผลการทำงาน
ครั้งแรก มันออกมา ไม่ค่อยดีเสมอ
บอกเลยว่า งานหนักของการทำ Machine Learning ในส่วนนี้ไม่ได้อยู่ที่การ Run แต่อยู่ที่การทำ Optimization ซึ่ง ผู้พัฒนาต้องเข้าใจโมเดล และพฤติกรรมข้อมูล ดีเพียงพอ จึงจะสามารถปรับค่า ได้เหมาะสม ไม่ง่าย ไม่ใช้การเขียน code ไม่กี่บรรทัดก็จบ
Optimization
การปรับตั้งค่า Hyper-parameters optimization ผลใช้ Grid Search เพื่อทำการสุ่มประเมินค่า ในการปรับแต่งโมเดล ให้สอดคล้องกับพฤติกรรมข้อมูลกลุ่มทดสอบ(Testing Sample) เป้าหมายเน้นการทำให้ Training Model ไม่ Over fit เกินไป และ optimize ให้ได้ค่าเหมาะกับ Gaussian Kernel จะเริ่มสร้าง param matrix สำหรับการ optimization แบบสุ่มใน Grid Search เพื่อหา Best Param
ขั้นตอนนี้หาเครื่องคอมพิวเตอร์ที่มีหน่วยประมวลผลแรงๆมารัน เพราะถ้า มีการปรับตั้งแบบทดลองค่ามาก ยิ่งใช้การคำนวณและทำงานหนัก โดยในบทความนี้ ผมไม่ได้แสดง รายละเอียดของการปรับตั้งนะครับ เพราะเป็น khowledge เฉพาะในการ custom ตัว Support Vector Classification แต่เบื้องต้น ต้องมีการปรับค่าหลายส่วน เพื่อหาส่วนผสมที่ลงตัว เช่นค่า Probability, Class Weight, Tolerance ซึ่งมากกว่าแค่ค่า C และ Gamma รวมไปถึงเรื่องการทำ multi class ที่ต้องตั้งค่าของ decision function of shape ที่เหมาะสมด้วย
แทนค่า Best Param ที่ได้จาก Grid Search ลงใน SVM แล้วทำการประเมินด้วย Cross validation โดยใช้ ค่า N = 5 จากนั้นประมวลผลเพื่อหาค่า Cross Validation Score สำหรับ Model ที่ยอมรับได้ ( มากกว่า 90%)
Evaluation Model
ประเมินผลตัว best model ที่คิดว่าเหมาะสมความถูกต้องยอมรับได้ และไม่ over fitting เกินไป (ทดสอบจนได้ค่า C และ gamma ที่ลงตัว) จากนั้น ทำ Confusion Matrix และ วิเคราะห์ผลการ Classification ของโมเดล
Confusion Matrix ที่ได้จากการประเมินผลการ Classification
Result ภาพ Outline ของการ classification ข้อมูล non linear data ด้วย Gaussian kernels
รอต่อตอนที่ 3 เราจะมาดูการประกอบภาพของการทำงานในด้านการเทรดกันครับ