ML Atlas

02 · Dane · 4 min czytania · aktualizacja

Jak wykrywać wartości odstające (outliery) i co z nimi zrobić?

W skrócie

Wartość odstająca to obserwacja daleka od reszty: błąd albo rzadki, prawdziwy przypadek. Reguły IQR, z-score i Isolation Forest mówią tylko, co nietypowe.

Co to jest

Wartość odstająca (ang. outlier) to obserwacja, która wyraźnie odbiega od pozostałych — leży daleko od środka rozkładu jednej zmiennej albo w nietypowym miejscu przestrzeni wielu zmiennych. Wykrywanie wartości odstających to zestaw reguł i algorytmów wskazujących takie punkty do dalszej decyzji.

Odstający punkt może być błędem (wiek 999 jako kod braku, przecinek w złym miejscu, pomylone jednostki) albo prawdziwym, rzadkim zjawiskiem (bardzo drogi bilet, transakcja-oszustwo, pacjent z rzadką chorobą). Algorytm nie rozróżni tych sytuacji. Mówi tylko „to jest nietypowe”, a decyzja wymaga wiedzy o danych.

Intuicja: wzrost 250 cm u dorosłego jest wartością odstającą, ale prawdopodobnie prawdziwą; wzrost 25 cm — prawie na pewno błędem zapisu.

Mechanizm — dlaczego tak działa

Najprostsze metody mierzą odległość od środka w jednostkach rozrzutu. Z-score z = (x − x̄) / s oznacza punkty z |z| > 3. Problem: średnia i odchylenie same są ciągnięte przez wartości odstające, więc skrajne punkty częściowo się „maskują”. Poza tym próg 3 ma sens dla rozkładu zbliżonego do normalnego; w rozkładach skośnych prawy ogon da wiele alarmów, a lewy żadnego.

Reguła IQR (Tukey) jest odporna, bo opiera się na kwartylach: za odstające uznaje punkty poniżej Q1 − 1,5·IQR lub powyżej Q3 + 1,5·IQR. Tak rysuje się „wąsy” wykresu pudełkowego. Odporna wersja z-score używa mediany i mediany odchyleń bezwzględnych (MAD); Iglewicz i Hoaglin zaproponowali próg 3,5 dla tzw. zmodyfikowanego z-score.

W wielu wymiarach punkt może być typowy w każdej zmiennej osobno, a nietypowy w ich kombinacji: wzrost 190 cm i waga 50 kg. Odległość Mahalanobisa uwzględnia korelacje między zmiennymi. Metody algorytmiczne — Isolation Forest (Liu i in., 2008), Local Outlier Factor, One-Class SVM — nie zakładają kształtu rozkładu. Isolation Forest losowo tnie przestrzeń i liczy, ile cięć potrzeba, by odizolować punkt; odstające izolują się szybko.

Dlaczego to ważne dla modeli? Regresja liniowa minimalizuje sumę kwadratów błędów, więc jeden daleki punkt może przekręcić całą prostą. Średnia i odchylenie w StandardScaler też są wrażliwe. Drzewa decyzyjne są znacznie odporniejsze na skrajne wartości cech, bo dzielą oś progami i liczy się tylko kolejność.

Co zrobić z wykrytym punktem? Błąd poprawić albo zamienić na brak. Prawdziwą wartość zostawić i ewentualnie ograniczyć jej wpływ: logarytmem, przycięciem do percentyla (winsoryzacja), skalowaniem odpornym (RobustScaler) albo odporną funkcją straty (Huber). Usuwanie niewygodnych prawdziwych obserwacji to prosta droga do modelu, który zawodzi właśnie w ważnych przypadkach.

Na przykładzie

Opłata za bilet w zbiorze Titanic (891 pasażerów) ma Q1 = 7,91 i Q3 = 31,0, więc reguła IQR wyznacza górną granicę 65,63 i oznacza 116 pasażerów — 13% zbioru. Z-score > 3 (średnia 32,2, odchylenie 49,7) oznacza tylko 20 osób. Te reguły nie znalazły błędów: znalazły pierwszą klasę. Rozkład jest skrajnie prawoskośny, maksimum 512,33 zapłaciły trzy osoby, a tak drogie bilety były po prostu prawdziwe.

Po przejściu na skalę logarytmiczną (log(1 + x)) obraz się odwraca. Z-score > 3 wskazuje już tylko 3 najdroższe bilety, ale |z| > 3 po lewej stronie łapie 15 pasażerów z opłatą równą dokładnie 0 — pięciu z pierwszej klasy, sześciu z drugiej i czterech z trzeciej. To są kandydaci na prawdziwe anomalie: bilet za darmo w pierwszej klasie to raczej specjalny status albo luka w zapisie niż zwykła cena. Ta sama zmienna w dwóch skalach daje dwa różne zestawy „podejrzanych”.

Dane: Titanic

W praktyce

  • Najpierw wykres: seaborn.boxplot lub histogram, także po np.log1p dla zmiennych skośnych.
  • Reguła IQR w pandas: q1, q3 = s.quantile([.25, .75]), potem filtr s > q3 + 1.5 * (q3 - q1).
  • W scikit-learn: IsolationForest, LocalOutlierFactor, EllipticEnvelope (zakłada rozkład normalny); parametr contamination to założony odsetek anomalii, nie wynik.
  • Zamiast usuwać: RobustScaler, np.clip do percentyli, HuberRegressor lub drzewa.
  • Progi wyznaczaj na danych treningowych i stosuj bez zmian do testowych.
  • Typowy błąd: automatyczne usuwanie wszystkiego powyżej 3 odchyleń w danych skośnych.

Najczęstsze pytania

Czy wartości odstające należy usuwać?
Tylko te, które są błędami i nie da się ich poprawić. Prawdziwe skrajne obserwacje niosą informację; lepiej ograniczyć ich wpływ transformacją lub odporną metodą niż udawać, że nie istnieją.
Czym różni się wykrywanie outlierów od wykrywania anomalii?
To pokrewne pojęcia. „Outlier” zwykle oznacza punkt odstający w danych, które analizujemy, często jako krok czyszczenia. „Wykrywanie anomalii” to zwykle osobne zadanie: model ma oznaczać nietypowe nowe przypadki, np. oszustwa.
Który próg jest właściwy: 1,5·IQR czy 3 odchylenia?
Żaden nie jest uniwersalny. Oba to konwencje, a sensowny próg zależy od kształtu rozkładu i kosztu fałszywych alarmów. Lepiej obejrzeć oznaczone punkty i sprawdzić, czy mają wspólną przyczynę.

Źródła

  • Tukey J. W. (1977). „Exploratory Data Analysis”. Addison-Wesley.
  • Iglewicz B., Hoaglin D. C. (1993). „How to Detect and Handle Outliers”. ASQC Quality Press.
  • Liu F. T., Ting K. M., Zhou Z.-H. (2008). „Isolation Forest”. IEEE International Conference on Data Mining (ICDM).
  • Dokumentacja scikit-learn: Novelty and Outlier Detection, https://scikit-learn.org/stable/modules/outlier_detection.html

Zobacz też