การวัดประสิทธิภาพของระบบแนะนำ ที่มักจะพบบ่อยใน Research Paper (Scholarly Articles)

แต่ ไม่ว่า เมตริกทางวิศวกรรมจะแม่นยำเพียงใด ก็ไม่อาจเทียบเท่ากับ เมตริกทางธุรกิจ ดังคำกล่าวของ Milton Friedman นักเศรษศาสาตร์รางวัลโนเบล สรุปไว้ง่ายๆ ประโยคสั้นๆ ว่าคือ “การเพิ่มกำไรสูงสุดให้กับผู้ถือหุ้น”

fr4nk.xyz
myorder
3 min readSep 30, 2024

--

Photo by Rachit Tank on Unsplash

เมตริกที่มักจะพบอยู่บ่อยๆ ใน Research Paper ได้แก่ HR (Hit Rate), NDCG (Normalized Discounted Cumulative Gain), และ MRR (Mean Reciprocal Rank) ซึ่งสามารถประยุกต์ใช้ได้ในหลายงาน เช่น การแนะนำภาพยนตร์ เพลง หรือสินค้า

1. Hit Rate (HR)

Hit Rate หรือ HR คือเมตริกที่ใช้วัดว่าระบบสามารถแนะนำสินค้าที่ผู้ใช้อยากได้หรือไม่ เช่น ถ้าระบบแนะนำ 10 รายการ แล้วผู้ใช้ชอบ 1 รายการ จะถือว่าระบบมี “Hit” ในชุดคำแนะนำนี้ เราสามารถคำนวณ HR ได้ที่ระดับ HR@1, HR@5 หรือ HR@10 ซึ่งหมายถึงการดูว่าผลลัพธ์ที่ผู้ใช้ชอบอยู่ในอันดับ 1, 5 หรือ 10 ของคำแนะนำหรือไม่

ตัวอย่าง:

def HitRate(topNPredicted, leftOutPredictions):
hits = 0
total = 0
for leftOut in leftOutPredictions:
userID = leftOut[0]
leftOutMovieID = leftOut[1]
hit = False
for movieID, predictedRating in topNPredicted[int(userID)]:
if int(leftOutMovieID) == int(movieID):
hit = True
break
if hit:
hits += 1
total += 1
return hits / total

2. NDCG (Normalized Discounted Cumulative Gain)

NDCG เป็นเมตริกที่ใช้วัดความแม่นยำในการจัดอันดับคำแนะนำ โดยให้ความสำคัญกับลำดับของคำแนะนำมากขึ้น ถ้าคำแนะนำที่ผู้ใช้ชอบถูกจัดให้อยู่ในอันดับสูง ก็จะได้คะแนนมาก NDCG@5 และ NDCG@10 หมายถึงการคำนวณจากคำแนะนำ 5 หรือ 10 อันดับแรก

การคำนวณ NDCG สามารถทำได้โดยใช้สูตรต่อไปนี้:

  • DCG = Σ (rating ของ item / log2(position + 1))
  • NDCG = DCG / IDCG (Ideal DCG)

ตัวอย่างการคำนวณ NDCG (Normalized Discounted Cumulative Gain)

NDCG เป็นเมตริกที่ใช้วัดความแม่นยำของการจัดอันดับคำแนะนำ โดยให้ความสำคัญกับลำดับของคำแนะนำ ยิ่งคำแนะนำที่ผู้ใช้ชอบปรากฏในลำดับสูงสุดเท่าไร คะแนน NDCG ก็จะยิ่งสูงขึ้น ตัวอย่างนี้จะอธิบายการคำนวณ NDCG แบบทีละขั้นตอน

- Discounted Cumulative Gain (DCG)

DCG ใช้คำนวณคะแนนของการจัดอันดับคำแนะนำจริง โดยให้คะแนนลดลงตามลำดับที่คำแนะนำปรากฏ สูตรการคำนวณ DCG คือ:

- Ideal DCG (IDCG)

IDCG คือคะแนน DCG ที่เกิดจากการจัดอันดับในอุดมคติ คือการจัดคำแนะนำที่มีคะแนนสูงสุดอยู่ในอันดับแรก ๆ ใช้ในการหาค่าสูงสุดที่เป็นไปได้ของ DCG

- Normalized DCG (NDCG)

NDCG คำนวณโดยการหาร DCG ที่ได้จากการจัดอันดับจริงด้วย IDCG ซึ่งเป็นการจัดอันดับที่ดีที่สุดเท่าที่เป็นไปได้:

ตัวอย่าง

สมมติว่ามีรายการแนะนำ 5 รายการ โดยมีคะแนนจริงของผู้ใช้ (actual ratings) และคำแนะนำที่ระบบจัดอันดับให้ (predicted rankings) ดังนี้:

  • Actual ratings: [5, 3, 2, 4, 1]
  • Predicted rankings: [2, 5, 4, 1, 3]

ขั้นตอนที่ 1: คำนวณ DCG

เราจะใช้สูตร DCG กับลำดับที่ระบบแนะนำ:

ขั้นตอนที่ 2: คำนวณ IDCG

IDCG คือคะแนนจากการจัดอันดับที่ดีที่สุดที่เป็นไปได้:

ขั้นตอนที่ 3: คำนวณ NDCG

ดังนั้น NDCG = 0.862 หรือประมาณ 86.2%

3. MRR (Mean Reciprocal Rank)

MRR ใช้สำหรับวัดว่าคำแนะนำที่ถูกต้องมากที่สุดปรากฏอยู่ในลำดับใด ยิ่งคำแนะนำที่ถูกต้องปรากฏในลำดับแรก ๆ ค่าของ MRR จะยิ่งสูงขึ้น โดย MRR คำนวณจากค่าเฉลี่ยของส่วนกลับของลำดับที่พบคำแนะนำที่ถูกต้อง

ตัวอย่าง:

def AverageReciprocalHitRank(topNPredicted, leftOutPredictions):
summation = 0
total = 0
for userID, leftOutMovieID, actualRating, estimatedRating, _ in leftOutPredictions:
hitRank = 0
rank = 0
for movieID, predictedRating in topNPredicted[int(userID)]:
rank += 1
if int(leftOutMovieID) == movieID:
hitRank = rank
break
if hitRank > 0:
summation += 1.0 / hitRank
total += 1
return summation / total

สรุป

เมตริก HR, NDCG, และ MRR เป็นตัวชี้วัดสำคัญที่ช่วยให้เราทราบถึงประสิทธิภาพของระบบแนะนำ ทั้งในด้านความแม่นยำในการแนะนำและการจัดอันดับ แต่เป็นเพียงส่วนหนึ่งเท่านั้น เพราะอย่างไรก็ตาม เมตริกที่มีประสิทธิภาพสูงสุดคือ เมตริกทางธุรกิจ ดังคำกล่าวของ Milton Friedman นักเศรษศาสาตร์รางวัลโนเบลสรุปไว้ง่ายๆ ประโยคสั้นๆ ว่าคือ “การเพิ่มกำไรสูงสุดให้กับผู้ถือหุ้น”

--

--

fr4nk.xyz
myorder

I'm passionate in Information Processor and interested Computational linguistics & Embedded System