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

ตัวอย่าง Decision Tree

DecisionTreeDecision 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!