การวัดประสิทธิภาพของโมเดล (Two-class prediction)

การที่เราสร้างโมเดลๆ หนึ่งขึ้นมาทำนายผลนั้น เราจะต้องมีการวัดประสิทธิภาพของโมเดลนั้นด้วย เรื่องการวัดผลนี้ค่อนข้างสำคัญมาก ในงานวิจัยที่เราจะต้องนำเสนอสิ่งที่เราคิดค้นออกมาว่าดีแค่ไหน ในบล็อกนี้จะขอพูดถึงการวัดผลโดยใช้ปัญหาที่เรียกว่า two-class prediction (binary classification) ซึ่งเป็นการวัดประสิทธิภาพที่งานวิจัยส่วนใหญ่นิยมใช้กัน

ในปัญหานี้เราจะบอกว่าผลลัพธ์ที่ได้ว่าเป็นคลาส Positive หรือ Negative ซึ่งผลลัพธ์ที่ได้สามารถมีได้ 4 แบบ คือ

  1. True Positive (TP) หมายความว่า เราได้ผลลัพธ์จากการทำนายคือ p และค่าจริงๆ ก็คือ p ด้วย
  2. False Positive (FP) หมายความว่า เราได้ผลลัพธ์จากการทำนายคือ p แต่ว่าค่าจริงๆ แล้วคือ n
  3. True Negative (TN) หมายความว่า เราได้ผลลัพธ์จากการทำนายคือ n และค่าจริงๆ ก็คือ n ด้วย
  4. False Negative (FN) หมายความว่า เราได้ผลลัพธ์จากการทำนายคือ n แต่ว่าค่าจริงๆ แล้วคือ p

จะเห็นได้ว่า TN จะกลับกันกับ TP และ FN จะกลับกันกับ FP ตามลำดับ

หลายๆ คนจะค่อนข้างสับสนเวลาที่คำนวณค่าจริงๆ ก็จะอธิบายจากความเข้าใจของผมนะครับ และคิดว่าน่าจะเข้าใจง่ายที่สุดแล้ว (เครดิต: @b39ppr) ยกตัวอย่าง เช่น เวลาที่เราต้องการจะทำนายว่า พฤติกรรมของคนๆ นี้ผิดปกติหรือไม่? หรืออีกนัยหนึ่งคือ เราต้องการที่จะตรวจจับพฤติกรรมที่ผิดปกติของคนๆ หนึ่ง

ในที่นี้จะได้ว่า พฤติกรรมที่ผิดปกติคือคลาส Positive ส่วนพฤติกรรมปกติคือคลาส Negative จะได้ว่า

  • TP คือ ระบบเราตรวจจับได้ว่าคนๆ นี้ผิดปกติ และ คนๆ นี้ได้มีพฤติกรรมผิดปกติจริงๆ
  • FP คือ ระบบเราตรวจจับได้ว่าคนๆ นี้ผิดปกติ แต่ว่า จริงๆ แล้ว เค้าไม่ได้ทำอะไรผิดเลย
  • TN คือ ระบบเราไม่ได้ตรวจจับอะไรเลย และ คนๆ นี้ก็ไม่ได้ทำผิด
  • FN คือ ระบบเราไม่ได้ตรวจจับอะไรเลย แต่ว่า คนๆ นี้ จริงๆ แล้วเค้ามีพฤติกรรมที่ผิดปกติ!

พอนึกออกรึเปล่าครับ? ผมจะขอยกตัวอย่างอีกสักตัวอย่าง เช่น เราเขียนโมเดลระบบตรวจจับสแปมเมล ถ้าเจอสแปมเมลให้ลบทิ้งเลย (ระบบออกแนวโหดหน่อย)

ในที่นี้จะได้ว่า เมลที่เป็นสแปมคือคลาส Positive ส่วนเมลปกติคือคลาส Negative

  • TP คือ ระบบทำนายว่าเมลนี้เป็นสแปม และ มันก็เป็นสแปมจริงๆ
  • FP คือ ระบบทำนายว่าเมลนี้เป็นสแปม แต่ว่า จริงๆ แล้วเมลนี้เป็นเมลปกติ เช่น ข่าวสารทั่วไป เมลเกี่ยวกับงานต่างๆ
  • TN คือ ระบบทำนายว่าเมลนี้เป็นเมลปกติ และ เมลนี้ก็ปกติจริงๆ
  • FN คือ ระบบทำนายว่าเมลนี้เป็นเมลปกติ แต่ว่า จริงๆ แล้วมันเป็นสแปม!

ค่าที่ได้จาก 2 ตัวอย่างข้างต้นนี้ สามารถช่วยให้เราวิเคราะห์และนำไปพัฒนาโมเดลให้ดียิ่งขึ้นได้อีก จากตัวอย่างแรกจะเห็นได้ว่าค่า FN นั้นสำคัญมาก ถ้าค่า FN เราสูงไปแสดงว่า เราตรวจจับคนร้ายไม่ได้เลย และจากตัวอย่างที่สองจะเห็นได้ว่าค่า FP นั้นสำคัญ เนื่องจากเป็นระบบแนวโหดที่เวลาเจอสแปมแล้วจะลบทิ้งเลย ดังนั้นถ้าค่า FP สูง ระบบเราก็อาจจะลบเมลสำคัญๆ ของเราทิ้งไปนั่นเอง

มีสรุปเพิ่มเติมจากคุณ pat หรือคุณ @b39ppr นั่นเอง ดังนี้ครับ (มีคำถามให้คิดเล่นตอนท้าย)

การอ่าน (T,F)(P,N) แบบไม่งง

  • ดูตัวหลังก่อน ว่า P หรือ N
    ถ้า P คือ model ของเรา predict ว่ามันเป็น positive (เป็นคนร้าย, เป็น spam)
  • ต่อไปดูตัวหน้า ว่า T หรือ F
    ถ้า T คือ ที่ model ของเรา predict ไปนั้น ถูกต้องแล้ว ถ้า F คือ predict ผิด

ตัวอย่าง: ระบบตรวจหา spam mail

  1. ตรวจหาอะไรก็ให้สิ่งนั้นเป็น positive
    จะตรวจหา spam เมื่อคิดว่าเจอ spam ก็คือเจอกรณี positive
  2. จะคำนวณ FP ทำอย่างไร?
    ตอบ สำหรับ FP นั้น
    2.1 ตัวหลังเป็น P ให้นับจำนวน mail ที่เรา predict ว่าเป็น “positive” (เป็น spam)
    2.2 ตัวหน้าเป็น F ให้ดูว่าที่ predict ว่าเป็น spam ไปนั้น มีอันไหน “ผิด” บ้าง

เอ้า ลองคิดกันหน่อย:
มี email ใหม่ ส่งมาหาเราทั้งหมด 10 ฉบับ เข้ามาใน inbox 8 ส่วนอีก 2 เข้าไปอยู่ในกล่อง junk mail 8 mail ใน inbox นั้นมาจากคนรู้จักซะ 5 ที่เหลือเป็นเมล์ขายของ ไม่อยากได้ ส่วนในกล่อง junk mail ดันมีเมล์สำคัญจากเพื่อนอยู่ 1 ฉบับ ลองบอกค่า TP, FP, TN, FN ของระบบกรอง spam ตัวนี้มาหน่อย

หวังว่าจะมีประโยชน์นะครับ 🙂

ข้อมูลเพิ่มเติม: Receiver Operating Characteristic (ROC)