Hoppa till innehållet
AI-grafen
E· Universitetklassisk-ml· ca 60 min· utvecklande· verifierad 2026-09-20

Anomalidetektion

Kunna hitta avvikelser med statistiska och avståndsbaserade metoder.

Förkunskaper

Intuition

Anomalidetektion är klassificering där den intressanta klassen är mycket ovanlig (0,01–1 %) och ofta saknar etiketter.

MetodIdéPassar
z-poäng / IQRlångt från medelvärdeten dimension, ungefär normalfördelat
Isolation Forestavvikelser isoleras med få slumpmässiga snitttabelldata, många dimensioner
LOFlokal täthet lägre än grannarnaskluster med olika täthet
One-class SVMlär en gräns runt det normalasmå dataset
Autoencoderhögt rekonstruktionsfel = avvikandebilder, sekvenser, komplex struktur

Det svåra är inte metoden utan tröskeln. Med 0,1 % anomalier och ett larm på 1 % av datan är nio av tio larm falska — även med en bra modell. Det är basfrekvensproblemet igen.

Kod

import numpy as np
from sklearn.ensemble import IsolationForest
from sklearn.neighbors import LocalOutlierFactor

# contamination = din förväntan om andelen avvikelser — sätt den medvetet
iso = IsolationForest(contamination=0.01, random_state=0).fit(X_tr)
poang = -iso.score_samples(X_test)                     # högre = mer avvikande

# Tröskeln sätts av hur många larm verksamheten orkar hantera
kapacitet_per_dag = 50
trosk = np.percentile(poang, 100 * (1 - kapacitet_per_dag / len(poang)))
larm = poang >= trosk

print(f"{larm.sum()} larm av {len(poang)} ({larm.mean():.2%})")
if y_test is not None:                                  # om etiketter finns för utvärdering
    from sklearn.metrics import precision_score, recall_score, average_precision_score
    print("precision", round(precision_score(y_test, larm), 3),
          "recall", round(recall_score(y_test, larm), 3),
          "AP", round(average_precision_score(y_test, poang), 3))

Använd PR-AUC (average precision), inte ROC-AUC. Vid extrem obalans ser ROC-AUC bra ut även för en modell som är oanvändbar i praktiken, eftersom den domineras av de många negativa exemplen.

Dimensionera efter kapacitet: fråga «hur många larm kan någon faktiskt granska per dag?» och sätt tröskeln därefter. En perfekt modell med 500 larm per dag och tre granskare är värdelös.

Behärskning innebär

  • Hittar avvikelser med statistiska och avståndsbaserade metoder
  • Hanterar extrem obalans
  • Väljer tröskel efter kostnad

Logga in för att göra övningarna och bygga upp din behärskning.

Källor

Alla källor och licenser