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.boxplotlub histogram, także ponp.log1pdla zmiennych skośnych. - Reguła IQR w pandas:
q1, q3 = s.quantile([.25, .75]), potem filtrs > q3 + 1.5 * (q3 - q1). - W scikit-learn:
IsolationForest,LocalOutlierFactor,EllipticEnvelope(zakłada rozkład normalny); parametrcontaminationto założony odsetek anomalii, nie wynik. - Zamiast usuwać:
RobustScaler,np.clipdo percentyli,HuberRegressorlub 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