Confusion Matrix

boom626
4 min readOct 3, 2019

--

subject:AI for IT (520341–2560) Date: 03/10/2019

📚📖งาน .Workshop W10📖📚

  1. ให้นักศึกษาอธิบาย Confusion Matrix, Accuracy, Precision, Recall, F1-score ให้เข้าใจ(ทำความเข้าใจ)
  2. ยกกรณีที่เราต้องพิจารณาอธิบายในกรณีใหน modelแบบใหน ที่ดูจากค่า Precision กรณีที่ต้องดูจากค่า Recall และกรณีที่ต้องดูทั้ง 2 ค่า แล้วเห็นประสิทธิภาพ โดยเขียนเป็น Medium Blog

อธิบาย🤨

วิธีการวัดประสิทธิภาพว่า model ที่เราเขียนขึ้นมันดีหรือไม่จะใช้ Confusion Matrix

Confusion Matrix จะอยู่ในรูปของMatrixที่เป็น row,column นั่นคือมีลักษณะข้อมูลเป็น 2 มิติ ซึ่งเราจะนำข้อมูลที่Confusion Matrixมาใช้คำนวณค่าต่างๆ อย่างค่าAccuracy

Classification Accuracy

Classification accuracy คือสัดส่วนของจำนวนความถูกต้องในการ Predict ต่อจำนวนที่นำมา Predict ทั้งหมด

Accuracy คือผลจากการPredictถูกต้อง จากข้อมูลทั้งหมดที่นำมาPredict
----------------------------------------------------------
สูตรคำนวณ
classification accuracy =
correct predictions / total predictions
...คือเอาผลจากการPredictถูกต้องหารข้อมูลทั้งหมดที่นำมาPredict มีค่าเต็มได้แค่ 1 (1=Accuracyดีที่สุด)ยิ่งน้อยกว่า1ยิ่งไม่ดี
classification accuracy =
correct predictions / total predictions * 100
...คือทำAccuracyเป็นร้อยละ
error rate =
(1 - (correct predictions / total predictions)) * 100
...จากAccuracyคือความถูกต้อง เพราะงั้นหาค่าความผิดพลาดได้จาก 1-Accuracy=error คือผกผันกัน

Confusion Matrix example…

อย่างเช่น มีmodelหนึ่ง เราต้องการPredict ว่าเป็นผู้หญิงหรือผู้ชายจาก ผลเฉลย(Eepected) เป็นดังต่อไปนี้

example
Eepected คือ ผลเฉลย ,Label ,ข้อมูลที่ถูกต้อง
Predict คือ ผลจากการทำนาย model ดังกล่าว
วิธีการคิดAccuracyคือดูว่าค่าความถูกต้องมีกี่ตัว
นับที่ตรงกันมี 7 ตัว จากข้อมูลทั้งหมด 10 ตัว
จากสูตรด้านบนจะได้
accuracy = total correct predictions / total predictions made * 100
accuracy = 7 / 10 * 100
จากนั้นจะนำไปทำเป็นตารางConfusion Matrix
โดยนับจำนวนเป็นผู้ชายPredictเป็นผู้ชาย classifiedเป็นผู้ชายเท่าไหร่ ผู้หญิงก็เช่นกัน จะได้ดังต่อไปนี้
men classified as men : 3
women classified as women: 4
Confusion Matrix ในที่นี้แถวคือEepected และคอลัมน์คือPredict
ช่องแรกบน   : Labelเป็นผู้ชายPredictเป็นผู้ชาย = 3
ช่องแรกล่าง : Labelเป็นผู้หญิงPredictเป็นผู้ชาย = 1
ช่องสองบน : Labelเป็นผู้ชายPredictเป็นผู้หญิง = 2
ช่องสองล่าง : Labelเป็นผู้หญิงPredictเป็นผู้หญิง = 4
เป็นการนับทุกความเป็นไปได้ที่จะเกิดขึ้นในแต่ละclass คือ Confusion Matrix
เมื่อเรารู้ Confusion Matrix เราก็สามารถหาค่า Accuracy ได้ เอาผลบวกแนวทะแยงมุม บวกข้อมูลทั้งหมด

ประโยชน์ของConfusion Matrix… คือนำค่าที่ได้ใช้คำนวณ Precision และ Recall เพื่อดูประสิทธิภาพmodelที่ละเอียดขึ้น โดยปกติดูที่ค่าAccuracy ก็จะได้ความละเอียดระดับหนึ่ง แต่ถ้าดู Precision และ Recall เราก็จะเห็นอะไรมากขึ้นของ model

ยกตัวอย่าง มีmodelหนึ่ง สามารถPredictว่าเป็น spam หรือ non-spam และได้ Confusion Matrix ดังนี้

Confusion Matrix ในที่นี้แถวคือEepected และคอลัมน์คือPredict
ช่องแรกบน   : emailที่Labelเป็นspam แล้วmodelทำPredictเป็นspam = 3
ช่องแรกล่าง : emailที่Labelเป็นnon-spam แล้วmodelทำPredictเป็นspam = 1
ช่องสองบน : emailที่Labelเป็นspam แล้วmodelทำPredictเป็นnon-spam = 2
ช่องสองล่าง : emailที่Labelเป็นnon-spam แล้วmodelทำPredictเป็นnon-spam = 4

modelทำการPredictถูก= true

modelทำการPredictผิด= false

emailเป็นspam =positive

emailเป็นnon-spam =negative

Confusion Matrix ในที่นี้แถวคือEepected และคอลัมน์คือPredict
ช่องแรกบน   : emailที่เป็นspam แล้วmodelทำPredictเป็นspam = true positiveช่องแรกล่าง  : emailที่เป็นnon-spam แล้วmodelทำPredictเป็นspam = false positiveช่องสองบน   : emailที่เป็นspam แล้วmodelทำPredictเป็นnon-spam = false negativeช่องสองล่าง  : emailที่เป็นnon-spam แล้วmodelทำPredictเป็นnon-spam = true negative

สามารถใช้วิธีแบบนี้ได้หลายสถานการณ์ อย่างเช่น การตรวจโรคHIV ถ้าไปตรวจแล้วผลเลือดบอกว่าpositiveคือเป็น และถ้าตรวจแล้วผลเลือดบอกว่าnegativeคือไม่เป็น

code Python ในการสร้างConfusion Matrix…

ช่วยให้ไม่ต้องทำการนับเอง

กรณี🤨

กรณีพิจารณาจากค่า Precision หรือ positive predictive value (PPV)

นำตัวเลขในการทำConfusion Matrix มาใช้ในการคำนวณ Precision เพื่อนำmodel มาใช้ในการPredictเมื่อPredictผิดว่าเป็น แล้วเสียหาย เช่น Predictผิดว่าเป็นspam mail แต่ความจริงมันไม่เป็น ถ้าเหตุการณ์ดังกล่าวเกิดขึ้นกับmailจากหัวหน้าหรือลูกค้าที่สำคัญมากแต่บอกว่าเป็นspam จะเสียหายมาก!!!

สูตร Precision = TP/(TP+FP)

จะทำการวัดว่ามีค่าทำนายผิดที่บอกว่าเป็น มีจำนวนเยอะมั้ย ถ้าตัวหารมีค่าเยอะผลPrecisionที่ได้น้อย ประสิทธิภาพmodelจะไม่ดี = เช็คความแม่นยำmodel

ทำให้ทราบว่าmodelลักษณะนี้ไม่เหมาะกับการใช้ในการPredictอย่างspam ดูค่าPrecision

กรณีพิจารณาที่ต้องดูจากค่า Recall

Recallใช้ดูmodel ที่ใช้ในการPredictที่ผิดแบบnegative แล้วเสียหาย เช่นเป็นโรคHIV แล้วPredictผิดว่าไม่เป็น(HIV negative) แน่นอนว่าเสียหายเพราะแพร่เชื้อได้ modelที่ทำงานผิดพลาดแบบนี้เยอะๆไม่ดี

สูตร Recall = TP/(TP+FN)

จะดูว่าทายผิดแบบnegativeเยอะมั้ย เช่นเป็นHIV แต่บอกไม่เป็น ถ้าบอกแบบนี้เยอะๆ ตัวหารก็จะเยอะ ค่าRecallที่ได้น้อย ประสิทธิภาพmodelจะไม่ดี = เช็คความถูกต้องmodel ครบถ้วน

กรณีที่ต้องดูทั้ง 2 ค่า คือ Precision และ Recall

model ที่ต้องดูทั้ง 2 ค่า Precisionด้วย Recallด้วย ลักษณะนี้ต้องนำPrecision และ Recall มาหาค่าเฉลี่ย แต่เนื่องจากตัวหารหรือหน่วยไม่เท่ากัน ไม่สามารถนำPrecision และ Recallมาบวกกันหาร2ได้ จึงต้องใช้ F1-score

F1-score คือการคำนวณค่าเฉลี่ยรหว่างPrecision และ Recall

สูตร F1-score = 2 x (Precision x Recall)/(Precision + Recall)

ซึ่งใน Python มีLibraryให้ใช้ เช่น

ค่า support คือ บอกว่ามีผลเฉลยที่เป็นspamเท่าไหร่ non-spamเท่าไหร่(แต่ละclass)

ค่า macro avg เอาค่า 2 classบวกกันหาร2

ค่า weighted avg คือนำ supportมาหาweight ใช้ในกรณีที่2คลาสมีข้อมูลไม่เท่ากัน

แต่ในตัวอย่างข้อมูลเท่ากัน supportเท่ากัน ผลออกมาค่าmacro กับ weight จึงเท่ากัน

ไว้ศึกษาเพิ่ม

https://th.wikipedia.org/wiki/ค่าทำนายผลบวกและค่าทำนายผลลบ

ตัวอย่างกรณีที่เหมาะสมพิจารณาจากค่าต่างๆแล้วมีประสิทธิภาพ🤨

กรณีพิจารณาจากค่า Precision

จากบทความ

ในที่นี้กำหนดให้ Home = Positive (+) , Away = Negative (-) แล้วทำการนำไปใส่ใน confusion matrix ในรูปที่ 9 ซึ่งจากรูปจะเห็นได้ว่าถ้าถ้าทำนายเป็น Home(+) และค่าจริงเป็น Home (+) ก็คือ TP แต่ถ้าทำนายเป็น Away (-)และ ค่าจริงเป็น Home (+) คือ FP

Precision : เป็นการดูความแม่นยำในมุมผลการทำนาย (Predicted) โดยในที่นี้จะแบ่งเป็น 2 ค่าคือ Home (+) กับ Away (-)

Precision — Home (+) = TP/(TP+FP) = 2/ (2+2) = 0.5 = 50 %

จากตัวเลขจะเห็นได้ว่า model ejeab ถึงแม้จะมีความแม่นยำ (Accuracy) เพียง 37.5 % แต่อัตราการทำนายว่าทีมเจ้าบ้าน (Home) ชนะนั้นมีถึง 50% ดังนั้นถ้า ejeab model ทายผลว่า Home แสดงว่ามีโอกาสถูกสูงถึง 50 %

เนื่องจากตัวอย่างนี้ค่า Positive (+), Negative (-)นั้นไม่มีนัยยะทางการทายผลบอล ดังนั้นการเปรียบเทียบค่า Precision อาจจะยังไม่เห็นภาพที่ชัดเจนนัก

หรือดูในกรณี โอกาสที่จะเจอคนป่วย

อย่างบทความ

https://medium.com/@drtan/false-positive-คืออะไรนะ-9a65ea04402b

ซึ่งค่า Precision นี้จะมีความถูกต้อง 83% นั่นหมายความว่าถ้าผล Lab ออกมาว่าป่วย 100 คน มีโอกาสที่จะเจอคนป่วยจริง 83 คน และ คนที่ไม่ได้ป่วยจริง (False Positive) 17 คน

จะทำให้เห็นว่าค่า Precision นั้นมีส่วนสำคัญในการคัดกรองผู้ป่วยเพราะเป็นการคัดกรองผู้ป่วยที่เป็นป่วยจริง (Actual) ออกมาได้

หรือในเรื่องของ spam mail ค่าที่ได้ก็สูง ประสิทธิภาพmodelดี

กรณีพิจารณาที่ต้องดูจากค่า Recall

ดูเรื่องของ spam mail ได้เช่นกัน ค่าที่ได้ก็สูง ประสิทธิภาพmodelก็ดีแต่อาจไม่เท่าวิธีดูค่าPrecision

หรือ อย่างดูผู้ป่วยHIV ที่กล่าวไปข้างต้นก็ได้

กรณีที่ต้องดูทั้ง 2 ค่า คือ Precision และ Recall

คือF1 scroe หรือF-measure

หรือจาก http://dataminingtrend.com/2014/classifier_evaluation_metrics/

ทั้งหมดนี้คือเพื่อการศึกษาแต่เพียงเท่านั้น…

นางสาวธารารัตน์ ชุ่มบุญชู 07600626

--

--