Хорошая форма для удаления выбросов?

12

Я работаю над статистикой для сборок программного обеспечения. У меня есть данные для каждой сборки по пройденному / неудачному и истекшему времени, и мы генерируем ~ 200 из них / неделю.

Коэффициент успешности легко агрегируется, я могу сказать, что 45% прошли каждую данную неделю. Но я хотел бы также объединить прошедшее время, и я хочу убедиться, что я не искажаю данные слишком сильно. Подумал, я лучше спросить плюсы :-)

Скажем, у меня есть 10 продолжительности. Они представляют как успешные, так и неудачные случаи. Некоторые сборки терпят неудачу немедленно, что делает продолжительность необычно короткой. Некоторые зависают во время тестирования и в конечном итоге истекают, вызывая очень длительные периоды. Мы строим разные продукты, поэтому даже успешные сборки могут длиться от 90 секунд до 4 часов.

Я мог бы получить такой набор:

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

Мой первый подход состоял в том, чтобы получить среднее время, сортируя набор и выбирая среднее значение, в данном случае 7812 (я не беспокоился о среднем арифметическом для четных наборов).

К сожалению, это, кажется, вызывает много вариаций, так как я выбираю только одно заданное значение. Поэтому, если бы я изменил это значение, оно колебалось бы между 5000-10000 секундами, в зависимости от того, какая сборка была на медиане.

Поэтому, чтобы сгладить это, я попробовал другой подход - удалить выбросы и затем вычислить среднее значение по оставшимся значениям. Я решил разбить его на тертили и работать только над средним:

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

Причина, по которой мне это кажется лучше, двоякая:

  • Мы не хотим никаких действий на более быстрых сборках, они уже в порядке
  • Самые длинные сборки, вероятно, вызваны тайм-аутом и всегда будут там. У нас есть другие механизмы для выявления этих

Так что мне кажется, что это данные, которые я ищу, но я беспокоюсь, что добился гладкости, удалив, ну, правда.

Является ли это спорно? Является ли метод вменяемым?

Благодарность!

Ким Грасман
источник
Вы все еще не сказали, почему вы хотите, чтобы ваша мера истекшего времени. Вам нужно оценить общее машинное время, за которое вы платите? Вам нужно оценить, сколько поездок в кофеварку вы сможете совершить? Какое действие вы предпримете, если бы знали время?
StasK
Кроме того, если у вас есть разнородные продукты, которые вы создаете, то подпрыгивать - это естественно, и вам не следует пытаться от них избавиться. Если у вас есть мера сложности данного проекта (количество файлов, количество строк кода, количество подпрограмм и т. Д.), Вас может заинтересовать прошедшее время, нормализованное по сложности, которое может быть более стабильным. Если вы хотите сделать его действительно стабильным и ровным с течением времени, то вы не сможете узнать, когда вам нужно предпринять свои действия.
StasK
@StasK: спасибо за ваши комментарии, это ценный вклад. Действие уже известно: многие из этих сборок занимают слишком много времени, и мы должны работать над тем, чтобы сделать их быстрее. Я хочу использовать совокупную меру, чтобы увидеть, становится ли все лучше или хуже.
Ким Грасман
И да, в идеале я бы, вероятно, сделал это по продуктам, но исходные данные не содержат эту информацию, поэтому я обманываю на основе того, что я знаю о распределении. Конечно, со временем это может измениться, и мне, возможно, придется переосмыслить.
Ким Грасман
Что ж, мне кажется, у вас есть три группы в ваших данных: (i) сборки, которые собирают; (ii) сборки, которые терпят неудачу (и вы говорите, что они имеют тенденцию проваливаться довольно быстро), и (iii) сборки, которые зависают (или почти так) - и это, вероятно, основная, если не единственная группа, над которой вы хотите предпринять действия. Совокупный показатель времени не может быть очень полезным; но что-то вроде 10-й самой длинной сборки или 10-го самого высокого процентиля распределения времени сборки может быть лучшей мерой того, что находится на пределе распределения, которое вас волнует. Это примерно то, что EPA использует в своем мониторинге загрязнения.
StasK

Ответы:

8

Ваш подход имеет смысл для меня, принимая во внимание вашу цель. Это просто, это просто, это делает работу, и вы, вероятно, не хотите писать научную статью об этом.

Одна вещь, которую всегда нужно делать при работе с выбросами, - это понимать их, и вы уже отлично справляетесь с этим. Таким образом, возможные пути улучшения вашего подхода: можете ли вы использовать информацию о том, какие сборки зависают? Вы упоминаете, что у вас есть «другие механизмы для их обнаружения» - можете ли вы обнаружить их, а затем удалить только те из образца?

В противном случае, если у вас есть больше данных, вы можете подумать об удалении не тертилей, а квинтилей ... но в какой-то момент это, вероятно, не будет иметь большого значения.

Стефан Коласса
источник
Когда я говорю «другие» механизмы, я имею в виду совершенно иное за пределами этого набора данных, поэтому я не могу принимать решения на его основе здесь. Мы собираем данные ежедневно, и мы получаем только ~ 50 сборок в день, поэтому я думаю, что квинтили могут дать слишком мало данных, но спасибо за предложение, я могу поэкспериментировать с ним!
Ким Грасман
13

То, что вы делаете, известно как усеченное среднее .

Как вы уже сделали, обычно обрезается одинаковая пропорция с каждой стороны (пропорция обрезки).

Вы можете урезать что-нибудь между 0% (обычное среднее) до (почти) 50% (что дает медиану). Ваш пример на 30% обрезан с каждого конца.

Смотрите этот ответ и соответствующую статью в Википедии .

[Редактировать: Смотрите отличную дискуссию Ника Кокса на эту тему.]

Это довольно разумный, несколько надежный оценщик местоположения. Как правило, он считается более подходящим для почти симметричных распределений, чем сильно искаженные, но если он соответствует вашим целям *, нет никаких причин не использовать его. Сколько лучше обрезать, зависит от того, какие у вас дистрибутивы и какие свойства вы ищете.

* Не совсем понятно, что вы хотите оценить здесь.

Существует множество других надежных подходов к обобщению «центра» распределений, некоторые из которых вы также можете найти полезными. (например, М-оценки могут быть полезны для вас)

[Если вам нужна соответствующая мера изменчивости, чтобы соответствовать усеченному среднему значению, вам может пригодиться стандартное отклонение Winsorized (по сути, при вычислении sd замените значения, которые вы обрежете при обрезании, на самые крайние значения, которые вы не отрезал).]

Glen_b - Восстановить Монику
источник
Я на самом деле не проверял типичную форму своего дистрибутива, я думаю, что он меняется каждую неделю в зависимости от того, где люди вносят изменения. Это на самом деле может быть сильно искажено.
Ким Грасман
Спасибо за то, что поместили имя на мою работу, кстати. Это внушает некоторую уверенность :-)
Ким Грасман
2

Еще один метод состоит в том, чтобы вычислить медиану всех попарных средних или выполнить начальную загрузку.

Обновить:

Медиана всех парных средних значений называется оценкой Ходжеса – Лемана . Эта оценка обычно имеет высокую эффективность. Эта запись энциклопедии Скотта Л. Гершбергера гласит:

В то время как и медиана, и оценка Ходжеса-Лемана оба предпочтительнее выборочного среднего для несимметричных распределений, оценка Ходжса-Лемана имеет большую асимптотическую относительную эффективность по отношению к среднему, чем медиана

Самозагрузка может быть менее релевантной и более требовательной к вычислениям, но вы можете взять небольшую случайную выборку данных с заменой и вычислить среднее значение этой подвыборки, сделать это много раз и вычислить медиану всех средств.

В обоих случаях вам больше не нужно выбирать значение среди значений ваших данных (когда вы вычисляете обычную медиану), а вместо этого вы выбираете среди множества средних значений из подмножеств данных.

Финн Оруп Нильсен
источник
2
Можете ли вы описать преимущества и недостатки этих методов? Однострочный ответ недостаточен.
StasK
1
Я попытался сделать обновление с дополнительными пояснениями
Финн Оруп Нильсен
Как парные средние значения, так и начальная загрузка, похоже, включают в себя ряд пересчетов по всему набору данных. Выборка, как правило, довольно мала (<500 значений), так что, вероятно, это не проблема, но она кажется более сложной. Полезно знать, что есть больше подходов для экспериментов, если усеченное среднее оказывается слишком тупым. Благодарность!
Ким Грасман
1

Кажется разумным, что вы делаете: просто для информации, я часто использую следующий процесс для аналогичной цели: но я действительно когда-либо действительно заинтересован в верхних выбросах.

Рассчитать пятизначную сводку: Мин, Q1, Медиана, Q3, Макс. Рассчитать межквартильный диапазон: Q3-Q1. Установите свои отклонения «заборы» на Q1-IQR * X и Q3 + IQR * X: где разумное значение «X» равно 1,5.

Используя Excel и ваши цифры выше (используя 1,5 для «X» **), получается один верхний выброс: 21011

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

Таким образом, нижний предел здесь не полезен и не реалистичен для вашего примера на самом деле: он подтверждает мнение другого поста относительно важности понимания значения ваших конкретных данных.

(** Найдена одна цитата для правила «1.5»: я не говорю, что оно авторитетное, но мне кажется, это разумная отправная точка: http://statistics.about.com/od/Descriptive-Statistics/a/ What-Is-The-Interquartile-Range-Rule.htm )

Вы также можете решить (возможно) просто использовать точки данных, которые попадают в сам IQR: это, кажется, дает ощутимые результаты (в том, что членство в вашем методе очень похоже).

используя те же данные, это поместит следующие точки данных в «область интересов»:

7812
3014
13400
21011
8993
8378
9100

На блокпосте: все эти точки попадают в часть блока (а не в часть усиков) диаграммы.

Можно видеть, что в этот список входят некоторые элементы, которых нет в исходном списке (более длительные сборки); Я не могу сказать, является ли один список более точным в любом случае. (опять же, сводится к пониманию вашего набора данных).

monojohnny
источник
Спасибо, это кажется очень близким в принципе к тому, что я уже делаю. Как этот метод может быть лучше, чем просто разделение набора данных?
Ким Грасман
1
Я не могу точно сказать, является ли какой-либо метод лучше или нет: я предложил это на основе того, что я прочитал в статистических книгах / сайтах. Одна вещь (я думаю), которую добавляет метод, - это то, что вы можете настроить «заборы» в соответствии с тем, что вы считаете подходящим (настройка коэффициента 1,5); где просто взятие средней трети может быть более восприимчивым к включению потенциально высокого выброса (который, возможно, лучше классифицировать за пределами забора) ..... но я не могу сказать это точно. Еще одна вещь, касающаяся использования Quartiles, заключается в том, что сводка из 5 чисел достаточно хорошо понята и широко используется.
monojohnny
Спасибо за добавленные детали! Я делаю это в Python, поэтому у меня уже есть функция, где я делю набор данных на N частей, а затем вытаскиваю среднюю часть. Это односимвольное изменение, чтобы вместо этого сделать 5 или 7 разделов. Но ваша точка зрения хорошо принята, и приятно видеть другой распространенный способ решения этой проблемы. Еще раз спасибо.
Ким Грасман
звучит хорошо для меня: я добавлю еще одну вещь, которую нужно подчеркнуть при использовании квартилей и ограждений (вместо того, чтобы иметь переменные разделы) - это то, что они отображаются прямо на boxplots: en.wikipedia.org/wiki/Box_plot, которые позволяют (среди прочего) стандартный способ графического сравнения различных распределений.
monojohnny