อธิบาย 10 Metrics พื้นฐานสำหรับวัดผลโมเดล Machine Learning

ML Engineer มี metrics ที่ใช้วัดความถูกต้องของโมเดลหลายตัว แบ่งเป็นสองกลุ่มใหญ่สำหรับปัญหา regression และ classification บทความนี้แอดจะอธิบาย 10 metrics พื้นฐานที่ทุกคนควรรู้จัก

[su_spoiler title=”10 metrics มีอะไรบ้าง?”]Regression – MAE, MSE, RMSE, R2
Classification – Accuracy, Precision, Recall, F1-Score, F-Beta Score, AUC
[/su_spoiler]

ในบทความนี้เราใช้ terminology (คำศัพท์) ดังนี้

  • ผลการทำนายของโมเดลคือ yprediction
  • ค่าจริงคือ yactual
  • metrics คือค่าที่ได้จากการคำนวณ/ เปรียบเทียบผล prediction vs. actual ว่าโมเดลของเราทำนายได้ถูกต้องแค่ไหน

Let’s focus at Regression

มาเริ่มกันที่ metrics สำหรับปัญหา Regression เราสร้างโมเดล Regression เพื่อทำนายตัวแปร y แบบ continuous (ตัวเลข) สามารถเขียนสมการคำนวณค่า error ได้แบบนี้ error = prediction – actual

ML เรียก error function นี้ว่า “Loss function” และเป้าหมายของการ train โมเดลคือการ minimize หรือลดค่า loss ให้มีค่าต่ำที่สุด รูปด้านล่างเราลองวาด Linear Regression ง่ายๆเพื่อทำนายค่า y ด้วยตัวแปร x

จุดสีดำบนรูปคือ actual data ส่วนเส้นตรงสีน้ำเงินคือ prediction ที่ได้จากการ train Linear Regression ระยะห่างของ prediction vs. actual คือค่า loss ที่เราต้องการ minimize

MAE

Metric ตัวแรก (หรือ loss function) ที่เราใช้เทรน Linear Regression คือ MAE ย่อมาจาก “Mean Absolute Error” คำนวณง่ายๆแค่หาผลรวมของค่า absolute(error) แล้วคูณกับ 1/n เพื่อเปลี่ยนเป็นค่าเฉลี่ย

MSE

MSE ย่อมาจาก “Mean Squared Error” จะคล้ายกับ MAE แค่เปลี่ยนจากการทำ absolute เป็น squared (ยกกำลังสองค่า error) ก่อนหาค่าเฉลี่ย

Technical Note – ตอนแอดเรียนบน Udacity อาจารย์สอนว่า MSE จะดีกว่า MAE เวลาใช้พวก gradient descent algorithm เพราะว่าตอนหา derivative ดิฟสมการ loss ด้วยแคลคูลัสจะทำได้ง่ายกว่า

RMSE

RMSE ย่อมาจาก “Root Mean Square Error” ทำ square root ค่า MSE เพื่อให้ได้ค่า loss ที่มีหน่วยเดียวกับตัวแปร y เหตุผลที่ต้องทำ SQRT เพราะว่าเรายกกำลังสองค่า error ก่อนหาค่าเฉลี่ยทำให้หน่วยมันเปลี่ยนไปจากเดิม (คนคิด RMSE เลยบอกว่าขอรูทกลับได้ไหม)

จากที่อธิบายมาสามตัว RMSE จะแปลผลง่ายสุดเลย Linear Regression ที่มี RMSE เท่ากับ 2.56 แปลว่าโดยเฉลี่ยโมเดลทำนาย y ผิดไป +/- 2.56 point

[su_highlight]MAE, MSE, RMSE มีค่ายิ่งต่ำยิ่งดี ถ้าเท่ากับ 0 แปลว่าโมเดลทำนายค่า y ได้ถูกต้องเป๊ะ 100% ในทางปฏิบัติโอกาสที่จะเทรนโมเดลได้ loss = 0 เป็นไปได้ยากมาก เพราะอาจนำไปสู่ปัญหา Overfitting ได้[/su_highlight]

R2

R2 หรือ R-Squared เป็น metric ที่ใช้กันเยอะมากเวลารัน Linear Regression แบบนักสถิติ ในสูตรด้านล่าง y_hat คือ prediction และ y_bar คือค่าเฉลี่ยของ y อีกชื่อที่นักสถิติใช้เรียก R2 คือ Explained Variance

[su_spoiler title=”Variance คืออะไร?”]ภาษาไทยเรียกว่าความแปรปรวน ใน context ของ linear regression นักสถิติมอง variance เป็น amount of information (y) ที่โมเดลของเราสามารถทำนายได้[/su_spoiler]

อธิบายภาษาคนง่ายๆ R2 คือ variance ที่โมเดลของเราอธิบายได้เป็นสัดส่วนจาก total variance ทั้งหมดของข้อมูลชุดนั้น (นักสถิติใช้สูตรคำนวณ total variance = explained variance + error) โดย R2 จะมีค่าอยู่ระหว่าง 0-1 ยิ่งเข้าใกล้ 1 แปลว่าโมเดลเราทำนายผลได้ดีมาก


Let’s focus at Classification

มาลองดู metrics ของปัญหา classification กันบ้าง ตัวอย่างวันนี้เราสร้างโมเดลทำนาย spam email ชื่อทางการของปัญหานี้คือ binary classification ที่ตัวแปร y มีได้แค่สองค่า {0, 1}

สิ่งแรกที่ทุกคนต้องรู้จักคือ Confusion Matrix ตาราง cross-tabs 2×2 ระหว่าง prediction และ actual label การคำนวณ metrics ต่างๆจะใช้ตัวเลขในตารางนี้เป็นหลัก

ตารางด้านบนสรุปผลการทำนายอีเมล์ทั้งหมด N=100 ผลลัพธ์จะถูกแบ่งเป็นสี่ช่อง แต่ละช่องมีชื่อเรียกทางการว่า True Positive, False Positive, False Negative, True Negative (อ่านจากซ้ายไปขวา บนลงล่าง)

[su_spoiler title=”ทำไมถึงเรียกว่า True Positive, False Positive etc.”]เราใช้คำว่า positive แทนการทำนายผล y=1 (spam) และ negative สำหรับ y=0 (ham) ถ้าเกิดโมเดลทำทายถูกต้องว่าอีเมล์เป็น spam เราจะเรียกว่า True Positive แต่ถ้าทำนาย ham เป็น spam จะเรียกว่า False Positive [/su_spoiler]

Accuracy

Accuracy คือ metric ที่ใช้งานง่ายที่สุด บอกว่าโมเดลเราทำนายถูกทั้งหมดกี่ % จากตารางด้านบน accuracy = (20 + 50) / 100 = 70% คำนวณจากเส้นทแยงมุมของ confusion matrix ได้เลย

ถ้าแบบทางการหน่อย เราจะเขียนสูตรว่า accuracy = (TP + TN)/ N โดยค่า accuracy จะมีค่าอยู่ระหว่าง 0-1 ยิ่งเข้าใกล้ 1 แปลว่าโมเดลเราทำนายผลได้ดีมาก

Precision

นิยามของ Precision คือความน่าจะเป็นที่โมเดลทำนาย spam ถูกต้องจากการทำนาย spam ทั้งหมด 32 ครั้ง (20 + 12 ผลรวมแถวบนของ confusion matrix)

แทนค่าในสมการ precision = TP / (TP + FP) = 20 / (20 + 12) = 62.5%

Recall

นิยามของ Recall คือความน่าจะเป็นที่โมเดลสามารถตรวจจับ spam จากจำนวน spam email ทั้งหมดในข้อมูลของเรา 38 ฉบับ (20 + 18 ผลรวมคอลั่มแรกของ confusion matrix)

แทนค่าในสมการ recall = TP / (TP + FN) = 20 / (20 + 18) = 52.6%

F1-Score

F1-Score คือค่าเฉลี่ยแบบ harmonic mean ระหว่าง precision และ recall นักวิจัยสร้าง F1 ขึ้นมาเพื่อเป็น single metric ที่วัดความสามารถของโมเดล (ไม่ต้องเลือกระหว่าง precision, recall เพราะเฉลี่ยให้แล้ว)

แทนค่าในสมการ F1 = 2 * ( (0.625 * 0.526) / (0.625 + 0.526) ) = 57.1%

[su_spoiler title=”Accuracy ไม่ใช่ metric เดียวที่เราต้องดู”]ในทางปฏิบัติเราจะดูค่า precision, recall, F1 ร่วมกับ accuracy เสมอ โดยเฉพาะอย่างยิ่งเวลาเจอกับปัญหา imbalanced classification i.e. y {0,1} มีสัดส่วนไม่เท่ากับ 50:50 [/su_spoiler]

F-Beta Score

[su_highlight]F Score มีสูตรทั่วไปที่เราสามารถกำหนดค่า Beta ได้เอง (เช่น F1 คือการกำหนด Beta = 1) ถ้าเราอยากให้น้ำหนักไปทาง precision ให้กำหนดค่า Beta < 1 แต่ถ้าอยากเน้นที่ recall ให้กำหนดค่า Beta > 1[/su_highlight].

ถ้าเรากำหนด Beta=0 จะได้ค่า precision เพียวๆเลย (แอด prove สูตรให้ดูด้านล่าง) การใช้ F-Beta Score ช่วยให้เราปรับ metric ได้เหมาะสมตามสถานการณ์ เช่น งานที่เน้น recall ก็ให้ใช้ Beta = 2, 3, 5 เป็นต้น

# example beta=0
F0 = (1 + 0) * (precision * recall) / (0 + recall)
F0 = precision * recall / recall
F0 = precision

AUC

AUC ย่อมาจาก “Area Under <ROC> Curve” เป็นอีกหนึ่ง metric ยอดนิยมที่ใช้กันแทบทุกงานเลย AUC มีค่าอยู่ระหว่าง 0-1 ยิ่งเข้าใกล้ 1 แปลว่าโมเดลในภาพรวมสามารถทำนาย y ได้ดีมาก

  • AUC = 0.50 ไม่ต่างอะไรกับการเดาสุ่มเลย
  • AUC > 0.70 คือเกณฑ์มาตรฐานสำหรับโมเดลส่วนใหญ่
  • AUC > 0.80 โมเดลทำงานได้ดี
  • AUC > 0.90 โมเดลทำงานได้ดีมาก

Summary

เวลาทำงาน regression แอดจะใช้ RMSE กับ R2 เป็นหลัก ส่วน classification จะดูค่า accuracy, precision, recall, F1, AUC พร้อมกันเลย ถ้าเขียนโปรแกรมใน R/ Python จะมีฟังชั่นสำเร็จรูปที่ใช้คำนวณ metrics พวกนี้อยู่แล้ว import library เขียนโค้ดไลน์เดียวจบเลย


Comments

8 responses to “อธิบาย 10 Metrics พื้นฐานสำหรับวัดผลโมเดล Machine Learning”

  1.  Avatar
    Anonymous

    เข้าใจ รู้เรื่อง

  2.  Avatar
    Anonymous

    เข้าใจ รู้เรื่อง ขอบคุณค่ะ

  3.  Avatar

    เป็นไปได้ไหมว่า AUC จะคำนวณออกมาได้น้อยกว่า 50% แล้วมันหมายความว่ายังไงครับ?

    1. เป็นไปได้ครับ แปลว่าโมเดลทำนายแย่กว่าการเดาสุ่มครับผม (เดาสุ่มยังถูก 50% หรือ AUC ประมาณ 50%)

  4.  Avatar

    ขอบคุณสำหรับข้อมูลดีๆครับ

  5.  Avatar
    Anonymous

    แล้วถ้าเป็น recommendation system ควรใช้อะไรในการวัดผลเหรอคะ (กรณีไม่มี rating)

  6.  Avatar
    Anonymous

    ขอบคุณมากเลยครับ อ่านแล้วเข้าใจง่ายมาก

  7. อยากทราบว่าการวัดประสิทธิภาพตัวโมดล linear regression คือดูได้จากค่า RSE ได้มั้ยคะ ส่วนการ predict ใช้ค่า RMSE ในการคำนวณสามารถนำมาเปรียบเทียบกันเพื่อหาประสิทธิภาพโมเดลได้มั้ยคะ หรือถ้าอยากเปรียบเทียบโมเดลตอนเทรนกับเมื่อนำไปtest ได้ค่าerror ต่างกันนี่ดูยังไงคะ

Leave a Reply to AnonymousCancel reply

Discover more from DataRockie

Subscribe now to keep reading and get access to the full archive.

Continue reading