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

ในโลกของข้อมูลขนาดใหญ่และการตัดสินใจอย่างรวดเร็ว Machine Learning ได้เข้ามามีบทบาทสำคัญ โดยเฉพาะในด้านการทำนาย เช่น พฤติกรรม การแบ่งประเภท และการวิเคราะห์แนวโน้มของข้อมูล

บทความนี้นำเสนอเทคนิคพื้นฐาน 2 แบบ คือ

Decision Tree

Random Forest

ทั้งสองเทคนิคจัดอยู่ในกลุ่ม Supervised Learning ซึ่งหมายถึงโมเดลที่เรียนรู้จากข้อมูลที่มี
"คำตอบ" อยู่แล้ว (เช่น ข้อมูลลูกค้าที่ซื้อ/ไม่ซื้อ, ผู้ป่วยที่เป็น/ไม่เป็นโรค ฯลฯ)

หลักการของ Decision Tree และ Random Forest

Decision Tree : เป็นโมเดลที่ใช้โครงสร้างแบบต้นไม้ในการตัดสินใจ โดยแบ่งข้อมูลออกเป็นส่วนย่อย ๆ ตามเงื่อนไขต่าง ๆ ที่ลดความไม่แน่นอนให้มากที่สุด สามารถใช้งานได้ทั้ง Classification และ Regression

การเลือกแยกข้อมูลจะใช้เกณฑ์อย่าง Gini Impurity หรือ Entropy เพื่อหาค่าที่ดีที่สุดในการแบ่งข้อมูล

Random Forest : เป็นการรวมโมเดล Decision Tree หลาย ๆ ต้นเข้าด้วยกัน (Ensemble Learning) แล้วใช้การโหวตจากหลายต้นไม้เพื่อลดความเอนเอียง (Bias) และความแปรปรวน (Variance)

จะมีการสุ่มเลือก feature และ subset ของข้อมูล (Bootstrapping) เพื่อฝึกแต่ละต้นไม้ ทำให้ผลลัพธ์โดยรวมมีความเสถียรกว่า

จุดเด่นของ Decision Tree:
เข้าใจง่าย มองภาพการตัดสินใจเป็นขั้น ๆ ได้

ทำงานได้ทั้งข้อมูลจำแนกประเภท (Classification) และตัวเลข (Regression)

จุดเด่นของ Random Forest:
รวมหลาย Decision Tree เข้าด้วยกัน ทำให้ลดการ Overfitting

มีความแม่นยำสูง ใช้งานได้ในระบบจริง

ตัวอย่างการใช้งานจริง

การแพทย์: ใช้ Random Forest เพื่อวิเคราะห์ความเสี่ยงโรคเรื้อรัง เช่น เบาหวาน หรือหัวใจ

การเงิน: ใช้ Decision Tree สำหรับวิเคราะห์เครดิต หรืออนุมัติวงเงินกู้

อีคอมเมิร์ซ: ใช้ Random Forest เพื่อสร้างระบบแนะนำสินค้า หรือวิเคราะห์โอกาสในการซื้อซ้ำ

เกษตรกรรม: ใช้ Decision Tree เพื่อพยากรณ์ผลผลิตจากสภาพแวดล้อมและดิน

การเปรียบเทียบ Decision Tree และ Random Forest

Image description

การเรียกใช้ไลบรารี ที่จำเป็นจาก scikit-learn

load_iris() โหลดชุดข้อมูลดอกไม้ Iris

DecisionTreeClassifier และ RandomForestClassifier ใช้สร้างโมเดล

train_test_split() แบ่งข้อมูล

accuracy_score() ใช้วัดความแม่นยำของโมเดล

Image description

แบ่งข้อมูลออกเป็น 70% สำหรับฝึก และ 30% สำหรับทดสอบ

Image description

สร้าง Decision Tree และ ทำนาย

Image description

สร้าง Random Forest โดยใช้ต้นไม้ 100 ต้น

Image description

แสดงผลลัพธ์ความแม่นยำของทั้งสองโมเดล

Image description

หลังจากทดสอบ ข้อมูล Iris dataset และทำการทดสอบกับชุดข้อมูล X_test พบว่า ทั้งโมเดล Decision Tree และ Random Forest ให้ค่าความแม่นยำ (Accuracy) เท่ากับ 1.0 หรือ 100%
นั่นหมายความว่าโมเดลสามารถทำนายข้อมูลในชุดทดสอบได้ถูกต้องทั้งหมด

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

ขั้นตอนที่ 1: เตรียมข้อมูลตัวอย่าง

Image description

ขั้นตอนที่ 2: แยกข้อมูลคุณลักษณะ (features) และผลลัพธ์ (target)

Image description

ขั้นตอนที่ 3: สร้างโมเดล Random Forest

Image description

ขั้นตอนที่ 4: ทำนายลูกค้าใหม่

Image description

ผลลัพธ์คือโมเดลจะทำนายว่าลูกค้าใหม่นั้นมีแนวโน้มจะซื้อหรือไม่ โดยอ้างอิงจากพฤติกรรมของลูกค้าคนก่อนหน้า (ซึ่งในกรณีโค้ดตัวอย่างนี้ผลลัพธ์การทำนาย คือ ไม่ซื้อ)

สรุป
Decision Tree และ Random Forest เป็นเครื่องมือพื้นฐานที่มีประสิทธิภาพในการวิเคราะห์ข้อมูล และเหมาะสำหรับผู้เริ่มต้นศึกษา Machine Learning เนื่องจากเข้าใจง่ายและใช้งานได้หลากหลาย การเรียนรู้และทดลองด้วยโค้ดจริงจะช่วยให้เข้าใจแนวคิดเบื้องหลังของอัลกอริธึมเหล่านี้ได้ลึกซึ้งยิ่งขึ้น

ในงานจริง การเลือกใช้ระหว่าง Decision Tree หรือ Random Forest ขึ้นอยู่กับวัตถุประสงค์ ความซับซ้อนของข้อมูล และความต้องการในการอธิบายผลลัพธ์ต่อผู้ใช้งาน เช่น:

หากต้องการ "โมเดลที่ตีความง่าย" → ใช้ Decision Tree

หากต้องการ "โมเดลที่แม่นยำสูงกว่า แม้ซับซ้อน" → ใช้ Random Forest

ทุกคนสามารถลองสร้าง ลองทดสอบเล่นๆกันได้นะครับ 👏👏

Reference
https://scikit-learn.org/stable/modules/tree.html
https://scikit-learn.org/stable/modules/ensemble.html#random-forests
https://realpython.com/decision-tree-classifier-python/