Dobra forma do usuwania wartości odstających?


12

Pracuję nad statystykami dla kompilacji oprogramowania. Mam dane dla każdego kompilacji na pass / fail i upływający czas i generujemy ~ 200 z nich / tydzień.

Wskaźnik skuteczności można łatwo agregować, mogę powiedzieć, że 45% minęło w danym tygodniu. Ale chciałbym również zsumować upływający czas i chcę się upewnić, że nie wprowadzam w błąd danych zbyt mocno. Pomyślałem, że lepiej zapytam profesjonalistów :-)

Powiedz, że mam 10 czasów trwania. Reprezentują zarówno przypadki zaliczenia, jak i niepowodzenia. Niektóre kompilacje kończą się niepowodzeniem natychmiast, co sprawia, że ​​czas trwania jest niezwykle krótki. Niektóre zawieszają się podczas testowania i ostatecznie tracą czas, powodując bardzo długi czas trwania. Budujemy różne produkty, więc nawet udane kompilacje różnią się od 90 sekund do 4 godzin.

Mogę otrzymać taki zestaw:

[50, 7812, 3014, 13400, 21011, 155, 60, 8993, 8378, 9100]

Moje pierwsze podejście polegało na uzyskaniu mediany czasu przez posortowanie zbioru i wybranie wartości średniej, w tym przypadku 7812 (nie zawracałem sobie głowy średnią arytmetyczną dla zbiorów parzystych).

Niestety wydaje się, że generuje to dużą różnorodność, ponieważ wybieram tylko jedną podaną wartość. Gdybym więc miał tendencję do zmiany tej wartości, odbijałby się ona między 5000-10000 sekund w zależności od tego, która kompilacja była na środkowej.

Aby to wygładzić, wypróbowałem inne podejście - usuń wartości odstające, a następnie oblicz średnią dla pozostałych wartości. Postanowiłem podzielić go na tertyle i pracować tylko na środkowym:

[50, 60, 155, 3014, 7812, 8378, 8993, 9100, 13400, 21011] ->
[50, 60, 155], [3014, 7812, 8378, 8993], [9100, 13400, 21011] ->
[3014, 7812, 8378, 8993]

Powód, dla którego wydaje mi się to lepsze, jest dwojaki:

  • Nie chcemy żadnych działań na szybszych kompilacjach, są już w porządku
  • Najdłuższe wersje są prawdopodobnie spowodowane przekroczeniem limitu czasu i zawsze tam będą. Mamy inne mechanizmy do ich wykrywania

Wydaje mi się więc, że takich danych szukam, ale martwię się, że osiągnąłem gładkość, usuwając, no cóż, prawdę.

Czy to kontrowersyjne? Czy metoda jest rozsądna?

Dzięki!


Nadal nie powiedziałeś, dlaczego chcesz mierzyć upływ czasu. Czy musisz oszacować całkowity czas pracy urządzenia, za który płacisz? Czy chcesz oszacować, ile podróży do ekspresu do kawy możesz odbyć? Jakie działania podejmiesz, jeśli znasz czasy?
StasK

Ponadto, jeśli masz heterogeniczne produkty, które budujesz, to podskakiwanie jest naturalne i nie powinieneś próbować się go pozbyć. Jeśli masz miarę złożoności danego projektu (# plików, # linii kodu, # procedur itp.), Możesz być zainteresowany upływem czasu znormalizowanym przez złożoność, która może być bardziej stabilna. Jeśli chcesz, aby stał się naprawdę stabilny i płaski w czasie, nie będziesz w stanie nauczyć się, kiedy będziesz musiał podjąć działania.
StasK

@StasK: dzięki za komentarze, jest to cenny wkład. Akcja jest już znana: wiele z tych kompilacji trwa zbyt długo i powinniśmy popracować nad jej przyspieszeniem. Chcę użyć zagregowanej miary, aby sprawdzić, czy sytuacja się poprawia, czy pogarsza.
Kim Gräsman,

I tak, najlepiej zrobiłbym to według produktu, ale dane źródłowe nie przechowują tych informacji, więc oszukuję na podstawie tego, co wiem o dystrybucji. To oczywiście może się z czasem zmienić i być może będę musiał przemyśleć.
Kim Gräsman

Cóż, wydaje mi się, że masz trzy grupy w swoich danych: (i) buduje tę kompilację; (ii) kompilacje, które zawodzą (i mówisz, że mają tendencję do zawierania się dość szybko), oraz (iii) kompilacje, które się rozłączają (lub prawie tak) - i prawdopodobnie jest to główna, jeśli nie jedyna grupa, na której chcesz podjąć działania. Łączna miara czasu może nie być przydatna; ale coś w rodzaju 10. najdłuższej kompilacji lub 10. najwyższego percentyla rozkładu czasów kompilacji może być lepszą miarą tego, co jest skrajne w rozkładzie, na którym Ci zależy. To z grubsza wykorzystuje EPA do monitorowania zanieczyszczeń.
StasK

Odpowiedzi:


8

Twoje podejście ma dla mnie sens, biorąc pod uwagę twój cel. To proste, proste, wykonuje pracę i prawdopodobnie nie chcesz pisać o tym pracy naukowej.

Jedną rzeczą, którą należy zawsze robić w przypadku wartości odstających, jest ich zrozumienie , a ty już świetnie sobie z tym radzisz . Możliwymi sposobami ulepszenia twojego podejścia byłyby: czy możesz użyć informacji, na których kompilacjach się zawieszają? Wspominasz, że masz „inne mechanizmy do ich wykrywania” - czy możesz je wykryć, a następnie usunąć tylko te z próbki?

W przeciwnym razie, jeśli masz więcej danych, możesz pomyśleć o usunięciu nie tercyli, ale kwintyli ... ale w pewnym momencie prawdopodobnie nie zrobi to dużej różnicy.


Kiedy mówię „inne” mechanizmy, mam na myśli zupełnie inne poza tym zbiorem danych, więc nie mogę tutaj podejmować decyzji na podstawie tego. Gromadzimy dane codziennie i otrzymujemy ~ 50 kompilacji dziennie, więc myślę, że kwintile mogą dawać zbyt mało danych, ale dzięki za sugestię, mogę z nimi eksperymentować!
Kim Gräsman,

13

To, co robisz, jest znane jako środek przycięty .

Jak już to zrobiłeś, często przycinasz tę samą proporcję z każdej strony (proporcja przycinania).

Możesz przyciąć wszystko od 0% (zwykła średnia) do (prawie) 50% (co daje medianę). Twój przykład ma 30% przycięte z każdego końca.

Zobacz tę odpowiedź i odpowiedni artykuł w Wikipedii .

[Edytuj: Zobacz doskonałą dyskusję Nicka Coxa na ten temat.]

Jest to dość rozsądny, dość solidny estymator lokalizacji. Ogólnie uważa się, że jest bardziej odpowiedni do dystrybucji prawie symetrycznych niż te o dużym przekrzywieniu, ale jeśli odpowiada to twojemu celowi *, nie ma powodu, aby go nie używać. To, co najlepiej przyciąć, zależy od rodzaju dystrybucji i właściwości, których szukasz.

* Nie jest do końca jasne, co chcesz tu oszacować.

Istnieje wiele innych solidnych podejść do podsumowania „centrum” dystrybucji, z których niektóre mogą być również przydatne. (np. M-estymatory mogą być dla ciebie przydatne)

[Jeśli potrzebujesz odpowiedniej miary zmienności, aby dopasować się do średniej przyciętej, przydatne może być Winsorized odchylenie standardowe (zasadniczo, przy obliczaniu sd, zamień wartości, które odetniesz podczas przycinania na najbardziej ekstremalne wartości nie odciął).]


Właściwie nie sprawdziłem typowego kształtu mojej dystrybucji, myślę, że zmienia się z tygodnia na tydzień w zależności od tego, gdzie ludzie dokonują zmian. W rzeczywistości może być mocno wypaczony.
Kim Gräsman,

Dzięki za umieszczenie nazwiska w mojej pracy hakerskiej, btw.
Wzbudza

2

Jeszcze inną metodą jest obliczenie mediany wszystkich średnich par lub przeładowanie.

Aktualizacja:

Mediana wszystkich par średnich nazywa się estymatorem Hodgesa-Lehmanna . Ten estymator ma zwykle wysoką wydajność. W tym wpisie do encyklopedii napisał Scott L. Hershberger:

Podczas gdy zarówno mediana, jak i estymator Hodgesa-Lehmanna są lepsze niż średnia próbki dla rozkładów niesymetrycznych, estymator Hodgesa-Lehmanna ma większą asymptotyczną wydajność względną w stosunku do średniej niż mediana

Ładowanie początkowe może być mniej istotne i bardziej wymagające obliczeniowo, ale możesz pobrać małą losową próbkę danych z zamianą i obliczyć średnią z tej podpróbki, zrobić to wiele razy i obliczyć medianę wszystkich średnich.

W obu przypadkach nie musisz już wybierać wartości spośród wartości swoich danych (podczas obliczania zwykłej mediany), ale zamiast tego wybierasz spośród wielu średnich z podzbiorów danych.


2
Czy potrafisz opisać zalety i wady tych metod? Odpowiedź jednowierszowa jest niewystarczająca.
StasK

1
Próbowałem dokonać aktualizacji z większą ilością wyjaśnień
Fin Årup Nielsen

Zarówno średnie w parach, jak i ładowanie początkowe wydają się obejmować szereg ponownych obliczeń dla całego zestawu danych. Próbka jest na ogół dość mała (wartości <500), więc prawdopodobnie nie jest to problem, ale wydaje się bardziej skomplikowana. Dobrze wiedzieć, że istnieje więcej metod eksperymentowania, jeśli skrócona średnia okaże się zbyt tępa. Dzięki!
Kim Gräsman,

1

Wydaje się rozsądne, co robisz: tylko dla informacji Używam następującego procesu dość często w podobnym celu: ale naprawdę bardzo interesują mnie tylko górne wartości odstające.

Oblicz pięciocyfrowe podsumowanie: Min, Q1, Mediana, Q3, Max. Oblicz zakres międzykwartylowy: Q3-Q1. Ustaw swoje odstające „ogrodzenia” na Q1-IQR * X i Q3 + IQR * X: gdzie rozsądna wartość „X” wynosi 1,5.

Używając Excela i twoich liczb powyższe (użycie 1,5 dla „X” **) daje jedną górną wartość odstającą: 21011

MIN 50
Q1  3014
MEDIAN  8095
Q3  9073.25
MAX 21011
IQR 6059.25
UPPER FENCE 18162.125
LOWER FENCE -6074.875

Tak więc dolne ogrodzenie nie jest w rzeczywistości przydatne ani realistyczne w twoim przykładzie: co potwierdza stwierdzenie drugiego postu dotyczące znaczenia zrozumienia znaczenia twoich konkretnych danych.

(** Znaleziono jeden cytat z reguły „1.5”: nie twierdzę, że jest autorytatywna, ale wydaje mi się rozsądnym punktem wyjścia: http://statistics.about.com/od/Descriptive-Statistics/a/ What-Is-The-Interquartile-Range-Rule.htm )

Możesz także (być może) po prostu użyć punktów danych, które mieszczą się w samym IQR: wydaje się, że daje to sensowne wyniki (ponieważ członkostwo w Twojej metodzie jest bardzo podobne).

użycie tych samych danych spowoduje umieszczenie następujących punktów danych w „obszarze zainteresowania”:

7812
3014
13400
21011
8993
8378
9100

Na wykresie pudełkowym: wszystkie te punkty mieszczą się w części pudełkowej (a nie w części wąsów) na schemacie.

Widać, że ta lista zawiera niektóre elementy, których nie ma na oryginalnej liście (kompilacje o dłuższym czasie działania); Nie mogę powiedzieć, czy jedna lista jest w jakikolwiek sposób bardziej dokładna. (ponownie sprowadza się do zrozumienia zestawu danych).


Dzięki, to wydaje się bardzo zbliżone do tego, co już robię. W jaki sposób ta metoda może być lepsza niż zwykłe partycjonowanie zestawu danych?
Kim Gräsman

1
Naprawdę nie mogę powiedzieć, czy któraś metoda jest lepsza, czy nie: zasugerowałem to na podstawie tego, co przeczytałem w książkach / witrynach ze statystykami. Jedną rzeczą (wydaje mi się), że metoda dodaje, że pozwala dostosować „ogrodzenia” do tego, co uważasz za odpowiednie (dostosowanie współczynnika 1,5); gdzie samo zajęcie środkowej trzeciej pozycji może być bardziej podatne na włączenie potencjalnie wysokiej wartości odstającej (która prawdopodobnie mogłaby być lepiej sklasyfikowana poza ogrodzeniem) ..... ale nie mogę tego powiedzieć na pewno. Jedną z rzeczy związanych z używaniem Kwartyli jest to, że 5-liczbowe podsumowanie jest dość dobrze zrozumiane i powszechnie stosowane.
monojohnny

Dzięki za dodatkowy szczegół! Robię to w Pythonie, więc mam już funkcję, w której dzielę zestaw danych na N części, a następnie wyciągam środkową część. Jest to zmiana jednoznakowa, która zamiast tego tworzy 5 lub 7 partycji. Ale twój punkt widzenia jest dobrze przemyślany i dobrze jest zobaczyć inny wspólny sposób podejścia do tego problemu. Dzięki jeszcze raz.
Kim Gräsman

brzmi dla mnie dobrze: dodam jeszcze jedną rzecz, na którą należy zwrócić uwagę w przypadku używania kwartylów i ogrodzeń (zamiast mieć zmienne partycje) - to, że mapują bezpośrednio na boxplots: en.wikipedia.org/wiki/Box_plot, które pozwalają (między innymi) standardowy sposób graficznego porównywania różnych rozkładów.
monojohnny
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.