Menu
CoddyTech

Scores d’anomalie

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

Un oui ou un non ne dit pas à quel point une ligne est inhabituelle. score_samples attribue un score à chaque ligne : plus il est bas, plus la ligne est étrange. Pour les ordonnances d’une pharmacie :

forest = IsolationForest(random_state=0).fit(X)
rx["score"] = forest.score_samples(X)
print(rx.sort_values("score").head(3))

Cela affiche les trois cas les plus étranges :

     pills  refills  price     score
17     300        0  120.0 -0.881478
88      28       11   11.5 -0.708524
120     30        1   64.0 -0.700620

Histogramme des scores d’anomalie de 150 ordonnances' : la plupart se situent entre -0.55 et -0.35, quelques-unes s’étirent vers la gauche jusqu’à -0.88, et un seuil en pointillés rouges à -0.6 indique 4 cas à vérifier

L’endroit où couper est ton choix : combien de lignes une personne peut-elle vérifier ? Trie pour classer, compare à un seuil pour signaler.

challenge icon

Défi

Moyen

Un auditeur n’a le temps d’examiner que quelques notes de frais. Le code de départ ajuste une forêt d’isolation ; le programme lit n et un seuil.

  1. Attribuez un score à chaque note dans une nouvelle colonne score.
  2. Affichez les n notes les plus inhabituelles, de la plus étrange à la moins étrange, comme ci-dessous.
  3. Affichez le nombre de notes dont le score est inférieur au seuil.

Pour une autre entreprise, 2 et -0.6 :

Most unusual claims:
  C003: 1960 EUR, score -0.763
  C040: 80 EUR, score -0.757
Below -0.6: 6 claims

Essayez vous-même

import pandas as pd
from sklearn.ensemble import IsolationForest

# Une ligne par note de frais : le montant, les reçus, l’heure de dépôt et le nombre de jours écoulés depuis le voyage
claims = pd.read_csv("claims.csv")
X = claims[["amount_eur", "items", "hour", "days_late"]]
n = int(input())
threshold = float(input())

# À partir d’Isolation Forest : la forêt, entraînée sur toutes les notes de frais
forest = IsolationForest(random_state=0).fit(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