Gute Form, um Ausreißer zu entfernen?


12

Ich arbeite an Statistiken für Software-Builds. Ich habe Daten für jeden Build auf Pass / Fail und abgelaufene Zeit und wir generieren ~ 200 davon / Woche.

Die Erfolgsquote lässt sich leicht zusammenfassen. Ich kann sagen, dass 45% einer Woche vergangen sind. Aber ich möchte auch die verstrichene Zeit zusammenfassen und sicherstellen, dass die Daten nicht zu schlecht dargestellt werden. Dachte mir, ich frag besser die Profis :-)

Angenommen, ich habe 10 Dauern. Sie repräsentieren sowohl Bestehen als auch Nichtbestehen. Einige Builds schlagen sofort fehl, was die Dauer ungewöhnlich kurz macht. Einige hängen während des Testens und haben möglicherweise eine Zeitüberschreitung, was zu sehr langen Wartezeiten führt. Wir bauen verschiedene Produkte, so dass selbst erfolgreiche Builds zwischen 90 Sekunden und 4 Stunden variieren.

Ich könnte ein Set wie dieses bekommen:

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

Mein erster Ansatz bestand darin, den Median der Zeit zu ermitteln, indem ich die Menge sortierte und den Mittelwert auswählte, in diesem Fall 7812 (ich habe mich nicht mit dem arithmetischen Mittelwert für geradzahlige Mengen befasst.)

Leider scheint dies eine Menge Variationen zu erzeugen, da ich nur einen bestimmten Wert auswähle. Wenn ich diesen Wert trendete, bewegte er sich zwischen 5000 und 10000 Sekunden, abhängig davon, welcher Build sich im Median befand.

Um dies auszugleichen, habe ich einen anderen Ansatz gewählt: Entfernen Sie Ausreißer und berechnen Sie dann einen Mittelwert über die verbleibenden Werte. Ich habe beschlossen, es in tertiles aufzuteilen und nur an dem mittleren zu arbeiten:

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

Der Grund, warum mir das besser erscheint, ist zweierlei:

  • Wir wollen keine Aktion für die schnelleren Builds, sie sind bereits in Ordnung
  • Die längsten Builds sind wahrscheinlich vom Timeout abhängig und werden immer vorhanden sein. Wir haben andere Mechanismen, um diese aufzuspüren

Es scheint mir also, dass dies die Daten sind, nach denen ich suche, aber ich mache mir Sorgen, dass ich die Glätte erreicht habe, indem ich die Wahrheit entfernt habe.

Ist das umstritten? Ist die Methode vernünftig?

Vielen Dank!


Sie haben immer noch nicht gesagt, warum Sie die abgelaufene Zeit messen möchten. Müssen Sie die Gesamtmaschinenzeit schätzen, für die Sie bezahlen? Müssen Sie abschätzen, wie viele Fahrten Sie zur Kaffeemaschine machen können? Was ist die Maßnahme, die Sie wahrscheinlich ergreifen werden, wenn Sie die Zeiten kennen?
StasK

Auch wenn Sie heterogene Produkte haben, die Sie bauen, ist das Herumhüpfen eine Selbstverständlichkeit und Sie sollten nicht versuchen, sie loszuwerden. Wenn Sie ein Maß für die Komplexität eines bestimmten Projekts haben (Anzahl der Dateien, Anzahl der Codezeilen, Anzahl der Routinen usw.), interessiert Sie möglicherweise die durch die Komplexität normalisierte verstrichene Zeit, die möglicherweise stabiler ist. Wenn Sie es im Laufe der Zeit wirklich stabil und flach machen möchten, können Sie nicht lernen, wann Sie Ihre Maßnahmen ergreifen müssen.
StasK

@StasK: Vielen Dank für Ihre Kommentare, dies ist eine wertvolle Eingabe. Die Aktion ist bereits bekannt: Viele dieser Builds dauern zu lange, und wir sollten daran arbeiten, sie schneller zu machen. Ich möchte das aggregierte Maß verwenden, um zu sehen, ob die Dinge besser oder schlechter werden.
Kim Gräsman

Und ja, im Idealfall würde ich dies wahrscheinlich nach Produkt tun, aber die Quelldaten enthalten diese Informationen nicht, sodass ich basierend auf dem, was ich über die Distribution weiß, betrüge. Dies könnte sich natürlich im Laufe der Zeit ändern, und ich muss möglicherweise überdenken.
Kim Gräsman

Nun, für mich sieht es so aus, als hätten Sie drei Gruppen in Ihren Daten: (i) erstellt diese Erstellung; (ii) Builds, die fehlschlagen (und Sie sagen, dass sie eher schnell fehlschlagen), und (iii) Builds, die auflegen (oder fast) - und das ist wahrscheinlich die wichtigste, wenn nicht die einzige Gruppe, auf die Sie reagieren möchten. Das aggregierte Zeitmaß ist möglicherweise nicht von großem Nutzen. Aber so etwas wie der zehntlängste Build oder das zehnthöchste Perzentil der Verteilung der Build-Zeiten ist möglicherweise ein besseres Maß dafür, was am äußersten Punkt der Verteilung liegt, die Sie interessiert. Das ist ungefähr das, was die EPA bei der Überwachung der Umweltverschmutzung verwendet.
StasK

Antworten:


8

Ihre Herangehensweise ist für mich unter Berücksichtigung Ihres Ziels sinnvoll. Es ist einfach, unkompliziert, erledigt die Arbeit und Sie möchten wahrscheinlich keine wissenschaftliche Arbeit darüber schreiben.

Eine Sache, die man im Umgang mit Ausreißern immer tun sollte, ist, sie zu verstehen , und Sie leisten bereits hervorragende Arbeit. Mögliche Möglichkeiten zur Verbesserung Ihres Ansatzes wären: Können Sie Informationen dazu verwenden, welche Builds hängen? Sie erwähnen, dass Sie "andere Mechanismen haben, um diese zu erkennen" - können Sie sie erkennen und dann nur diejenigen aus der Probe entfernen?

Andernfalls, wenn Sie mehr Daten haben, könnten Sie darüber nachdenken, nicht Tertiles, sondern Quintiles zu entfernen ... aber irgendwann wird dies wahrscheinlich keinen großen Unterschied machen.


Wenn ich von "anderen" Mechanismen spreche, dann meine ich das außerhalb dieses Datensatzes völlig anders , daher kann ich hier keine darauf basierenden Entscheidungen treffen. Wir sammeln täglich Daten und erhalten nur ca. 50 Builds pro Tag. Ich denke, Quintile liefern möglicherweise zu wenig Daten, aber danke für den Vorschlag, ich kann damit experimentieren!
Kim Gräsman

13

Was Sie tun, wird als beschnittenes Mittel bezeichnet .

Wie Sie es getan haben, ist es üblich, von jeder Seite den gleichen Anteil (den Zuschnittanteil) zuzuschneiden.

Sie können alles zwischen 0% (ein gewöhnlicher Mittelwert) bis (fast) 50% (was den Median ergibt) trimmen. Ihr Beispiel hat 30% von jedem Ende abgeschnitten.

Siehe diese Antwort und den entsprechenden Wikipedia-Artikel .

[Bearbeiten: Siehe Nick Cox ausgezeichnete Diskussion zu diesem Thema.]

Es ist ein ziemlich vernünftiger, etwas robuster Standortschätzer. Es wird allgemein als geeigneter für nahezu symmetrische Verteilungen angesehen als für stark verzerrte, aber wenn es Ihrem Zweck entspricht *, gibt es keinen Grund, es nicht zu verwenden. Wie viel am besten zu trimmen ist, hängt von der Verteilung und den Eigenschaften ab, die Sie suchen.

* Es ist nicht ganz klar, was Sie hier schätzen möchten.

Es gibt eine Vielzahl anderer robuster Ansätze zur Zusammenfassung des Verteilungszentrums, von denen Sie einige möglicherweise auch nützlich finden. (zB M-Schätzer könnten für Sie von Nutzen sein)

[Wenn Sie ein entsprechendes Maß für die Variabilität benötigen, das zu Ihrem getrimmten Mittelwert passt , kann eine Winsorized- Standardabweichung hilfreich sein (ersetzen Sie bei der Berechnung des SD im Wesentlichen die Werte, die Sie beim Trimmen abschneiden würden, durch die extremsten Werte, die Sie haben nicht abgeschnitten).]


Ich habe die typische Form meiner Distribution noch nicht überprüft. Ich denke, sie variiert von Woche zu Woche, je nachdem, wo die Leute Änderungen vornehmen. Es könnte in der Tat sehr schief sein.
Kim Gräsman

Danke, dass du meinen Hack-Job benannt hast, übrigens. Es
schafft

2

Eine weitere Methode besteht darin, den Median aller paarweisen Mittelwerte zu berechnen oder ein Bootstrapping durchzuführen.

Aktualisieren:

Der Median aller paarweisen Mittelwerte wird als Hodges-Lehmann-Schätzer bezeichnet . Dieser Schätzer hat normalerweise einen hohen Wirkungsgrad. In diesem Lexikoneintrag von Scott L. Hershberger heißt es:

Während sowohl der Median als auch der Hodges-Lehmann-Schätzer dem Stichprobenmittelwert für unsymmetrische Verteilungen vorzuziehen sind, weist der Hodges-Lehmann-Schätzer eine größere asymptotische relative Effizienz in Bezug auf den Mittelwert auf als der Median

Bootstrapping mag weniger relevant und rechenintensiver sein, aber Sie könnten eine kleine zufällige Stichprobe der Daten mit Ersetzung nehmen und den Mittelwert dieser Teilstichprobe berechnen, dies viele Male tun und den Median aller Mittelwerte berechnen.

In beiden Fällen müssen Sie nicht mehr einen Wert aus den Werten Ihrer Daten auswählen (wenn Sie den gewöhnlichen Median berechnen), sondern Sie müssen aus vielen Mittelwerten aus Teilmengen der Daten auswählen.


2
Können Sie Vor- und Nachteile dieser Methoden beschreiben? Eine einzeilige Antwort ist unzureichend.
StasK

1
Ich habe versucht, ein Update mit mehr Erklärung zu machen
Finn Årup Nielsen

Sowohl paarweise Durchschnittswerte als auch Bootstrapping scheinen eine Reihe von Neuberechnungen über den gesamten Datensatz zu beinhalten. Die Stichprobe ist im Allgemeinen ziemlich klein (<500 Werte), daher ist dies wahrscheinlich kein Problem, scheint aber komplizierter zu sein. Gut zu wissen, dass es weitere Ansätze zum Experimentieren gibt, wenn sich herausstellt, dass der getrimmte Mittelwert zu stumpf ist. Vielen Dank!
Kim Gräsman

1

Scheint vernünftig, was Sie tun: Nur zur Information benutze ich das folgende Verfahren ziemlich oft für einen ähnlichen Zweck: Aber ich interessiere mich immer nur für die oberen Ausreißer.

Berechnen Sie eine Zusammenfassung mit fünf Zahlen: Min, Q1, Median, Q3, Max. Interquartilbereich berechnen: Q3-Q1. Stellen Sie Ihre Ausreißer-Zäune auf Q1-IQR * X und Q3 + IQR * X ein, wobei ein angemessener Wert von "X" 1,5 ist.

Unter Verwendung von Excel und Ihren Zahlen ergibt das oben Gesagte (unter Verwendung von 1,5 für 'X' **) einen oberen Ausreißer: 21011

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

Der untere Zaun hier ist für Ihr Beispiel also nicht sinnvoll oder realistisch. Dies belegt, wie wichtig es ist, die Bedeutung Ihrer spezifischen Daten zu verstehen.

(** Ich habe ein Zitat für die '1.5'-Regel gefunden: Ich sage nicht, dass es maßgeblich ist, aber es scheint mir ein vernünftiger Ausgangspunkt zu sein: http://statistics.about.com/od/Descriptive-Statistics/a/ Was-ist-die-Interquartil-Range-Regel.htm )

Sie können sich auch (vielleicht) dafür entscheiden, nur die Datenpunkte zu verwenden, die in den IQR selbst fallen: Dies scheint sinnvolle Ergebnisse zu liefern (da die Zugehörigkeit zu Ihrer Methode sehr ähnlich ist).

Unter Verwendung der gleichen Daten würden die folgenden Datenpunkte in den Bereich von Interesse platziert:

7812
3014
13400
21011
8993
8378
9100

Auf einem Boxplot: Diese Punkte würden alle in den Box-Teil (und nicht in den Whisker-Teil) des Diagramms fallen.

Zu sehen ist, dass diese Liste einige Elemente enthält, die nicht in Ihrer ursprünglichen Liste enthalten sind (die länger laufenden Builds). Ich kann nicht sagen, ob eine Liste in irgendeiner Weise genauer ist. (Wieder kommt es darauf an, Ihren Datensatz zu verstehen).


Danke, das scheint im Prinzip sehr nah an dem zu sein, was ich bereits mache. Inwiefern könnte diese Methode besser sein, als nur den Datensatz zu partitionieren?
Kim Gräsman

1
Ich kann nicht wirklich sagen, ob eine der beiden Methoden besser ist oder nicht: Ich schlug dies basierend auf dem vor, was ich in den Statistikbüchern / -seiten gelesen habe. Eine Sache (glaube ich), die die Methode hinzufügt, ist, dass Sie die "Zäune" ​​an das anpassen können, was Sie für geeignet halten (Anpassung des 1,5-Faktors); Wobei die Aufnahme des mittleren Drittels möglicherweise anfälliger für die Aufnahme eines potenziell hohen Ausreißers ist (der möglicherweise besser außerhalb des Zauns klassifiziert werden könnte) ..... aber das kann ich nicht mit Sicherheit sagen. Eine andere Sache bei der Verwendung von Quartilen ist, dass die 5-Zahlen-Zusammenfassung gut verstanden und allgemein verwendet wird.
Monojohnny

Vielen Dank für das zusätzliche Detail! Ich mache das in Python, also habe ich bereits eine Funktion, bei der ich den Datensatz in N Teile partitioniere und dann den mittleren Teil herausziehe. Es ist eine Ein-Zeichen-Änderung, um stattdessen 5 oder 7 Partitionen zu erstellen. Aber Ihr Standpunkt ist gut aufgenommen, und es ist gut zu sehen, wie man dieses Problem auf andere Weise angeht. Danke noch einmal.
Kim Gräsman

Hört sich gut an: Ich möchte noch etwas zur Verwendung von Quartilen und Zäunen hinzufügen (anstatt variable Partitionen zu haben) - nämlich, dass sie direkt auf Boxplots abgebildet werden: en.wikipedia.org/wiki/Box_plot , die (unter anderem) Eine Standardmethode zum grafischen Vergleich verschiedener Verteilungen.
Monojohnny
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.