Deep Coach: Create a Better Trader with AI



มีโอกาสได้ทำโปรเจคเรื่อง Deep Learning ที่เกี่ยวข้องกับการเทรดโปรเจคหนึ่ง ชื่อ Deep Coach งานนี้เริ่มต้นจากการผมมีไอเดียจะเอา AI มาช่วยฝึกการเทรดและวิเคราะห์ผลการเทรดของเทรดเดอร์ ลองทำ prototype ตัวระบบ และมีโอกาสได้ไปนำเสนอ ทำให้ได้ร่วมงานกับ บริษัท private fund ที่สิงค์โปรแห่งหนึ่งซึ่งเขามี professional trader เทรดประจำให้ที่โต๊ะเทรดหลายคน ตรงนี้เขาอยากได้ระบบไปช่วย

ข้อดีโครงการนี้ทำให้ผมมีโอกาสเข้าถึง Data ข้อมูลการเทรดและข้อมูลสินค้าเช่น ทองคำ ค่าเงิน ระดับนาทีจำนวนหลายแสนบรรทัดที่สามารถนำมาใช้ในการเทรนและทดสอบตัว AI ในการพัฒนาระบบ มีรายละเอียดหลายประเด็นที่เปิดเผยไม่ได้เพราะติดสัญญา แต่วันนี้จะมาแชร์ไอเดีย พื้นฐาน เรื่องแนวคิดของการพัฒนาระบบเทรดด้วย AI กัน

AI & Trader

สิ่งแรกเริ่มที่มีโอกาสได้ทำ คือการศึกษา professional trader แน่นอนว่าบริษัทออกเงินทุนให้เทรดเดอร์ ทำการเทรด แล้วแบ่งผลตอบแทนกัน แต่ Trader ย่อมไม่เปิดเผย รายละเอียดวิธีการเทรด ไม่ได้บอกว่าซื้อขายตรงไหนอย่างไร แต่ AI ก็สามารถเรียนรู้จากเทรดเดอร์ได้ผ่านการ วิเคราะห์ Trading Record

เราทำ Trading Record ของเทรดเดอร์ประเภท active trader จำนวน 5000 รายการจากการเทรด 3 ปี ร่วมกับ Market Data ในระดับนาที และข้อมูลประกอบอื่นๆ มาทำการเทรน Machine learning ด้วยเทคนิค Multi-Layer Perceptron Neural Network ที่รองรับปริมาณข้อมูลจำนวนมาก และมีโมเดลการประมวลผลข้อมูลที่ซับซ้อน และไม่เป็นเส้นตรง(ผ่าน stochastic gradient descent) ทำให้เราสามารถจำลอง กระบวนการตัดสินใจซื้อขายของเทรดเดอร์ ออกมา โปรเจคนี้เลือกใช้ Learning Algorithm ที่เป็น Neural Network เพราะ Neural Network นั้นจำลองหลักการทำงานของสมองมนุษย์ การเรียนรู้ของ Machine อารมณ์คล้ายกับการนั่งเรียนรู้การเทรด จากเทรดเดอร์อาชีพ

ภาพตัวอย่างโครงสร้างของ MLP

Neural Network

Neural Network หรือ Artificial Neural Network คือโครงข่ายประสาทเทียมที่จำลองการทำงานของสมองมนุษย์ ซึ่งสมองคนเรามีระบบโครงข่ายประสาทที่เชื่อมโยง neurons เซลล์ประสาทหน่วยประมวลผลขนาดเล็กจำนวนมากหลายพันล้านเซลล์ที่ทำงาน เชื่อมประสานและสื่อสารกันผ่าน synapses (electric signals)

ภาพโครงสร้างของ neuron ของมนุษย์

จากโครงสร้างจะพบ Neuron ทำการรับ input signal (message) ผ่าน dendrites และ Cell Body ทำการสร้าง electrical pulse เพื่อส่งต่อ output ผ่าน Axon terminal ไปยัง เซลล์ประสาท(Neuron ) ต่อไป ซึ่งแนวคิดเบื้องต้นนี้ มีการจำลองมาใช้ในการสร้าง Artificial Neural Network สำหรับการเรียนรู้ของเครื่อง ดังภาพด้านล่าง

จากภาพองค์ประกอบสำคัญ หลักๆได้แก่

1. Input Layer:

> ส่วนรับข้อมูลเริ่มต้นในการประมวลผล

2. Hidden Layers:

> ชั้นข้อมูลระหว่าง input and output layer ที่ช่วย Neural Network เรียนรู้ รูปแบบ พฤติกรรมความสัมพันธ์ของข้อมูล ผ่านการประมวลผลทางคณิตศาสตร์

3. Output Layer:

> ชั้นการแปลงข้อมูลที่ผ่านการประมวลผล สู่ผลลัพธ์สุดท้าย

4. Weight

> การให้น้ำหนักของข้อมูลที่ส่งเข้ามาใน node โดยมีเริ่มต้นจะใช้ค่า Random จากนั้นทำการคำนวณแบบ iteration เพื่อปรับค่าความถูกต้อง ผ่านการปรับปรุงค่า weight ในการคำนวณรอบต่อไปเพื่อให้มันได้ output จากการคำนวณได้ error น้อยที่สุด กระบวนการปรับปรุง weight มีค่าพารามิเตอร์ในการปรับตั้งสำหรับการคำนวณที่เกี่ยวข้อง เช่น Learning rate และ Momentum การปรับ 2 ค่านี้มีผลต่อการ training model อย่างมากโดยเฉพาะเรื่อง ความ sensitive ต่อข้อมูล

5. Bias

> ค่าความสำคัญที่เข้ามาช่วยปรับค่าจากการคำนวณด้วย activation function บน Neuron เพื่อให้ได้ผลลัพธ์ที่ดีขึ้น

ภาพตัวอย่าง Activation function ที่นิยมใช้ใน Neural Network

6. Activation function

> ฟังก์ชั่นแปลงค่า Summation และ Bias ใน hidden layer ให้กลายเป็นตัวเลขผลลัพธ์สำหรับ Output Layer

ภาพอธิบายการทำงาน Single-layer Perceptron Network

Buliding Model

1. Data

งานด้าน Machine Learning สิ่งสำคัญที่สุด และกระบวนการใช้เวลามากในการดำเนินการ เป็นเรื่องของการเตรียมข้อมูล โดยเฉพาะกรณีข้อมูลจำนวนมาก และมีโครงสร้างความซับซ้อนของ Feature ที่นำมาใช้ในการสอนในกระบวนการ Training สำหรับ Neural Network

การวิจัย นี้ใช้ข้อมูล 3 กลุ่มหลัก กลุ่มแรกเป็น Market Data เป็นข้อมูลราคา ปริมาณการซื้อขาย ที่เกี่ยวข้องกับสินค้า ที่เทรดเดอร์เทรด ระดับ นาที นอกจากนี้ยังรวม ถึงข้อมูลที่คำนวณเพิ่ม ใช้เป็นตัวบ่งชี้ภาวะพฤติกรรมของตลาด เช่นข้อมูลประเภท Volatility(X3,X4) , Movement(X5,X6,X7) , Momentum(X8), Market Anomaly(X9,X10) และอื่นๆที่เกิด

กลุ่มที่สอง เป็น ข้อมูลเกี่ยวกับ Sentimental Data(X11) ข้อมูลเกี่ยวข้องกับ ภาวะตลาด ดังทราบข้อมูลราคา เป็น Time series data ที่มีความเป็น non stationary ยิ่งภาวะที่เกิดความไม่ปกติ โอกาสอิทธิผลจาก random walk ที่เกิดในตลาด ย่อมมีผลต่อการตัดสินใจของเทรดเดอร์

กลุ่มที่สาม เป็น Trading Record (y1,y2,y3,y4) ข้อมูลผลการเทรดของ เทรดเดอร์ ซึ่งมีการจำแนกผลการเทรด ตาม performance ของการเทรด และ ชนิดของการเทรด โดยนำไปผ่านกระบวนการปรุงแต่งข้อมูลจนกลายเป็น Yn ก่อนนำไปใช้ฝึกสอน Neural Network ในการวิจัยเรามีข้อมูลการเทรดของเทรดเดอร์มากพอสมควร ครอบคลุมระยะเวลา 3 ปี ในทุกสภาวะตลาดต่างๆ ข้อมูล Trading Record นี้ใช้เป็นตัวแบบในการเรียนรู้ของ Neural Network

** ไม่ขอเปิดเผย รายละเอียดเชิงลึกการใช้ข้อมูลสำหรับการ Training Model

ภาพตัวอย่างข้อมูลจาก Trading Record

2. Training Network

ทำการออกแบบ Neural Network ให้เหมาะสมกับโครงสร้างของข้อมูล การปรับปรุง weight ใน MLP นี้ผมใช้ Back propagation algorithm ซึ่งเป็นกระบวนการปรับ adjust ค่า weight ด้วยการส่ง error term ย้อนกลับจาก output layer ไปทีละ layer ที่ใกล้เคียง เพื่อใช้ในการ optimize ค่า wight สำหรับการคำนวณรอบต่อไป หรือเรียกว่า backward propagation of errors ซึ่งจะปรับปรุงค่าผลลัพธ์ของการคำนวณให้ดียิ่งขึ้น ตรงนี้อาศัย Stochastic Gradient Descent Algorithm ในการประมวลผล

Neural Network มีข้อเด่นด้านการรองรับโครงสร้างข้อมูลที่ซับซ้อน โดยเฉพาะข้อมูลที่มีความสำคัญใกล้กัน ยากการทำ Feature extraction ในการทดลองนี้ใช้เทคนิคการทำ Grid Search เพื่อหารูปแบบ Network topology ซึ่งเหมาะกับ Data Set ที่นำมาใช้ฝึก โดยสุดท้ายเลือก Neural Network มีจำนวน Input Layer = 11 , 3 hidden layer แต่ละ layer มี 8 neurons และ Output Layer จะมี 3 Output values ดังภาพ

เลือกใช้ Hyperbolic Tangent (tanh) เป็น Activation function ส่วนการทำ Model Optimizer ใช้ Adaptive Moment Estimation (Adam) ใช้ loss function เป็น Cross-Entropy loss function

เริ่มกระบวนการ Model Compilation ทำการประมวลผลข้อมูลเพื่อสร้างโมเดล

ตัวอย่างการนำ Model ไปทดสอบ กับ Testing Data เพื่อประเมินผล และตรวจสอบค่า weight

การเทรน Neural Network มีข้อต้องตระหนักคือเรื่องการ Over fitting ของโมเดลทำให้กระบวนการปรับตั้งค่า learning rate และพารามิเตอร์อื่นๆจำเป็นต้องมีการทำอย่างละเอียดเพื่อให้ได้ผลลัพธ์ที่เหมาะสม

3. Model Metrics

ขั้นตอนการประเมิน Neural Network โมเดลด้วย k-fold cross validation โดยกำหนดค่า K = 10 ขั้นตอนนี้เป็นการคำนวณที่ใช้เวลาพอสมควร จากนั้นนำผลที่ได้มาหาค่า mean และ standard deviation ของ model accuracy ที่ได้จากการเทรน NN ด้วย DataSet ที่เตรียม

ค่าเฉลี่ยที่ได้จากการ Training Model อยู่ประมาณ 0.80% ถือว่าใช้งานได้ AI ที่ฝึกทำงานได้ดีจากข้อมูลตั้งต้น ซึ่งพร้อมจะไปทดสอบขั้นต่อไป โดยแบ่งข้อมูลปี 2017 ใช้สำหรับ Testing Model เมื่อเทียบกับผลการเทรดจาก Trader

เนื่องจากเป็นการจำแนกประเภท multi-class classification ทำการประเมินผลลัพธ์ของการจำแนก ที่ได้กับ Testing Data ที่แยกไว้ โดยใช้ Confusion Matrix

ผลที่ได้ถือว่า OK ตรงการเทรนโมเดลนี้ ผมเลือกใช้ softmax เป็น activation function สำหรับ multi-class classification

ทดลองพอร์ตค่าจาก loss function

ทดสอบการทำงานของ AI

จากกระบวนการข้างต้น เราสร้าง AI จากการเรียนรู้ การตัดสินใจซื้อขาย จาก Trading Record ของ Professional Trader ซึ่งการสร้างโมเดลนี้ คล้ายกับการถ่ายแนวทางการเทรดและประสบการณ์เทรด ของเทรดเดอร์ มายัง AI ต่างจาก Robot Trading พวกที่มีการ Fix หรือกำหนด algorithm การเทรดตายตัวตามเงื่อนไข ปัญญาประดิษฐ์ มีความหยืดหยุ่นและมีความสามารถในการตัดสินใจ ตามภาวะพฤติกรรมของตลาด มากกว่า ยิ่ง Data ที่นำมาเทรน มีความสมบูรณ์มากเท่าไหร่ ความสามารถของ AI ก็ดีขึ้นตาม

ภาพผลการทดสอบตัว AI กับการเทรดในตลาดจริง เทียบกับ ผลการเทรดของ Trader ในสินค้าเดียวกัน ช่วงเวลาเดียวกัน จะเห็นว่า AI ผลงานทั้งสองใกล้เคียงกัน ผลการเทรดออกมาเป็นบวก มีกำไร

ตัวอย่างหน้าตา Dashboard ของ deep coach

เป้าหมายหลักของโปรเจคนี้ ไม่ได้เน้นการพัฒนา AI มาเพื่อการเทรด ทำกำไร แต่ใช้เป็นตัววัดประสิทธิภาพของ Professional Trader โดยเปรียบเหมือนกับ เราสร้าง Baseline ค่าปกติการเทรดของเทรดเดอร์ แต่ละคนเอาไว้ เพื่อใช้ตัวบ่งชี้ความไม่ปกติ หรือแสดงการพัฒนา Performance การเทรด ตรงนี้ เมื่อนำข้อมูลไปประมวลผลต่อ เราจะได้ระบบแนะนำช่วยเสริมประสิทธิภาพและทักษะของเทรดเดอร์ได้ ครับ

ศึกษาเพิ่มเติม

http://neuralnetworksanddeeplearning.com/index.html

https://www.youtube.com/watch?v=6RUwfKNdaV0

http://cs231n.github.io/optimization-2/

http://sebastianraschka.com/Articles/2015_singlelayer_neurons.html

http://www.kdnuggets.com/2016/06/visual-explanation-backpropagation-algorithm-neural-networks.html

https://medium.com/@karpathy/yes-you-should-understand-backprop-e2f06eab496b

Source: Deep Learning on Medium