Comment savoir si une recherche est bonne ?
La précision et le rappel sont deux mesures de la qualité d’une recherche. La précision dit quelle part des résultats est utile, le rappel quelle part des documents utiles a été trouvée.
Un moteur qui rend tous les documents ne rate rien, mais ne sert à rien. Un moteur qui rend un seul bon document est exact, mais manque tout le reste. Il faut deux nombres.
À la fin de cette leçon
Remarque
Je peux juger une recherche avec la précision et le rappel.
Mots clés
| Mot | Ce que ça veut dire |
|---|---|
| Document pertinent | un document réellement utile pour la question |
| Document rendu | un document que la recherche a renvoyé |
| Précision | la part des documents rendus qui sont pertinents |
| Rappel | la part des documents pertinents qui ont été rendus |
| Précision à k | la précision sur les k premiers résultats |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Quatre cas décrivent une recherche
Pour chaque document, on se demande deux choses : la recherche l’a-t-elle rendu, et est-il pertinent ? Cela donne quatre cas.
Les bons résultats sont rendus et pertinents. Les faux résultats sont rendus mais inutiles. Les oubliés sont pertinents mais pas rendus. Le reste n’est ni rendu ni pertinent.
Exemple travaillé : une recherche sur mille fiches
| Cas | Nombre de fiches | Lecture |
|---|---|---|
| Rendues et pertinentes | 6 | Les bons résultats |
| Rendues, pas pertinentes | 2 | Les faux résultats |
| Pertinentes, pas rendues | 3 | Les oubliées |
| Ni l’un ni l’autre | 989 | Le reste de la collection |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Précision et rappel ont deux diviseurs différents
La précision est le nombre de bons résultats divisé par le nombre de documents rendus. Ici : 6 sur 8, soit 0,75.
Le rappel est le nombre de bons résultats divisé par le nombre de documents pertinents. Ici : 6 sur 9, soit environ 0,67. Un diviseur nul donne 0.
Calculer précision et rappel
docker exec jupyter python3 -c 'print(6 / 8, round(6 / 9, 2))'Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
La précision à k regarde les premiers résultats
Dans la vie, on lit rarement au-delà de la première page. La précision à k calcule la précision sur les k premiers résultats du classement.
Elle récompense un moteur qui met les bons documents en tête. Le rappel, lui, ne change pas avec l’ordre.
Exemple travaillé : la précision à k
| k | Les k premiers | Pertinents parmi eux | Précision à k |
|---|---|---|---|
| 1 | [2] | 1 | 1 / 1 = 1 |
| 2 | [2, 0] | 2 | 2 / 2 = 1 |
| 3 | [2, 0, 1] | 2 | 2 / 3 = 0,67 |
| 4 | [2, 0, 1, 3] | 2 | 2 / 4 = 0,5 |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Une erreur fréquente
Attention
Beaucoup pensent qu’une bonne précision suffit à juger un moteur. Un moteur qui rend un seul bon document a une précision de 1 et peut avoir un rappel de 0,01. Il faut toujours regarder les deux nombres ensemble.
Compter les bons résultats
rendus = [0, 1, 2, 4]
pertinents = [0, 2, 3, 4, 5]
bons = 0
for numero in rendus:
if numero in pertinents:
bons = bons + 1
print(bons)
print(bons / len(rendus))
print(bons / len(pertinents))
# Retirez le numéro 4 de la liste rendus, puis relancez. Que devient chaque nombre ?
Pour aller plus loin
Dans un carnet de JupyterLab, faites deux recherches sur vos six phrases et notez à la main les documents réellement utiles. Calculez la précision et le rappel de chacune.
Une recherche OU a-t-elle plus de rappel qu’une recherche ET ? Et moins de précision ?