Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Détection d'anomalies non supervisée — Isolation Forest

Détection de transactions atypiques dans un jeu de 2 400 commandes, sans données labellisées, avec analyse critique des résultats obtenus.

Jeu de données synthétique, construit pour cet exercice.

Pourquoi un modèle non supervisé

Aucune commande n'était étiquetée « anormale ». Sans labels, un modèle supervisé est impossible — et c'est la situation la plus courante en pratique : les anomalies sont rares, souvent inconnues à l'avance, et les annoter coûte cher.

Pourquoi Isolation Forest plutôt qu'un clustering. KMeans cherche des groupes et affecte chaque point à un cluster : une anomalie serait absorbée par le cluster le plus proche au lieu d'être signalée. Isolation Forest attaque directement la bonne question — ce point est-il facile à isoler du reste ? Le modèle construit des arbres de découpes aléatoires ; un point atypique se retrouve isolé en peu de coupes, un point au milieu de la masse en demande beaucoup.

Méthode

Variables retenues : Quantite, Remise, Ventes, Profit.

Normalisation obligatoire. Les ventes se comptent en centaines ou milliers d'euros, la remise vaut entre 0 et 1. Sans StandardScaler, la variable Ventes écraserait complètement les autres dans les découpes, et le modèle ne regarderait en pratique qu'une seule dimension.

Le paramètre contamination est fixé à 0,02, et chaque observation reçoit un score continu d'anormalité via decision_function.

Résultats — et ce qu'ils révèlent vraiment

Le modèle a remonté 48 cas. Premier point d'honnêteté : ce nombre n'est pas une découverte. 2 % de 2 400 font exactement 48 — le nombre découle du paramètre choisi, pas des données.

Le second point est plus instructif. En comparant les cas signalés à la population générale :

Variable Anomalies Population Rapport
Montant moyen 2 669 € 651 € ×4,1
Quantité moyenne 7,3 3,1 ×2,3
Profit moyen 244 € 70 € ×3,5
Remise moyenne 0,070 0,057 ×1,2

85 % des cas remontés appartiennent au top 5 % des montants. Autrement dit, le modèle a isolé les grosses commandes — pas des comportements suspects. La remise, elle, est quasiment identique à la moyenne, et seuls 4 cas sur 48 présentent un profit négatif.

C'est logique : en fournissant des valeurs absolues (montant, quantité, profit), on obtient mécaniquement les valeurs extrêmes. Or une grosse commande légitime n'est pas une anomalie métier.

Ce que je ferais différemment

  • Construire des variables de rapport plutôt que des valeurs brutes : taux de marge, remise rapportée au segment client, montant rapporté à l'historique du client. C'est là qu'une anomalie de comportement devient visible.
  • Choisir le seuil sur la distribution des scores plutôt qu'en imposant un pourcentage a priori, afin de repérer une rupture naturelle.
  • Faire valider un échantillon par le métier. Sans labels, aucune mesure objective de précision n'est possible : la validation humaine est le seul recours.

Structure

Fichier Rôle
anomalies.py normalisation, entraînement, scoring, export
ventes_propres.csv jeu d'entrée (2 400 transactions nettoyées)
anomalies_detectees.csv les 48 cas signalés, triés par score

Utilisation

pip install pandas scikit-learn
python anomalies.py

Stack

Python · pandas · scikit-learn (IsolationForest, StandardScaler)

About

Detection d'anomalies non supervisee (Isolation Forest, scikit-learn) sur 2 400 transactions, avec analyse critique des resultats

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages