Comment évaluer les performances d'un modèle de détection de secrets ?

Pourquoi la précision et le rappel sont des mesures importantes à prendre en compte lors de l'évaluation des performances d'algorithmes de classification tels que la détection de secrets.

Évaluation des performances d'un modèle de détection de secrets

Détecter des secrets dans un code source, c'est comme trouver des aiguilles dans une botte de foin : il y a beaucoup plus de foin que d'aiguilles, et vous ne savez pas combien d'aiguilles peuvent se trouver dans la botte de foin. Dans le cas de la détection des secrets, vous ne savez même pas à quoi ressemblent toutes les aiguilles !

C'est le problème auquel nous sommes confrontés lorsque nous essayons d'évaluer les performances des algorithmes de classification probabiliste comme la détection de secrets. Cet article explique pourquoi la métrique de l'exactitude n'est pas pertinente dans le contexte de la détection de secrets, et présente deux autres métriques à considérer ensemble à la place : la précision et le rappel.

Les métriques d'exactitude, de précision et de rappel répondent à trois questions très différentes :

  • Exactitude : Quel pourcentage de fois avez-vous pris du foin pour une aiguille, et une aiguille pour du foin ?
  • Précision : En examinant toutes les aiguilles que vous avez pu trouver, quel pourcentage d'entre elles sont réellement des aiguilles ?
  • Rappel : Parmi toutes les aiguilles qui devaient être trouvées, quel pourcentage d'aiguilles avez-vous trouvé ?

Pourquoi l’exactitude n'est-elle pas une bonne mesure du succès pour la détection des secrets ?

La différence de définition est subtile, mais peut avoir un impact énorme sur les valeurs mesurées.

Pour revenir à l'analogie de l'aiguille, imaginons que nous prenons un groupe de 100 objets, 98 brins de foin et 2 aiguilles, et que nous créons un algorithme pour détecter toutes les aiguilles. Après exécution, l'algorithme identifie correctement tous les brins mais seulement une aiguille. Cet algorithme a donc échoué 50% du temps dans son objectif principal, mais comme il a détecté correctement le foin, il a tout de même un taux d’exactitude de 99%.

Alors, que s'est-il passé ? L’exactitude est une mesure couramment utilisée dans l'évaluation des modèles, mais dans ce cas, l’exactitude nous donne les données les moins utilisables, car il y a beaucoup plus de brins que d'aiguilles dans notre botte de foin, et un poids égal est appliqué aux faux positifs (l'algorithme a pris un brin pour une aiguille) et aux faux négatifs (l'algorithme a pris une aiguille pour un brin).

C'est pour cette raison que l’exactitude n'est pas une bonne mesure pour déterminer le succès des algorithmes de détection de secrets. A l’inverse, la précision et le rappel examinent l'objectif principal de l'algorithme et l'utilisent pour évaluer son succès. C’est-à-dire, dans notre cas, combien d'aiguilles ont été identifiées correctement et combien d'aiguilles ont été manquées.

  • Précision élevée = faible nombre de fausses alertes
  • Rappel élevé = faible nombre de secrets manqués

Il est vraiment facile de créer un algorithme avec un taux de rappel de 100% : en signalant chaque commit comme un secret. C’est aussi très facile de créer un algorithme avec une précision de 100% : ne signaler qu’une seule fois, en choisissant le secret dont vous êtes le plus sûr qu'il s'agit bien d'un secret. Ces deux algorithmes basiques sont évidemment inutiles. C'est la combinaison de la précision et du rappel qui constitue le vrai défi.

Comment évaluer correctement les performances d'un modèle de détection des secrets ?

Prenons un algorithme hypothétique qui analyse 1 000 fichiers de code source, à la recherche de secrets potentiels.

Dans cet exemple, disons qu’il y a :

  • 975 fichiers ne contenant aucun secret dans le code source.
  • 25 fichiers contenant des secrets dans le code source

Et que l'algorithme a détecté :

  • 950 vrais négatifs : Aucun secret détecté, et il n'y en avait pas
  • 25 faux positifs : Secrets détectés qui n'étaient en fait pas de vrais secrets
  • 15 vrais positifs : Secrets détectés, et c’était de vrais secrets
  • 10 faux négatifs : On n’a pas détecté de secrets dans le fichier alors qu’il y en avait 

Ces résultats peuvent être affichés sur une matrice de confusion (ci-dessous) qui est un outil de mesure de la performance des algorithmes de classification pour aider à visualiser les données et à calculer les probabilités.

Matrice de confusion © GitGuardian

Nous pouvons utiliser cette matrice pour calculer plusieurs métriques, notamment l'exactitude, la précision et le rappel.

© GitGuardian

Que faire de ces résultats ? Nous pourrions dire que notre modèle a un taux d’exactitude de 96,5%. Cela semble à première vue assez bon, et vous pouvez penser que cela signifie qu'il détecte les secrets 96,5 % du temps.

Mais ce serait incorrect, car ce modèle hypothétique est surtout bon pour détecter tout ce qui n'est pas un secret. Avec une autre analogie, on pourrait dire que cet algorithme est excellent pour prédire les accidents de voiture qui ne se produisent pas, ce qui n’est pas très utile.

En examinant d’autres mesures que l’exactitude, nous pouvons voir pourquoi ce modèle est insuffisant.

  • Précision = 40 %.
  • Rappel = 60 %.

Tout à coup, on constate que le modèle n’est pas très performant. Il ne trouve que 60% des secrets et seulement 40% du total des secrets trouvés sont vraiment des secrets !

Équilibrer l'équation : obtenir un algorithme de détection des secrets à haute précision et à haut rappel

Alors comment améliorer cela ? Équilibrer l'équation en s’assurant que le plus grand nombre possible de secrets sont capturés, sans signaler trop de faux résultats, est un défi complexe et difficile.

C'est essentiel car une précision trop élevée peut conduire à ce que des fuites de secrets ne soient pas détectées, tandis qu'une précision faible créera trop de fausses alertes, rendant l'outil inutilisable.

Il n'y a pas de recette miracle pour concevoir et améliorer un algorithme. Ils doivent être entraînés avec d'énormes quantités de données et une supervision constante.

Lorsqu'il évoque les raisons pour lesquelles certains modèles échouent, Scott Robinson de Lucina Healths parle de trois échecs fondamentaux lors de l’entraînement d'un algorithme d'IA :

  • No1 : Données insuffisantes,
  • No2 : Supervision insuffisante,
  • No3 : Défaillances de la boîte noire.

(les systèmes de type boîte noire sont si complexes qu'ils en deviennent impénétrables).

Il est également important de réaliser que lors de la conception d'algorithmes pour des scénarios probabilistes, ceux-ci évolueront avec le temps. Il n'y a pas de solution parfaite qui puisse rester la même. Les tendances changeront, les secrets changeront, les données changeront, les formats changeront et donc, votre algorithme devra changer aussi.

"Les gens peuvent concevoir un algorithme, mais ce sont les données qui le rendent vraiment utile". Kapil Raina