Outliers
如何識別服務器正常運行時間性能數據中的異常值?
我有一個 python 腳本,它創建服務器正常運行時間和性能數據列表的列表,其中每個子列表(或“行”)包含特定集群的統計信息。例如,很好地格式化它看起來像這樣:
------- ------------- ------------ ---------- ------------------- 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)...
所以在列表形式中,它可能看起來像:
[[ams-a,98.099,1012,678,91],[bos-a,98.099,1111,12,91],...]
我的問題:
- 確定每列中異常值的最佳方法是什麼?或者異常值不一定是解決“壞處”問題的最佳方法?
在上面的數據中,我肯定想知道 bos-b 和 ord-b,還有 ams-a,因為它的錯誤率很高,但其他的可以丟棄。取決於列,因為更高不一定更糟,也不一定更低,我試圖找出最有效的方法來做到這一點。似乎 numpy 被提到了很多這類東西,但不知道從哪裡開始(遺憾的是,我比統計學家更像是系統管理員……)。當我在 Stack Overflow 上詢問時,有人提到使用 numpy 的 scoreatpercentile 函數並丟棄超過 99% 的任何東西——這看起來是個好主意嗎?
(從stackoverflow交叉發布,這裡:https ://stackoverflow.com/questions/4606288 )
根據您提出問題的方式
異常值不一定是解決發現“壞處”問題的最佳方法嗎?
目前尚不清楚您是否正在尋找異常值。例如,您似乎對性能高於/低於某個閾值的機器感興趣。
舉個例子,如果你所有的服務器都是 980.1% 的可用性,100% 可用性的服務器將是一個異常值,97.6% 可用性的服務器也是如此。但這些可能在您想要的範圍內。
另一方面,可能有充分的先驗理由希望在可用性低於 95% 的情況下收到任何服務器的通知,無論是否有一個或多個服務器低於此閾值。
出於這個原因,對異常值的搜索可能無法提供您感興趣的信息。閾值可以根據歷史數據進行統計確定,例如通過將錯誤率建模為泊鬆或將可用性百分比建模為 beta 變量。在應用設置中,這些閾值可能會根據性能要求來確定。