我有一个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因为这类事情被提到很多,但不知道从哪里开始(遗憾的是,我更像是系统管理员而不是统计学家…)。
提前谢谢!
我认为最好的办法是查看scipy的scoreatpercentile函数。例如,您可以尝试排除所有高于99%的值。
如果没有正态分布,平均值和标准差就不好。
一般来说,对数据的外观有一个粗略的视觉概念是很好的。这里有matplotlib;我建议您在决定计划之前用它绘制一些数据图。
视觉上识别异常值的一个好方法是绘制一个方框图(或方框和胡须图),它将显示中值,以及中值上下的几个四分位数,以及离此方框“很远”的点(参见维基百科条目http://en.wikipedia.org/wiki/Box_plot)。在R中,有一个
boxplot
函数来完成这个任务。以编程方式丢弃/标识异常值的一种方法是使用MAD或Median Absolute Deviation。与标准差不同,MAD对异常值不敏感。我有时用经验法则来考虑所有偏离中值5*MAD以上的点,都是离群值。
你所宣称的“发现不良”的目标意味着,你要寻找的不是异常值,而是高于或低于某个阈值的观察值,我假设随着时间的推移,阈值将保持不变。
例如,如果所有服务器的可用性为98±0.1%,则100%可用性的服务器将是一个异常值,97.6%可用性的服务器也是如此。但这些可能在你想要的范围内。
另一方面,apriori可能有充分的理由希望在低于95%可用性的情况下收到任何服务器的通知,无论是否有一个或多个服务器低于此阈值。
因此,搜索异常值可能无法提供您感兴趣的信息。阈值可以基于历史数据进行统计确定,例如通过将错误率建模为泊松或可用性百分比建模为β变量。在应用的设置中,这些阈值可能是根据性能要求确定的。
相关问题 更多 >
编程相关推荐