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

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

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

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

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

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 * - параметры максимального правдоподобия, и сообщить квантиль.

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

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

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

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

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

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

Другие вопросы по тегам