Accueil / Factory / Algos ML / Local Outlier Factor — factory / algos ML / détection d'anomalies

LOCAL OUTLIER FACTOR.

Un point est suspect s'il est nettement moins entouré que ses voisins. LOF compare la densité autour de chaque ligne à celle autour de ses plus proches voisins. Il repère ainsi des anomalies locales, invisibles pour une règle globale : une dépense banale chez certains clients, mais inhabituelle dans son contexte.

Détection d'anomaliesDensité localeNon superviséFraudeNiveau : intermédiaire

FICHE D'IDENTITÉ

notes sur 5 · usage entreprise
PerformanceTrès bon sur les anomalies locales, si le voisinage est bien choisi
InterprétabilitéUn score relatif : autour de 1 normal, au-dessus suspect
VitesseRecherche de voisins lourde sur des millions de lignes
Facilité de réglageLe nombre de voisins change tout, sans valeur universelle
Tolérance aux données brutesMise à l'échelle et log des variables asymétriques
EN 30 SECONDES

En ville, une maison isolée au fond d'un champ se remarque. À la campagne, la même distance au voisin le plus proche est banale. LOF juge l'isolement par rapport au quartier.

1. On trouve les k voisins de chaque point

Pour chaque transaction, on repère ses k plus proches voisines dans l'espace des variables standardisées.

2. On estime une densité locale

La densité d'un point est l'inverse de sa distance moyenne d'accessibilité à ses voisins : plus ils sont proches, plus elle est forte.

3. On compare à la densité des voisins

Le score LOF est le rapport entre la densité moyenne des voisins et celle du point. Autour de 1, le point est aussi entouré que ses voisins. Nettement au-dessus, il est isolé.

LE CAS MÉTIER

fraude · paiement / monétique
EN ENTRÉE

5 000 transactions sans étiquette

Montant, heure, nombre de transactions du porteur sur 24 h, distance au domicile, nouveau marchand ou non. Montant et distance sont passés au logarithme, puis toutes les variables sont standardisées.

EN SORTIE

Un score par transaction

Chaque transaction reçoit un score LOF. L'équipe fraude contrôle les 50 plus élevés. La colonne fraude_confirmee ne sert qu'à évaluer le résultat après coup.

CE QU'ON MESURE

Les fraudes trouvées dans les 50 alertes

Le jeu contient 40 fraudes qui se ressemblent entre elles. Avec 20 voisins, LOF n'en trouve aucune dans son top 50 : chaque fraude a pour voisines d'autres fraudes, tout aussi isolées, et paraît normale. Avec 50 voisins, plus que le nombre de fraudes, les 40 sont dans le top 50.

QUAND LE SORTIR, QUAND L'ÉVITER

OUI

  • Anomalies locales : un comportement normal ailleurs mais inhabituel dans son groupe
  • Données avec des zones de densités très différentes (petits et gros clients, régions)
  • Contrôle sur quelques variables numériques bien préparées
  • Détection de nouveauté sur de nouvelles données, avec novelty=True en Python

NON

  • Millions de lignes : Isolation Forest est plus rapide
  • Nombreuses variables (plus de quelques dizaines) : les distances perdent leur sens, réduire d'abord
  • Anomalies groupées plus nombreuses que k : elles se masquent entre elles, augmenter k ou changer de méthode
  • Fraudes étiquetées en nombre suffisant : un modèle supervisé comme XGBoost fera mieux
LES 3 RÉGLAGES QUI COMPTENT

Noms donnés pour R (dbscan) et Python (scikit-learn).

minPts / n_neighbors

Taille du voisinage, le réglage décisif. Elle doit dépasser la taille des groupes d'anomalies que l'on veut détecter, sinon ils se masquent entre eux. Dans le package R dbscan, minPts compte le point lui-même : minPts = 21 correspond à n_neighbors = 20. Les auteurs de la méthode conseillent de calculer le score sur une plage de valeurs et de garder le maximum.

Préparation des variables

LOF repose sur des distances : on passe au logarithme les variables très asymétriques (montants, distances) et on standardise. Sans cela, une seule variable dicte le voisinage.

contamination / seuil

LOF donne un score, pas une décision. En Python, contamination fixe la part de lignes déclarées anormales par fit_predict. En pratique, on fixe la taille de la file selon la capacité de contrôle de l'équipe.

LE CODE MINIMAL

jeu d'exemple : transactions.csv ↓
# Fraude à la carte : Local Outlier Factor en R
library(dbscan)

transactions <- read.csv("transactions.csv")
X <- transactions[, c("montant", "heure", "nb_transactions_24h", "distance_km", "nouveau_marchand")]
# Log sur les variables très asymétriques, puis même échelle pour toutes
X$montant <- log(X$montant)
X$distance_km <- log1p(X$distance_km)
X <- scale(X)

# La taille du voisinage change tout quand les fraudes se ressemblent entre elles
for (k in c(20, 50)) {
  score <- lof(X, minPts = k)   # autour de 1 = normal, bien au-dessus = suspect
  top <- order(score, decreasing = TRUE)[1:50]
  cat("minPts =", k, ": fraudes confirmées dans le top 50 =",
      sum(transactions$fraude_confirmee[top]), "sur", sum(transactions$fraude_confirmee), "\n")
}

QUESTIONS FRÉQUENTES

Comment interpréter le score LOF ?

Un score proche de 1 signifie que le point est aussi entouré que ses voisins. Nettement au-dessus, il est plus isolé. Il n'y a pas de seuil universel : le score dépend des données et du nombre de voisins, on raisonne donc en classement. scikit-learn le renvoie avec un signe moins (negative_outlier_factor_).

Qu'est-ce qu'une anomalie locale ?

Une valeur qui n'est pas extrême dans l'absolu mais l'est dans son voisinage. Une dépense de 300 € est banale au milieu de clients qui dépensent beaucoup, inhabituelle au milieu de clients qui dépensent 20 €. Un seuil global de montant ne la voit pas ; LOF, oui.

LOF ou Isolation Forest ?

Isolation Forest est plus rapide et plus simple à régler : c'est souvent le premier essai. LOF est meilleur quand les anomalies sont locales, dans des données aux densités très variables. Les deux sont non supervisés et se comparent sur un même échantillon contrôlé.

LES ALGOS VOISINS

à comparer avant de choisir
le concurrent direct

Isolation Forest

Isole les points par des coupes aléatoires. Plus rapide sur les grandes bases, pas de voisinage à régler.

Voir la fiche →
même notion de densité

DBSCAN

Clustering par densité qui classe certains points comme du bruit. LOF en donne une version graduée, avec un score.

Voir la fiche →
la brique de base

k plus proches voisins

LOF repose entièrement sur la recherche des plus proches voisins et hérite de ses limites en grande dimension.

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 →