2014-05-23 7 views
9

J'ai deux méthodes qui classent différemment une liste de chaînes, et ce que nous pouvons considérer comme le «bon» classement de la liste (c'est-à-dire un étalon-or).Distances entre les classements

En d'autres termes:

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 

Comment puis-je déterminer quelle est la meilleure méthode en considérant que method_1 et method_2 sont des boîtes noires? Existe-t-il des méthodes pour mesurer ce disponible dans SciPy ou scikit-learn ou des bibliothèques similaires?

Dans mon cas spécifique, j'ai réellement une trame de données, et chaque méthode produit un score. Ce qui compte, ce n'est pas la différence de score entre les méthodes et les scores réels, mais que les méthodes obtiennent le classement droit (un score plus élevé signifie un classement plus élevé pour toutes les colonnes).

 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 

Répondre

8

Vous êtes à la recherche du gain cumulatif Normalisée à prix réduits (NDGC). C'est une métrique couramment utilisée dans les classements des moteurs de recherche pour tester la qualité du classement des résultats. L'idée est que vous testiez votre classement (dans votre cas les deux méthodes) contre les commentaires des utilisateurs à travers les clics (dans votre casting le vrai rang). NDGC vous dira la qualité de votre classement par rapport à la vérité.

Python a RankEval basé module qui implémente cette métrique (et d'autres si vous voulez les essayer). Le repo is here et il y a une belle IPython NB with examples

Questions connexes