Menu
CoddyTech

Facteur local d’anomalie

Fait partie de la section Apprentissage non supervisé du Journey Machine Learning de Coddy. Leçon 36 sur 51.

Quelques points atypiques se cachent dans l’intervalle des données. Le facteur local d’anomalie, LOF, compare la densité de l’emplacement de chaque point à celle des emplacements de ses voisins :

Voitures dans un garage de stationnement, heure d’arrivée en abscisse et nombre d’heures de stationnement : les navetteurs sont regroupés près de 8:00 et pour 9 heures, les clients sont répartis tout au long de la journée pour quelques heures, et une voiture arrivée à 8:18 et stationnée pendant 6.6 heures est entourée en rouge et signalée par LOF

Les acheteurs restent parfois 6 heures. Mais les voisins de cette voiture sont des navetteurs, très regroupés, et elle se trouve loin de leur groupe :

from sklearn.neighbors import LocalOutlierFactor
lof = LocalOutlierFactor(n_neighbors=20, contamination=0.02)
flags = lof.fit_predict(X)

Mêmes réponses qu’avant : -1 anormal, 1 normal. n_neighbors définit le caractère local de la comparaison.

challenge icon

Défi

Moyen

Une compagnie de téléphone recherche les comptes qui diffèrent de leurs voisins. Le code de départ met les données à l’échelle et signale les comptes à l’aide d’une forêt d’isolation ; le programme lit k.

  1. Signale les comptes avec LOF : n_neighbors=k, contamination=0.03.
  2. Affiche le nombre de comptes signalés par chaque détecteur et le nombre de comptes signalés par les deux.
  3. Répertorie les comptes signalés uniquement par LOF, dans l’ordre du tableau, comme ci-dessous.

Pour une entreprise plus petite et 10 :

Isolation forest: 5 accounts
LOF: 5 accounts
Both: 4 accounts
Only LOF:
  A118: 960 minutes, 6.2 GB

Essayez vous-même

import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.ensemble import IsolationForest
from sklearn.neighbors import LocalOutlierFactor

# Une ligne par compte téléphonique : les minutes d’appel et les données mobiles consommées en un mois
accounts = pd.read_csv("accounts.csv")
X = StandardScaler().fit_transform(accounts[["call_minutes", "data_gb"]])
k = int(input())

# Résultat d’Isolation Forest : -1 pour les comptes que la forêt juge atypiques
forest_flags = IsolationForest(contamination=0.03, random_state=0).fit_predict(X)

# Écrivez votre code ci-dessous
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Apprentissage non supervisé

Entraînez-vous par vous-même : Compilateur Python en ligne