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

Classification คืออะไร?

Classification หรือการจำแนกประเภท คือปัญหาในรูปแบบ Supervised Learning ที่ผลลัพธ์ (Output) มีลักษณะเป็นค่าจำกัด เช่น "ใช่/ไม่ใช่", "ผ่าน/ไม่ผ่าน", หรือ "กลุ่ม A/B/C"

ตัวอย่างการประยุกต์ใช้

  • การคาดการณ์ว่าลูกค้าจะยกเลิกบริการหรือไม่ (Churn prediction)
  • การจำแนกอีเมลว่าเป็นสแปมหรือไม่
  • การคัดกรองผู้ป่วยว่ามีความเสี่ยงติดโรค หรือไม่ ในช่วงที่มีโรคระบาด

AI Code นี้ทำอะไร และใช้วิธีไหน?

ในบทความนี้เราจะใช้ Machine Learning แบบ Classification โดยเลือกใช้โมเดล Decision Tree ข้อมูลที่ใช้คือ Titanic Dataset ซึ่งบันทึกข้อมูลของผู้โดยสารจากเรือไททานิก ประกอบไปด้วย อายุ เพศ ชั้นโดยสาร ค่าโดยสาร และว่ารอดชีวิตหรือไม่ เป้าหมาย คือ การสร้างโมเดลเพื่อพยากรณ์ว่าผู้โดยสารจะรอดหรือไม่จากข้อมูลเบื้องต้น

ตัวอย่างที่ 1 พยากรณ์การรอดชีวิตของผู้โดยสาร

ขั้นตอนที่ 1 เราจะเรียกใช้ไลบรารี ต่าง ๆ ดังนี้
Image description

  • pandas ใช้จัดการข้อมูลแบบตาราง
  • seaborn ใช้โหลด dataset และช่วยเรื่อง visualization
  • sklearn.tree.DecisionTreeClassifier เป็นโมเดลที่ใช้สำหรับ Classification
  • classification_report, confusion_matrix ใช้วัดประสิทธิภาพของโมเดล
  • train_test_split ใช้แบ่งข้อมูลออกเป็นชุด Train และ Test

ขั้นตอนที่ 2 โหลดข้อมูล Titanic จาก seaborn แต่ละแถว = ผู้โดยสาร 1 คน มีข้อมูล เพศ อายุ ชั้นโดยสาร ราคา และ รอดชีวิตหรือไหม

Image description

ขั้นตอนที่ 3 เลือกเฉพาะคอลัมน์ที่ต้องใช้ และจัดการข้อมูล(NaN) โดยเลือกเฉพาะ 5 คอลัมน์ที่สำคัญ จากนั้นใช้ dropna() = ลบแถวที่มีค่าว่าง เช่น บางคนไม่มีข้อมูลอายุระบุเอาไว้อยู่

Image description

ขั้นตอนที่ 4 ทำการแยกข้อมูล Features กับ Labels โดย

  • X แทนข้อมูลที่ใช้ในการพยากรณ์ (sex, age, fare, pclass)
  • y แทนสิ่งที่เราต้องการทำนาย = survived (0 = ตาย, 1 = รอด)

Image description

ขั้นตอนที่ 5 แปลงข้อมูล Category ให้เป็นตัวเลข ตัวอย่างเช่น sex เป็นข้อมูลประเภทข้อความ เราต้องแปลงเป็นตัวเลขก่อน

หลังแปลงจะได้คอลัมน์ใหม่ชื่อ sex_male

  • ถ้าเป็นเพศชาย = 1
  • ถ้าเป็นเพศหญิง = 0

Image description

ขั้นตอนที่ 6 ทำการแบ่งข้อมูล Train/Test โดย แบ่งข้อมูล 80% สำหรับฝึก (Train), 20% สำหรับทดสอบ (Test) จากนั้นใช้ random_state เพื่อให้ผลลัพธ์เดิมซ้ำได้

Image description

ขั้นตอนที่ 7 สร้างและฝึกโมเดล Decision Tree โดยใช้ Entropy เป็นตัวเลือกแยกข้อมูล จำกัดความลึกของต้นไม้ไม่เกิน 10 ชั้น ในส่วนของ .fit(X_train, y_train) จะเป็นการฝึกโมเดลจากข้อมูล Train

Image description

ขั้นตอนที่ 8 ทำนายผล และประเมินโมเดล โดยใช้โมเดลที่ฝึกแล้ว ทำนายผลจากข้อมูล Test จากนั้น แสดงผล Confusion Matrix และ Classification Report โดย
Confusion Matrix คือ ตารางแสดงจำนวนผลลัพธ์ที่ถูกและผิด
Classification Report คือ การแสดงค่า Precision, Recall, F1-score และ Accuracy

Image description

และนี่คือ ตัวอย่าง Output ที่ได้

Image description

จากตารางจากผลลัพธ์ที่ได้
[[72 15]
[23 33]]

Image description

โดยมีความแม่นยำประมาณ 73% ความแม่นยำโดยรวมพอใช้ได้ แต่ไม่ได้สูงมาก ซึ่งแสดงให้เห็นว่าโมเดลยังพลาดในการแยก "รอด" กับ "ไม่รอด" บ้าง

ตัวอย่างที่ 2 การทำนายการผ่านสอบ

เราจะใช้ Machine Learning แบบ Classification โดยเลือกใช้โมเดล Decision Tree ข้อมูลที่ใช้จะเป็นข้อมูลที่สร้างขึ้น ซึ่งบันทึกข้อมูลของนักเรียนแต่ละคน เช่น อ่านหนังสือกี่ชั่วโมง, เข้าเรียนครบไหม เป้าหมาย คือ การสร้างโมเดลเพื่อพยากรณ์ ว่าถ้าเราเพิ่มนักเรียนเรียนอีก 1 คน อ่านหนักสือ 3 ชั่วโมง และ ไม่ขาดเรียน โมเดลจะทำทายผลลัพธ์อย่างไร

สมมุติว่าเรามีข้อมูลนักเรียนว่า "อ่านหนังสือกี่ชั่วโมง", "เข้าเรียนครบไหม", และผลลัพธ์คือ "สอบผ่านหรือไม่" เราจะโดยใช้ไลบรารี่

  • pandas ใช้จัดการกับข้อมูลในรูปแบบตาราง (DataFrame)
  • DecisionTreeClassifier คืออัลกอริธึม Machine Learning ที่ใช้จำแนกข้อมูลแบบ Decision Tree

Image description

ทำการสร้างข้อมูลจำลองของนักเรียน 5 คน ประกอบไปด้วย

  • study_hours แทนจำนวนชั่วโมงที่อ่านหนังสือ
  • attended_class โดยกำหนดให้ 0 = ไม่เข้าเรียนครบ, 1 = เข้าเรียนครบ
  • passed โดยกำหนดให้ 0 = สอบไม่ผ่าน, 1 = สอบผ่าน

สร้างตารางข้อมูล (DataFrame) จาก dictionary เพื่อให้ใช้งานง่ายขึ้น

  • X คือ Feature (ตัวแปรต้น) ที่ใช้ในการพยากรณ์ผลลัพธ์ มี 2 ตัวแปร เวลาอ่านหนังสือ + การเข้าเรียน
  • y คือ Target (ผลลัพธ์) ที่เราต้องการให้โมเดลเรียนรู้ คือ "สอบผ่านหรือไม่"

Image description

สร้างโมเดล Decision Tree และในส่วนของ .fit(X, y) ให้โมเดลเรียนรู้จากข้อมูล X เพื่อหาความสัมพันธ์กับผลลัพธ์ y

Image description

สร้างข้อมูลใหม่ของนักเรียน 1 คน ที่อ่านหนังสือ 3 ชั่วโมง เข้าเรียนครบ (1)

Image description

model.predict(...) จะทำนายว่าเค้าจะสอบ "ผ่าน (1)" หรือ "ไม่ผ่าน (0)"

อย่างไรก็ตาม ถ้าได้ลองเอาโค้ดนี้ไปใช้ตามจะพบว่าผลลัพที่ได้นั้น “ไม่เหมือนเดิม”? ซึ่งเราจะมาอธิบายเพิ่มเติมกันว่าทำไม

จากโค้ดข้างต้นสิ่งที่เราทำก็ คือ การทำนายข้อมูลใหม่

Image description

ซึ่งหมายความว่านักเรียนที่เราสร้างมานั้น

  • อ่านหนังสือ 3 ชั่วโมง
  • เข้าเรียนครบ (1)

ซึ่งไม่มีอยู่ในชุดข้อมูลฝึก

Image description

จากข้อมูลเดิม มีคนที่เข้าเรียนครบ (attended_class = 1) แต่ไม่มีใครที่เข้าเรียนครบและอ่านแค่ 3 ชั่วโมง

ดังนั้น Decision Tree จะเดาจากจุดที่ใกล้เคียงที่สุด เช่น มันอาจดูว่า คนที่ study_hours = 2, attended_class = 0 → ไม่ผ่าน หรือ study_hours = 4, attended_class = 1 → ผ่านนั่นเอง

สรุปเนื้อหา

โดยบทความนี้ได้แสดงตัวอย่าง Classification พื้นฐานใน AI ที่ใช้ในการจำแนกข้อมูลออกเป็นกลุ่มๆ เราได้ทดลองใช้ Decision Tree เป็นหลักเพื่อสร้างโมเดลจำแนกผู้รอดชีวิตจาก Titanic dataset และ ยังสร้างโมเดลทำนายผลการสอบของนักเรียนจากชั่วโมงการอ่านหนังสือและการเข้าเรียน เราสามารถทดลองปรับพารามิเตอร์ของโมเดล หรือลองใช้ข้อมูลจากโลกจริงอื่น ๆ เช่น ข้อมูลลูกค้า หรือข้อมูลสุขภาพ เพื่อทำนายพฤติกรรมและแนวโน้มต่าง ๆ ได้อีกด้วย สามารถลองนำโค้ดไปใช้ได้เลยครับ

แหล่งอ้างอิง
ธเนศวร, ผศ.ดร. เก็จแก้ว. (ม.ป.ป.). Classification model. Google Colaboratory. สืบค้นจาก https://colab.research.google.com/drive/1BcbCbMcYxW8u6mmcAQTvsEb8Cq1RGVDE?usp=sharing