คุณรู้มั้ย… ทำไมค่า ROC AUC Score เยอะ แต่ Precision Recall Score ถึงน้อยกันนะ? — ผลลัพธ์จาก Imbalanced Data
ยุคสมัยนี้คงปฏิเสธไม่ได้ว่าในทุกอุตสาหกรรมมีการนำสิ่งที่เรียกว่า Machine Learning Model มาใช้กับข้อมูลที่มีอยู่เพื่อพัฒนาการสินค้าและบริการ หรือเพิ่ม Revenue ให้กับตัวบริษัทเอง แต่ผู้ที่ทำงานในสายนี้ย่อมรู้ดีว่าตัวโมเดลนั้นมีหลายประเภทมาก และแต่ละประเภทก็สามารถปรับ Parameter ข้างในได้อย่างหลากหลายแบบเช่นกัน ดังนั้นจึงต้องมี “การวัดผล” ของโมเดลว่าอันไหนมีประสิทธิภาพมากที่สุด เพื่อที่เราจะได้เลือกใช้โมเดลนั้นในการทำนายผลนั่นเอง โดยในบทความนี้ผมจะขอพูดถึงโจทย์ประเภท Binary Classification เป็นหลักครับ
สำหรับหัวข้อในบทความนี้จะประกอบไปด้วย
- ประเภทของ Evaluation Metrics
- ความหมายของ ROC AUC Score และ Average Precision Score
- พฤติกรรมของ ROC AUC Score และ Average Precision Score ภายใต้ความเป็นไปได้ในหลายๆ แบบ
- บทสรุปความสัมพันธ์ของ Metrics ทั้ง 2
สำหรับผู้อ่านที่พอมีพื้นฐานในเรื่อง Metrics มาบ้างแล้ว สามารถข้ามไปหัวข้อที่ 3 ได้เลยครับ 👍
เริ่มจากหัวข้อแรก
ประเภทของ Evaluation Metrics
การวัดผลของโจทย์ประเภทนี้สามารถแบ่งได้ 3 แบบหลักๆ คือ
- Threshold Metrics
เป็นการวัดผลโดยนำผลลัพธ์ที่เป็น Binary Result จากโมเดลมาเทียบกับ Label โดยตรง สามารถศึกษารายละเอียดได้จากลิงก์นี้ - Ranking Metrics
เป็นการวัดผลโดยนำผลลัพธ์ที่เป็น Probability Score จากโมเดลมาเทียบกับ Label {1,0} โดยมีเป้าหมายคือเพื่อตรวจสอบว่า Ranking ของ Score นั้นสอดคล้องกับ Label มากน้อยแค่ไหน ซึ่งจะมี Metrics ที่เด่นๆ คือ ROC AUC Score และ Average Precision Score (Precision Recall Score) ที่จะพูดเป็นหัวข้อหลักในบทความนี้ - Probability Metrics:
คล้ายกันกับ Ranking Metrics แต่นอกจากจะดูว่า Ranking ของ Score ดีแค่ไหนแล้ว ยังมีการตรวจสอบค่าของ Score ที่ได้ว่ามีความใกล้กับ Label {1,0} มากน้อยแค่ไหน (เช่น Score1 , Score2 มี Ranking เทียบกับ Label แบบเดียวกัน อาจให้ผลลัพธ์ที่ต่างกันได้) เช่น ค่า Log Loss รายละเอียดเพิ่มเติมดูได้จากลิงก์นี้
ข้อสังเกต
1. สังเกตว่า Score1, Score2 มีการเรียงแบบเดียวกันเมื่อเทียบกับ True Label ดังนั้น Ranking Score จะมีค่าเท่ากัน
2. แม้ว่า Score1, Score2 จะมี Ranking Score เท่ากัน แต่จะเห็นว่าในแต่ละค่าของ Score1 นั้นใกล้กับ 0,1 มากกว่า Score2 ดังนั้นเมื่อนำมาคำนวณผ่าน Probability Metrics จะพบว่า Score2 มีแนวโน้มที่แย่กว่า Score1 (พูดอีกแบบคือ ค่า Loss Function ของ Score2 จะเยอะกว่า Score1)
จากรูปที่ 3: สังเกตว่าค่าของ ROC AUC Score มีค่าประมาณ 0.87 แต่ Average Precision Score มีค่าประมาณ 0.94 ซึ่งถือว่าสูงทั้งคู่ (ยิ่งสูง ยิ่งดี) แต่แท้จริงแล้วค่า ROC AUC Score และ Average Precision Score นั้นไม่ได้มีความสัมพันธ์ระหว่างกันขนาดนั้น ยกตัวอย่างเช่นเคส Credit-Fraud Detection ในลิงก์ด้านล่างนี้
หากเข้าไปดูจะเห็นว่าผู้เขียนได้คำนวณค่า ROC AUC Score ได้ออกมาประมาณ 0.90 แต่ Average Precision Score มีค่าเพียง 0.03 ซึ่งเป็นผลจากสิ่งที่เรียกว่า Imbalanced Data (จำนวน Positive Label มีค่าน้อยกว่าจำนวน Negative Label มากๆ อาจจะเป็น 100 เท่า หรือ 1,000 เท่า) ทางผู้เขียนจึงอยากจะมาอธิบายว่าทำไม Imbalanced Data ส่งผลให้ค่า Average Precision Score น้อยขนาดนั้น ทั้งๆ ที่ ROC AUC Score มีค่าสูงถึง 0.90 โดยเนื้อหาในส่วนนี้จะลงทฤษฎีค่อนข้างเยอะ สำหรับผู้อ่านที่ไม่ค่อยแม่นสามารถข้ามไปช่วงท้ายตรงสรุปได้นะครับ 😊
“ค่า ROC AUC Score มีค่าได้ประมาณ 0.90 แต่ Average Precision Score มีค่าเพียง 0.03”
ความหมายของ ROC AUC Score & Average Precision Score
1. ROC AUC Score: เกิดจากการหาพื้นที่ใต้กราฟที่มีการพลอตระหว่าง TPR (True Positive Rate) และ FPR (False Positive Rate) ที่หาจาก Probability Score และ Label ซึ่งสอดคล้องกับสมการ
2. Average Precision Score: เกิดจากการหาพื้นที่ใต้กราฟที่มีการพลอตระหว่าง Precision และ Recall ที่หาจาก Probability Score และ Label ซึ่งสอดคล้องกับสมการ
Let’s go deeper …
ในบทความนี้เราจะพยายามศึกษาพฤติกรรมของ ROC AUC Score กับ Average Precision Score จากสิ่งที่เรามี คือ Label (y_true) และ Probability Score (y_pred_score) ว่าทำไมโจทย์ที่มีการเล่นกับ Imbalanced Data ค่าของ Evaluation Metrics ทั้งสองจึงมีสิทธิ์ที่จะออกมาต่างกันราวฟ้ากับเหว ซึ่งผมได้พบ Paper นี้ ที่ได้อธิบายไว้ระดับหนึ่ง โดยผมจะนำผลลัพธ์ที่ได้จาก Paper ดังกล่าวมาอธิบายคร่าวๆ ในรูปแบบที่น่าจะช่วยให้เข้าใจง่ายขึ้นครับ
Step 1: Define Related Functions and Variables
กำหนดให้จำนวน Sample ของเรามีทั้งหมด n จำนวน ให้ Score จากโมเดลเรียงจากมากไปน้อยเป็น x₁, x₂, x₃, …,xₙ และ True Label ของแต่ละ Sample เป็น y₁, y₂, …, yₙ∈ {0,1} ถ้าเรากำหนด Threshold ในการตัด Score ให้เป็น xₖ เราจะได้ผลลัพธ์ที่เป็นค่า 0,1 จากโมเดลออกมา เป็น z₁, z₂, …, zₙ โดยที่
โดยสำหรับแต่ละ k เราจะสามารถคำนวณค่าของ TPR, FPR, Precision, Recall ระหว่าง {yᵢ} (y true) และ {zᵢ} (y pred) ได้ดังตัวอย่างในรูปที่ 5 (ด้านล่าง) ซึ่งสุดท้ายเราจะสามารถรวมค่าเหล่านี้เป็น ROC AUC Score และ Average Precision Score ได้นั่นเอง
กำหนดให้
n₁ = จำนวนของ Positive Label ทั้งหมด
สำหรับ k ใด ๆ (ตัด Threshold ที่ xₖ) กำหนดให้
g(k) = จำนวนของ True Positive ที่เกิดขึ้น
จากตัวแปรต่างๆ ที่นิยามข้างต้น สามารถเขียน Confusion Matrix ได้เป็น
ซึ่งหากลองมองเป็น Proportion โดยเปลี่ยนตัวแปรดังนี้
จะสามารถเขียน Confusion Matrix ใหม่ได้เป็น
สังเกตว่าในที่นี้ t,h(t) จะเป็น Variable และ Function ที่เปลี่ยนค่าไปเรื่อยๆ เมื่อ t เปลี่ยน แต่ π จะเป็นค่าคงที่ โดยมีค่าเท่ากับอัตราส่วนระหว่างจำนวน Positive Label กับจำนวน Negative Label ซึ่งเดี๋ยวค่านี้จะมาเป็นตัวเอกของเราในการวิเคราะห์ผลลัพธ์นะครับ
จากตารางที่ 7 เราสามารถหาค่า True Positive Rate, False Positive Rate, Precision, Recall ที่จุด t ใดๆ ได้เป็น
Step 2: Derive and Calculation
คราวนี้เรามาคำนวณค่าของ ROC AUC Score กับ Average Precision Score กันว่าสองตัวนี้มีค่าเท่าไหร่กันนะ เมื่อเรากำหนดตัวแปรและฟังก์ชันดังตามด้านบน แต่จะขอไม่ลงวิธีการคำนวณโดยละเอียดเพื่อความง่ายในการอ่านนะครับ
Note: เพื่อความง่ายในการคำนวณ จะขอสมมติให้ h(t) ประพฤติตัวเป็น Continuous Function & Differentiable
2.1 ROC AUC Score
2.2 Average Precision Score
ซึ่งจากการจัดรูปข้างต้นจะสรุปได้ว่า “ค่า Metrics ทั้งสองขึ้นอยู่กับว่า h(t) มีหน้าตาเป็นอย่างไร” ยกตัวอย่างเช่น
สำหรับ Random Score สามารถนิยาม h(t) ได้เป็น h(t) = πt
สำหรับ Perfect Score สามารถนิยาม h(t) ได้เป็น h(t) = min(t,π)
โดยสามารถนำไปคำนวณค่า ROC AUC Score และ Average Precision Score ได้เป็น
ROC_AUC(random) =0.5, AP(random) = π,
ROC_AUC(perfect) = 1, AP(perfect)=1
ปล. ขอข้ามวิธีพิสูจน์บ้างนะครับ 😂
Step 3. Analyze and Conclusion
สำหรับใครที่อ่านมาถึงจุดนี้ ต้องขอบคุณมากนะครับ เพราะเอาจริงเนื้อหาค่อนข้างจะหนักหน่วงในส่วนของการคำนวณพอสมควร ซึ่งเป็นสิ่งที่ผู้เขียนอยากจะลองมานำเสนอให้อ่านได้ง่ายขึ้น (รึเปล่า? 555) เพื่อเป็นหลักฐานรองรับผลลัพธ์ที่จะเกิดขึ้น
ถึงตอนนี้เราจะมาดูกันต่อว่าภายใต้ค่าของฟังก์ชัน h(t) บางฟังก์ชันจะส่งผลอย่างไรต่อค่า Metrics ที่เราสนใจ เมื่อพิจารณาในกรณีของ Imbalanced Data หรือที่ค่า π มีน้อยมากๆ (เช่น π = 0.007) โดยจาก Paper ที่ผมบอกไว้ข้างต้นได้เสนอหน้าตาของ h(t) เป็นแบบนี้ครับ
ก็อย่าเพิ่งตกใจไปนะครับบ เพราะสมการข้างต้นมี Motivation จากการเอาเส้นตรง 2 เส้นมาต่อกัน โดยสามารถนำมาพลอตเป็นกราฟได้ดังรูปด้านล่างนี่เอง
จากรูป Parameter α,β สามารถอธิบายหน้าตา Score ได้ดังนี้
α แทนจุดที่ Precision ของ Score เกิดการ Drop ถ้ามีค่ามาก แสดงว่าโมเดลของเราสามารถจับคนได้แม่นในกรณีที่เพิ่ม Threshold ไปมากในระดับนึง
β แทน Precision เริ่มต้น ถ้ามีค่ามาก หมายความว่า Precision ก่อนที่จะ Drop นั้นมีค่ามาก
โดยจาก h(t) ที่กำหนดข้างต้นนั้น สามารถนำมาคำนวณ ROC AUC Score และ Average Precision Score แบบน่ากลัวๆ ได้เป็น…
เรามาสนใจผลลัพธ์สุดท้ายกันดีกว่านะครับ โดยเราจะเลือกค่า α,β ที่ต่างกันมาแทน ให้ดูว่าค่า Metrics ทั้งสองนี้จะมีหน้าตาเป็นอย่างไร
1. Balance Data (π=0.5)
ค่า (α,β) ที่เลือกใช้
Red Line: (0.5,0.8), Blue Line: (0.4,0.9), Yellow Line: (0.3,0.95)
จากรูปที่ 9 สำหรับผู้อ่านที่เคยทำโมเดลปกติจะเห็นผลลัพธ์นี้เป็นที่ชินตา ก็คือค่า ROC AUC Score สูงประมาณนึง ในขณะที่ Average Precision ก็มีค่าใกล้ๆ กัน แต่ถ้าเกิด Data ที่เราใช้มัน Imbalance ล่ะ?
2. Imbalanced Data (π ≪ 1)
ค่า (α,β) ที่เลือกใช้
[ซ้าย] Red Line: (0.0009,1), Blue Line: (0.0008,0.9), Yellow Line: (0.0007,0.6)
[ขวา] Red Line: (0.2,0.004), Blue Line: (0.05,0.014), Yellow Line: (0.0007,0.9)
สำหรับรูปที่ 10 คือกรณีที่เจอ Imbalanced Data ผมได้นำเสนอ 2 แบบคือ
2.1 รูปด้านซ้าย จะเห็นว่าเส้นสีแดงและสีน้ำเงินต่างเป็นกรณีที่มีหน้าตาค่า Metrics คล้ายกับกรณีของ Balance Data คือทั้งค่า ROC AUC Score และ Average Precision Score มีค่าที่สูงคู่กัน ที่เป็นอย่างนี้เพราะ Precision เริ่มต้นมีค่าสูงมาก (β สูง)
2.2 รูปด้านขวา สังเกตว่าเส้นสีแดงและสีน้ำเงินมีค่า ROC AUC Score ที่สูงระดับนึงเลย (ประมาณ 0.8) แต่ว่าค่า Average Precision Score กลับมีค่าต่ำมาก ซึ่งเป็นผลจาก Precision เริ่มต้นที่ไม่สูงมาก แต่ยืนระยะนาน (β ต่ำ α สูง)
บทสรุป…
จากทั้งหมดที่ผ่านมา สามารถสรุปได้ว่าการที่ ROC AUC Score มีค่าสูงนั้นไม่ได้หมายความว่าค่า Average Precision Score จะสูงตาม ในขณะที่บางครั้ง ROC AUC Score ต่ำกว่าอาจจะมีค่า Average Precision Score ที่สูงกว่าก็ได้ แม้สองค่านี้จะเป็นค่าที่บอกถึง Ranking Metrics แต่ก็ขึ้นอยู่กับการใช้งานว่าเราจะนำไปใช้กับอะไร
ในการทำโมเดล เราควรกำหนด Metric ที่ใช้วัดผลตั้งแต่แรก ไม่ควรนำมาใช้คู่กัน เพราะจะทำให้เกิดความสับสนได้ทั้งฝั่ง Modeler และฝั่ง Business โดยวิธีเลือกว่าเราจะใช้ Metric ไหนอยู่ที่ Objective ที่เราต้องการ
จากรูปข้างต้นจะเห็นว่า Average Precision Score จะถูกเลือกใช้เมื่อ Positive Label มีความสำคัญมากๆ ในขณะที่ถ้าทั้ง Positive และ Negative Label มีความสำคัญพอกัน ก็สามารถเลือกใช้ ROC AUC Score ได้นั่นเอง
สุดท้าย … (จริง ๆ ละ) ครับ
สำหรับใครที่ได้อ่านตั้งแต่แรกจนจบ ขอขอบคุณมากๆๆๆ ในความอดทนและความสนใจนี้ 😍 นี่เป็นบทความแรกของผม ไม่แน่ใจว่าเขียนออกมาแล้วงงหรือทำให้สับสนตรงไหนหรือเปล่า หากมีส่วนไหนผิดพลาด ก็ต้องขออภัยด้วยนะครับ หากมีข้อสงสัยตรงไหนเพิ่มเติมก็สามารถถามได้เลยเช่นกันครับผม
สำหรับชาวเทคคนไหนที่สนใจเรื่องราวดีๆ แบบนี้ หรืออยากเรียนรู้เกี่ยวกับ Product ใหม่ๆ ของ KBTG สามารถติดตามรายละเอียดกันได้ที่เว็บไซต์ www.kbtg.tech