[Fundamental Data Analytics & Data Scientist EP.21] วัดประสิทธิภาพของโมเดลด้วย Evaluation Metrics Part 2
สวัสดีครับ ในตอนที่สองของ Evaluation Metrics เรามาทำความรู้จักกับเส้น ROC และค่า AUC กันครับ
สำหรับใครที่ยังไม่ได้อ่านเนื้อหาของตอนที่แล้ว (ซึ่งเกี่ยวข้องกับเนื้อหาใน Part นี้ด้วย) ก็สามารถเข้าไปอ่านได้ที่ลิงค์ด้านล่างครับ
และเนื้อหานี้อยู่ใน Fundamental Data Analytics & Data Scientist Series ถ้าหากสนใจอ่านเนื้อหาทั้งหมดภายใน Series นี้ก็สามารถเข้าไปอ่านที่ลิงค์ด้านล่างได้เลยครับ (รับรองว่าเนื้อหาสนุกและได้ความรู้ทุกตอนแน่นอนครับ🙂)
ROC-AUC Curve
ROC (Receiver Operating Characteristic) Curve เป็นเส้นที่ใช้วัดถึงประสิทธิภาพของโมเดลแบบ Classification ว่าสามารถทำนายประเด็นที่สนใจได้อย่างแม่นยำขนาดไหน(โดยทั่วไปนิยมวัดประสิทธิภาพของโมเดลแบบ Binary)
ส่วน AUC ก็คือ Area Under ROC Curve หรือพื้นที่ใต้กราฟ ROC นั่นเอง
แต่ก่อนที่เราจะไปรู้จักเส้น ROC และ AUC เราต้องทำความรู้จักกับค่าแต่ละแกนของเส้น ROC เสียก่อน
Sensitivity & Specificity
ค่าความอ่อนไหว (Sensitivity) มันก็คือ“สัดส่วนความถูกต้องของผลการทำนายที่เราสนใจ (True Positive)” โดยมีค่าเท่ากับ
ซึ่งจะสังเกตได้ว่า Sensitivity มันก็คือค่าเดียวกันกับ Recall นั่นเอง
ส่วนค่าความจำเพาะ (Specificity) ก็คือ“สัดส่วนความถูกต้องของผลการทำนายที่เราไม่ได้สนใจ (True Negative)” โดยมีค่าเท่ากับ
Sensitivity & Specificity Example
ตัวอย่างสมมติที่ใช้ในตอนนี้จะต่อยอดมาจากตอนที่แล้ว นั่นก็คือโมเดลสำหรับการทำนายความชอบผัดไทยของชาวต่างชาตินั่นเอง
ก่อนอื่นเรามาทบทวนเนื้อหาของ Part ที่แล้วด้วยการหาค่า Matrix ที่ใช้ทั้งหมดก่อนครับ
จากตาราง เราก็จะได้
Accuracy = (76+63)/(76+63+10+35) = 77.22%
Precision = 76/(76+10) = 88.37%
Recall = 76/(76+35) = 68.47%
F1-score = 2*(0.8837*0.6847)/(0.8837+0.6847) = 77.16%
และอีก 2 Matrix ที่เราเพิ่มเข้ามาใน Part นี้จะเท่ากับ
Sensitivity = Recall = 68.47%
Specificity = 63/(63+10) = 86.3%
tip✔️: ในกราฟ ROC จะเขียนว่าใช้ (1-Specificity) เราจะได้ค่า
เนื่องจากจะทำให้เส้น ROC นั้นวัดประสิทธิภาพของโมเดลจากการทำนายแบบ Positive กล่าวคือเส้น ROC นั้นวัดสัดส่วนของ True Positive เทียบกับสัดส่วนของ False Positive
Sensitivity และ (1-Specificity) จึงถูกเรียกอีกชื่อหนึ่งว่า True Positive Rate และ False Positive Rate
ดังนั้นค่า False Positive Rate ในตัวอย่างนี้จึงมีค่าเท่ากับ
(1-specificity) = 1–0.8613 = 0.1387 = 13.87%
เท่านี้เราก็เข้าใจค่าทั้งหมดมาสร้างกราฟ ROC กันแล้วครับ
ROC-AUC Example
เราลองมาอ่านผลของเส้น ROC และ AUC จากตัวอย่างเดิมกันครับ
รูปร่างของเส้น ROC จะเป็นเส้นที่โค้งเข้าหา True Positive Rate และ False Positive Rate ที่ [1, 1] เนื่องจากสุดท้ายแล้วหากค่าใดค่าหนึ่งมีค่าเท่ากับ 1 แล้วอีกค่าหนึ่งจะมีค่าเท่ากับ 1 เช่นกัน
ตัวอย่างเช่น หาก True Positive Rate เท่ากับ 1 หมายความว่าโมเดลสามารถทำนายคนที่ชอบกินผัดไทยได้ทั้งหมด แปลว่าความผิดพลาดที่โมเดลจะทำนายคนที่ชอบกินผัดไทยจะไม่เกิดขึ้น (False Positive Rate = 1)
ถ้าหากเราสร้างเส้น ROC จากผลของการทำนายเราจะเห็นว่าค่า True Positive Rate และ False Positive Rate มีค่าเท่ากันกับค่าที่เราเคยหามาเลย (68.47% และ 13.7% ตามลำดับ)
และสุดท้ายก็คือค่า AUC ซึ่งถ้าหากค่า AUC มีค่าสูงก็หมายความว่าโมเดลมีประสิทธิภาพมากนั่นเอง โดยเมื่อใช้ Logistic Regression (เส้นสีส้ม) ในการทำนายค่า AUC มีค่าเท่ากับ 74% ซึ่งเมื่อเทียบกับการไม่ใช้โมเดลในการทำนายซึ่งก็คือการสุ่มเสี่ยงทายหรือ Gambling (เส้นสีฟ้า) จะมีค่าเท่ากับ 50% ดั่งวลีที่ว่า “สุ่มแบบ 50:50” หมายความว่าการใช้ Logistic Regression โอกาสที่จะทำนายถูกต้องมากกว่าการสุ่มแบบเสี่ยงทายนั่นเอง
โดยเนื้อหาในการสร้างเส้น ROC และ AUC ด้วย python ผมจะทำแยกในภายภาคหน้า แต่ถ้าหากต้องการจะศึกษาการสร้างเส้น ROC และ AUC ก่อนก็สามารถเข้าไปดูที่ตัวอย่างด้านล่างได้เลยครับ
ถ้าชอบหรือต้องการสอบถามหรือพูดคุยเพิ่มเติม กดไปที่เพจ ดาต้าไส้แห้ง หรือ LinkedIn ข้างล่างเลยจ้า แล้วเรื่องถัดไปจะเป็นเรื่องอะไรก็ขอให้กดติดตามกันไว้ด้วยนะคร้าบ😍