我有两种方法对字符串列表进行不同的排序,我们可以认为是列表的"正确"排序(即黄金标准)。
换句话说:
ranked_list_of_strings_1 = method_1(list_of_strings)
ranked_list_of_strings_2 = method_2(list_of_strings)
correctly_ranked_list_of_strings # Some permutation of list_of_strings
考虑到method_1
和method_2
是黑盒,我如何确定哪种方法更好?在SciPy
或scikit-learn
或类似的库中是否有任何方法可以测量这一点?
在我的特定情况下,我实际上有一个数据帧,每个方法输出一个分数。重要的不是方法的分数与真实分数之间的差异,而是方法获得排名正确(分数越高意味着所有列的排名越高)。
strings scores_method_1 scores_method_2 true_scores
5714 aeSeOg 0.54 0.1 0.8
5741 NQXACs 0.15 0.3 0.4
5768 zsFZQi 0.57 0.7 0.2
您正在寻找标准化贴现累积增益(NDGC)。这是一个通常用于搜索引擎排名的指标,用来测试结果排名的质量。
的想法是,你测试你的排名(在你的情况下,这两个方法)针对用户反馈通过点击(在你的cast真实排名)。NDGC会告诉你质量相对于你排名的真相。
Python有基于RankEval的模块来实现这个度量(如果你想尝试,还有其他一些)。repo在这里,有一个很好的ippython NB示例
scikit-learn库现在似乎也实现了NDCG(和DCG)度量。
https://scikit-learn.org/stable/modules/generated/sklearn.metrics.ndcg_score.html sklearn.metrics.ndcg_score