[Data Scientist Model EP.07] Decision Tree โมเดลต้นไม้ กับความเรื่องมากในการตัดสินใจ!!! Part1

Pasith Thanapatpisarn
3 min readMar 13, 2022

--

List ของตอนที่แล้ว (Data Science Model List)

เคยคิดบ้างไหมว่าบางทีเราก็เป็นคนเรื่องมาก

เช่น นาย A เวลาที่เขาจะไปเที่ยวสักครั้งหนึ่ง ต้องดูว่าที่พักสบายไหม? วันเวลาที่ไปมีฝนตกหรือไม่? ค่าใช้จ่ายเท่าไหร่? หรือแม้กระทั่งว่าเพื่อนสนิทของเราไปด้วยหรือไม่? และอื่นๆอีกมากมาย…

ตัวอย่างโมเดลการตัดสินใจไปเที่ยวของนาย A

และในชีวิตจริงนั้น ยังมีการตัดสินใจอันซับซ้อนอีกมากมาย ไม่ว่าจะเป็นการตัดสินใจในเรื่องเล็กๆอย่าง วันนี้จะกินอะไรเป็นข้าวเย็น หรือแม้กระทั่งเรื่องใหญ่ๆอย่างการวางแผนกลยุทธ์ของธุรกิจในอีก 5 ปีข้างหน้า

ซึ่งในศาสตร์ของ Machine Learning เราสามารถสร้างโมเดลในการตัดสินใจในเรื่องต่างๆ(แน่นอนว่ารวมทั้งการตัดสินใจไปเที่ยวของนาย A)ได้เช่นกัน ซึ่งโมเดลนี้มีชื่อว่า Decision Tree หรือ โมเดลต้นไม้การตัดสินใจ นั่นเอง

Decision Tree Concept

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

Decision Tree Example — source

และส่วนประกอบต่างๆในกราฟของ Decision Tree Model เองก็มีชื่อเรียก (Terminology) ด้วย ดังนั้นเราจึงต้องมาทำความรู้จักกับชื่อเรียกของมันก่อน เพราะหลังจากนี้ผมจะใช้คำเหล่านี้แทนครับ (และผมขอใช้คำทับศัพท์เป็นภาษาอังกฤษเลยนะครับ)

Decision Tree 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 นั้นยังสามารถสร้างตัวแปรได้ทั้งสองแบบ ซึ่งได้แก่

  1. Continuous Variable เราเรียกมันว่า Regression Tree เช่น คำถามที่ว่า ต้องใช้ค่าใช้จ่ายมากกว่า 5,000 บาทหรือไม่ ? (คำตอบอาจเป็นตัวเลขจำนวนเต็มได้ทุกค่า) โดยมี Objective Function คือ Residual Sum of Squares (RSS) ซึ่งเราเคยศึกษากันแล้วจาก Linear Regression
  2. 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 ข้างล่างเลยจ้า แล้วเรื่องถัดไปจะเป็นเรื่องอะไรก็ขอให้กดติดตามกันไว้ด้วยนะคร้าบ😍

--

--