外れ値を削除するのに適した形式ですか?


12

私はソフトウェアビルドの統計情報に取り組んでいます。成功/失敗および経過時間に関する各ビルドのデータがあり、1週間あたり約200を生成します。

成功率は簡単に集計でき、45%がどの週にも合格したと言えます。しかし、経過時間も集計したいので、データを不当に誤って伝えないようにしたいと思います。私はプロに尋ねた方が良いと考えました:-)

期間が10あるとします。それらは、成功と失敗の両方のケースを表します。一部のビルドはすぐに失敗します。これにより、時間が非常に短くなります。テスト中にハングし、最終的にタイムアウトになるものがあり、非常に長い時間がかかります。さまざまな製品をビルドしているため、成功したビルドでも90秒から4時間の間で異なります。

私はこのようなセットを得るかもしれません:

[50, 7812, 3014, 13400, 21011, 155, 60, 8993, 8378, 9100]

私の最初のアプローチは、セットをソートして中央値を選択することにより中央値時間を取得することでした。この場合は7812です(偶数セットの算術平均は気にしませんでした)。

残念ながら、特定の値を1つだけ選択するため、これは多くのバリエーションを生成するようです。したがって、この値をトレンドにした場合、どのビルドが中央値にあったかに応じて、5000〜10000秒の間で跳ね返ります。

そこで、これを滑らかにするために、別のアプローチを試みました。外れ値を削除して、残りの値の平均を計算します。私はそれを三分位に分割し、中央のものだけで作業することにしました:

[50, 60, 155, 3014, 7812, 8378, 8993, 9100, 13400, 21011] ->
[50, 60, 155], [3014, 7812, 8378, 8993], [9100, 13400, 21011] ->
[3014, 7812, 8378, 8993]

これが私にとって良く見える理由は2つあります:

  • より高速なビルドではアクションは必要ありません。既に問題ありません
  • 最も長いビルドはタイムアウトが原因である可能性が高く、常に存在します。それらを検出する他のメカニズムがあります

だから、これは私が探しているデータであるように思えますが、まあ、真実を取り除くことで滑らかさを達成したのではないかと心配しています。

これは議論の余地がありますか?メソッドは正常ですか?

ありがとう!


経過時間の測定値を取得する理由をまだ述べていません。支払っている合計マシン時間を見積もる必要がありますか?コーヒーマシンに何回旅行できるかを見積もる必要がありますか?あなたが時代を知っていたなら、あなたがたぶん取る行動は何ですか?
StasK 14

また、構築する異種製品がある場合、跳ね返るのは自然であり、それを取り除こうとするべきではありません。特定のプロジェクトの複雑さの尺度(ファイルの数、コードの行数、ルーチンの数など)がある場合は、複雑さによって正規化された経過時間に興味があるかもしれません。時間の経過とともに本当に安定してフラットにしたい場合は、いつ行動を起こす必要があるかを学習することはできません。
StasK 14

@StasK:コメントありがとうございます。これは貴重な情報です。アクションはすでに知られています。これらのビルドの多くは時間がかかりすぎるので、それらをより速くするために努力する必要があります。集計メジャーを使用して、状況が改善されているか悪化しているかを確認します。
キムグラスマン14

そして、はい、できれば製品ごとにこれを行うのが理想ですが、ソースデータはその情報を保持しないため、分布について知っていることに基づいてごまかします。もちろん、これは時間とともに変化する可能性があり、再考する必要があるかもしれません。
キムグラスマン14

データに3つのグループがあるように見えます。(i)そのビルド。(ii)失敗するビルド(そして、かなり早く失敗する傾向があると言います)、および(iii)ハングアップするビルド(またはほぼそうです)-そして、それはおそらく、アクションを実行したい唯一のグループではないにしてもメインです。時間の総計はあまり役に立たないかもしれません。しかし、10番目に長いビルド、またはビルド時間の分布の10番目に高いパーセンタイルのようなものは、あなたが気にする分布の極端な状態のより良い尺度かもしれません。これは、EPAが汚染監視に使用するものです。
StasK 14

回答:


8

あなたの目標を考慮して、あなたのアプローチは私にとって理にかなっています。それは簡単で、簡単で、仕事を成し遂げ、あなたはおそらくそれについて科学論文を書きたくないでしょう。

外れ値に対処する際に常にすべきことの1つは、外れ値を理解することです。これについては、すでにすばらしい仕事をしています。あなたのアプローチを改善する可能性のある方法は次のとおりです:どのビルドがハングしているのかに関する情報を使用できますか?あなたは「それらを検出する他のメカニズム」があると言います-それらを検出し、サンプルからそれらだけを削除できますか?

そうでなければ、データがもっとあれば、三分位ではなく五分位を削除することを考えることができます...しかし、ある時点で、これは大きな違いをもたらさないでしょう。


「他の」メカニズムと言うとき、このデータセット以外ではまったく異なることを意味するため、ここでそれに基づいて決定を下すことはできません。私たちは毎日データを集約しており、1日に最大50ビルドしか取得できないため、五分位数ではデータが少なすぎる可能性があると思いますが、提案のおかげで試してみることができます!
キムグラスマン

13

あなたがやっていることは、トリム平均として知られています。

あなたが行ったように、各側から同じ割合をトリミングするのが一般的です(トリミングの割合)。

0%(通常の平均)から(ほぼ)50%(中央値を与える)までの範囲でトリミングできます。例では、両端から30%がトリミングされています。

参照してくださいこの答えと関連する Wikipediaの記事を

[編集:このトピックに関する Nick Coxの優れた議論を参照してください。]

これはかなり合理的で、ある程度堅牢な位置推定器です。一般に、高度に歪んだ分布よりも対称に近い分布に適していると考えられていますが、目的に合っていれば、使用しない理由はありません。トリミングするのに最適な量は、所有する分布の種類と求めるプロパティによって異なります。

*ここで何を推定したいかは完全には明らかではありません。

分布の「中心」を要約する他の多くの堅牢なアプローチがありますが、そのうちのいくつかはあなたが役に立つかもしれません。(たとえば、M-estimatorsが何らかの用途を持っているかもしれません)

[トリミングされた平均値に対応する変動性の尺度が必要な場合、Winsorizedの標準偏差が役立つ場合があります(基本的に、sdの計算時に、トリミング時に切り捨てる値を最も極端な値に置き換えます切れなかった)。]


私は実際に私の分布の典型的な形状を確認していません。人々がどこで変更を加えるかによって、週ごとに変化すると思います。実際、非常に歪んでいる可能性があります。
キムグラスマン14

ハックジョブに名前を付けてくれてありがとう。それはいくらかの自信を
呼び起こします

2

さらに別の方法は、すべてのペアワイズ平均の中央値を計算するか、ブートストラップを実行することです。

更新:

すべてのペアワイズ平均の中央値は、ホッジス・レーマン推定量と呼ばれます。通常、この推定器は高い効率を備えています。スコットL.ハーシュバーガーによるこの百科事典エントリは次のように述べています。

中央値とホッジス・レーマン推定量はどちらも非対称分布のサンプル平均よりも望ましいのですが、ホッジス・レーマン推定量は中央値よりも平均に関して漸近的な相対効率が大きくなります。

ブートストラップはあまり関連性がなく、計算集約的ですが、置換のあるデータの小さなランダムサンプルを取得し、そのサブサンプルの平均を計算し、何度も実行して、すべての平均の中央値を計算できます。

どちらの場合でも、データの値の中から値を選択する必要はなくなりました(通常の中央値を計算するとき)代わりに、データのサブセットから多くの平均値の中から選択します。


2
これらの方法の長所と短所を説明できますか?1行の回答では不十分です。
StasK 14

1
私はより多くの説明で更新を試みました
フィン・オーラップ・ニールセン14

ペアワイズ平均とブートストラップの両方は、データセット全体にわたる多くの再計算を伴うようです。サンプルは一般的に非常に小さい(値が500未満)ため、おそらく問題ではありませんが、より複雑に見えます。トリムされた平均があまりにも鈍いと判明した場合、実験するためのより多くのアプローチがあることを知っているのは良いことです。ありがとう!
キムグラスマン

1

あなたがやっていることは理にかなっているようです:ちょうど情報のために、私は同様の目的のために非常に頻繁に次のプロセスを使用します:しかし、私はUpper Outliersに本当に興味があるだけです。

5つの数値の要約を計算します:最小、Q1、中央値、Q3、最大。四分位範囲の計算:Q3-Q1。外れ値の「フェンス」をQ1-IQR * XおよびQ3 + IQR * Xに設定します。「X」の妥当な値は1.5です。

Excelと上記の数値(「X」に1.5を使用**)を使用すると、1つの上位の外れ値が得られます:21011

MIN 50
Q1  3014
MEDIAN  8095
Q3  9073.25
MAX 21011
IQR 6059.25
UPPER FENCE 18162.125
LOWER FENCE -6074.875

したがって、ここの下部フェンスは実際にはあなたの例にとって有用または現実的ではありません。これは、特定のデータの意味を理解することの重要性に関する他の投稿の主張を裏付けています。

(**「1.5」ルールの引用を1つ見つけました:信頼できると言っているわけではありませんが、私にとって合理的な出発点のようです:http : //statistics.about.com/od/Descriptive-Statistics/a/ What-Is-The-Interquartile-Range-Rule.htm

また、(おそらく)IQR自体に含まれるデータポイントを使用することを決定することもできます。これにより、賢明な結果が得られるようです(メソッドのメンバーシップが非常に似ているため)。

同じデータを使用すると、次のデータポイントが「対象エリア」に配置されます。

7812
3014
13400
21011
8993
8378
9100

Boxplotでは、これらのポイントはすべて、ダイアグラムのボックス部分(ひげ部分ではなく)内に収まります。

このリストには、元のリストにないアイテム(実行時間の長いビルド)が含まれていることがわかります。1つのリストが何らかの形でより正確であるかどうかは言えません。(再び、データセットを理解することになります)。


おかげで、これは私がすでにやっていることに原則的に非常に近いようです。この方法は、データセットを単に分割するよりもどのような点で優れているでしょうか?
キムグラスマン14

1
どちらの方法が優れているかどうかは本当に言えません。統計書/サイトで読んだものに基づいてこれを提案しました。メソッドが追加する1つのこと(私が思う)は、「フェンス」を適切に感じるものに調整できる(1.5ファクターを調整する)ことです。中間の3分の1を取得するだけで、潜在的に高い外れ値を含める可能性が高くなる可能性があります(おそらく、フェンスの外側でより適切に分類される可能性があります)。Quartilesの使用に関するもう1つのことは、5桁の要約が非常によく理解され、一般的に使用されていることです。
モノジョニー14

詳細を追加していただきありがとうございます!Pythonでこれを行うので、データセットをN個の部分に分割してから中央部分を引き出す機能が既にあります。代わりに5または7パーティションにする1文字の変更です。しかし、あなたの主張は十分に理解されており、この問題にアプローチする別の一般的な方法を見ることは良いことです。再度、感謝します。
キムグラスマン14

私には音の罰金: - :私は(むしろ変数のパーティションを持つより)四分位とフェンスの使用について強調するために、もう一つを追加しますが、彼らはまっすぐに箱ひげにマップということですen.wikipedia.org/wiki/Box_plot(とりわけ)を許可します異なる分布をグラフィカルに比較する標準的な方法。
モノジョニー14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.