2011-01-05 2 views
17

각 서버의 가동 시간 및 성능 데이터 목록을 만드는 파이썬 스크립트가 있습니다. 각 하위 목록 (또는 '행')에는 특정 클러스터의 통계가 들어 있습니다.데이터 세트의 아웃 라이어 찾기

[[ams-a,98.099,1012,678,91],[bos-a,98.099,1111,12,91],...] 

내 질문 :

------- ------------- ------------ ---------- ------------------- 
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)... 

그래서리스트 형태가 같을 수 있습니다 각 열에서 이상 값을 결정하는 가장 좋은 방법은 무엇입니까 예를 들어, 멋지게 그것을 이런 식으로 뭔가를 보이는 포맷? 아니면 외계인이 '나쁜'을 찾는 문제를 공격하는 가장 좋은 방법은 아닐까요? 위의 데이터에서 에러율이 너무 높기 때문에 bos-b와 ord-b는 물론 ams-a에 대해서도 알고 싶습니다. 그러나 다른 것들은 폐기 될 수 있습니다. 칼럼에 따라, higher는 반드시 더 나쁘지도 낮지도 않기 때문에, 나는 이것을하기위한 가장 효율적인 방법을 찾으려고 노력하고 있습니다. numpy처럼 보이는 것들이 이런 종류의 물건에 대한 언급이 많이 있지만, 그것도 (안타깝게도, 나는 통계가 아닌 sysadmin보다 ...) 어디서부터 시작해야 할지도 모르겠다.

미리 감사드립니다.

+2

[stats.SE] (http://stats.stackexchange.com/) 사이트에서 질문하지 않는 이유는 무엇입니까? – csgillespie

+0

@csgillespie 좋은 생각, 할 것이다! – septagram

+1

http://stats.stackexchange.com/questions/6013/finding-outliers-in-a-data-set –

답변

7

당신이 말한 "나쁜 것을 발견하다"는 목표는 당신이 찾고있는 특이 치가 아니라, 어떤 임계치보다 높거나 낮은 관찰치를 의미하며 나는 임계치가 시간이 지남에 따라 동일하게 유지 될 것이라고 추정 할 것입니다.

예를 들어 모든 서버의 가용성이 98 ± 0.1 % 인 경우 가용성이 97 % 인 서버는 가용성이 97.6 % 인 서버가 이상치가됩니다. 그러나 이것들은 당신이 원하는 한계 내에있을 수 있습니다.

한편,이 임계 값 아래에 하나 또는 여러 개의 서버가 있는지 여부에 관계없이 95 % 미만의 가용성으로 서버를 통지하려는 좋은 이유가있을 수 있습니다.

이러한 이유로 아웃 라이어를 검색하면 관심있는 정보가 제공되지 않을 수 있습니다. 임계 값은 이전 데이터 (예 : 데이터)에 따라 통계적으로 결정될 수 있습니다. 오류율을 포아송 또는 베타 변수로 사용할 수있는 비율로 모델링합니다. 적용된 설정에서 이러한 임계 값은 성능 요구 사항에 따라 결정될 수 있습니다.

+0

여기에는 여러 가지 좋은 답변이 있지만 (특히 아웃 라이어에 대한 내 질문을 대상으로 함) @ David은 통계 측면에서 볼 때 가장 좋은 것으로 보입니다. 나는 아직 그것을 구현할 기회가 없었음에도 불구하고 대답했다. – septagram

1

열에 대한 평균 (평균) 및 표준 편차를 계산해야합니다. Stadard 편차는 조금 혼란이지만, 중요한 사실은 데이터의 2/3가

내에서 평균 +/- StandardDeviation

* StandardDeviation이 아웃 라이어는 평균 +/- 2 외부 일반적으로 어떤 것을이지만, 승수를 조정할 수 있습니다.

http://en.wikipedia.org/wiki/Standard_deviation

그래서 명확하게하기 위해, 당신은 평균에서 표준 편차로 데이터를 변환 할.

def getdeviations(x, mean, stddev): 
    return math.abs(x - mean)/stddev 

즉 NumPy와 이것에 대한 기능이 있습니다.

+4

의 사본이 값이 정규 분포에 있다고 가정 할 때만 유효한 접근 방법입니다. – tkerwin

+2

정상에 대한 대안으로 포아송 (poisson)으로 오류율이 포함되고 베타 배포본으로서 가용성이 포함됩니다 –

5

난 최선의 방법은 scipyscoreatpercentile 기능을 살펴 보는 것입니다. 예를 들어 99 백분위 수를 초과하는 모든 값을 제외 할 수 있습니다.

정규 분포가 없으면 평균 및 표준 편차가 좋지 않습니다.

일반적으로 데이터가 어떻게 보이는지 대략적인 시각적 아이디어를 갖는 것이 좋습니다. matplotlib이 있습니다. 계획을 세우기 전에 데이터로 일부 플롯을 작성하는 것이 좋습니다.

+1

이 분석을 드물게 수행하는 중이라면 R (http://www.r-project.org/)이 많은 것으로 나타났습니다 데이터의 대화 형 탐색에 사용하기 쉽습니다. 최종 솔루션에 대해 scipy/numpy로 끝나더라도 먼저 R의 데이터로 재생할 가치가 있습니다. – Wilduck

+0

좋은 제안, 나는 scoreatpercentile을 살펴볼 것입니다. – septagram

8

아웃 라이어를 시각적으로 식별하는 좋은 방법 중 하나는 중앙값을 표시하는 상자 플롯 (box-and-whiskers 플롯)과 중간 값을 위아래로 나타내는 몇 개의 사 분위수 및 "far "(위키 백과 항목 http://en.wikipedia.org/wiki/Box_plot 참조). R에는 바로 이것을 수행하는 boxplot 함수가 있습니다.

예외 값을 프로그래밍 방식으로 버리고 식별하는 한 가지 방법은 MAD 또는 Median Absolute Deviation을 사용하는 것입니다. MAD는 표준 편차와 달리 특이 치에 민감하지 않습니다. 때때로 중간 값에서 5 * MAD 이상 떨어진 모든 점을 이상 치라고 생각하는 경험 법칙을 사용합니다.

관련 문제