Gini Coefficient and Lorenz Curve
Gini 系数和洛伦兹曲线 (Lorenz Curve) 是用于衡量推荐列表中物品流行度分布不均衡程度的两个重要指标. 洛伦兹曲线则通过绘制推荐物品流行度的累计分布曲线来分析推荐物品的集中程度.
Gini 系数的取值范围是从 0 到 1,用于衡量分布的不平等程度:
- Gini 系数为 0:表示完全平等的分布,每个项的推荐次数都相同。
- Gini 系数为 1:表示极端不平等的分布,所有的推荐次数都集中在一个项上。
在推荐系统中:
- 较低的 Gini 系数 表示推荐系统推荐的物品较为均衡,较少集中在少数流行物品上。
- 较高的 Gini 系数 表示推荐系统推荐的物品集中在少数流行物品上,存在较大的流行度偏差。
通过计算 Gini 系数,可以评估推荐系统在推荐物品时的多样性和公平性。
计算 Gini 系数可以通过以下步骤实现:
- 准备数据: 获取推荐列表中每个物品的推荐次数.
- 排序: 对推荐次数进行排序.
- 计算累积分布: 计算累积推荐次数和累积推荐比例.
- 计算 Gini 系数: 使用公式计算 Gini 系数.
以下是详细的 Python 实现:
1. 数据准备
假设已经有推荐列表 user_recs
, 格式为: {user_id: [(item_id, rating), ...]}
.
from collections import defaultdict
# 计算推荐列表中每个物品的推荐次数
rec_item_count = defaultdict(int)
for user, recs in user_recs.items():
for item, _ in recs:
rec_item_count[item] += 1
# 将推荐次数转化为列表
item_counts = list(rec_item_count.values())
2. 排序
# 将推荐次数排序
item_counts.sort()