nDCG(Normalized Discounted Cumulative Gain,归一化折损累计增益)是一种用于评估排序质量的指标,常见于信息检索和推荐系统。它考虑了排序列表中每个位置的相关性得分,并对靠前位置给予更高权重,同时通过归一化处理使结果在0到1之间,便于不同排序结果的比较。
它的计算步骤应该是先计算DCG,然后找到理想情况下的IDCG,最后用DCG除以IDCG得到nDCG。
计算步骤:
- CG(Cumulative Gain):简单累加排序列表中各结果的相关性得分。
- DCG(Discounted CG):对每个位置的得分进行折损(靠后的位置权重降低),公式为:
[
DCG = \sum_{i=1}^{n} \frac{rel_i}{\log_2(i+1)}
]
其中,( rel_i ) 是第i个位置的相关性得分。 - IDCG(Ideal DCG):将结果按真实相关性降序排列后计算的DCG,即理想状态下的最大DCG。
- nDCG:将DCG除以IDCG进行归一化:
[
nDCG = \frac{DCG}{IDCG}
]
数值示例:
假设搜索“机器学习”返回5个文档,真实相关性评分(0-3分)和实际排序如下:
位置 | 实际排序 | 相关性 |
---|---|---|
1 | 文档A | 3 |
2 | 文档B | 2 |
3 | 文档C | 3 |
4 | 文档D | 0 |
5 | 文档E | 1 |
1. 计算DCG(实际排序的折损累计增益):
[
\begin{align*}
DCG &= \frac{3}{\log_2(2)} + \frac{2}{\log_2(3)} + \frac{3}{\log_2(4)} + \frac{0}{\log_2(5)} + \frac{1}{\log_2(6)} \
&= \frac{3}{1} + \frac{2}{1.585} + \frac{3}{2} + 0 + \frac{1}{2.585} \
&= 3 + 1.26 + 1.5 + 0 + 0.39 \
&= 6.15
\end{align*}
]
2. 计算IDCG(理想排序的DCG):
理想排序应为相关性降序排列:文档A(3)、文档C(3)、文档B(2)、文档E(1)、文档D(0)。
[
\begin{align*}
IDCG &= \frac{3}{\log_2(2)} + \frac{3}{\log_2(3)} + \frac{2}{\log_2(4)} + \frac{1}{\log_2(5)} + \frac{0}{\log_2(6)} \
&= \frac{3}{1} + \frac{3}{1.585} + \frac{2}{2} + \frac{1}{2.32} + 0 \
&= 3 + 1.89 + 1 + 0.43 + 0 \
&= 6.32
\end{align*}
]
3. 计算nDCG:
[
nDCG = \frac{DCG}{IDCG} = \frac{6.15}{6.32} \approx 0.97
]
结论:
nDCG值为0.97,接近1,说明实际排序与理想排序非常接近。该指标能有效衡量排序质量,尤其关注高相关结果是否排在前面。值越接近1,排序效果越好。