搜索推荐评价指标Precision@k、Recall@k、F1@k、NDCG@k
假設對于一個查詢,真實相關的結果是{A,C,E, Q},搜索模型得到5個結果{A, B, C, D, E},則其中只有A,C,E是相關的,標記為{1, 0, 1, 0, 1},1表示相關,0表示不相關。
Precision@k
即預測正確的相關結果占返回的所有結果的比例:
Precision@k=TP@kTP@k+FP@kPrecision@k = \frac{TP@k}{TP@k+FP@k} Precision@k=TP@k+FP@kTP@k?
取值范圍[0,1],越大越好。
例子:
Precision@3 = 2/3 = 0.67
Precision@4 = 2/4 = 0.50
Precision@5 = 3/5 = 0.60
Recall@k
即預測正確的相關結果占所有相關結果的比例:
Recall@k=TP@kTP@k+FN@kRecall@k = \frac{TP@k}{TP@k+FN@k} Recall@k=TP@k+FN@kTP@k?
取值范圍[0,1],越大越好。
例子:
Recall@3 = 2/4 = 0.50
Recall@4 = 2/4 = 0.50
Recall@5 = 3/4 = 0.75
F1@k
即Precision@k和Recall@k的調和平均數:
F1@k=2×Precision@k×Recall@kPrecision@k+Recall@kF1@k = \frac{2 \times Precision@k \times Recall@k}{Precision@k+Recall@k} F1@k=Precision@k+Recall@k2×Precision@k×Recall@k?
取值范圍[0,1],越大越好。
例子:
F1@3 = (2 * 0.67 * 0.50)/(0.67 + 0.50) = 0.57
F1@4 = (2 * 0.50 * 0.50)/(0.50 + 0.50) = 0.50
F1@5 = (2 * 0.60 * 0.75)/(0.60 + 0.75) = 0.67
注意:Precision@k、Recall@k、F1@k評價指標都是與返回順序無關的。
NDCG@k
歸一化折損累計增益(Normalized Discounted Cumulative Gain,NDCG),是一種考慮了返回順序的評價指標。取值范圍[0,1],越大效果越好。
NDCG@k=DCG@kIDCG@kNDCG@k = \frac{DCG@k}{IDCG@k} NDCG@k=IDCG@kDCG@k?
其中,
DCG@k=∑i=1krelilog2(i+1)DCG@k=\sum_{i=1}^{k}\frac{rel_{i}}{log_{2}(i+1) } DCG@k=i=1∑k?log2?(i+1)reli??
relirel_ireli?指第iii個結果的真實相關性分數。
IDCG@k=∑i=1∣REL∣relilog2(i+1)IDCG@k=\sum_{i=1}^{|REL|}\frac{rel_{i}}{log_{2}(i+1) } IDCG@k=i=1∑∣REL∣?log2?(i+1)reli??
IDCG也就是理想的DCG(Ideal DCG)。|REL| 表示,結果按照真實相關性從大到小排序,取前k個結果組成的集合的個數。
舉個例子:
假設對于一個查詢,搜索模型得到8個結果{A, B, C, D, E, F, G, H},分數是{0.94, 0.93, 0.92, 0.91, 0.8, 0.7, 0.6, 0.5},其真實相關性分數是{3, 2, 3, 0, 1, 2, 3, 0},求NDCG@6。
首先求DCG@6:
| A | 3 | 3 |
| B | 2 | 1.26185950 |
| C | 3 | 1.5 |
| D | 0 | 0 |
| E | 1 | 0.38685280 |
| F | 2 | 0.71241437 |
NDCG@6=3+1.26185950+1.5+0+0.38685280+0.71241437=6.86112667NDCG@6=3+1.26185950+1.5+0+0.38685280+0.71241437=6.86112667NDCG@6=3+1.26185950+1.5+0+0.38685280+0.71241437=6.86112667
再求IDCG@6:
對真實相關性分數排序,得到{3, 3, 3, 2, 2, 1, 0, 0}
| 3 | 3 |
| 3 | 1.89278926 |
| 3 | 1.5 |
| 2 | 0.86135311 |
| 2 | 0.77370561 |
| 1 | 0.35620718 |
IDCG@6=3+1.89278926+1.5+0.86135311+0.77370561+0.35620718=8.38405516IDCG@6=3+1.89278926+1.5+0.86135311+0.77370561+0.35620718=8.38405516IDCG@6=3+1.89278926+1.5+0.86135311+0.77370561+0.35620718=8.38405516
最終,NDCG@6=6.86112667/8.38405516=0.81835419NDCG@6=6.86112667/8.38405516=0.81835419NDCG@6=6.86112667/8.38405516=0.81835419,約82%。
注意點:
1、分母log2(i+1)log_2{(i+1)}log2?(i+1)相當于對返回位置進行了懲罰,越往后懲罰越大。分母IDCG@kIDCG@kIDCG@k是為了將分數歸一化到[0,1]之間。
2、模型分數{0.94, 0.93, 0.92, 0.91, 0.8, 0.7, 0.6, 0.5}的大小不會影響最終NDCG的值,比如改為{100, 90, 80, 70, 60, 50, 40, 30},最終NDCG分數是一樣的,只要保證是從大到小排序就行,因為在實際中,一般也是按照模型分數從大到小的順序返回結果。
代碼:
import numpy as np from sklearn import metrics# NDCG true_relevance = np.array([[3, 2, 3, 0, 1, 2, 3, 0]]) scores = np.array([[0.94, 0.93, 0.92, 0.91, 0.8, 0.7, 0.6, 0.5]])print(metrics.ndcg_score(true_relevance, scores, k=6)) # 0.8183541904922857參考文章:
[1] 搜索評價指標——NDCG
[2] 信息檢索中的度量指標全解析
總結
以上是生活随笔為你收集整理的搜索推荐评价指标Precision@k、Recall@k、F1@k、NDCG@k的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【原创】新韭菜日记20---在国内股市亏
- 下一篇: carsim/trucksim获取轮胎侧