Saya memiliki skrip python yang membuat daftar daftar server uptime dan data kinerja, di mana setiap sub-daftar (atau 'baris') berisi statistik cluster tertentu. Misalnya, diformat dengan baik itu terlihat seperti ini:
------- ------------- ------------ ---------- -------------------
Cluster %Availability Requests/Sec Errors/Sec %Memory_Utilization
------- ------------- ------------ ---------- -------------------
ams-a 98.099 1012 678 91
bos-a 98.099 1111 12 91
bos-b 55.123 1513 576 22
lax-a 99.110 988 10 89
pdx-a 98.123 1121 11 90
ord-b 75.005 1301 123 100
sjc-a 99.020 1000 10 88
...(so on)...
Jadi dalam bentuk daftar, ini mungkin terlihat seperti:
[[ams-a,98.099,1012,678,91],[bos-a,98.099,1111,12,91],...]
Pertanyaan saya:
- Apa cara terbaik untuk menentukan outlier di setiap kolom? Atau apakah outlier tidak selalu merupakan cara terbaik untuk menyerang masalah menemukan 'kejahatan'?
Dalam data di atas, saya pasti ingin tahu tentang bos-b dan ord-b, serta ams-a karena tingkat kesalahannya sangat tinggi, tetapi yang lain bisa dibuang. Bergantung pada kolomnya, karena lebih tinggi tidak selalu lebih buruk, juga tidak lebih rendah, saya mencoba mencari cara paling efisien untuk melakukan ini. Sepertinya numpy disebutkan banyak untuk hal-hal semacam ini, tetapi tidak yakin di mana untuk memulai dengan itu (sayangnya, saya lebih sysadmin daripada ahli statistik ...). Ketika saya bertanya di Stack Overflow, seseorang menyebutkan menggunakan fungsi scoreatpercentile numpy dan membuang apa pun di atas persentil ke-99 - apakah itu sepertinya ide yang bagus?
(Diposting silang dari stackoverflow, di sini: /programming/4606288 )
Cara sederhana untuk menemukan server anomali adalah dengan mengasumsikan mereka terdistribusi secara identik, memperkirakan parameter populasi, dan mengurutkannya sesuai dengan kemungkinan mereka, naik. Kemungkinan kolom akan digabungkan dengan produk atau minimumnya (atau norma-T lainnya). Ini berfungsi dengan baik selama outlier jarang terjadi. Untuk deteksi outlier itu sendiri, parameter populasi yang stabil biasanya diperkirakan secara iteratif dengan menjatuhkan outlier yang ditemukan, tetapi itu tidak penting selama Anda secara manual memeriksa daftar dan dengan demikian menghindari ambang batas.
Untuk kemungkinannya, Anda dapat mencoba Beta untuk proporsi dan Poisson untuk tarif.
Seperti yang ditunjukkan oleh David, deteksi outlier tidak persis sama dengan analisis reliabilitas, yang akan menandai semua server yang melebihi batas tertentu. Selain itu, beberapa orang akan mendekati masalah melalui fungsi kehilangan - mendefinisikan rasa sakit yang Anda rasakan ketika beberapa server berada pada ketersediaan 50% atau tingkat kesalahan 500, dan kemudian memberi peringkat mereka sesuai dengan rasa sakit itu.
sumber
Mengidentifikasi titik data tertentu sebagai pencilan menyiratkan bahwa ada beberapa proses atau model pembuatan data dari mana data tersebut diharapkan berasal. Sepertinya Anda tidak yakin model apa untuk metrik dan kluster yang Anda khawatirkan. Jadi, inilah yang akan saya pertimbangkan untuk mengeksplorasi: bagan kendali proses statistik .
Idenya di sini adalah untuk mengumpulkan
-% Ketersediaan
- Permintaan / Detik
- Kesalahan / Detik
-% Memory_Utilization
metrik untuk setiap cluster Anda. Untuk setiap metrik, buat subset data yang hanya mencakup nilai yang "masuk akal" atau terkendali. Buat bagan untuk setiap metrik berdasarkan data in-control ini. Kemudian Anda dapat mulai memasukkan data langsung ke kode grafik Anda dan menilai secara visual apakah metrik mengendalikan atau tidak.
Tentu saja, melakukan ini secara visual untuk banyak metrik di banyak kluster mungkin tidak layak, tetapi ini bisa menjadi cara yang baik untuk mulai belajar tentang dinamika yang Anda hadapi. Anda kemudian dapat membuat layanan notifikasi untuk cluster dengan metrik yang tidak terkendali. Sejalan dengan ini, saya telah bermain dengan menggunakan jaringan saraf untuk secara otomatis mengklasifikasikan pola bagan kendali sebagai OK vs beberapa rasa tertentu di luar kendali (mis.% Tren ketersediaan turun atau perilaku siklik dalam kesalahan / detik). Melakukan hal ini memberi Anda keuntungan dari diagram kontrol proses statistik (lama digunakan dalam pengaturan manufaktur) tetapi meringankan beban karena harus menghabiskan banyak waktu untuk benar-benar melihat grafik, karena Anda dapat melatih jaringan saraf untuk mengklasifikasikan pola berdasarkan pada interpretasi ahli Anda.
Adapun kode, ada paket spc di pypi tapi saya tidak punya pengalaman menggunakan ini. Contoh mainan saya menggunakan jaringan saraf (Naif Bayes juga) dapat ditemukan di sini .
sumber