ทำไม mean Average Precision at k (mAP@k) ถึงมีประโยชน์กับโจทย์ Classification Model
การสร้าง Machine Learning Model นับว่าเป็นหัวใจสำคัญของ Data Scientist และ Modeler หลายๆท่าน ซึ่งแน่นอนว่าหลังสร้าง Model เสร็จ จะต้องมีการนำ Evaluation Metrics มาวัดประสิทธิภาพ Model ของเรา โดย Evaluation Metrics นั้น มีบทบาทที่สำคัญมากต่อการพัฒนา Model ให้ดีที่สุด เพราะฉะนั้นการเลือก Evaluation Metrics ให้เหมาะสมกับ Model จึงเป็นสิ่งที่จำเป็น
บทความนี้จะโฟกัสในส่วนของ Evaluation Metric ตัวนึงที่ใช้วัด Machine Learning Model ของโจทย์ประเภท Classification ซึ่งพระเอกของเรามีนามว่า mean Average Precision at k (mAP@k)
โจทย์ของเราก็คือ …
ก่อนที่จะกล่าวถึงหลักการของ mAP@k นั้น ผู้เขียนขออนุญาตพูดถึงโจทย์ของเรากันก่อนดีกว่า เพื่อที่จะได้เข้าใจถึงปัญหาที่เราอยากแก้ไข และสิ่งที่ต้องการวัดผลในเรื่องของประสิทธิภาพการทำงานของ Model เรา
โจทย์: เราต้องการทายว่า วันไหนของเดือนที่สมาชิก Application แต่ละคนมีแนวโน้มว่าจะเข้ามาใช้งานแอปนี้ เพื่อที่เราจะได้ยิงโฆษณาให้ตรงกับวันที่สมาชิกแต่ละคนเข้ามาใช้งาน โดยส่วนที่สำคัญคือ เราต้องการยิงโฆษณาเพียง 5 วันต่อเดือนสำหรับสมาชิกแต่ละคนเท่านั้น
เพราะฉะนั้นสิ่งที่เราต้องการจะวัดผลคือเหล่าวันที่ใน 5 อันดับแรกที่ Model เราทายมานั้นมีความถูกต้องมากน้อยเพียงใดเมื่อเทียบกับความเป็นจริง โดยจะเห็นได้ว่า 25 วันที่เหลือของเดือนจะไม่มีผลต่อการนำมาวัดประสิทธิภาพ Model ของเรา
mAP@k มันทำงานยังไงกันนะ?
มาเข้าเรื่องหลักของเรากันเลยดีกว่า โดยเราจะพูดถึงคอนเซ็ปต์คร่าวๆของตัว mean Average Precision at k กัน
Evaluation Metric ตัวนี้มีการต่อยอดมาจากการคิด Average Precision (AP) เราจะคิด AP ของแต่ละชุดข้อมูล โดยตัด Threshold ที่อันดับ k ใดๆที่เราสนใจ และนำค่า AP@k ของทุกชุดข้อมูลที่ได้มาเฉลี่ยกัน ได้ออกมาเป็นค่า mAP@k นั่นเอง
ส่วนสูตร และ การคำนวณ AP@k และ mAP@k ก็ตามด้านล่างเลย
โดย TP คือ True Positives ส่วน N(k) กับ TP seen สามารถหาได้ตามสมการ ดังนี้
ซึ่งใน Perfect Case คือ AP = 1 หมายความว่า Model สามารถทาย True Positives มาไว้อันดับต้นๆได้ทั้งหมด
นี่เป็นแค่การคำนวณ AP@k ของสมาชิกคนเดียว หากต้องการ mAP@k เราเพียงนำ AP@k ของสมาชิกทุกคนมาหาค่าเฉลี่ยเท่านั้น
ในที่นี้ ตามโจทย์ของเราคือ
- แต่ละชุดข้อมูล -> ชุดข้อมูลของสมาชิกแต่ละคน
- k -> 5 (วันที่ 5 อันดับแรกที่ Model พ่น Score ออกมาสูงสุดจากทั้งเดือน)
- N -> จำนวนสมาชิกทั้งหมด
แล้ว mAP@k มันดีกว่ายังไงล่ะ?
พอมาถึงตรงนี้ บางท่านอาจสงสัยว่าทำไมถึงเลือกใช้ mAP@k มาเป็น Evaluation Metric ของ Model นี้ แทนที่จะเป็นตัวอื่น ผู้เขียนขอยกตัวอย่างและอธิบายเหตุผลคร่าวๆตามนี้ค่ะ
- การใช้ AUC Score จะวัดออกมาเป็น Overall Score ของทั้งเดือน ซึ่งก็คงตอบโจทย์เราตามที่ Business ต้องการได้ไม่ดีนัก เนื่องจาก Business ต้องการเพียงแค่ 5 วันต่อเดือนเท่านั้น การใช้ mAP@k มาเป็นตัววัดจึงน่าจะเหมาะสมกว่า
- ในกรณีนี้ การใช้ Recall คงจะตอบโจทย์เราได้ไม่ดีเท่ากับการใช้ Evaluation Metrics ที่เป็น Precision Based เนื่องจาก Recall อาจจะดูเป็นการ Bombard Feed โฆษณาให้สมาชิกจนเกินไป (หากมีการเพิ่มวันการส่ง Feed ให้สมาชิก Recall จะยิ่งเพิ่ม) แต่โจทย์เราต้องการที่ลดเหตุการณ์ดังกล่าว โดยต้องการ Target เพียง 5 วันที่เหมาะสมกับสมาชิกมากที่สุดเท่านั้น
- โจทย์ของเรา ณ ตอนนี้ ไม่ได้มีการตัด Threshold ของ Score ที่ได้ในแต่ละวัน ว่าสูงพอที่จะยิงโฆษณาไหม ดังนั้น ตัว F1 Score ก็คงไม่เหมาะอีกเช่นกัน และด้วยเหตุผลเดียวกับที่ว่าทำไมเราจึงไม่ใช้ AUC Score คือ F1 Score จะไปพิจารณาจากทุกค่าของทั้งเดือน
- mAP@k สนใจเรื่อง Ranking ของ Score ซึ่งก็ตรงตามกับจุดประสงค์ของโจทย์เราที่ต้องการคะแนนสูงสุด 5 อันดับแรก หาก Model มีการเรียงอันดับของ Score ที่ต่างกันไป mAP@k ก็จะแสดงคะแนนประสิทธิภาพของ Model ที่ต่างกันออกไปเช่นกัน ยกตัวอย่างเช่น จาก Fig. 1. หากเราสลับอันดับ 2 กับอันดับ 3 ซึ่งในกรณีก็หมายความว่า Model เราทายตำแหน่งออกมาได้แม่นยำขึ้น ดังนั้น คะแนน AP@5 ก็จะเพิ่มขึ้นด้วยเช่นกัน โดยจะเปลี่ยนจากของเดิม 0.76 เป็น 1/3(1/1+2/2+0/3+0/4+3/5) = 0.87
จะเห็นได้ว่า mAP@k เป็น Evaluation Metric ที่ตอบโจทย์ได้ดีเลยทีเดียวสำหรับปัญหาที่สนใจเรื่องอันดับของ Score หวังว่าผู้อ่านจะสามารถเห็นภาพได้ดีขึ้นนะคะ
Ref: