34

数千のデータ インスタンスがあるシナリオがあります。データ自体は、単一の整数値として表されます。インスタンスが極端な外れ値であることを検出できるようにしたいと考えています。

たとえば、次のサンプル データを使用します。

a = 10
b = 14
c = 25
d = 467
e = 12

dは明らかに異常であり、これに基づいて特定のアクションを実行したいと考えています。

私は、特定のドメインに関する知識を使って異常を検出したいと思いました。たとえば、有用な平均値からの距離を把握し、ヒューリスティックに基づいてそれを確認します。ただし、何らかの理論が背後にある、より一般的で堅牢な異常検出手法を調査した方がよいと思います。

私の数学の実用的な知識は限られているので、標準偏差を使用するなど、簡単な手法を見つけたいと思っています。データの単一次元の性質により、これが非常に一般的な問題になることを願っていますが、シナリオに関する詳細情報が必要な場合は、コメントを残してください。詳細をお知らせします.


編集:ある回答が別の回答よりも正しい場合に備えて、データと私が試したことに関する情報を追加すると思いました。

値はすべて正であり、ゼロではありません。値が正規分布を形成することを期待しています。この予想は、分析によるものではなく、ドメインの直感に基づいています。これが悪いことではない場合は、お知らせください。クラスタリングに関して言えば、k 値を選択する標準アルゴリズムも存在しない限り、この値を k-Means アルゴリズムに提供するのは難しいと思います。

外れ値/異常に対して私が取りたいアクションは、それをユーザーに提示し、基本的にデータセットからデータポイントを削除することを推奨することです (彼らがそれを行う方法については触れませんが、それは理にかなっています)したがって、別の関数への入力としては使用されません。

これまでのところ、限られたデータセットでスリーシグマと IQR 外れ値テストを試しました。IQR は極端ではない値にフラグを立てます。スリーシグマは、ドメインの私の直感によりよく適合するインスタンスを指摘します。


この特定のシナリオについて学ぶためのアルゴリズム、テクニック、またはリソースへのリンクに関する情報は有効であり、歓迎すべき回答です。

単純な 1 次元データに対して推奨される異常検出手法は何ですか?

4

3 に答える 3

47

3 シグマ ルールを確認してください。

mu  = mean of the data
std = standard deviation of the data
IF abs(x-mu) > 3*std  THEN  x is outlier

別の方法として、IQR 外れ値検定があります。

Q25 = 25th_percentile
Q75 = 75th_percentile
IQR = Q75 - Q25         // inter-quartile range
IF (x < Q25 - 1.5*IQR) OR (Q75 + 1.5*IQR < x) THEN  x is a mild outlier
IF (x < Q25 - 3.0*IQR) OR (Q75 + 3.0*IQR < x) THEN  x is an extreme outlier

この検定は通常、箱ひげ図(ひげで示されます)で使用されます。

箱ひげ図


編集:

あなたの場合 (単純な 1D 単変量データ) の場合、最初の答えが適していると思います。ただし、多変量データには適用できません。

@smaclellは、外れ値を見つけるために K-means を使用することを提案しました。それが主にクラスタリング アルゴリズムであるという事実 (実際には外れ値検出手法ではない) に加えて、k-means の問題は、クラスター数 K の適切な値を事前に知る必要があることです。

より適切な手法は、密度ベースのクラスタリング アルゴリズムであるDBSCANです。基本的に、十分に高密度の領域をクラスターに成長させます。これは、密度で接続されたポイントの最大セットになります。

dbscan_clustering

epsilonDBSCAN にはとの 2 つのパラメータが必要minPointsです。訪れたことのない任意のポイントから開始します。次に、開始点から距離内にあるすべての隣接点を見つけますepsilon

近傍の数が 以上の場合minPoints、クラスターが形成されます。開始点とその近隣がこのクラスターに追加され、開始点は訪問済みとしてマークされます。次に、アルゴリズムは、すべての近隣の評価プロセスを再帰的に繰り返します。

近傍数が 未満の場合、その点はノイズminPointsとしてマークされます。

クラスターが完全に展開された場合 (到達範囲内のすべてのポイントが訪問された場合)、アルゴリズムは残りの未訪問ポイントを使い果たすまで反復します。

最後に、ノイズとしてマークされたすべてのポイントのセットは外れ値と見なされます。

于 2010-02-20T20:21:01.837 に答える
2

データ内の中心的な傾向を特定するために使用できるさまざまなクラスタリング手法があります。パターン認識コースで頻繁に使用したアルゴリズムの 1 つにK-Meansがあります。これにより、二峰性分布など、関連するデータ セットが複数存在するかどうかを識別できます。これには、予想されるクラスターの数についてある程度の知識が必要ですが、かなり効率的で実装が簡単です。

手段を取得したら、いずれかの点がいずれかの手段から離れているかどうかを調べることができます。「遠く」は自由に定義できますが、出発点として @Amro の提案をお勧めします。

クラスタリング アルゴリズムの詳細については、クラスタリングに関するウィキペディアのエントリを参照してください。

于 2010-02-20T20:24:12.830 に答える