Decision Tree in Stock market

Decision Tree หรือ ต้นไม้การตัดสินใจ เป็นอีกหนึ่งอัลกอริทึ่มที่ได้รับความสนใจกันอย่างแพร่หลาย เนื่องจากสามารถเข้าใจ และ มองเห็นภาพได้ง่าย ก่อนจะลงไปในรายละเอียดกัน ขอยกตัวอย่างต้นไม้การตัดสินใจในปัญหาทั่วๆ ไป มาให้ดูกันซักหนึ่งตัวอย่างก่อนนะคะ

ตัวอย่าง Decision Tree

DecisionTree
Decision Tree  สำหรับการพิจารณาให้เงินกู้

จากรูปด้านบนเป็นตัวอย่าง Decision Tree ง่ายๆ ที่ใช้ในการพิจารณา อนุมัติเงินกู้ (Loan) หรือ ไม่อนุมัติ (No Loan) การสร้างต้นไม้ด้านบน ก็จะเริ่มมาจากการวิเคราะห์ข้อมูลการอนุมัติเงินกู้ในอดีตในรูปของตาราง และทำการคำนวณหาจุดตัดข้อมูลที่ดีที่สุด เพื่อนำมาใช้ในการสร้างเงื่อนไข หรือ โหนด (nodes) เพื่อใช้ในการสร้าง Tree การเลือกโหนดก็จะมีการคำนวณค่าทางคณิตศาสตร์โหนดไหน ถ้าทำการเลือกแล้วจะทำหน้าที่ในการแบ่งข้อมูลได้ดีที่สุด ค่าที่ใช้ในการคำนวณ มีหลายแบบ ตัวอย่างเช่น ค่า Information gain เป็นต้น ในบทความนี้จะไม่ของลงรายละเอียดในการคำนวณนะคะ เนื่องจากเป้าหมายของบทความคือ การนำ Decision Tree มาประยุกต์ใช้กับการเทรด จึงอยากจะขอเน้นในด้านการนำมาประยุกต์ใช้แล้วได้ผลลัพธ์เป็นอย่างไรมากกว่าค่ะ

Decision Tree มี 2 ประเภท

ถ้าจะกล่าวถึง Decision Tree  มีคำอยู่ 1 คำ ที่มักจะได้ยินกันอยู่เสมอ คือคำว่า “CART” บางท่านอาจจะนึกว่า เอะมันคืออะไร ใช่รถเข็นในโลตัสมั้ย  ^^ จริงๆ แล้วคำๆ นี้ย่อมาจากคำเต็มที่ว่า  “Classification and Regression Tree” ต่างหากค่ะ เนื่องจาก Decision Tree มีด้วยกัน 2 ประเภทหลักๆ คือ Classification Tree (ต้นไม้สำหรับการจัดกลุ่ม) และ Regression Tree  (อันนี้ถ้าจะแปลตรงตัวเลย ก็คือ ต้นไม้ถดถอย ++’ ซึ่ง ยิ่งทำให้ งง กันเข้าไปใหญ่ ดังนั้นในที่นี้จะขอเรียกว่า ต้นไม้สำหรับการทำนายค่า ก็แล้วกันนะคะ)

*** สำหรับท่านที่ยังไม่เข้าใจความแตกต่างระหว่าง Classification และ  Regression ใน Machine Learning สามารถย้อนกลับไปอ่านบทความนี้ได้ค่ะ

การใช้งาน Machine Learing แบบ Regression และ Classification

CART

ในบทความนี้จะเราจะโฟกัสไปที่ Regression Tree กันก่อนนะคะ เนื่องจากเราต้องการที่จะใช้เจ้าต้นไม้นี้ในการทำนายราคาของหุ้นนั้นเองค่ะ

Regression Tree หรือ ต้นไม้สำหรับทำนายค่า

Regression Tree จะให้ผลลัพธ์เป็นค่าจำนวนจริงของส่ิงที่เราต้องการทำนาย (ถ้าเป็น Classification Tree จะให้ค่า label ของกลุ่มที่ทำนายได้) มาดูกันค่ะ ว่าถ้าเราจะใช้เจ้าต้นไม้ตัวนี้ทำนายค่า จะใช้อย่างไร ดูตัวอย่างข้อมูลกันก่อนค่ะ

regresstionTree
ตัวอย่างการแบ่งข้อมูลของ Regression Tree

จากรูป Feature #1 และ Feature#2 เป็น independent variables หรือ ตัวแปรที่เราจะนำมาใช้ในการทำนาย ส่วนค่าที่เราต้องการทำนายจริง คือ ค่า y ซึ่งก็คือ ราคาหุ้น (ที่เราจะใช้ Feature 1,2 มาช่วยทำนาย) จริงๆ แล้วค่า y จะต้องเป็นแกน Z ค่ะ ลองพยายามมองให้เป็น 3  มิตินะคะ ซึ่งก็จะมีแกนอีกแกน ยื่นเข้าไปเป็นเป็นค่า y นั่นเองค่ะ (ในที่นี้จะขอแสดงให้ดูในรูปแบบ 2 มิติ เพื่อให้เข้าใจง่ายนะคะ แต่ให้นึกไว้นะคะ ว่าแต่ละจุด จะมีค่า y คือ ราคาอยู่ด้วย)

การทำงานก็คือ ทำการสร้าง scatter plot ระหว่าง feature#1 และ  feature#2 ดังรูป ต่อมาก็จะทำหาจุดแบ่งของข้อมูล (เช่น คำนวณค่า Information gain) แล้วทำการแบ่งข้อมูลไปเรื่อยๆ ดังตัวอย่าง ก็คือ จุด Split ที่ 1-4 นั่นเองค่ะ เมื่อได้จุดแบ่งที่ต้องการแล้ว ซึ่งหมายถึง เราได้ทำการสร้างโมเดล Decision tree สำหรับข้อมูลชุดนี้เสร็จแล้วนั่นเองค่ะ

เมื่อได้โมเดลมาแล้ว เราก็สามารถใช้โมเดลนี้ในการทำนายได้ค่ะ เช่น เมื่อเราได้ค่าข้อมูลเข้ามาใหม่ ก็ทำการหาว่า ข้อมูลนั้น ควรจะตกอยู่ในช่องไหนของต้นไม้ (โดยพิจารณาจากค่า Feature#1 และ Feature#2) เมื่อหาได้แล้ว เราจะทำการหาเฉลี่ย ของ  y ในกลุ่มนั้น และ นำมาเป็นผลลัพธ์ที่ได้จากการทำนายนั้นเองค่ะ

มาดูผลการทดลองกับข้อมูลจริงกันหน่อยค่ะ

คิดว่าหลายๆ ท่านที่อ่านบทความนี้อยู่ น่าจะคิดว่าโมเดลง่ายๆ ตัวนี้ ดูแล้วก็ไม่น่าจะดีอะไรมากมายนักใช่มั้ยคะ จริงๆ แล้วตัวผู้เขียนก็คิดแบบนี้เช่นกันค่ะ เนื่องจากวิธีการที่ใช้ บวกกับความซับซ้อนของดาต้าด้วยแล้ว ไม่น่าจะไปได้ไกล 555 แต่เราจะแค่คิดไม่ได้ ต้องทดลองด้วยค่ะ ดังนั้น เรามาลองใช้ Regression tree ทำนายราคาหุ้นกันหน่อยดีกว่าค่ะ

ดูผลกันเลยค่ะ เดี๋ยวจะให้ดูผลการทดลองโดยใช้ Regression Tree ในการทำนายหุ้นโดยการใช้ 6 features เข้ามาช่วยในการทำนายราคาหุ้นในวันถัดไปนะคะ (กราฟเส้นดำ คือ ผลจริง ส่วนสีแดงคือผลท่ีได้จาก Regression tree ค่ะ)

ADVANC-lag1-acc profit

CPALL-lag1-acc profit

CPF-lag1-acc profit

CPN-lag1-acc profit

TMB-lag1-acc profit

เป็นยังไงกันบ้างคะ เจ้าต้นไม้ต้นนี้  555 ที่เห็นๆ คือ DD กระจุยกระจาย และ ที่แน่ๆ Standard deviation มองก็รู้ว่ายับค่ะ ไม่ต้องพูดกันถึง sharpe เลย ถ้าจะให้พูดตรงๆ ก็คือ ความเสถียรของโมเดลยังต่ำมาก ซึ่งถ้าถามตัวแอดมิน ว่าตกใจมั้ยกับผลแบบนี้ ก็ตอบได้เลยค่ะว่า ไม่ตกใจเลย ผลที่ได้ไม่ได้ต่างจากที่คิดไว้ซักเท่าไหร่นะคะ ด้วยธรรมชาติของโมเดล และ ธรรมชาติของข้อมูล ที่ไม่น่าจะทำงานด้วยกันได้ดีซักเท่าไหร่ 🙂  แต่จริงๆ แล้วมันก็มีวิธีการปรับอีกนิดนึงนะคะ ว่าจะแก้ไขผลของเจ้า Decision tree ได้ยังไง? รับประกันว่าผลที่ได้จะแตกต่างอย่างไม่น่าเชื่อเลยล่ะค่ะ แต่ขอยังไม่เฉลยนะคะ ฝากไว้ให้ไปคิดกันต่อก่อนค่ะ

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

13062103_233130583716199_6224283738921716075_n
Enjoy machine learning!

 

 

 

 

 

 

 

 

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s