เมทริกซ์ความสับสนในแมชชีนเลิร์นนิงพร้อมตัวอย่าง
⚡ สรุปอย่างชาญฉลาด
เมทริกซ์ความสับสน (Confusion matrix) คือตารางวัดประสิทธิภาพสำหรับแบบจำลองการจำแนกประเภท ซึ่งเปรียบเทียบป้ายกำกับที่คาดการณ์ไว้กับป้ายกำกับจริงที่ทราบแล้ว เพื่อแสดงให้เห็นอย่างชัดเจนว่าตัวจำแนกประเภทจำแนกคลาสใดได้ถูกต้อง และคลาสใดที่จำแนกผิดพลาด
Confusion Matrix คืออะไร?
A เมทริกซ์ความสับสน เป็นเทคนิคการวัดประสิทธิภาพสำหรับ เรียนรู้เครื่อง การจำแนกประเภท คือ ตารางที่แสดงให้เห็นว่าแบบจำลองการจำแนกประเภททำงานอย่างไรกับชุดข้อมูลทดสอบซึ่งทราบค่าที่แท้จริงอยู่แล้ว คำว่าเมทริกซ์ความสับสนนั้นเข้าใจง่าย แต่คำศัพท์ที่ใช้ประกอบอาจทำให้สับสนได้ ดังนั้นแต่ละส่วนจึงได้รับการอธิบายด้านล่างด้วยภาษาที่เข้าใจง่าย
เมทริกซ์นี้ใช้ได้กับทุกสิ่ง ตัวจำแนกแบบมีผู้กำกับดูแล — การถดถอยโลจิสติกส์, แผนผังการตัดสินใจ, โมเดลไร้เดียงสา Bayes หรือ โครงข่ายประสาทลึก — เพราะมันเปรียบเทียบเพียงสองคอลัมน์ของป้ายกำกับเท่านั้น: สิ่งที่แบบจำลองคาดการณ์ไว้และสิ่งที่เกิดขึ้นจริง
ผลลัพธ์สี่ประการของเมทริกซ์ความสับสน
เมทริกซ์ความสับสนจะแสดงความแม่นยำของตัวจำแนกประเภทโดยการเปรียบเทียบคลาสจริงและคลาสที่คาดการณ์ไว้ เมทริกซ์ความสับสนแบบไบนารีประกอบด้วยสี่เหลี่ยมจัตุรัส:

ตารางด้านบนแสดงแผนผังของช่องสี่เหลี่ยมทั้งสี่ช่องที่เมทริกซ์ความสับสนแบบไบนารีทุกเมทริกซ์ประกอบด้วย:
- TP: True Positive: ค่าที่คาดการณ์ไว้ถูกต้องตรงกับค่าบวกจริง
- FP: ผลบวกเท็จ: ค่าที่คาดการณ์ไว้ถูกคาดการณ์ผิดพลาดว่าเป็นค่าบวก เช่น ค่าลบถูกคาดการณ์ว่าเป็นค่าบวก
- FN: ผลลัพธ์เชิงลบเท็จ: ค่าบวกถูกทำนายว่าเป็นค่าลบ
- TN: True Negative: ค่าที่คาดการณ์ไว้ถูกทำนายได้อย่างถูกต้องว่าเป็นค่าลบจริง
สถิติจะตั้งชื่อให้กับเซลล์ข้อผิดพลาดทั้งสองเซลล์ ผลบวกเท็จคือ... ข้อผิดพลาดประเภทที่ XNUMX — แบบจำลองส่งสัญญาณเตือนที่ไม่ควรส่งสัญญาณเตือนตั้งแต่แรก ผลลัพธ์ที่เป็นเท็จเชิงลบคือ... ข้อผิดพลาดประเภท II — โมเดลนั้นเงียบสนิทในขณะที่ควรจะส่งสัญญาณเตือน การรู้ว่าวิธีใดมีค่าใช้จ่ายสูงกว่าสำหรับปัญหาของคุณ จะเป็นตัวกำหนดว่าคุณควรปรับแต่งตัวชี้วัดใดในภายหลัง
คุณสามารถคำนวณการทดสอบความแม่นยำจากเมทริกซ์ความสับสนได้ ดังสูตรด้านล่างนี้:
ตัวอย่างเมทริกซ์ความสับสน
เมทริกซ์ความสับสน (Confusion Matrix) เป็นวิธีการเรียนรู้ของเครื่องที่มีประโยชน์ ซึ่งช่วยให้คุณสามารถวัดค่า Recall, Precision, Accuracy และเส้นโค้ง AUC-ROC ได้ ตัวอย่างฟุตบอลด้านล่างแสดงให้เห็นความหมายของคำว่า True Positive, True Negative, False Positive และ False Negative ในภาษาพูดทั่วไป
ผลบวกที่แท้จริง:
คุณทำนายได้ถูกต้องและมันก็เป็นจริง ตัวอย่างเช่น คุณทำนายว่าฝรั่งเศสจะคว้าแชมป์ฟุตบอลโลก และพวกเขาก็ชนะจริงๆ
เชิงลบจริง:
คุณทำนายผลลบ และนั่นก็เป็นความจริง คุณทำนายว่าอังกฤษจะไม่ชนะ และพวกเขาก็แพ้จริงๆ
บวกเท็จ:
การทำนายของคุณเป็นบวกและเป็นเท็จ
คุณเคยทำนายว่าอังกฤษจะชนะ แต่สุดท้ายก็แพ้
ลบเท็จ:
การคาดการณ์ของคุณเป็นไปในเชิงลบ และผลลัพธ์ก็ยืนยันว่าเป็นเท็จ
คุณทำนายไว้ว่าฝรั่งเศสจะไม่ชนะ แต่ก็ชนะ
โปรดจำไว้ว่าคำแรกจะอธิบายว่าการคาดการณ์นั้นถูกต้องหรือผิด (จริงหรือเท็จ) และคำที่สองจะอธิบายว่าแบบจำลองคาดการณ์อะไร (บวกหรือลบ)
วิธีการคำนวณเมทริกซ์ความสับสน
นี่คือขั้นตอนการคำนวณเมทริกซ์ความสับสนทีละขั้นตอนในภาษาโปรแกรม การทำเหมืองข้อมูล:
- ขั้นตอน 1) ขั้นแรก คุณต้องมีชุดข้อมูลทดสอบพร้อมกับค่าผลลัพธ์ที่คาดหวัง
- ขั้นตอน 2) ทำนายค่าในทุกแถวของชุดข้อมูลทดสอบ
- ขั้นตอน 3) เปรียบเทียบผลลัพธ์ที่คาดหวังกับการคาดการณ์ และนับจำนวน:
- รวมคำทำนายที่ถูกต้องของแต่ละคลาส
- ผลรวมคำทำนายผิดของแต่ละคลาส
หลังจากนั้นตัวเลขเหล่านี้จะถูกจัดเรียงตามวิธีดังต่อไปนี้:
- แต่ละแถวของเมทริกซ์สอดคล้องกับชั้นเรียนจริง
- แต่ละคอลัมน์ของเมทริกซ์เชื่อมโยงกับคลาสที่คาดการณ์ไว้
- จำนวนรวมของการจำแนกประเภทที่ถูกต้องและไม่ถูกต้องจะถูกป้อนลงในตาราง
- ผลรวมของการทำนายที่ถูกต้องสำหรับแต่ละคลาสจะถูกใส่ลงในเซลล์ที่แถวจริงของคลาสนั้นมาบรรจบกับคอลัมน์ที่ทำนายไว้ของคลาสนั้นเอง ซึ่งก็คือแนวทแยงมุม
- ผลรวมของการทำนายที่ไม่ถูกต้องสำหรับแต่ละคลาสจะถูกบันทึกไว้ในแถวจริงสำหรับค่าของคลาสนั้น และในคอลัมน์ที่ทำนายไว้ของคลาสใดก็ตามที่แบบจำลองเลือกแทน
บทบาทของแถวและคอลัมน์เป็นเพียงข้อตกลงมากกว่ากฎเกณฑ์ตายตัว และเครื่องมือสร้างกราฟบางอย่างอาจสลับตำแหน่งการจัดเรียง ดังนั้นควรอ่านป้ายกำกับแกนก่อนตีความเมทริกซ์เสมอ การจัดเรียงที่ใช้ในที่นี้ — ค่าจริงอยู่บนแถว ค่าที่คาดการณ์อยู่บนคอลัมน์ — เป็นการจัดเรียงที่ scikit-learn สร้างขึ้น
ข้อกำหนดสำคัญอื่น ๆ ที่ใช้เมทริกซ์ความสับสน
เมื่อกำหนดจำนวนทั้งสี่แล้ว กลุ่มของคำศัพท์รองจะใช้อธิบายส่วนต่างๆ ของตารางเดียวกัน:
- ค่าความแม่นยำในการทำนายผลบวก (PPV): นี่ใกล้เคียงกับความแม่นยำมาก ความแตกต่างที่สำคัญอย่างหนึ่งระหว่างสองคำนี้คือ PPV จะคำนึงถึงความชุกของโรคด้วย ในสถานการณ์ที่กลุ่มต่างๆ มีความสมดุลกันอย่างสมบูรณ์ ค่าการทำนายเชิงบวกจะเท่ากับความแม่นยำ
- อัตราความผิดพลาดเป็นศูนย์: คำนี้ใช้กำหนดความถี่ที่การทำนายของคุณจะผิดพลาด หากคุณทำนายคลาสส่วนใหญ่เสมอ คุณสามารถใช้เป็นตัวชี้วัดพื้นฐานเพื่อเปรียบเทียบกับตัวจำแนกของคุณได้
- คะแนนเอฟ: ค่า F1 คือค่าเฉลี่ยถ่วงน้ำหนักของอัตราการตรวจพบที่ถูกต้อง (recall) และความแม่นยำ (precision)
- เส้นโค้ง ROC: กราฟ ROC แสดงอัตราการตรวจพบที่ถูกต้องเทียบกับอัตราการตรวจพบที่ผิดพลาด ณ จุดตัดต่างๆ นอกจากนี้ยังแสดงให้เห็นถึงความสมดุลระหว่างความไว (การเรียกคืน) และความจำเพาะ ซึ่งก็คืออัตราการตรวจไม่พบที่ถูกต้อง
- ความแม่นยำ: เมตริกความแม่นยำแสดงความแม่นยำของคลาสที่เป็นบวก โดยจะวัดว่าการทำนายคลาสเชิงบวกมีความเป็นไปได้เพียงใด
คะแนนสูงสุดคือ 1 เมื่อตัวจำแนกจำแนกค่าบวกทั้งหมดได้อย่างสมบูรณ์แบบ ความแม่นยำ (Precision) เพียงอย่างเดียวไม่ค่อยมีประโยชน์ เพราะมันละเลยคลาสที่เป็นลบ โดยปกติแล้วตัวชี้วัดนี้จะใช้คู่กับตัวชี้วัดการเรียกคืน (Recall) การเรียกคืนเรียกอีกอย่างว่าความไว (Sensitivity) หรืออัตราการตรวจพบที่ถูกต้อง (True Positive Rate) และเขียนได้ดังที่แสดงด้านล่าง
- ความไวแสง: ค่าความไว (Sensitivity) คำนวณอัตราส่วนของคลาสบวกที่ตรวจจับได้อย่างถูกต้อง ตัวชี้วัดนี้แสดงให้เห็นว่าโมเดลมีความสามารถในการจดจำคลาสบวกได้ดีเพียงใด
ตัวชี้วัดและสูตรของเมทริกซ์ความสับสน
ตัวชี้วัดทั้งหมดข้างต้นเป็นการคำนวณทางคณิตศาสตร์บนตัวแปรสี่ตัวเดียวกัน ดังนั้นการดูตัวชี้วัดเหล่านั้นควบคู่ไปกับคำถามที่แต่ละตัวชี้วัดตอบจะช่วยให้เข้าใจได้ง่ายขึ้น
| เมตริก | สูตร | คำถามมันตอบ | ใช้เมื่อ |
|---|---|---|---|
| ความถูกต้อง | (TP + TN) / (TP + TN + FP + FN) | โดยรวมแล้วมีคำทำนายที่ถูกต้องกี่ข้อ? | สัดส่วนของชั้นเรียนค่อนข้างสมดุลกัน |
| ความแม่นยำ | ทีพี / (ทีพี + เอฟพี) | เมื่อแบบจำลองบอกว่าผลลัพธ์เป็นบวก บ่อยแค่ไหนที่มันถูกต้อง? | สัญญาณเตือนภัยที่ผิดพลาดนั้นมีค่าใช้จ่ายสูง |
| เรียกคืน (ความไว) | ทีพี / (TP + เอฟเอ็น) | จากผลตรวจที่เป็นบวกทั้งหมด ตรวจพบได้กี่ราย? | การพลาดผลตรวจที่เป็นบวกนั้นมีค่าใช้จ่ายสูง |
| ความจำเพาะ | ธ.ก. / (ธ.ก. + ฟ.ป.) | จากผลลบทั้งหมด มีกี่รายการที่ได้รับการแก้ไข? | ชนชั้นเชิงลบก็มีความสำคัญเช่นกัน |
| คะแนน F1 | 2 × (ความแม่นยำ × การเรียกคืน) / (ความแม่นยำ + การเรียกคืน) | อะไรคือจุดสมดุลระหว่างสองสิ่งนี้? | คุณต้องใช้หมายเลขเดียวสำหรับทั้งสองอย่าง |
ลองใช้ตัวกรองสแปมที่ทดสอบกับอีเมล 100 ฉบับ ซึ่งให้ผลลัพธ์ TP = 45, FN = 5, FP = 10 และ TN = 40 ความแม่นยำคือ (45 + 40) / 100 = 0.85 ความเที่ยงตรงคือ 45 / (45 + 10) = 0.82 การเรียกคืนคือ 45 / (45 + 5) = 0.90 และความจำเพาะคือ 40 / (40 + 10) = 0.80 ค่า F1 เท่ากับ 0.86
ตัวเลขเหล่านั้นบอกเล่าเรื่องราวที่ตัวเลขความแม่นยำเพียงตัวเดียวปกปิดไว้: ตัวกรองดักจับสแปมจริงได้ 90 เปอร์เซ็นต์ แต่กักกันอีเมลที่ถูกต้อง 1 ใน 5 ที่ถูกระบุว่าเป็นสแปมโดยไม่ถูกต้อง การแลกเปลี่ยนนี้เป็นที่ยอมรับได้หรือไม่นั้นขึ้นอยู่กับต้นทุนของข้อผิดพลาดแต่ละครั้ง ซึ่งเป็นเหตุผลว่าทำไมจึงมีการรายงานเมทริกซ์แทนที่จะรายงานเฉพาะความแม่นยำเพียงอย่างเดียว
เมทริกซ์ความสับสนสำหรับการจำแนกประเภทหลายคลาส
ปัญหาการจำแนกประเภทมักไม่หยุดอยู่ที่ป้ายกำกับสองป้าย และเมทริกซ์จะปรับขนาดโดยไม่เปลี่ยนรูปร่าง สำหรับคลาส N คลาส ตารางจะกลายเป็นตารางกริด N×N: แนวทแยงมุมจะเก็บการทำนายที่ถูกต้องทั้งหมด และแต่ละเซลล์นอกแนวทแยงมุมจะบันทึกว่าคลาสใดถูกเข้าใจผิดว่าเป็นคลาสใด
แบบจำลองสามคลาสที่จัดเรียงภาพเป็นแมว สุนัข และกระต่าย จะสร้างตาราง 3×3 ขึ้นมา ถ้าเซลล์ในแถว "แมว" คอลัมน์ "สุนัข" มีค่าเท่ากับ 12 นั่นหมายความว่ามีภาพแมว 12 ภาพที่ถูกระบุว่าเป็นภาพสุนัข รายละเอียดในระดับนี้เองที่ทำให้เมทริกซ์มีประโยชน์มากกว่าคะแนน เพราะมันระบุคู่คลาสที่เฉพาะเจาะจงซึ่งแบบจำลองไม่สามารถแยกแยะได้
ค่าความแม่นยำ (Precision), ค่าการเรียกคืน (Recall) และค่า F1 ถูกกำหนดสำหรับแต่ละคลาสโดยใช้มุมมองแบบหนึ่งต่อส่วนที่เหลือ (one-vs-rest view) โดยที่คลาสที่กำลังพิจารณาเป็นคลาสบวก และส่วนที่เหลือทั้งหมดเป็นคลาสลบ จากนั้นจึงนำค่าตัวเลขต่อคลาสมารวมกันในหนึ่งในสามวิธีดังต่อไปนี้:
- ค่าเฉลี่ยระดับมหภาค: คำนวณค่าเมตริกสำหรับแต่ละคลาสอย่างอิสระ จากนั้นจึงหาค่าเฉลี่ยที่ไม่ถ่วงน้ำหนัก ทุกคลาสมีค่าเท่ากัน ดังนั้นคลาสที่หายากจะไม่ถูกบดบัง
- ค่าเฉลี่ยไมโคร: รวบรวมจำนวน TP, FP และ FN จากทุกคลาสก่อนคำนวณค่าเมตริก คลาสขนาดใหญ่จะมีอิทธิพลมากกว่า และสำหรับปัญหาที่มีป้ายกำกับเดียว ค่าความแม่นยำระดับไมโคร ค่าการเรียกคืนระดับไมโคร และค่าความถูกต้องจะเท่ากัน
- ค่าเฉลี่ยถ่วงน้ำหนัก: คำนวณค่าเฉลี่ยของคะแนนต่อคลาส โดยใช้จำนวนอินสแตนซ์จริงของแต่ละคลาสเป็นน้ำหนัก ซึ่งจะช่วยให้เห็นความไม่สมดุลของคลาสได้ชัดเจน
เลือกใช้มาโครเมื่อทุกคลาสมีความสำคัญเท่ากัน และเลือกใช้แบบถ่วงน้ำหนักเมื่อการกระจายของคลาสสะท้อนถึงปริมาณการใช้งานจริง
วิธีการสร้างเมทริกซ์ความสับสนใน Python
ไลบรารี scikit-learn สร้างตารางทั้งหมดจากอาร์เรย์ป้ายกำกับสองชุด ดังนั้นจึงไม่จำเป็นต้องนับด้วยตนเอง ตัวอย่างด้านล่างเปรียบเทียบป้ายกำกับจริงสิบรายการกับผลการทำนายสิบรายการ
from sklearn.metrics import confusion_matrix y_true = [1, 0, 1, 1, 0, 1, 0, 0, 1, 0] y_pred = [1, 0, 1, 0, 0, 1, 1, 0, 1, 0] cm = confusion_matrix(y_true, y_pred) print(cm)
ฟังก์ชันนี้จะส่งคืนอาร์เรย์ NumPy ขนาด 2×2 โดยที่แถวที่ 0 คือคลาสลบจริง และแถวที่ 1 คือคลาสบวกจริง:
[[4 1] [1 4]]
การอ่านอาร์เรย์โดยใช้รูปแบบตามมาตรฐาน scikit-learn จะได้ค่า TN = 4 (บนซ้าย), FP = 1 (บนขวา), FN = 1 (ล่างซ้าย) และ TP = 4 (ล่างขวา) การแยกค่าทั้งสี่นี้ออกมาไว้ในบรรทัดเดียวจะทำให้ได้แผนที่ (map)ping ชัดเจน:
tn, fp, fn, tp = confusion_matrix(y_true, y_pred).ravel()
เพื่อให้ได้ค่าความแม่นยำ ค่าการเรียกคืน และค่า F1 สำหรับทุกคลาสพร้อมกัน รวมถึงค่าเฉลี่ยแบบมาโครและค่าเฉลี่ยถ่วงน้ำหนักที่อธิบายไว้ข้างต้น ให้เรียกใช้ฟังก์ชันต่อไปนี้ classification_report() แทนที่จะคำนวณแต่ละตัวชี้วัดด้วยมือ:
from sklearn.metrics import classification_report print(classification_report(y_true, y_pred))
สำหรับเวอร์ชันที่มีการวางพล็อต ConfusionMatrixDisplay.from_predictions(y_true, y_pred) แสดงผลตารางเดียวกันในรูปแบบฮีทแมปที่มีป้ายกำกับ รายการอาร์กิวเมนต์ทั้งหมด รวมถึง labels และ normalize ตัวเลือกต่างๆ ได้รับการบันทึกไว้ในเอกสาร เอกสารอ้างอิง scikit-learn confusion_matrixขั้นตอนการประเมินเดียวกันนี้ใช้กับโมเดลที่สร้างด้วย TensorFlowเนื่องจากตัวชี้วัดนี้ขึ้นอยู่กับป้ายกำกับที่คาดการณ์ไว้เท่านั้น
ทำไมคุณถึงต้องการเมทริกซ์ความสับสน?
ต่อไปนี้คือข้อดีและประโยชน์ของการใช้เมทริกซ์ความสับสน
- ภาพนี้แสดงให้เห็นว่าแบบจำลองการจำแนกประเภทเกิดความสับสนได้อย่างไรเมื่อทำการทำนาย
- เมทริกซ์ความสับสนช่วยให้คุณเข้าใจไม่เพียงแค่ข้อผิดพลาดที่ตัวจำแนกของคุณทำเท่านั้น แต่ยังรวมถึงประเภทของข้อผิดพลาดที่เกิดขึ้นด้วย
- การวิเคราะห์เชิงลึกนี้จะช่วยให้คุณเอาชนะข้อจำกัดของการใช้ความแม่นยำในการจำแนกประเภทเพียงอย่างเดียวได้
- ทุกคอลัมน์ของเมทริกซ์ความสับสนแสดงถึงอินสแตนซ์ของคลาสที่ทำนายนั้น
- แต่ละแถวของเมทริกซ์ความสับสนแสดงถึงอินสแตนซ์ของคลาสจริง
- มันเปลี่ยนการประเมินโมเดลให้เป็นการวินิจฉัย โดยชี้ไปยังคู่คลาสเฉพาะที่ต้องการข้อมูลเพิ่มเติมหรือคุณลักษณะที่ดีกว่า
คุณค่าในการวินิจฉัยนี้เองที่เป็นเหตุผลว่าทำไมเมทริกซ์ความสับสนจึงอยู่ใจกลางขั้นตอนการประเมินผลในทุกๆ ด้าน วิทยาศาสตร์ข้อมูล ขั้นตอนการทำงาน และเหตุผลที่มักเป็นตารางแรกที่ได้รับการตรวจสอบก่อนที่ตัวจำแนกประเภทจะถูกส่งไปใช้งานจริง


