Bagaimana mengukur distribusi latensi

Saya mencoba menganalisis distribusi latensi dalam sistem. Latensi dikumpulkan dengan cara berikut: latensi maksimum yang diamati per menit diukur, lalu, jika latensi ini adalah latensi terbesar yang terlihat hari ini, nilai ini akan dicatat. Pada akhirnya saya memiliki sesuatu seperti ini:

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

Ini adalah waktu panggilan API dalam ms yang terlihat dalam satu hari. Saya perlu membuat beberapa metrik yang berguna dari data ini tetapi saya tidak tahu caranya! Jelas tidak masuk akal jika saya menghitung rata-rata atau median dari dataset ini. Ini tidak akan mewakili median atau rata-rata sebenarnya karena jika latensi maksimal terjadi pada menit pertama hari itu - itu akan menjadi median dan rata-rata. Saya tidak bisa mengandalkan nilai maksimal karena ini bisa menjadi outlier yang disebabkan oleh beberapa kejadian langka seperti kelambatan jaringan. Pencilan ini tidak akan mewakili kualitas kode dan tidak akan membantu menemukan kesalahan yang sebenarnya.

Bisakah Anda membantu saya membuat metrik yang masuk akal dari data ini?


person Evgeny Lazin    schedule 27.01.2015    source sumber
comment
Apakah Anda mencoba mendapatkan indikasi rata-rata yang mengecualikan outlier?   -  person shuttle87    schedule 27.01.2015
comment
Tepat. Saya perlu outlier tetapi ini sederhana.   -  person Evgeny Lazin    schedule 27.01.2015
comment
Sepertinya Anda memerlukan semacam rata-rata pergerakan. Anda mungkin dapat mengecualikan sejumlah outlier dari rata-rata tersebut.   -  person shuttle87    schedule 27.01.2015
comment
Saya perlu melakukan pengukuran tunggal dari daftar angka ini. Ini adalah angka latensi dari satu hari dan saya berencana menggabungkan pengukuran ini untuk rentang waktu yang lebih besar dan menganalisisnya. Ya, rata-rata bergerak dapat digunakan untuk ini tetapi pertama-tama saya perlu membuat beberapa metrik dari daftar angka ini.   -  person Evgeny Lazin    schedule 27.01.2015
comment
Mungkin dimungkinkan untuk merancang cara untuk menyimpulkan parameter untuk distribusi tertentu dari jumlah maksimum yang Anda miliki. Maka satu-satunya nomor yang Anda laporkan dapat berupa (katakanlah) persentil ke-95 atau ke-99 dari perkiraan distribusi. Saya tidak tahu apakah masalah tersebut sudah terpecahkan; Anda mungkin bisa mengetahuinya dengan bertanya di stats.stackexchange.com. Kedengarannya seperti masalah yang menarik, tapi sayang sekali, karena saya yakin Anda tidak menginginkan masalah yang menarik.   -  person Robert Dodier    schedule 28.01.2015
comment
Apakah Anda memiliki stempel waktu pencatatan angka [12, 15, 19, ..., 57, 120]? Saya menduga dengan memilikinya akan lebih mudah untuk mendapatkan rumus.   -  person Robert Dodier    schedule 28.01.2015
comment
Senang rasanya memiliki masalah yang menarik. Pada titik ini saya memutuskan untuk menyimpan N elemen teratas dari setiap array (satu array per hari untuk setiap parameter) dan menafsirkannya sebagai titik dalam ruang mulitdimensi. Dimungkinkan untuk mengelompokkan data untuk setiap parameter menggunakan knn dan menemukan outlier tetapi ini harus diperiksa atau data sebenarnya terlebih dahulu. Saya juga sedang mempelajari proposal Anda, lagi pula datanya tidak cukup untuk memutuskan mana yang lebih baik atau lebih buruk.   -  person Evgeny Lazin    schedule 28.01.2015
comment
Dan ya, saya punya stempel waktunya.   -  person Evgeny Lazin    schedule 28.01.2015
comment
@Lazin Clustering untuk menemukan outlier sepertinya bukan pendekatan yang valid, karena mengabaikan nilai yang dihilangkan, yang membawa beberapa informasi (yaitu latensi kurang dari maksimum terbaru). Nilai-nilai yang dihilangkan tersebut akan menjadi semakin penting seiring berjalannya waktu, karena menjelang akhir hari, sebagian besar nilai akan menjadi kurang dari nilai maksimum terbaru.   -  person Robert Dodier    schedule 28.01.2015
comment
Saya akan mencoba pendekatan Anda ketika saya memiliki lebih banyak data. Saya hanya punya data untuk beberapa hari sekarang :(   -  person Evgeny Lazin    schedule 29.01.2015


Jawaban (2)


Dengan asumsi bahwa Anda memiliki stempel waktu untuk angka-angka yang dilaporkan, Anda dapat membuat fungsi kemungkinan untuk distribusi parametrik, menemukan perkiraan parameter kemungkinan maksimum, dan kemudian menghitung kuantil yang sesuai (0,95, 0,99, 0,999, apa pun) dan melaporkannya sebagai harian seberapa buruk nomornya. Saya mengatakan distribusi parametrik karena saya tidak tahu bagaimana melakukan ini secara nonparametrik.

Mengingat stempel waktu dari angka-angka yang dilaporkan, dan dengan asumsi bahwa latensi diamati satu menit sekali, Anda dapat mengetahui berapa banyak latensi yang diamati yang dihilangkan dari laporan; ini hanyalah jumlah menit dari satu nomor yang dilaporkan ke nomor berikutnya. Untuk setiap angka x_i yang dilaporkan, terdapat istilah p(x_i | a) dalam fungsi kemungkinan, dengan p adalah kepadatan probabilitas dan a mewakili semua parameter (satu atau lebih). Untuk setiap angka yang tidak dilaporkan, terdapat suku P(x_i | a) dalam fungsi kemungkinan, dengan P adalah fungsi distribusi kumulatif dan x_i adalah angka yang paling baru dilaporkan; semua suku untuk angka-angka yang tidak dilaporkan dalam satu celah di antara angka-angka yang dilaporkan dapat dikumpulkan menjadi satu suku P(x_i | a)^n_i dengan n_i adalah jumlah angka-angka yang tidak dilaporkan dalam celah di mana x_i adalah titik akhir kiri dan x_{i + 1} adalah titik akhir yang tepat.

Singkatnya, fungsi kemungkinannya adalah

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

dimana n adalah jumlah angka yang dilaporkan. Mungkin lebih mudah untuk bekerja dengan logaritma itu. Dengan L di tangan, strateginya adalah memaksimalkan L terhadap a, kemudian menghitung kuantil untuk P(x | a*) dengan a* adalah parameter kemungkinan maksimum, dan melaporkan kuantil tersebut.

Saya tidak tahu distribusi apa yang tepat untuk mengasumsikan latensi. Saya akan mulai dengan distribusi Weibull, tetapi Anda mungkin harus mencoba yang lain.

Ada berbagai macam asumsi yang tidak disebutkan di sini. Saya bisa mengisi detailnya jika ada minat.

person Robert Dodier    schedule 28.01.2015

Berikut adalah pendekatan yang berbeda, yaitu nonparametrik. Anda dapat membatasi fungsi distribusi kumulatif empiris di atas dan di bawah: antara x_i dan x_{i + 1}, (1) dibatasi di bawah oleh pecahan nilai yang tentunya lebih kecil atau sama dengan x_i, dan (2) adalah dibatasi di atas oleh pecahan nilai yang tentunya lebih besar dari x_i.

Batasan ini mungkin sangat longgar; membalikkan c.d.f. akan menghasilkan batas kuantil yang sangat lebar -- ini menyiratkan bahwa batas Anda untuk apa yang disebut "pencilan" hanya akan diketahui dalam rentang yang relatif luas. Anda mungkin membuat asumsi sederhana, seperti mengasumsikan c.d.f. adalah linier sepotong-sepotong antara x_i dan x_{i + 1}, untuk mendapatkan nilai poin.

(1) hanyalah jumlah total nilai (dilaporkan dan dihilangkan) sebelum x_{i + 1} diamati, dibagi dengan jumlah total nilai sepanjang hari. (2) hanya 1 dikurangi (jumlah nilai yang dilaporkan setelah x_i (karena hanya nilai tersebut yang kita tahu pasti lebih besar dari x_i), dibagi dengan jumlah total nilai sepanjang hari).

EDIT: dikoreksi (2).

person Robert Dodier    schedule 28.01.2015