2011-01-05 7 views
17

私は、サーバーの稼働時間とパフォーマンスデータのリストを作成するpythonスクリプトを持っています。各サブリスト(または「行」)には特定のクラスターの統計情報が含まれています。データセット内のアウトライヤーの検索

[[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について知りたいが、他のものは破棄することができます。列に応じて、高い方が必ずしも悪くないわけでもなく、低い方でもないので、私はこれを行う最も効率的な方法を見つけようとしています。 numpyのように思えますが、この種のものについては多くのことが言及されていますが、どこから始めるべきかわかりません(悲しいことに、私は統計者よりもシステム管理者です...)。

ありがとうございます!

+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%だった場合、可用性100%のサーバーは外れ値になり、サーバーは可用性が97.6%になります。しかし、これらはあなたの望む限度内にあるかもしれません。

一方、このしきい値を下回るサーバーが1つまたは数多く存在するかどうかに関係なく、95%未満の可用性でサーバーを通知することをお勧めする理由があります。

このため、外れ値を検索すると、関心のある情報が得られない場合があります。しきい値は、過去のデータに基づいて統計的に決定できます。誤り率をポアソンまたはベータ変数としての利用可能性としてモデル化することによって、適用される設定では、これらのしきい値は、おそらく性能要件に基づいて決定される可能性がある。

+0

ここには(特に外れ値に関する私の質問をターゲットにした)良い答えがたくさんありますが、@ Davidの方が統計的には最高のようです。私はまだそれを実装するチャンスがなかったにもかかわらず、答えとしてマークしています。 – septagram

1

カラムの平均(平均)と標準偏差を計算する必要があります。 Stadard偏差は少し混乱ですが、重要な事実は、データの2/3が

内の平均+/-標準偏差

*標準偏差が外れ値は平均+/- 2外に一般的に何でもあることですが、乗数を微調整できます。

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

だから、明確にするために、あなたは平均値からの標準偏差にデータを変換したいです。

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

すなわちnumpyのは、このための機能を持っています。

+4

これは、値が正規分布からのものであると仮定している場合にのみ有効なアプローチです。 – tkerwin

+2

標準に代わるものには誤り率とベータ分布としての利用率が含まれています –

5

scipyscoreatpercentile機能を調べることをお勧めします。たとえば、99パーセンタイルを超えるすべての値を除外することができます。

正規分布を持たない場合、平均値と標準偏差は良くありません。

一般的に、データがどのように見えるかを目で見てわかりやすいのが良いです。 matplotlibがあります。計画を立てる前に、データのプロットを作成することをお勧めします。

+1

この分析をあまり頻繁にやっていないのであれば、私はR(http://www.r-project.org/)インタラクティブなデータの探索に使いやすくなっています。最終的な解決策としてscipy/numpyを使用しても、Rのデータを最初に再生する価値があります。 – Wilduck

+0

良い提案、私はscoreatpercentileを見てみましょう。 – septagram

8

外れ値を視覚的に特定する良い方法の1つは、中央値を表示するボックスプロット(またはボックスウィスカープロット)と中央値の上下の2つの四分位点と、このボックスから(ウィキペディアのエントリhttp://en.wikipedia.org/wiki/Box_plotを参照してください)。 Rには、それを行うための関数boxplotがあります。

アウトライヤをプログラムで破棄または特定する1つの方法は、MADまたはMedian Absolute Deviationを使用することです。標準偏差とは異なり、MADは外れ値に敏感ではありません。私は時々、中央値から5 * MAD以上のすべての点を異常値とみなすために経験則を使用します。

関連する問題