背景介绍
在站内搜索的开发中,随着功能迭代逐渐完善,便需要开始考虑搜索召回质量的判断。在最开始的评价方式会比较简陋,更多会通过简单的肉眼去看一些热门关键词的搜索结果,这样的评价是相当主观和低效的;然后在迭代过程中,衍生出了新的方式,通过部署不同版本的程序进行AB测试,将流量分开给予两个不同版本,通过用户留存率和转化率等指标来判断我们的版本是正向效果还是负向效果,这种方式的缺点就是无法排除其他因素的影响,毕竟搜索不是唯一发生变化的位置,界面的改版甚至由暑假进入开学等等都会影响到这些数据的变化,所以我们寻求了新的评价体系和评价指标。
首先明确一点,召回质量是一个比较主观的判断这是无可避免的,那么交由产品经理对结果打分的权力让他来决定召回结果的好坏(黑锅给他)是一个可行的方式,否则任何人都有角度可以对召回结果打分;其次,如果有一个直观的打分就可以更好的比较不同版本之间优劣而不是通过留存率等数据模糊的猜测,这时候我们考虑到了NDCG这个方式。
名词解释
NDCG,Normalized Discounted cumulative gain 直接翻译为归一化折损累计增益
粗暴的来看,这是一个对召回结果进行量化打分的评价指标。
这里引用一篇博客,写的通俗易懂,如何理解和如何计算NDCG都是从他这里学习得到,然后再适度变形为我们需要的NDCG。
搜索评价指标——NDCG
实际使用
参考上面的博客可以了解NDCG的意思和如何计算,这里我复盘下在实际操作中如何变形计算来应用到我们的测试工具中。
我们的目的是比较出AB版本哪个版本更好,参考原博客的打分方式会略有些繁琐,毕竟人很难对不同结果有一个非常可观而且区分度比较高的打分。简而言之,打分者其实很难判断召回的每个结果是1分2分还是3分,人比较容易能做的事仅仅是,对比两个结果之间谁更好而已。
既然目的是对比AB版本的搜索质量,那么就可以这样简化NDCG模型,可以用下面这串json就能表示清楚AB版本之间结果的优劣:
{
"11": {
"value": "B",
"desc": ""
},
"12": {
"value": "A",
"desc": ""
},
"13": {
"value": 0,
"desc": ""
},
"14": {
"value": 0,
"desc": ""
},
"0": {
"value": "A",
"desc": ""
},
"1": {
"value": "B",
"desc": ""
},
"2": {
"value": "A",
"desc": ""
},
"3": {
"value": "B",
"desc": "12313"
},
"4": {
"value": "A",
"desc": ""
},
"5": {
"value": "B",
"desc": ""
},
"6": {
"value": "A",
"desc": ""
},
"7": {
"value": "B",
"desc": ""
},
"8": {
"value": "A",
"desc": ""
},
"9": {
"value": "B",
"desc": ""
},
"10": {
"value": "A",
"desc": ""
}
}
value为A时就是认为A组的第一个结果更好,反之value为B时结果亦然。为0的时候则是认为2个结果的得分一样,这样我们就可以得到A,B两组的一个相对得分。这时候计算CG的方式可以如下:
A:7
B:4
规则如下:A比B好则得1分,反之B得1分,一样好不得分
由此我们可以计算得到A和B的CG
再参考上面博客提供的计算方式即可计算出NDCG
网友评论