Accueil / Factory / Algos ML / One-Class SVM — factory / algos ML / détection d'anomalies

ONE-CLASS SVM.

Un One-Class SVM apprend la frontière de ce qui est normal à partir d'exemples normaux uniquement. Toute nouvelle observation qui tombe hors de cette frontière déclenche une alerte. C'est l'outil de la détection de nouveauté : on connaît bien le fonctionnement sain, on ignore à quoi ressemblera la panne.

Détection d'anomaliesDétection de nouveautéMéthode à noyauMaintenanceNiveau : avancé

FICHE D'IDENTITÉ

notes sur 5 · usage entreprise
PerformanceBon sur quelques variables, frontière souple
InterprétabilitéUne frontière dans un espace transformé, peu lisible
VitesseEntraînement lourd au-delà de quelques dizaines de milliers de lignes
Facilité de réglagenu et gamma à régler ensemble, sans étiquettes pour guider
Tolérance aux données brutesStandardisation obligatoire, période de référence à nettoyer
EN 30 SECONDES

Un vigile qui a observé pendant des semaines les allées et venues habituelles d'un entrepôt. Il ne connaît pas tous les cambriolages possibles, mais repère aussitôt ce qui sort de l'ordinaire.

1. On apprend sur du normal uniquement

On fournit une période où la machine fonctionnait bien. Aucun exemple de panne n'est nécessaire.

2. On trace une frontière autour des données

Grâce à un noyau, souvent gaussien (RBF), l'algorithme trace une frontière souple qui enveloppe l'essentiel des observations normales. Le paramètre nu fixe la part maximale d'observations d'apprentissage laissées dehors.

3. On classe les nouvelles mesures

Chaque nouvelle observation tombe dedans (normal) ou dehors (alerte). La distance à la frontière fournit aussi un score continu.

LE CAS MÉTIER

surveillance d'équipements · industrie / énergie
EN ENTRÉE

2 000 heures de capteurs

Température et vibration relevées toutes les heures, plus l'heure de la journée codée en cercle, car la température suit un cycle de 24 h. Les 1 000 premières heures, jugées saines, servent à l'apprentissage.

EN SORTIE

Une alerte heure par heure

Sur le jeu d'exemple, le modèle signale 5 % des heures d'apprentissage, ce que prévoit le réglage nu, et 7 % des heures 1000 à 1399. À partir de l'heure 1400, où la température monte d'un cran et la vibration dérive, presque toutes les heures sont en alerte. L'alerte devient durable dès l'heure 1412.

CE QU'ON MESURE

L'avance sur la panne et les fausses alertes

La colonne panne_72h marque les 72 heures qui précèdent la panne, à partir de l'heure 1928. L'alerte durable arrive plus de 500 heures avant, soit environ trois semaines. Le coût à surveiller est celui des fausses alertes en période saine, ici 5 à 7 % des heures, que l'on réduit en exigeant une alerte sur plusieurs heures consécutives.

QUAND LE SORTIR, QUAND L'ÉVITER

OUI

  • Détection de nouveauté : beaucoup de données normales, aucune ou presque aucune panne connue
  • Quelques variables continues, bien mises à l'échelle
  • Surveillance d'équipements, de processus ou de connexions à partir d'une période de référence
  • Frontière du normal de forme irrégulière, qu'une règle par variable ne capte pas

NON

  • Centaines de milliers de lignes : Isolation Forest, ou SGDOneClassSVM en Python, passent mieux à l'échelle
  • Période d'apprentissage polluée par des anomalies : elles sont intégrées au normal
  • Nombreuses variables hétérogènes : autoencodeur ou Isolation Forest
  • Pannes étiquetées en nombre suffisant : un modèle supervisé est plus précis
LES 3 RÉGLAGES QUI COMPTENT

Noms identiques en R (e1071) et Python (scikit-learn).

nu

Borne supérieure de la part des données d'apprentissage placées hors de la frontière. En pratique, c'est à peu près le taux de fausses alertes en période saine : 0,05 donne environ 5 %.

gamma

Largeur du noyau gaussien. Grand gamma : frontière très ajustée, qui alerte sur tout ce qui s'écarte un peu de l'apprentissage. Petit gamma : frontière lisse. Par défaut, 1 / nombre de variables en R ; en Python, gamma="scale" tient aussi compte de la variance des données.

Période de référence

Le choix le plus important n'est pas un paramètre : c'est la période jugée normale. Elle doit couvrir les régimes habituels (jour, nuit, cadences de production), sans épisode de panne.

LE CODE MINIMAL

jeu d'exemple : capteurs_machine.csv ↓
# Surveillance d'une machine : One-Class SVM en R
library(e1071)

capteurs <- read.csv("capteurs_machine.csv")
heure <- as.numeric(substr(capteurs$horodatage, 12, 13))
# L'heure codée en cercle : 23 h est proche de 0 h
capteurs$h_sin <- sin(2 * pi * heure / 24)
capteurs$h_cos <- cos(2 * pi * heure / 24)
X <- as.matrix(capteurs[, c("temperature", "vibration", "h_sin", "h_cos")])

# Apprentissage sur les 1000 premières heures, jugées normales (mise à l'échelle incluse)
modele <- svm(X[1:1000, ], type = "one-classification", kernel = "radial", nu = 0.05, gamma = 0.25)

# predict renvoie TRUE dans la zone normale apprise
alerte <- !predict(modele, X)
periode <- cut(0:(nrow(X) - 1), c(0, 1000, 1400, 2000), right = FALSE,
               labels = c("apprentissage", "h1000-1399", "h1400-1999"))
print(round(tapply(alerte, periode, mean), 3))

# Première heure où plus de la moitié des 24 dernières heures sont en alerte
glissant <- stats::filter(as.numeric(alerte), rep(1 / 24, 24), sides = 1)
cat("Alerte durable à partir de l'heure :", min(which(glissant > 0.5)) - 1, "\n")

QUESTIONS FRÉQUENTES

Quelle différence entre One-Class SVM et SVM classique ?

Un SVM classique apprend une frontière entre deux classes étiquetées, par exemple panne et fonctionnement normal. Un One-Class SVM n'a besoin que d'une classe, la normale, et apprend la frontière qui l'enveloppe. Il sert quand les anomalies sont trop rares ou trop variées pour être apprises.

Comment choisir le paramètre nu du One-Class SVM ?

nu borne la part des données d'apprentissage classées hors de la frontière. On le fixe au taux de fausses alertes acceptable en période normale, souvent entre 0,01 et 0,05, puis on vérifie ce taux sur une période saine qui n'a pas servi à l'apprentissage.

Qu'est-ce que la détection de nouveauté ?

Une détection d'anomalies où l'on apprend sur des données réputées propres, puis où l'on juge de nouvelles observations. Elle s'oppose à la détection de valeurs aberrantes, qui cherche les anomalies au sein même des données d'apprentissage. Le One-Class SVM est d'abord un outil de nouveauté.

LES ALGOS VOISINS

à comparer avant de choisir
plus simple et plus rapide

Isolation Forest

Se passe d'une période de référence propre et passe mieux à l'échelle. Moins fin pour décrire une frontière du normal.

Voir la fiche →
la version supervisée

SVM à noyau

Même mécanique de noyau, mais apprend une frontière entre deux classes étiquetées.

Voir la fiche →
pour les données riches

Autoencodeur

Apprend aussi le normal, par reconstruction. Mieux adapté aux signaux complexes et aux nombreuses variables.

Voir la fiche →
— formation

Passer de la fiche à la pratique

Dataistudio forme les équipes au machine learning et à l'IA, sur des cas concrets.

Voir les formations →