DataRockie

Confusion Matrix คืออะไร พร้อมวิธีคำนวณค่าสถิติง่ายๆ

What is confusion matrix

แอดไม่ได้เขียนเรื่องสถิตินานมาก แต่จริงๆเรื่องนี้เป็นเรื่องที่แอดชอบที่สุดเลย

ปีนี้เลยตั้งใจอยากกลับมาเขียนบทความสถิติแบบเต็มๆอีกครั้งทุกสัปดาห์ ชุบชีวิตซีรีส์ที่เคยเขียนไว้เมื่อหลายปีก่อน 555+ เป็นกำลังใจให้แอดด้วยนะคร้าบ ❤️

วันก่อนเราเปิดตัว It’s Friyay [อิทส์ ฟราย เยย์] ตอนแรกเรื่อง Everybody Writes วันนี้เปิดตัวอีกหนึ่งซีรีส์ Statistics Mondee [สถิติ มันส์ดี] ให้ทุกคนได้อัพเดทความรู้สถิติสนุกๆด้วยกัน

EP แรกมาเรียนตารางความถี่ง่ายๆแต่ทรงพลังมากในโลกสถิติ ชื่อของมันคือ Confusion Matrix

Neo ฉากใน The Matrix
Confusion ที่ไม่ Confused ง่ายจนงง 555+

What is confusion matrix

Confusion matrix คือตาราง cross tabulation (เรียกสั้นๆว่า cross-tab) แบบพิเศษที่นำข้อมูลสองคอลัมน์คือ actual, prediction มาทำเป็นตารางสรุปผล cross กันตามชื่อเลย

ส่วนใหญ่เรานิยมใช้แกนนอนเป็น actual ส่วนแกนตั้งเป็น prediction

ตัวอย่าง confusion matrix
เปลี่ยนข้อมูลดิบ (ซ้าย) เป็นตาราง confusion matrix (ขวา)

Use case หลักของ confusion matrix คือการวัดผลโมเดล binary classification ในทางสถิติและ machine learning ตัวอย่างเช่น ผลการทำนายของโมเดล logistic regression

📝 Binary classification คือโมเดลที่ทำนายค่าแบบ binary (yes/ no) – วันนี้ฝนจะตกหรือไม่ตก ลูกค้าจะซื้อหรือไม่ซื้อสินค้า churn prediction และ credit scoring เป็นต้น

วิธีสร้าง confusion matrix ทำได้หลายวิธี ถ้าง่ายสุดใน spreadsheets ก็ใช้ pivot table หรือฟังก์ชัน =COUNTIFS() สร้างเป็นตารางความถี่ง่ายๆ

Basic Terminology

แต่ละช่องในตาราง confusion matrix จะมีชื่อเฉพาะด้วย คือ True Positive (TP), True Negative (TN), False Positive (FP) และ False Negative (FN)

สิ่งที่ทุกคนต้องเข้าใจมีอยู่สองอย่างคือ ความหมายของ True/False และ Positive/Negative

โดยช่องที่ขึ้นต้นด้วย True แปลว่าโมเดลเราทายถูก True Positive, True Negative ส่วนช่องที่ขึ้นต้นด้วย False แปลว่าโมเดลทายผิด False Positive, False Negative

อธิบาย confusion matrix
การอ่านผล confusion matrix

ส่วน Positive คือ class ที่เราสนใจเป็นหลัก และ Negative คือ class รอง เช่น ถ้าเราอยากรู้ว่าลูกค้าที่เข้ามาในเว็บ e-commerce ของเราจะสั่งของหรือเปล่า (add to cart, purchase)

สั่งของ Yes = Positive ไม่สั่งของ No = Negative

เราต้องกำหนด positive class ทุกครั้งเวลาเราทำโจทย์ binary classification

📝 ปกติพวกนี้แอดไม่เคยจำเลย 555+ แค่วาดรูปนี้บ่อยๆ เดี๋ยวก็ใช้ตารางนี้คล่องแล้ว

Basic Metrics

ความสวยงามของ confusion matrix คือมันสร้างได้ง่ายมาก และเราสามารถคำนวณค่าสถิติหลายๆตัวจากตารางนี้ โดย classification metrics 4 ตัวที่เรานิยมใช้กันคือ

  • Overall Accuracy
  • Precision
  • Recall
  • F1 score

มาลองทำความเข้าใจแต่ละตัวแบบเจาะลึกด้วยกัน เห็นสมการอย่าเพิ่งตกใจ 555+

* N ในสูตรนี้คือ total sample size ในตาราง

Overall accuracy คือค่าความแม่นยำ (ถูกต้อง) โดยรวมของโมเดล ในสูตรด้านบนคือ (TP+TN)/N ถ้าเรารู้ค่า accuracy เราจะคำนวณ error rate ได้ทันทีเลย ด้วยสูตรนี้

1 – overall accuracy = error rate

ส่วน metrics อื่นๆ แอดขอใช้ทับศัพท์เลยจะเข้าใจง่ายกว่า อย่าพยายามแปลไทยเลย 555+

Precision บอกว่าจากผลที่โมเดลทำนายเป็น positive ทั้งหมด โมเดลเราทาย positive ถูกจริงๆเท่าไหร่ ถ้าเขียนสูตรก็จะได้ TP/(TP+FP) ตัวหารด้านล่างคือ total positives

Recall ในทางสถิติเรียกว่า Sensitivity คือค่าที่บอกว่าโมเดลเราเจอ actual positive class ที่เราสนใจมากหรือน้อยเพียงใด ด้วยสูตร TP/(TP+FN)

F1-Score คือการหาค่าเฉลี่ยของ precision และ recall ไม่ได้บวกกันหารสองตรงๆ แต่เป็นค่าเฉลี่ยแบบ harmonic mean ใช้สูตร 2*(precision*recall) / (precision+recall)

📝 ถ้าอยากหาค่า metric เดียวไว้วัดผลโมเดลเลย หลายคนจะแนะนำให้ใช้ F1-Score เพราะมันรวม precision, recall ไว้ในการคำนวณแล้ว นอกจาก F1 ยังมี F0.5 F2 ได้ด้วยนะครับ

How to do it in Excel

มาลองดูตัวอย่างการคำนวณง่ายๆใน Microsoft Excel

การคำนวณ metrics เช่น accuracy precision recall F1 จาก confusion matrix ใน spreadsheets
การคำนวณ metrics ของ confusion matrix ใน spreadsheets

วิธีการอ่านผลค่า metrics จะอ่านแบบ % ก็ได้ เช่น accuracy = 0.75 โมเดลเรามีความแม่นยำโดยรวมที่ 75% (error = 1-0.75 = 0.25)

overall accuracy
=(C3+D4)/SUM(C3:D4)

precision
=C3/(C3+C4)

recall
=C3/(C3+D3)

f1-score
=2*(C7*C8)/(C7+C8)

More than 2×2

ถ้าจำนวน classes ของเรามีมากกว่าสอง classes เราสามารถสร้างตาราง multiclass confusion matrix แบบ 3×3, 4×4 หรือ 5×5 เลยก็ได้

Multiclass confusion matrix
Multiclass confusion matrix

ตัวอย่าง R code ง่ายๆเขียนเสร็จในสองบรรทัด

# sample code in R
table1 = table(actual, prediction)

# overall accuracy
sum(diag(table1)) / sum(table1)

ผลรวมของเส้นทแยงมุม diagonal หารด้วยจำนวน N ทั้งหมดเป็นค่า overall accuracy เหมือนกับตาราง 2×2 ส่วน precision, recall, F1-score สามารถคำนวณแยกเป็นของแต่ละคลาสได้

What to Know

สรุปไอเดียสำคัญของ confusion matrix

  • มันคือตารางความถี่ cross tabulation ง่ายๆ เอาข้อมูล actual x prediction
  • เรานิยมใช้ตารางนี้คำนวณค่า metrics วัดผลโมเดล binary classification
  • สูตรการคำนวณ accuracy, precision, recall, F1-score ทำได้ง่ายๆใน spreadsheets
  • แต่ถ้าเขียนโปรแกรมก็ง่ายกว่าเยอะเลย 555+

📝 และเหตุผลที่เราเรียกมันว่า confusion matrix ก็เพราะว่าโมเดลเราสับสนระหว่างค่า True, False ทำนายผลผิดบ้าง เช่น จาก True เป็น False หรือ False เป็น True

จบแล้ว! ง่ายเหลือเชื่อ ถ้าใครอยากอ่านบทความสถิติดีๆแบบนี้ ติดตามได้ใน series ใหม่ “สถิติ มันส์ดี” ตอนใหม่มาทุกวันจันทร์ แต่เมื่อวานแอดเขียนไม่ทัน แง 😭 555+

Leave a Reply