Czy możemy użyć pominięcia jednej średniej i standardowego odchylenia, aby ujawnić wartości odstające?

17

Załóżmy, że normalnie rozpowszechniłem dane. Dla każdego elementu danych chcę sprawdzić, ile SD jest oddalonych od średniej. Dane mogą zawierać wartości odstające (prawdopodobnie tylko jeden, ale mogą być również dwa lub trzy) lub nie, ale ta wartość odstająca jest zasadniczo tym, czego szukam. Czy sensowne jest tymczasowe wykluczenie elementu, na który patrzę obecnie, z obliczeń średniej i SD? Myślę, że jeśli jest bliski średniej, nie ma żadnego wpływu. Jeśli jest to wartość odstająca, może to wpływać na obliczenia średniej i SD, a także obniżyć prawdopodobieństwo wykrycia. Nie jestem statystykiem, więc każda pomoc jest mile widziana!

Oliver
źródło
7
Ma to sens i jest podstawą wielu technik wykrywania wartości odstających. Ale zamiast wymyślać własną metodę, która może, ale nie musi działać (a ta ostatnia jest znacznie bardziej prawdopodobna nawet w przypadku metod wynalezionych na nowo przez statystyków, dlatego potrzebują dokładnych badań), dlaczego nie zastosować metody, która była teoretycznie sprawdzone i przetestowane empirycznie?
whuber
Dzięki za zwrócenie na to uwagi. Sprawdzę te techniki i sprawdzę, czy działają one dobrze na moich danych!
Oliver
1
Sprawdź tę stronę na temat diagnostyki usuwania regresji w R: stat.ethz.ch/R-manual/R-pched/library/stats/html/…
Ben
.... I ta odpowiedź ilustrująca, dlaczego nie można polegać na znalezieniu więcej niż jednej wartości odstającej.
user603
Wielkie przemyślenia na temat pomysłu oznaczania wartości odstających. Jakiś czas temu napisałem artykuł na temat idei filtrów pass-pass w oznaczaniu anomalii. Mam nadzieję, że pomoże to w rozwinięciu przedstawionego powyżej pomysłu. Link do artykułu: datascience.com/blog/python-anomaly-detection
Pramit

Odpowiedzi:

25

Może się to wydawać sprzeczne z intuicją, ale stosowanie podejścia, które opisujesz, nie ma sensu (biorąc pod uwagę twoje sformułowania, wolałbym pisać „może prowadzić do rezultatów bardzo odmiennych od zamierzonych”) i nigdy nie należy tego robić: ryzyko nie działa to w konsekwencji, a ponadto istnieje prostsza, znacznie bezpieczniejsza i lepiej ustalona alternatywa dostępna bez dodatkowych kosztów.

Po pierwsze, prawdą jest, że jeśli istnieje jedna wartość odstająca, w końcu znajdziesz ją przy użyciu sugerowanej procedury. Ale ogólnie (gdy w danych może występować więcej niż jedna wartość odstająca), algorytm, który sugerujesz, całkowicie się psuje, w sensie potencjalnej skłonności do odrzucenia dobrego punktu danych jako wartości odstającej lub utrzymania wartości odstających jako dobrych punktów danych z potencjalnie katastrofalnymi konsekwencjami.

Poniżej podam prosty numeryczny przykład, w którym załamuje się proponowana przez ciebie reguła, a następnie proponuję znacznie bezpieczniejszą i bardziej ugruntowaną alternatywę, ale przed tym wyjaśnię a) co jest nie tak z proponowaną metodą oraz b) co zwykle preferowane alternatywą jest to.

Zasadniczo nie można wykorzystać odległości obserwacji od średniej pomijanej i odchylenia standardowego danych, aby wiarygodnie wykryć wartości odstające, ponieważ szacunki, których używasz (pomiń jedną średnicę i odchylenie standardowe) nadal mogą zostać przesunięte w kierunku pozostałych wartości odstające: nazywa się to efektem maskowania.

W skrócie, jednym prostym sposobem na niezawodne wykrywanie wartości odstających jest użycie zaproponowanej przez ciebie ogólnej idei (odległość od oszacowania lokalizacji i skali), ale zastąpienie używanych estymatorów (pomiń jedną średnią, sd) solidnymi - tj. Szacunków zaprojektowany tak, aby był znacznie mniej podatny na bycie kołysanym przez wartości odstające.

Rozważ ten przykład, w którym dodaję 3 wartości odstające do 47 autentycznych obserwacji zaczerpniętych z Normalnej 0,1:

n    <- 50
set.seed(123)  # for reproducibility
x    <- round(rnorm(n,0,1), 1)
x[1] <- x[1]+1000
x[2] <- x[2]+10
x[3] <- x[3]+10

Poniższy kod oblicza wskaźnik odstępstwa na podstawie średniej „out one out” i odchylenia standardowego (np. Proponowane podejście).

out_1 <- rep(NA,n)
for(i in 1:n){  out_1[i] <- abs( x[i]-mean(x[-i]) )/sd(x[-i])  }

a ten kod tworzy wykres, który widzisz poniżej.

plot(x, out_1, ylim=c(0,1), xlim=c(-3,20))
points(x[1:3], out_1[1:3], col="red", pch=16)

Zdjęcie 1 przedstawia wartość twojego wskaźnika oddalenia jako funkcję wartości obserwacji (najdalej oddalone wartości odstające znajdują się poza zakresem tego wykresu, ale pozostałe dwa są pokazane jako czerwone kropki). Jak widać, z wyjątkiem najbardziej ekstremalnego, wskaźnik oddalenia skonstruowany zgodnie z sugestią nie ujawniłby wartości odstających: w rzeczywistości druga i trzecia (łagodniejsza) wartość odstająca ma teraz nawet wartość (na wskaźniku odstępstwa) mniejszą niż wszystkieprawdziwe obserwacje! ... Podejście, które sugerujesz, pozwoliłoby zachować te dwie skrajne wartości odstające w zestawie autentycznych obserwacji, prowadząc cię do wykorzystania 49 pozostałych obserwacji, tak jakby pochodziły z tego samego jednorodnego procesu, dając ci końcowy oszacowanie średniej i sd na podstawie tych 49 punktów danych 0,45 i 2,32, bardzo zły opis którejkolwiek części twojej próbki!

zdjęcie 2

xjaX

O(xja,X)=|xja-med(X)|szalony(X)

med(X)Xszalony(X)

W R ten drugi wskaźnik odstępstwa można obliczyć jako:

out_2 <- abs( x-median(x) )/mad(x)

i wykreślono (jak poprzednio) przy użyciu:

plot(x, out_2, ylim=c(0,15), xlim=c(-3,20))
points(x[1:3], out_2[1:3], col="red", pch=16)

zdjęcie 2

Zdjęcie 2 przedstawia wartość tego alternatywnego wskaźnika odstępstwa dla tego samego zestawu danych. Jak widać, teraz wszystkie trzy wartości odstające są wyraźnie ujawnione jako takie. Ponadto ta reguła wykrywania wartości odstających ma pewne ustalone właściwości statystyczne. Prowadzi to między innymi do obowiązujących zasad odcięcia. Na przykład jeśli można założyć, że prawdziwa część danych pochodzi z symetrycznego rozkładu ze skończonym drugim momentem, możesz odrzucić wszystkie punkty danych, dla których

|xja-med(X)|szalony(X)>3.5

jako wartości odstające. W powyższym przykładzie zastosowanie tej reguły doprowadziłoby do prawidłowego oznaczenia obserwacji 1,2 i 3. Odrzucając je, średnia i sd pozostałych obserwacji wynosi 0,021 i 0,93 receptywnie, co jest znacznie lepszym opisem prawdziwej części próbki !

użytkownik603
źródło
2
+1 pomimo pierwszego zdania, któremu od razu się zaprzeczasz (propozycja PO ma sens, gdy założona jest co najwyżej jedna wartość odstająca; twój sprzeciw dotyczy problemów z tą procedurą, gdy to założenie zostanie naruszone).
whuber
1
Dziękuję Ci. W międzyczasie usunąłem mój poprzedni komentarz, przewidując, że po wprowadzeniu zmian stanie się nieaktualny.
whuber
3
Zjawisko polegające na tym, że kilka wartości odstających powoduje, że detekcja pojedynczych wartości odstających jest ślepa na którąkolwiek z nich, jest często nazywane maskowaniem . Może to pomóc ludziom znaleźć więcej informacji związanych z problemem.
Glen_b
1
@ user603 Dobra robota, tworząc przykładowy scenariusz, ale myślę, że wyrzucasz dziecko z kąpielą. Diagnostyka usuwania regresji nie jest doskonała, ale mają szerokie zastosowanie i przetrwały próbę czasu. Przyjmowanie mediany jest w porządku, ale zastanawiam się, jak rozszerzyłbyś swoje podejście na bardziej złożone modele oparte na prawdopodobieństwie.
Ben Ogorek
2
+6, To naprawdę świetna odpowiedź - jasno i dokładnie wyjaśniona, zilustrowana kodem, cyframi i formułami. Lekko poprawiłem formatowanie kodu, aby był nieco łatwiejszy do odczytania. Jeśli ci się nie podoba, przywróć to z moimi przeprosinami.
gung - Przywróć Monikę