[Data Scientist Model EP.07] Decision Tree โมเดลต้นไม้ กับความเรื่องมากในการตัดสินใจ!!! Part1
List ของตอนที่แล้ว (Data Science Model List)
เคยคิดบ้างไหมว่าบางทีเราก็เป็นคนเรื่องมาก
เช่น นาย A เวลาที่เขาจะไปเที่ยวสักครั้งหนึ่ง ต้องดูว่าที่พักสบายไหม? วันเวลาที่ไปมีฝนตกหรือไม่? ค่าใช้จ่ายเท่าไหร่? หรือแม้กระทั่งว่าเพื่อนสนิทของเราไปด้วยหรือไม่? และอื่นๆอีกมากมาย…
และในชีวิตจริงนั้น ยังมีการตัดสินใจอันซับซ้อนอีกมากมาย ไม่ว่าจะเป็นการตัดสินใจในเรื่องเล็กๆอย่าง วันนี้จะกินอะไรเป็นข้าวเย็น หรือแม้กระทั่งเรื่องใหญ่ๆอย่างการวางแผนกลยุทธ์ของธุรกิจในอีก 5 ปีข้างหน้า
ซึ่งในศาสตร์ของ Machine Learning เราสามารถสร้างโมเดลในการตัดสินใจในเรื่องต่างๆ(แน่นอนว่ารวมทั้งการตัดสินใจไปเที่ยวของนาย A)ได้เช่นกัน ซึ่งโมเดลนี้มีชื่อว่า Decision Tree หรือ โมเดลต้นไม้การตัดสินใจ นั่นเอง
Decision Tree Concept
Decision Tree คือโมเดลที่เลียนแบบการตัดสินใจแบบมนุษย์ โดยคำว่า Tree นั้นหมายถึงลักษณะผลลัพธ์ที่ได้ของ Decision Tree จะคล้ายกับรูปต้นไม้ที่แบ่งปัจจัยของการตัดสินใจ ดั่งกรณีของการตัดสินใจไปเที่ยวของนาย A เลย
และส่วนประกอบต่างๆในกราฟของ Decision Tree Model เองก็มีชื่อเรียก (Terminology) ด้วย ดังนั้นเราจึงต้องมาทำความรู้จักกับชื่อเรียกของมันก่อน เพราะหลังจากนี้ผมจะใช้คำเหล่านี้แทนครับ (และผมขอใช้คำทับศัพท์เป็นภาษาอังกฤษเลยนะครับ)
Node: มันคือจุดที่เกิดการตัดสินใจขึ้น ซึ่งก็คือกล่องสี่เหลี่ยมทั้งหมด
Parent node, Child node: Parent node ก็คือ node ที่อยู่ด้านบนซึ่งจะสามารถแยกออกมาได้อีก 2 child nodes ซึ่ง Child node ก็คือผลลัพธ์ที่ได้จาก Parent node นั่นเอง
Leaf: หมายถึง node ตัวสุดท้ายที่ไม่สามารถแยกกลุ่มตัวอย่างได้อีกหรือเป็นจุดสิ้นสุดของการตัดสินใจ ซึ่งก็คือกล่องสีเขียวทั้งหมด
และลักษณะที่สำคัญอีกอย่างของ Decision Tree คือ กฏ (Rule) โดยทุก node จะต้องมี Rule ในการจำแนก child node ว่ากลุ่มตัวอย่างจะถูกไปที่ node ใด โดย Rule ที่ตั้งมาจาก Decision Tree จะแยกได้เพียง 2 กลุ่มเท่านั้น
ข้อดีอีกอย่างหนึ่งคือ Decision Tree นั้นยังสามารถสร้างตัวแปรได้ทั้งสองแบบ ซึ่งได้แก่
- Continuous Variable เราเรียกมันว่า Regression Tree เช่น คำถามที่ว่า ต้องใช้ค่าใช้จ่ายมากกว่า 5,000 บาทหรือไม่ ? (คำตอบอาจเป็นตัวเลขจำนวนเต็มได้ทุกค่า) โดยมี Objective Function คือ Residual Sum of Squares (RSS) ซึ่งเราเคยศึกษากันแล้วจาก Linear Regression
- Category Variable เราเรียกว่า Classification Tree เช่น คำถามที่ว่าฝนนั้นตกหรือไม่ ? (คำตอบถูกแบ่งออกเพียงแค่ ฝนตก/ฝนไม่ตก) โดยมี Objective Function คือ Entropy/Gini ซึ่งเราจะมาศึกษาค่า Gini ในส่วนถัดไปครับ
Decision Tree Theory
คำถามถัดมาคือ เราจะสร้าง Decision Tree ได้อย่างไร ? และโมเดลรู้ได้อย่างไรว่าควรใช้ตัวแปรใดเป็น node แรก/node ถัดๆไป ?
คำตอบอยู่ในคีย์เวิร์ดที่ชื่อว่า Gini Impurity นั่นเองครับ
Gini Impurity
หมายถึงค่า likelihood ของ false classification เป็นค่าที่โมเดล Decision Tree ใช้ในการตัดสินใจเลือก node และสร้างทางแยก (split) ซึ่งสามารถคำนวณได้ด้วยวิธีการทางคณิตศาสตร์!!!
โดยสูตรของ Gini Impurity คือ
tip✔️: Gini Impurity เป็นเพียงหนึ่งในค่าที่ Decision Tree นิยมใช้ในการตัดสินใจ ยังมีค่าอื่นๆที่นิยมใช้เหมือนกัน เช่น Entropy
ตัวอย่างการคำนวณค่า Gini Impurity
สมมติว่าเราสนใจเพียงแค่ว่า ความสบายของที่พัก มีผลต่อการไปเที่ยวหรือไม่อย่างเดียว โดยเราให้คนอื่นมาช่วยตัดสินใจกับเราด้วย จนได้ตัวอย่างมาทั้งหมด 10 คน เราจะสามารถหาค่า Gini Impurity ได้แล้ว
โดยก่อนอื่นเราต้องนำผลของการตัดสินใจมาหาค่า Gini Impurity ของแต่ละฝั่งเสียก่อน โดยเราจะเริ่มสนใจจากฝั่งของคนที่ตอบว่าที่พักสบาย เท่านั้น
โดยที่
P (ไปเที่ยว) = 2/3 = 0.67
P (ไม่ไปเที่ยว) = 1/3 = 0.33
ดังนั้น
Gini Impurity(ที่พักสบาย) = [ 0.67*(1–0.67) ] + [ 0.33*(1–0.33) ] = 0.4422
และเราก็ต้องคำนวณ Gini Impurity ของคนที่ตอบว่าที่พักไม่สบายด้วย✌️
reminder🗣: P(ไปเที่ยว) ของที่พักสบาย และที่พักไม่สบายไม่เหมือนกันนะครับ เนื่องจากสมการของมันจะมีชื่อเต็มก็คือ P(ไปเที่ยว|ที่พักสบาย) ในกรณีของที่พักสบาย และ P(ไปเที่ยว|ที่พักไม่สบาย) ในกรณีที่ไม่พักสบายนั่นเองครับ
Gini Impurity(ที่พักไม่สบาย) = [ 0.29*(1–0.29) ] + [ 0.71*(1–0.71) ] = 0.4118
และขั้นตอนสุดท้ายของการคำนวณคือการนำคนทั้ง 2 กลุ่มมารวมกัน เราจะได้ค่าที่เรียกว่า Weighted Gini Impurity ซึ่งเท่ากับ (ผมขอย่อชื่อตัวแปรซึ่งคิดว่าทุกคนน่าจะเข้าใจนะครับ🤗)
[ (3/10)*0.4422 ] + [ (7/10)*0.4118) ] = 0.13266 + 0.28826 ≈ 0.42
เมื่อโมเดลของเราหาค่า Gini Impurity ได้ครบทุกตัวแปรแล้ว มันจะเลือก ตัวแปรที่มีค่า Gini Impurity น้อยที่สุด เพราะมันหมายถึงว่าตัวแปรนั้นทำให้ผลของการตัดใจเกิดความผิดพลาดน้อยที่สุด👍
สมมติว่าเราหาค่า Gini Impurity ของทุกตัวแปรได้แล้ว โมเดล Decision Tree ของเราจะเลือกใช้ตัวแปรเรื่อง “ที่พักเป็น node แรก” เนื่องจากมีค่า Gini Impurity ต่ำที่สุดเมื่อเทียบกับตัวแปรอื่นๆ
และ Decision Tree ก็จะคำนวณค่า Gini Impurity ต่อไปเรื่อยๆจนในที่สุดก็จะได้โมเดลต้นไม้ดังรูปด้านบนสุดนั่นเอง
tip✔️: เนื่องจากขั้นตอนในการคำนวณขั้นถัดๆไปของ Decision Tree จะมีความซับซ้อน ดังนั้นถ้าอยากศึกษาเพิ่มเติม ผมแนะนำให้อ่านการ split ของ Decision Tree เชิงลึกได้ที่ลิงค์นี้ ครับ
ในตอนถัดไปจะเป็นการสร้าง Decision Tree ด้วย Python เพื่อที่จะเห็นภาพมากขึ้น แล้วเจอกันในตอนหน้าครับ😃
ถ้าชอบหรือต้องการสอบถามหรือพูดคุยเพิ่มเติม กดไปที่เพจ ดาต้าไส้แห้ง หรือ LinkedIn ข้างล่างเลยจ้า แล้วเรื่องถัดไปจะเป็นเรื่องอะไรก็ขอให้กดติดตามกันไว้ด้วยนะคร้าบ😍