การวัดประสิทธิภาพของโมเดล (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)

Author: zkan

Soon to be a newbie data scientist. I ♥ machine learning, computer vision, robotics, image processing, data visualization, and data analytics.

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

  1. มีประโยชน์มาก ขอบคุณครับ

    ขอลองสรุปดูหน่อยนะ

    การอ่าน (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 ตัวนี้มาหน่อย

  2. ขออนุญาตเอาสรุปขึ้นภายในบล็อกนะครับ ขอบคุณครับ

  3. งานวิจัยผมคือคิดค้นวิธีแก้ไวรัสโดยไม่ใช้AntiVirusแต่ผมไม่รู้ว่าจะวัดประสิทธิภาพได้อย่างไรครับ พอจะมีคำแนะนำไหมครับ ?

    ที่ผมทำตอนนี้คือสุ่มไวรัส 10 ชนิด ใส่เครื่องทีละชนิด และก็แก้ชนิดละ 10 ครั้ง จับเวลาแต่ละรอบรวมก็ 100 ครั้ง ผลคือแก้ไวรัสได้ 97/100 แบบนี้นี่ถือว่าเป็นการวัดประสิทธิภาพสำหรับงานวิจัยป.โทได้ไหมครับ

  4. @Hitzuja ผมเข้าใจว่าคุณ Hitzuja จะวัดค่า Accuracy ของโปรแกรม ผมไม่แน่ใจว่าวิธีที่ทำอยู่จะโอเคหรือเปล่านะครับ การที่เราสุ่มไวรัสมา 10 ชนิด และแก้ชนิดละ 10 ครั้ง สำหรับผมแล้ว วิธีนี้น่าจะเรียกว่าเป็นการหาค่าเฉลี่ยของการแก้ไวรัสแต่ละชนิดมากกว่า ดังนั้นการที่เรารวมเป็น 100 ก็อาจจะแปลกๆ อยู่สักหน่อยครับ

    ถ้าเป็นผม ผมจะรวมโปรแกรมที่ไม่ใช่ไวรัสกับโปรแกรมที่เป็นไวรัสเข้ามาอยู่ชุดข้อมูลสำหรับทดสอบชุดเดียวกัน เช่น ไวรัส 10 และที่ไม่ใช่ไวรัสอีก 90 รวมเป็น 100 แล้วค่อยตรวจสอบประสิทธิภาพของโปรแกรมของเราครับ ว่าตรวจเจอไวรัสหรือไม่ เป็น % เท่าไหร่

  5. ครับ

    คือมันไม่ใช่โปรแกรมนะครับผม ของผมเป็นวิธีที่ผมคิดขึ้นเพื่อใช้แก้ไวรัสโดยไม่ต้องใช้ Antivirus เลย วิธีนี้จะเอามาใช้ตอนที่เครื่องโดนไวรัสแล้วค่อยเอามาแก้ครับ ผมก็เลยปล่อยไวรัสเข้าเครื่องแล้วใช้วิธีของผมนี้แก้ไปทีละตัวครับ ... แล้วถ้าผมจะวัดประสิทธิภาพว่าวิธีของผมนี้ใช้ได้จริงมากแค่ไหนนี่คุณ zkan พอจะแนะนำได้ไหมครับ ?

  6. วิธีง่ายที่สุดในการวัดประสิทธิภาพในความคิดผมน่าจะแค่นับจำนวนไวรัสที่สามารถแก้ได้เทียบกับจำนวนของไวรัสทั้งหมดครับ

    แต่ถ้าไวรัสนั้นมีมากมาย เราก็สุ่มมา 100 ตัว แล้วนับจำนวนไวรัสที่สามารถแก้ได้หารด้วย 100 ครับ ถ้าสุ่ม 10 ครั้ง ก็หาค่าเฉลี่ยครับ

Leave a Reply

Your email address will not be published. Required fields are marked *