Confusion Matrix | Recall | Precision | Accuracy เห้ยยมันคืออะไรว้าาา !?

Boyd BigData RPG
Big Data Engineering
4 min readMar 23, 2018

แค่เห็นชื่อตางรางก็งงละ กับ “Confusion Matrix” ตารางงงในงงงงง !!

Source: https://www.theodysseyonline.com/deleted-pokemon-caught

หลายคนคงเคยได้ยินคำว่า “Confusion Matrix” กันมาเยอะเลยทีเดียว แต่พอจะอ่านทำความเข้าใจทีก็ย๋ากกก ยากกเหลือเกิน แถมงงอีกว่ามันบอกอะไรเรากันแน่นะ ??

เพราะจริงๆแล้วหลายๆคนเพียงต้องการอยากรู้เพียงว่า Model ที่เราสร้างขึ้นมาเนี่ย มันมีประสิทธิภาพ (Performance) ดีมากน้อยแค่ไหน แค่นั้นเอง จริงไหมครับ

แต่ ……..

สุดท้าย Model ก็ถูกอธิบาย Performance ออกมาด้วยตาราง

“Confusion Matrix”

หน้าตาของตาราง “Confusion Matrix” มันก็จะประมาณนี้เลย

โอว้โห มีทั้ง

  • Recall
  • Precision
  • Accuracy

เห้ยยย แล้วอันไหนบอกเราว่ามันคือประสิทธิภาพของ Model ที่เราต้องการอยากรู้กันแน่ละเนี่ย ???

เพราะจริงๆแล้วสิ่งที่เราต้องการรู้จริงๆคือ “Accuracy” แค่น้านนนนน

ไม่ยากอย่างที่คิด

งั้นเรามารู้จักกับตาราง และเข้าใจค่าต่างๆไปทีละตัวกันครับ จะได้มันต้อง งง กับมันอีกต่อไป อิอิ

  1. หากเรามีข้อมูลที่มี Column เป็น Label ดังนี้
  • Label ก็คือ คำตอบของเรานั่นเอง หรือค่า Y
    คำตอบถ้ามี 1 ตัวจะเรียกว่า 1 Class
    และ ถ้ามีจำนวน n คำตอบ จะเรียกว่า n Class
  • Attribute คือ เรื่องราวที่นำไปสู่คำตอบ หรือสิ่งที่ทำให้เกิดคำตอบ หรือค่า X

2. สมมติเหตุการณ์ว่าเรามีคำตอบ 2 Class

  • Pikachu
  • Ditto

ให้ f1 ถึง f5 แทน Feature ต่างๆ ที่นำไปสู่คำตอบคือ Class ต่างๆใน Label column นั่นเองครับ

3. ต่อมาหากเรามีข้อมูลดังกล่าว

  • 100 แถว (rows)
  • มีคำตอบที่เป็น Pikachu 50 แถว
  • มีคำตอบที่เป็น Ditto 50 แถว

4. หลังจากรู้จำนวนข้อมูลแน่นอนแล้ว เราก็มา Test Model กัน

เพราะถ้าไม่รู้จำนวนข้อมูลที่มี label แน่นอน จะไม่สามารถมาคำนวณ Perfomance Model ได้เลย

จากภาพเป็นขั้นตอนการ Train และ Test เพื่อวัด Performance Model แบบง่ายๆ

ส่วน Test เราจะตัดนำ Label ออก แต่เราก็ยังทราบว่าคำตอบนั้นจริงๆแล้วตอบอะไรนั่นเอง

5. หลังจาก Test กับ Model เรียบร้อยสิ่งที่ได้มานั่นคือ

“Confusion Matrix” ไงจะใครล่ะ

  • Reference คือสิ่งที่เป็นคำตอบจริงๆจาก Training Data ของเรา
  • Predict คือสิ่งที่ Model เราตอบให้ว่าคือคำตอบอะไร

6. ภาพแสดงช่องที่นำมาคำนวณ Recall, Precision และ Accuracy

  • Recall คือการคำนวณส่งคำตอบจริงๆไป แล้ว Model ตอบถูกจริงๆกลับมาเท่าไหร่

ในที่นี้ส่งให้ Model ไปตอบ 50 แถวแต่ได้คำตอบถูกจริงๆ 43 แถว
และมีการตอบผิดไป 7 แถว

ส่วนวิธีคำนวณอยู่ด้านล่างเลย

  • Precision คือการคำนวณเทียบกับคำตอบที่ผิดข้างเคียง ว่าตัวเองถูกมากน้อยแค่ไหน

ในที่นี้ส่ง Pikachu ไปตอบ 43 แถว
แต่ดันตอบผิดที่ Ditto ไป 3 แถว
คิดเป็นจำนวน 46 แถว

ส่วนวิธีคำนวณอยู่ด้านล่างเลย

  • Accuracy คือการคำนวณจำนวนคำตอบที่ถูกต้องเทียบกับจำนวนคำตอบทั้งหมดที่นำไปให้ Model ทำการตอบ

ในที่นี้ส่งจำนวนแถวให้ Model ตอบทั้งหมด 100 แถว

มี Class Pikachu ตอบถูก 43 แถว
มี Class Ditto ตอบถูก 47 แถว
คิดแล้วเป็นจำนวนตอบถูกทั้งหมด 90 แถว

ส่วนวิธีคำนวณอยู่ด้านล่างเลย

7. วิธีคำนวณ Recall

  • Recall Pikachu:

ข้อมูล Pikachu 50 แถว
ตอบถูก 43 แถว
ผิด 7 แถว
Recall Pikachu = 0.86

  • Recall Ditto:

ข้อมูล Ditto 50 แถว
ตอบถูก 47 แถว
ผิด 3 แถว
Recall Ditto = 0.94

8. วิธีคำนวณ Precision

  • Precision Pikachu:

ตอบ Pikachu ถูก 43 แถว
ตอบ Ditto ผิด 3 แถว
รวมข้อมูล 46 แถว
Precision Pikachu = 0.93

  • Precision Ditto:

ตอบ Ditto ถูก 47 แถว
ตอบ Pikachu ผิด 7 แถว
รวมข้อมูล 54 แถว
Precision Ditto = 0.87

9. วิธีคำนวณ Accuracy

  • Accuracy:

ตอบ Pikachu ถูก 43 แถว
ตอบ Ditto ถูก 47 แถว
รวมข้อมูลที่ตอบถูกทั้งหมด 90 แถว
รวมข้อมูลให้ตอบทั้งหมด 100 แถว
Accuracy = 0.9

มาถึงตรงนี้ เข้าใจมากขึ้นใช่ไหมครับ เกี่ยวกับการคำนวณค่าต่างๆจาก
“Confusion Matrix ”

คราวหน้าเห็นก็รู้แล้วเนอะ ว่าคำนวณอย่างไร และเค้าวัด Performance ของ Model อย่างไรนั่นเอง

แต่……. แต่……. แต่……. เดี๋ยวก่อนนะ

เรามาตีความ Recap กันใหม่อีกรอบเกี่ยวกับ
Recall, Precision และ Accuracy กันอีกรอบ

จากตาราง

  • Accuracy:
    ค่าความแม่นยำของ Model นี้เท่ากับ 0.9 หรือ 90% นั่นเองครับ นั่นคือความแม่นยำในการตอบคำถาม จาก Testing Data ที่เราไม่มี Label และแน่นอนว่ามันไว้วัด Performance ของ Model ด้วยนั่นเอง
  • Recall:
    จะทำการบอกแยกตาม Class หรือคำตอบที่เรามีใน Data ในที่นี้เรามี 2 Class คือ Pikachu กับ Ditto ก็เลยต้องแยกออกมาคำนวณ

% Recall Pikachu = 86%
% Recall Ditto = 94%

ในที่นี้ % Recall Ditto > % Recall Pikachu นั่นหมายความว่า Model นี้มีการตอบคำถาม Ditto ได้ดีกว่าทางฝั่งของ Pikachu หรืออีกนัยนึงคือเราอาจจะมองได้ว่า Model ที่เรา Train มีความโน้มเอียงไปทาง Ditto มากกว่านั่นเองครับ

ดังนั้น Model อันนี้อาจจะมีโอกาสในกาารตอบคำถามที่เหมาะกับทาง Ditto มากกว่านั่นเอง

เพิ่มเติมค่า Recall เปรียบเหมือนการส่งให้ Model ไปตอบกี่แถว และ Model ส่งคำตอบที่ถูกต้องกลับมาให้เรากี่แถว ซึ่งถ้าส่งให้ตอบ 100 แถว และ Model สามารถส่งคำตอบกลับมาได้ 100 แถว แสดงว่า Model นั้นมีความแม่นยำ 100% ใน Class ที่เราส่งให้ Model ทำการตอบ นั่นเองครับ

  • Precision:
    เปรียบเหมือนการวัด % ในการค้นหาสิ่งที่เราค้นหา เทียบกับ Noise หรือความผิดพลาดที่เกิดขึ้นรอบข้าง

% Precision Pikachu จะทำการบอกถึง ความยากในการค้นหาเพื่อจะตอบ Pikchu ท่ามกลางคำตอบที่ Model ทำการตอบผิดพลาด หรือตอบผิดใน Class Ditto หรือ ตอบผิดใน Class อื่นๆ (ในที่นี้มีเพียง 2 Class ก็คิดแค่ Noise เฉพาะ Class Ditto)

จะเห็นว่า ค่า
Precision Pikachu = 0.93 หรือ 93%
Precision Ditto = 0.87 หรือ 87%

นั่นคือในการค้นหาคำตอบของ Model ของเรานั้น
มีการค้นหาคำตอบของ Pikchu ได้ง่ายกว่า ทำการค้นหา Ditto เพราะเมื่อทำการเทียบ Noise ฝั่งคำตอบของ Pikchu มีคำตอบผิดลพาดของฝั่ง Ditto เพียง 3 คำตอบ
ในทางกลับกัน Noise ฝั่งคำตอบของ Ditto มีคำตอบผิดลพาดของฝั่ง Pikachu ถึง 7 คำตอบกด้วยกัน !!

ง่าย และเข้าใจมากขึ้นไหมเอ่ยครับ อิอิ

Confusion Matrix ไม่ยากอย่างที่คิดเนอะ !??

เพราะตัวอย่างนี้มีเพียง 2 Class หรือ 2 คำตอบ
ก็จะได้ Confusion Matrix ขนาด 2 x 2

และถ้ามีคำตอบ n คำตอบ
ก็จะได้ Confusion Matrix ขนาด n x n นั่นเอง
ส่วนหลักการคำนวณก็ยังเหมือนเดิมเลยครับ

หวังว่าบทความนี้จะช่วยให้เพื่อนๆเข้าใจ และรัก Confusion Matrix มากขึ้นนะครับ

สำหรับใครที่สนใจในเรื่อง Machine Learning ก็ติดตามกันต่อได้ จะพยายามเขียนให้เข้าใจง่ายๆ และเริ่มยากขึ้นเรื่อยๆตามเนื้อหานะครับ เรียนรู้ไปด้วยกันนะ
หากผิดพลาดประการใด สามารถชี้แนะเพิ่มเติมเนื้อหาได้เลยนะครับ ^^

ขอบพระคุณทุกท่านที่ติดตามครับ

More Share, More Fun

ติดตามเนื้อหาเพิ่มเติมได้ที่

Facebook Fanpage: https://www.facebook.com/bigdatarpg

--

--

Boyd BigData RPG
Big Data Engineering

Lead Data Scientist | Digital Marketer | Biotechnologist | Vlogger | @BigDataRPG | BS Biot30 KU69 | BD03 DPU