3.5 推荐系统评价指标详解:准确率、召回率、F1、NDCG,如何选择
·
3.5 推荐系统评价指标详解:准确率、召回率、F1、NDCG,如何选择
引言
推荐系统的评估指标直接影响模型优化方向。准确率、召回率、F1、NDCG等指标各有特点,选择合适的指标至关重要。本文将深入解析这些指标的含义、计算方法和选择原则。
一、分类指标
1.1 准确率和召回率
# 准确率和召回率
from sklearn.metrics import precision_score, recall_score, f1_score
def calculate_classification_metrics(y_true, y_pred):
"""
计算分类指标
"""
precision = precision_score(y_true, y_pred)
recall = recall_score(y_true, y_pred)
f1 = f1_score(y_true, y_pred)
print(f"准确率(Precision): {precision:.4f}")
print(f"召回率(Recall): {recall:.4f}")
print(f"F1分数: {f1:.4f}")
return precision, recall, f1
print("分类指标计算函数已准备")
1.2 指标解释
# 指标解释
def metrics_explanation():
"""
指标解释
"""
print("=" * 60)
print("指标解释")
print("=" * 60)
explanations = {
'准确率(Precision)': {
'定义': '推荐中用户喜欢的比例',
'公式': 'TP / (TP + FP)',
'关注': '推荐质量'
},
'召回率(Recall)': {
'定义': '用户喜欢的被推荐的比例',
'公式': 'TP / (TP + FN)',
'关注': '推荐覆盖度'
},
'F1分数': {
'定义': '准确率和召回率的调和平均',
'公式': '2 * (Precision * Recall) / (Precision + Recall)',
'关注': '平衡准确率和召回率'
}
}
for metric, details in explanations.items():
print(f"\\n{metric}:")
for key, value in details.items():
print(f" {key}: {value}")
return explanations
metrics_explanation()
二、排序指标
2.1 NDCG
# NDCG计算
def calculate_ndcg(y_true, y_pred_scores, k=10):
"""
计算NDCG@K
"""
# 排序
sorted_indices = np.argsort(y_pred_scores)[::-1]
sorted_true = y_true[sorted_indices][:k]
# 计算DCG
dcg = np.sum(sorted_true / np.log2(np.arange(2, len(sorted_true) + 2)))
# 计算IDCG(理想DCG)
ideal_sorted = np.sort(y_true)[::-1][:k]
idcg = np.sum(ideal_sorted / np.log2(np.arange(2, len(ideal_sorted) + 2)))
# NDCG
ndcg = dcg / idcg if idcg > 0 else 0
return ndcg
print("NDCG计算函数已准备")
2.2 MAP和MRR
# MAP和MRR
def calculate_map_mrr(y_true, y_pred_scores, k=10):
"""
计算MAP和MRR
"""
# 排序
sorted_indices = np.argsort(y_pred_scores)[::-1][:k]
sorted_true = y_true[sorted_indices]
# MAP(平均精度均值)
relevant_count = 0
precision_sum = 0
for i, is_relevant in enumerate(sorted_true, 1):
if is_relevant:
relevant_count += 1
precision_sum += relevant_count / i
map_score = precision_sum / np.sum(y_true) if np.sum(y_true) > 0 else 0
# MRR(平均倒数排名)
mrr_score = 0
for i, is_relevant in enumerate(sorted_true, 1):
if is_relevant:
mrr_score = 1.0 / i
break
return map_score, mrr_score
print("MAP和MRR计算函数已准备")
三、指标选择
3.1 选择指南
# 指标选择指南
def metric_selection_guide():
"""
指标选择指南
"""
print("=" * 60)
print("指标选择指南")
print("=" * 60)
guide = {
'选择准确率当': [
'关注推荐质量',
'推荐数量有限',
'用户对错误推荐敏感'
],
'选择召回率当': [
'关注推荐覆盖度',
'希望推荐更多物品',
'用户对遗漏敏感'
],
'选择F1当': [
'需要平衡准确率和召回率',
'单一指标不够',
'综合评估'
],
'选择NDCG当': [
'关注排序质量',
'Top-K推荐',
'考虑位置权重'
],
'选择MAP当': [
'关注平均精度',
'多查询场景',
'综合评估'
]
}
for condition, scenarios in guide.items():
print(f"\\n{condition}:")
for scenario in scenarios:
print(f" - {scenario}")
return guide
metric_selection_guide()
四、业务指标
4.1 业务指标
# 业务指标
def business_metrics():
"""
业务指标
"""
print("=" * 60)
print("业务指标")
print("=" * 60)
metrics = {
'点击率(CTR)': {
'定义': '推荐被点击的比例',
'计算': '点击数 / 曝光数',
'价值': '衡量推荐吸引力'
},
'转化率(CVR)': {
'定义': '推荐转化为购买的比例',
'计算': '购买数 / 点击数',
'价值': '衡量推荐商业价值'
},
'GMV': {
'定义': '成交总额',
'计算': '推荐带来的总成交额',
'价值': '直接商业价值'
},
'用户满意度': {
'定义': '用户对推荐的满意度',
'计算': '通过评分、反馈等',
'价值': '长期用户价值'
}
}
for metric, details in metrics.items():
print(f"\\n{metric}:")
for key, value in details.items():
print(f" {key}: {value}")
return metrics
business_metrics()
五、总结与思考
5.1 核心要点
- 分类指标:准确率、召回率、F1
- 排序指标:NDCG、MAP、MRR
- 业务指标:CTR、CVR、GMV
- 选择原则:根据业务需求选择
5.2 思考题
- 如何选择合适的评估指标?
- 如何平衡多个指标?
- 如何将技术指标与业务指标结合?
5.3 实践建议
- 多指标评估:使用多个指标综合评估
- 业务结合:结合业务指标
- A/B测试:用实际效果验证
- 持续优化:根据指标优化模型
下一节预告:我们将学习推荐系统架构设计,如果让你设计推荐系统,你会如何架构?
更多推荐
所有评论(0)