Accueil / Factory / Algos ML / Isolation Forest — factory / algos ML / apprentissage non supervisé

ISOLATION FOREST.

Une forêt d'arbres qui découpent les données au hasard. Les points inhabituels se retrouvent isolés en très peu de coupes, et c'est ce qui les trahit. On l'utilise pour repérer fraudes, erreurs de saisie ou pannes quand on n'a pas, ou très peu, d'exemples étiquetés.

Détection d'anomaliesNon superviséFraudeDonnées tabulairesNiveau : intermédiaire

FICHE D'IDENTITÉ

notes sur 5 · usage entreprise
PerformanceSolide sur les anomalies franches, moins sur les anomalies locales
InterprétabilitéUn score par ligne, sans la raison : ajouter SHAP si besoin
VitessePetits échantillons par arbre, rapide même sur des millions de lignes
Facilité de réglagePeu de réglages, mais le seuil d'alerte reste une décision métier
Tolérance aux données brutesPas de normalisation, catégories à encoder en Python
EN 30 SECONDES

Au jeu du « Qui est-ce ? », le seul personnage à chapeau rouge se trouve en une question. Les personnages ordinaires en demandent beaucoup plus.

1. On coupe au hasard

Chaque arbre prend un petit échantillon de transactions (256 dans la version d'origine). Il choisit une variable au hasard, un seuil au hasard entre son minimum et son maximum, et recommence jusqu'à isoler chaque point ou atteindre une profondeur limite.

2. On compte les coupes

Une transaction de 3 000 € à 3 h du matin, à 2 000 km du domicile, s'isole en deux ou trois coupes. Une transaction ordinaire est entourée de semblables et demande beaucoup plus de coupes.

3. On fait la moyenne sur la forêt

La profondeur moyenne d'isolement, sur quelques centaines d'arbres, donne un score d'anomalie. Plus le chemin est court, plus la transaction est suspecte.

LE CAS MÉTIER

fraude · paiement / banque / e-commerce
EN ENTRÉE

Des transactions, sans étiquette

Montant, heure, nombre de transactions du porteur sur 24 h, distance au domicile, nouveau marchand ou non. Aucune colonne « fraude » n'est donnée au modèle.

EN SORTIE

Une file de contrôle triée

Chaque transaction reçoit un score d'anomalie. L'équipe fraude examine d'abord les 50 plus suspectes, soit 1 % du volume. Le seuil se fixe selon sa capacité de traitement.

CE QU'ON MESURE

Le taux de fraude dans les alertes

Les fraudes confirmées plus tard servent uniquement à vérifier : combien de vraies fraudes parmi les 50 alertes ? Sur ce jeu d'exemple, volontairement simple, toutes ou presque remontent. Sur des données réelles, le rendement est nettement plus bas.

QUAND LE SORTIR, QUAND L'ÉVITER

OUI

  • Pas ou très peu de fraudes étiquetées pour entraîner un modèle supervisé
  • Anomalies rares et nettement différentes du reste (montant, horaire, fréquence)
  • Gros volumes à scorer vite : paiements, journaux techniques, capteurs
  • Premier tri avant contrôle humain, ou pour constituer les premières étiquettes

NON

  • Fraudes étiquetées en nombre suffisant : un modèle supervisé comme XGBoost sera plus précis
  • Anomalies locales, banales dans l'absolu mais atypiques pour leur groupe : préférer le Local Outlier Factor
  • Fraudeurs qui imitent le comportement normal : aucune méthode non supervisée ne les repère seule
  • Beaucoup de variables sans rapport avec l'anomalie : elles diluent les coupes utiles, faire le tri avant
LES 4 RÉGLAGES QUI COMPTENT

Noms donnés pour R (isotree) et Python (scikit-learn). Le vrai réglage est le nombre d'alertes que l'équipe peut traiter.

ntrees / n_estimators

Nombre d'arbres. Le score se stabilise vite : 100 à 300 suffisent en général. Par défaut, 500 dans isotree et 100 dans scikit-learn.

sample_size / max_samples

Nombre de lignes tirées par arbre. 256 est la valeur de l'article d'origine et le défaut de scikit-learn. Des petits échantillons isolent mieux les anomalies, que la masse des points normaux finirait par masquer.

ndim (isotree)

Nombre de variables combinées à chaque coupe. ndim = 1 donne l'Isolation Forest classique. Le défaut d'isotree (jusqu'à 3) fait des coupes obliques : variante dite étendue, parfois plus fine, moins facile à relier aux variables.

contamination (Python)

Part d'anomalies attendue. Elle ne change pas score_samples(), seulement le seuil de décision de predict() qui classe en -1 (anomalie) ou 1 (normal). Mieux vaut trier par score et choisir le nombre d'alertes.

LE CODE MINIMAL

jeu d'exemple : transactions.csv ↓
# Détection de fraude : Isolation Forest en R
library(isotree)

transactions <- read.csv("transactions.csv")
variables <- c("montant", "heure", "nb_transactions_24h", "distance_km", "nouveau_marchand")

# Aucune étiquette : le modèle ne voit jamais fraude_confirmee
# ndim = 1 : Isolation Forest classique, une variable par coupe
set.seed(42)
modele <- isolation.forest(transactions[, variables], ntrees = 300, sample_size = 256,
                           ndim = 1, seed = 42)

# Score d'anomalie : plus il est proche de 1, plus la transaction est suspecte
transactions$score <- predict(modele, transactions[, variables])
top <- transactions[order(transactions$score, decreasing = TRUE)[1:50], ]

# Contrôle après coup : combien de fraudes confirmées dans les 50 alertes ?
cat("Fraudes dans le top 50 :", sum(top$fraude_confirmee), "sur",
    sum(transactions$fraude_confirmee), "\n")
print(head(top[, c(variables, "score")], 5))

QUESTIONS FRÉQUENTES

Comment fonctionne Isolation Forest ?

L'algorithme construit des arbres qui coupent les données au hasard. Un point anormal, éloigné des autres, se retrouve isolé après peu de coupes. Le score d'anomalie découle de la profondeur moyenne à laquelle chaque point est isolé : plus elle est faible, plus le point est suspect.

Comment choisir le paramètre contamination d'Isolation Forest ?

Dans scikit-learn, contamination ne change pas score_samples(), seulement le seuil de décision entre anomalie et normal. En pratique, on trie les lignes par score et on retient autant d'alertes que l'équipe peut en contrôler. Le taux de fraude connu du métier donne un ordre de grandeur.

Isolation Forest ou Local Outlier Factor ?

Isolation Forest est plus rapide et repère bien les points éloignés de l'ensemble des données. Local Outlier Factor compare chaque point à son voisinage : il détecte mieux un point anormal au sein d'un groupe, mais coûte plus cher en calcul. Sur un gros volume, commencer par Isolation Forest.

LES ALGOS VOISINS

à comparer avant de choisir
pour les anomalies locales

Local Outlier Factor

Compare la densité autour d'un point à celle de ses voisins. Voit les points atypiques pour leur groupe, mais plus lent sur gros volumes.

Voir la fiche →
la base statistique

Score z et IQR

Repère les valeurs extrêmes variable par variable. Simple et lisible, mais aveugle aux combinaisons inhabituelles.

Voir la fiche →
quand les étiquettes arrivent

XGBoost

Une fois assez de fraudes confirmées, un modèle supervisé apprend directement ce qui les distingue et devient plus précis.

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 →