Amar Merabti · carnet EN
← Retour au carnet

Exp. 09 · 2026 · projet personnel

Un détecteur qui ne détecte rien peut obtenir 0,96

Comment savoir si un détecteur d'anomalies fonctionne vraiment ?

0,963
de F1 obtenu par un détecteur aléatoire avec le protocole standard du domaine
0,160
son F1 réel, mesuré point par point
0,741
celui de l'autoencodeur, point par point — le meilleur des quatre
27 094
paramètres : un autoencodeur convolutif entraîné en six secondes
01 · Le terrain

Vingt jours de mesures, 38 capteurs, 9,5 % d'anomalies

Le jeu de données est le Server Machine Dataset publié avec OmniAnomaly (licence MIT) : 38 mesures d'un serveur relevées chaque minute pendant vingt jours, une partie d'entraînement sans incident et une partie de test étiquetée point par point — 28 479 points, dont 9,5 % anormaux répartis en une douzaine d'épisodes.

J'y compare quatre détecteurs : un autoencodeur convolutif (27 094 paramètres, entraîné six secondes sur des fenêtres de 64 minutes, l'erreur de reconstruction servant de score) ; l'écart à la moyenne glissante sur 32 minutes ; l'écart au point précédent ; et un score tiré au hasard, qui ne regarde rien du tout et sert de contrôle.

Fig. 1 — Le détecteur tourne dans cette page. Dessinez à la souris ou au doigt : la courbe pointillée est ce que le modèle arrive à reconstruire, et l'erreur monte là où votre tracé s'écarte de ce qu'il connaît. En dessous, la même chose pour la référence « écart à la moyenne glissante » — souvent tout aussi réactive. Les extraits marqués « anormaux » dans le jeu ne font pas monter l'erreur : un seul capteur ne suffit pas à voir la panne, et c'est exactement ce que dit son F1 de 0,196 plus bas.
02 · Les deux protocoles

Le même détecteur, deux notes très différentes

La quasi-totalité des articles du domaine évalue avec le point adjustment : si un seul point d'un épisode anormal est détecté, on considère l'épisode entier comme détecté. L'intention est défendable — repérer une panne à la minute près importe peu. L'effet, lui, est dévastateur : il suffit d'un point au hasard dans un long épisode pour rafler tout le crédit. Kim et ses collègues l'ont montré en 2022 ; je l'ai remesuré ici.

F1 des quatre méthodes, point par point et avec point-adjustment
Fig. 2 — F1 au meilleur seuil, dans les deux protocoles. À droite, toutes les méthodes se valent — y compris celle qui ne regarde rien.
MéthodeF1 point par pointF1 avec point-adjustmentAire PR
autoencodeur convolutif0,7410,9570,653
écart à la moyenne glissante0,5430,9960,531
écart au point précédent0,4570,9980,467
score aléatoire0,1600,9630,094

Avec le protocole standard, les quatre méthodes rendent la même copie : entre 0,957 et 0,998. Le score aléatoire obtient 0,963, soit mieux que l'autoencodeur. Publié tel quel, ce tableau ferait croire à un excellent détecteur.

03 · Ce que la mesure honnête montre

Le modèle appris sert — mais pas là où on croyait

Point par point, le classement redevient informatif : l'autoencodeur atteint 0,741 contre 0,543 pour la moyenne glissante, 0,457 pour l'écart au point précédent et 0,160 pour le hasard. L'aire sous la courbe précision-rappel dit la même chose (0,653 contre 0,531, 0,467 et 0,094).

La conclusion n'est donc pas que l'apprentissage ne sert à rien — c'est l'inverse : il apporte près de vingt points de F1 sur la référence la plus sérieuse. Mais le protocole le plus répandu est incapable de le montrer, puisqu'il donne presque la même note à tout le monde. Avant de comparer deux modèles, il faut vérifier que la balance pèse.

04 · Le détecteur du bac à sable

Ce qu'il fait, et ce qu'il ne fait pas

Le modèle que vous manipulez plus haut n'a vu qu'une seule des 38 mesures, choisie pour être lisible à l'œil (la plus régulière sur vingt-quatre heures). Il réagit à ce qui ne ressemble pas à ce qu'il a appris, ce qui se voit très bien en dessinant. Mais il faut le dire : sur le vrai jeu, ce détecteur à une dimension obtient un F1 de 0,196, à peine au-dessus du hasard (0,160). Une seule mesure ne porte pas les pannes du serveur ; c'est le modèle à 38 dimensions qui les attrape.

Le modèle exécuté dans la page est bien celui qui a été entraîné : l'écart maximal entre le portage JavaScript et PyTorch est de 7·10⁻⁶ sur la reconstruction et de 3·10⁻⁷ sur l'erreur.