Как измерить распределение задержки

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

[12, 15, 19, ..., 57, 120]

Это время вызовов API в миллисекундах за один день. Мне нужно построить какую-нибудь полезную метрику из этих данных, но я не знаю как! Очевидно, не имеет смысла вычислять среднее или медианное значение из этого набора данных. Это не будет реальным медианным или средним значением, потому что, если максимальная задержка произошла в течение первой минуты дня, это будет как медиана, так и среднее значение. Я не могу полагаться на максимальное значение, потому что это может быть выбросом, вызванным каким-то редким событием, например задержкой сети. Этот выброс не будет отражать качество кода и не поможет выявить реальные ошибки.

Можете ли вы помочь мне построить метрику, которая имеет смысл на основе этих данных?


person Evgeny Lazin    schedule 27.01.2015    source источник
comment
Вы пытаетесь получить какое-то указание на среднее значение, исключающее выбросы?   -  person shuttle87    schedule 27.01.2015
comment
Точно. Мне нужны выбросы, но это просто.   -  person Evgeny Lazin    schedule 27.01.2015
comment
Похоже, вам нужна какая-то скользящая средняя. Вы могли бы исключить фиксированное количество выбросов из такого среднего.   -  person shuttle87    schedule 27.01.2015
comment
Мне нужно произвести единичное измерение из этого списка чисел. Это числа задержки за один день, и я планирую объединить эти измерения для большего временного диапазона и проанализировать. Да, для этого можно использовать скользящую среднюю, но сначала мне нужно построить какую-то метрику из этого списка чисел.   -  person Evgeny Lazin    schedule 27.01.2015
comment
Вероятно, можно придумать способ вывести параметры для конкретного распределения на основе имеющегося у вас текущего максимума. Тогда ваше единственное указанное число может быть (скажем) 95-м или 99-м процентилем предполагаемого распределения. Я не знаю, решена ли это проблема; вы можете узнать об этом, задав вопрос на сайте stats.stackexchange.com. Это действительно звучит как интересная проблема, что очень плохо, поскольку я уверен, что вам не нужна интересная проблема.   -  person Robert Dodier    schedule 28.01.2015
comment
У вас есть отметки времени, в которые были записаны числа [12, 15, 19, ..., 57, 120]? Я подозреваю, что, имея их, вывести формулу будет легче.   -  person Robert Dodier    schedule 28.01.2015
comment
Хорошо иметь интересную задачу. На этом этапе я решаю сохранить верхние N элементов каждого массива (один массив в день для каждого параметра) и интерпретировать их как точки в многомерном пространстве. Можно сгруппировать данные для каждого параметра с помощью knn и найти выбросы, но сначала необходимо проверить это или реальные данные. Я твое предложение тоже изучаю, все равно данных недостаточно, чтобы решить, что лучше, а что хуже.   -  person Evgeny Lazin    schedule 28.01.2015
comment
И да, у меня есть временные метки.   -  person Evgeny Lazin    schedule 28.01.2015
comment
Кластеризация @Lazin для поиска выбросов не кажется правильным подходом, поскольку она игнорирует пропущенные значения, которые несут некоторую информацию (а именно, что задержка была меньше последнего максимума). Эти пропущенные значения будут становиться все более и более важными с течением дня, поскольку к концу дня большинство значений будет меньше последнего максимума.   -  person Robert Dodier    schedule 28.01.2015
comment
Я попробую ваш подход, когда у меня будет больше данных. У меня есть данные только на несколько дней :(   -  person Evgeny Lazin    schedule 29.01.2015


Ответы (2)


Предполагая, что у вас есть временные метки для сообщаемых чисел, вы можете построить функцию правдоподобия для параметрического распределения, найти оценки параметров максимального правдоподобия, а затем вычислить соответствующий квантиль (0,95, 0,99, 0,999 и т. Д.) И сообщить это как дневное как это плохо номер. Я говорю о параметрическом распределении, потому что не знаю, как выполнить это непараметрическим способом.

Учитывая временные метки сообщаемых чисел и предполагая, что в противном случае задержки наблюдаются один раз в минуту, вы можете выяснить, сколько наблюдаемых задержек было пропущено из отчета; это просто количество минут от одного сообщенного номера до следующего. Для каждого сообщенного числа x_i есть член p (x_i | a) в функции правдоподобия, где p - это плотность вероятности, а a представляет все параметры (один или несколько). Для каждого незарегистрированного числа есть член P (x_i | a) в функции правдоподобия, где P - кумулятивная функция распределения, а x_i - это последнее сообщенное число; все термины для незарегистрированных чисел в одном промежутке между сообщенными числами могут быть собраны в один член P (x_i | a) ^ n_i, где n_i - количество незарегистрированных чисел в промежутке, в котором x_i является левой конечной точкой, а x_ {i + 1} - правая конечная точка.

Таким образом, функция правдоподобия

L(a) = product(p(x_i | a), i, 1, n) * product(P(x_i | a)^n_i, i, 1, n)

где n - количество сообщенных чисел. Наверное, удобнее работать с логарифмом этого. С L в руке стратегия состоит в том, чтобы максимизировать L относительно a, затем вычислить квантиль для P (x | a *), где a * - параметры максимального правдоподобия, и сообщить квантиль.

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

Здесь есть всевозможные невысказанные предположения. Я могу заполнить детали, если есть интерес.

person Robert Dodier    schedule 28.01.2015

Вот другой подход, непараметрический. Вы можете ограничить эмпирическую кумулятивную функцию распределения сверху и снизу: между x_i и x_ {i + 1}, (1) она ограничена снизу долей значений, которые, безусловно, меньше или равны x_i, и (2) она равна ограниченный сверху долей значений, которые заведомо превышают x_i.

Эти границы, вероятно, очень нечеткие; инвертирование эмпирической c.d.f. приведет к очень широким границам квантилей - это означает, что ваша граница того, что составляет «выброс», будет известна только в относительно широком диапазоне. Вы можете сделать упрощающее предположение, например предположить, что c.d.f. является кусочно-линейным между x_i и x_ {i + 1}, чтобы получить значения точек.

(1) - это просто общее количество значений (как сообщенных, так и пропущенных) до наблюдения x_ {i + 1}, деленное на общее количество значений за весь день. (2) составляет всего 1 минус (количество сообщенных значений после x_i (поскольку это единственные, которые, как мы знаем наверняка, больше, чем x_i), деленное на общее количество значений за весь день).

РЕДАКТИРОВАТЬ: исправлено (2).

person Robert Dodier    schedule 28.01.2015