多変量データの外れ値を識別する最良の方法は何ですか?


94

少なくとも3つの変数を持つ多変量データの大きなセットがあるとします。外れ値を見つけるにはどうすればよいですか?ペアワイズ散布図は、2次元の部分空間のいずれでも外れ値ではない3次元に異常値が存在する可能性があるため、機能しません。

回帰問題ではなく、真の多変量データについて考えています。したがって、堅牢な回帰またはコンピューティングレバレッジを含む回答は役に立ちません。

1つの可能性は、主成分スコアを計算し、最初の2つのスコアの2変量散布図で外れ値を探すことです。それが機能することが保証されますか?より良いアプローチはありますか?


3
散布図行列がキャッチしない場合は、3D散布図を試す​​ことができます。もちろん、4Dではうまくいきませんが、時間として4次元を作成し、ムービーを作成できます。:)
シェーン

(階層)クラスター分析はどうですか?
アンドレイ

11
色相の5番目のD、色の濃さの6番目のD、ポイントサイズの7番目のD、そして行くことができます

回答:


26

@drknexusが示唆するように、順序付けられた堅牢なマハラノビス距離に依存するmvoutlierパッケージをご覧ください。


4
私は個人的にこのパッケージを信じていません!これは単なる科学のノイズだと思います。このタイプの理論は、シミュレートされたデータには非常に適していますが、実際のデータにはpffffだけです。私はこのパッケージを使用して、たとえば外れ値を検出しました:-)悲しいことに、データの半分が外れ値であることが検出されました:-D コメントがありましたら、お気軽にお問い合わせください。多くの種類の外れ値がありますが、それらをデータから単純に削除する必要がありますか?私は信じない。
学習者

1
これがいつ、なぜ機能するのか説明してもらえますか?
eric_kernfeld

19

Robin Girardの答えは3次元と4次元でうまく機能すると思いますが、次元の呪いがそれを超えて機能するのを妨げるでしょう。しかし、彼の提案は、相互検証されたカーネル密度推定値を最初の3つの主成分スコアに適用するという、関連するアプローチに私を導きました。そうすれば、非常に高次元のデータセットでも問題なく処理できます。

要約すると、i = 1〜nの場合

  1. Xiなしのデータセットから取得した最初の3つの主成分スコアの密度推定値を計算します。
  2. 手順1で推定した密度のXiの尤度を計算します。Liと呼びます。

終わる

Liをソートし(i = 1、..、nの場合)、外れ値はあるしきい値を下回る可能性があるものです。良いしきい値となるかどうかはわかりません。これについて論文を書いている人は誰にでもそれを任せましょう!1つの可能性は、log(Li)値のボックスプロットを行い、負の端で検出された外れ値を確認することです。


この答えをありがとう(コメントになりますか?)既に述べたように、パラメトリック構造の仮定を立てれば、Rich answerの高次元へのコメントは問題になりません(1000でも機能します)。
ロビンジラール

@rob「良いしきい値になるかどうかはわかりません」これは、私が言及した複数のテスト手順の目的になります....しかし、物事を埋める必要があることに完全に同意し、異常値の検出が本当に好きです外れ値の検出!誰が論文を書きたいですか?
ロビンジラール

4
(-1)この質問に対する受け入れられた答えが役に立たない(曖昧すぎて実装されていない)か、科学的に正しい(間違ってさえいないように)ことは少し動揺します:私の知る限り、関連文献)。
user603

6
(-1)これは間違った答えと思われます-この方法では異常値は検出されません!PCAによって2D平面に投影された3Dパンケーキのような点の雲と、平面から遠く離れた1つの外れ値の点を想像するのは簡単ですが、その投影は投影された雲の真ん中にあります。 2D平面のポイントは外れ値ですが、高くなります。
コチェデ

1
ここではPCAに問題があると思います。PCAは、分散への主な寄与を考慮する近似です。しかし、ここでのまさに目的は、外れ値を見つけることです-それらは「亀裂の間に落ちる」のではないでしょうか?
オムリーアティア

18

(1)で利用可能なさまざまな方法の教育学的要約を見つけることができます。

そこにリストされているさまざまな方法のいくつかの-最近-数値比較については、(2)および(3)を確認できます 。

多くの場合、書籍に見られる古い(および網羅性の低い)数値比較が多数あります。たとえば、(4)の142〜143ページにあります。

ここで説明するすべてのメソッドには、主にrrcov パッケージを介したオープンソースR実装があります。

  • (1)P. RousseeuwおよびM. Hubert(2013)多変量位置および散布の高分解推定量。
  • (2)M.ヒューバート、P。ルセウ、K。ヴァキリ(2013)。ロバスト共分散推定量の形状バイアス:経験的研究。統計論文。
  • (3)K. VakiliおよびE. Schmitt(2014)。FastPCSによる多変量の外れ値の検索。計算統計とデータ分析。
  • (4)Maronna RA、Martin RDおよびYohai VJ(2006)。堅牢な統計:理論と方法。ワイリー、ニューヨーク。

シミュレーションデータに基づく論文はお勧めしません。最初の2つの論文はシミュレーションデータに基づいていると思います。私は実際のデータに取り組んでおり、まれに、これらのシミュレートされた強い外れ値がデータに含まれていることがあります。私は個人的に、非常に強い外れ値を持つデータセットを見つけませんでした。実際のデータを知っている場合は、共有することをheしないでください
学習者

こんにちは、ニモ:コメントありがとうございます。実際、これらのモデルの多く(すべてではない)について、外れ値の考えられる最悪の構成が実際に知られており、これらは通常、これらのモデルからシミュレートして評価する構成です。おそらくこれを質問として定式化できますか?いくつかの参考文献を紹介させていただきます。
user603

1
すでに一般的な質問をしました。ここに私の投稿を見つけることができますstats.stackexchange.com/questions/139645/…–
学習者

13

私はある種の「テストアルゴリズムを除外」を行います(nはデータの数です)。

i = 1からn

  1. 捨てることによって得られたデータセットの密度推定を計算しXiます。(この密度推定は、次元が高い場合、たとえば密度推定が簡単なガウスの仮定など、何らかの仮定で行われる必要があります:平均と共分散)
  2. 手順1で推定した密度のの尤度を計算しXiます。それをと呼びます。Li

で終わる

ソートし(i = 1、..、nの場合)、多重仮説検定手順を使用して、どちらが良くないかを示します...Li

これは、nが十分に大きい場合に機能します。また、外れ値の「グループ」がある場合により関連性の高い「kアウト戦略を使用する」こともできます。


これは、異常値が含まれているためにN-1ポイントにまだバイアスがある場合、つまり、異常値の数がわからない場合にどのように対処しますか?
ベンジャミンバニエ

1
nが十分に大きく、外れ値の数が小さい場合、このバイアスは無視できます。異常値が多数ある場合は、異常値ではなく、とにかく、前述したようにleave k out戦略を使用できます...(この場合、 NPハード...)およびkがわからない場合は、kに多くの値を試して、最も関連性を保つことができます。
ロビンジラール

1
これは素敵なアイデアですが、私はそれを正しく理解している場合は、含まれるように、「外れ値」のアイデアを拡大すると思われる任意の他の人から離れているデータセット内の値を。たとえば、43個の整数のバッチ{-110 [1] -90、0、90 [1] 110}では、プロシージャは0(これらの数値の中央値です!)を一意の「外れ値」として識別しません。「?
whuber

@whuberいい質問!構造的な仮定がなければ、ゼロは削除される可能性があります。ただし、分布が単峰性であると想定し、それに応じて密度を計算できます。この場合、構造的仮定(単峰性)は、手順がゼロを「正常な」値として認識するのに役立ちます。最後に、あなたはあなたの頭の中にそのタイプの「構造的仮定」を持っているので、それは正常だと思います:)
ロビンジラード

3
この手順のいくつかの側面については不安です。私の例では、その理由の1つを指摘しています。強く相互に依存しているので、それが適用されるであろう、「複数の仮説検定手順」不明です。さらに、は密度エスティメータに依存します-あなたが指摘するように、それはこの目的のために密度を推定する最良の方法についての一連の質問全体を開きます。これらはパラメトリックな単変量の外れ値検出手順でも問題であるため、多変量の場合に解決が容易になるとは思わない。L iLiLi
whuber

12

最小体積境界楕円体のサポートポイントの中から「外れ値」の候補を見つけることができます。(これらの点をかなり高次元で、正確に、おおよその両方で見つけるための効率的なアルゴリズムは、この問題が実験設計の問題と密接に関連しているため、1970年代に大量の論文で発明されました。)


12

私が見た新しいアプローチは、IT Jolliffe主成分分析によるものでした。データに対してPCAを実行します(注:PCAは、それ自体で非常に便利なデータ探索ツールになる可能性があります)が、最初のいくつかの主成分(PC)を調べる代わりに、最後のいくつかのPCをプロットします。これらのPCは、可能な限り最小の分散を持つ変数間の線形関係です。したがって、データの「正確な」または正確に近い多変量関係を検出します。

最後のPCのPCスコアのプロットは、各変数を個別に確認しても簡単に検出できない外れ値を示します。1つの例は身長と体重です-「平均以上」の身長と「平均未満」の体重を持つ人は、身長と体重が「正の相関があると仮定して」、最後のPCによって検出されます。極端な」個人(例:180cmと60kgの人)。


11

影響関数に言及する人はいませんでした。私は最初にこのアイデアをグナナデシカンの多変量の本で見ました。

1つの次元では、外れ値は非常に大きい値または非常に小さい値です。多変量解析では、データの大部分から削除された観測値です。しかし、外れ値の極値を定義するにはどのようなメトリックを使用する必要がありますか?多くの選択肢があります。マハラノビス距離はわずか1です。あらゆる種類の外れ値を探すのは無駄で逆効果だと思います。私が求めるだろうなぜあなたは外れ値を気にしません?平均を推定する際に、それらはその推定に大きな影響を与える可能性があります。堅牢な推定器は、重量を減らして外れ値に対応しますが、それらを正式にテストしません。現在、回帰では、外れ値(レバレッジポイントなど)がモデルの勾配パラメーターに大きな影響を与える可能性があります。2変量データを使用すると、推定相関係数、および3次元以上で多重相関係数に過度に影響を与える可能性があります。

影響関数は、堅牢な推定のツールとしてHampelによって導入され、Mallowsはその使用を推奨する素晴らしい未発表の論文を書きました。影響関数は、n次元空間にあるポイントとパラメーターの関数です。基本的に、計算のポイントと除外されたポイントのパラメーター推定値の差を測定します。多くの場合、2つの推定値の計算を行って差を取るのではなく、その式を導き出すことができます。次に、一定の影響の等高線は、このパラメーターの推定値に対して極端な方向を示し、したがって、n次元空間のどこで外れ値を探すかを示します。

詳細については、「影響力関数とそのデータ検証への応用」というタイトルの米国数学および経営科学ジャーナルの1983年の論文をご覧ください。データ検証では、データの使用目的に影響を与える外れ値を探す必要がありました。私の考えでは、推定に関心のあるパラメータに大きな影響を与える外れ値に注意を向けるべきであり、そうでない他者についてはあまり気にしないでください。


1
+1特に分析の目的に一貫して焦点を当てるために、非常に素晴らしいアイデア。
whuber

同様のアイデアは、ランダムサンプルコンセンサス(RANSAC)です。
GeoMatt22


7

3のような中程度の次元の場合、他の場所で提案されているある種のカーネルの相互検証手法は妥当であると思われ、私が思い付くことができます。

高次元の場合、問題が解決できるかどうかはわかりません。それは「次元の呪い」領域にかなりまっすぐに着地します。問題は、分布から導出された距離を含む次元を増やすと、距離関数が非常に大きな値に非常に速く収束する傾向があることです。外れ値を「他と比較して比較的大きな距離関数を持つ点」と定義し、高次元空間にいるためにすべての距離関数が収束し始めている場合、問題が発生しています。

それを確率的分類問題に変えるようなある種の分布的仮定、または少なくとも空間を「ノイズ次元」と「有益な次元」に分離させる回転がなければ、高次元空間の幾何学は外れ値の簡単な、または少なくとも堅牢な識別を禁止します。


既に述べた手順は、ガウスの仮定を使用して、先ほど述べたように、大きな次元で適用できます。次元がサンプルサイズに対して本当に大きい場合(つまりp >> n)、いくつかの希薄な仮定を立てて(たとえば、ガウス分布のパラメーターが低次元空間にあると仮定して)、しきい値推定手順を使用できます。パラメータの推定のための...
ロビンジラール

1
非常に洞察力に富んでいて、分布の仮定のないソリューションを排除している(単純に異常な量のデータがあるか、ディメンションが小さい場合を除く)
ジョンロバートソン

6

回帰問題ではなく、「真の多変量データ」を考えていると言ったときの意味がわかりません。私の最初の対応は、特定のIVまたはDVを指定する必要がないため、マハラノビス距離を計算することですが、そのコア(理解している限り)はレバレッジ統計に関連しています。


はい、データの平均から各観測のマハラノビス距離を計算できました。ただし、平均値からの距離が最大の観測値は、必ずしも多変量の外れ値ではありません。相関の高い二変量散布図を考えてください。外れ値は、ポイントのメインクラウドの外側にありますが、平均からそれほど遠くありません。
ロブハインドマン


4

私の最初の応答は、データで多変量回帰を実行できる場合、その回帰からの残差を使用して外れ値を見つけることです。(あなたはそれが回帰問題ではないと言ったのを知っているので、これはあなたを助けないかもしれません、ごめんなさい!)

私がこのの一部をコピーしています、私は以前に回答しましたstackoverflowの質問いくつかの例を持っているRのコードを

まず、いくつかのデータを作成し、それを外れ値で汚染します。

> testout<-data.frame(X1=rnorm(50,mean=50,sd=10),X2=rnorm(50,mean=5,sd=1.5),Y=rnorm(50,mean=200,sd=25)) 
> #Taint the Data 
> testout$X1[10]<-5 
> testout$X2[10]<-5 
> testout$Y[10]<-530 

> testout 
         X1         X2        Y 
1  44.20043  1.5259458 169.3296 
2  40.46721  5.8437076 200.9038 
3  48.20571  3.8243373 189.4652 
4  60.09808  4.6609190 177.5159 
5  50.23627  2.6193455 210.4360 
6  43.50972  5.8212863 203.8361 
7  44.95626  7.8368405 236.5821 
8  66.14391  3.6828843 171.9624 
9  45.53040  4.8311616 187.0553 
10  5.00000  5.0000000 530.0000 
11 64.71719  6.4007245 164.8052 
12 54.43665  7.8695891 192.8824 
13 45.78278  4.9921489 182.2957 
14 49.59998  4.7716099 146.3090 
<snip> 
48 26.55487  5.8082497 189.7901 
49 45.28317  5.0219647 208.1318 
50 44.84145  3.6252663 251.5620 

データをグラフィカルに調べるのが最も便利な場合がよくあります(脳は数学よりも外れ値を見つけるのがはるかに優れています)

> #Use Boxplot to Review the Data 
> boxplot(testout$X1, ylab="X1") 
> boxplot(testout$X2, ylab="X2") 
> boxplot(testout$Y, ylab="Y") 

その後、統計を使用して、ここでルンドテストを使用してクリティカルカットオフ値を計算できます(Lund、RE 1975、「線形モデルの外れ値の近似テストの表」、Technometrics、vol。17、4、pp。473を参照) -476。およびPrescott、P。1975、「線形モデルの外れ値の近似テスト」、Technometrics、vol。17、no。1、pp。129-132)

> #Alternative approach using Lund Test 
> lundcrit<-function(a, n, q) { 
+ # Calculates a Critical value for Outlier Test according to Lund 
+ # See Lund, R. E. 1975, "Tables for An Approximate Test for Outliers in Linear Models", Technometrics, vol. 17, no. 4, pp. 473-476. 
+ # and Prescott, P. 1975, "An Approximate Test for Outliers in Linear Models", Technometrics, vol. 17, no. 1, pp. 129-132. 
+ # a = alpha 
+ # n = Number of data elements 
+ # q = Number of independent Variables (including intercept) 
+ F<-qf(c(1-(a/n)),df1=1,df2=n-q-1,lower.tail=TRUE) 
+ crit<-((n-q)*F/(n-q-1+F))^0.5 
+ crit 
+ } 

> testoutlm<-lm(Y~X1+X2,data=testout) 

> testout$fitted<-fitted(testoutlm) 

> testout$residual<-residuals(testoutlm) 

> testout$standardresid<-rstandard(testoutlm) 

> n<-nrow(testout) 

> q<-length(testoutlm$coefficients) 

> crit<-lundcrit(0.1,n,q) 

> testout$Ynew<-ifelse(testout$standardresid>crit,NA,testout$Y) 

> testout 
         X1         X2        Y    newX1   fitted    residual standardresid 
1  44.20043  1.5259458 169.3296 44.20043 209.8467 -40.5171222  -1.009507695 
2  40.46721  5.8437076 200.9038 40.46721 231.9221 -31.0183107  -0.747624895 
3  48.20571  3.8243373 189.4652 48.20571 203.4786 -14.0134646  -0.335955648 
4  60.09808  4.6609190 177.5159 60.09808 169.6108   7.9050960   0.190908291 
5  50.23627  2.6193455 210.4360 50.23627 194.3285  16.1075799   0.391537883 
6  43.50972  5.8212863 203.8361 43.50972 222.6667 -18.8306252  -0.452070155 
7  44.95626  7.8368405 236.5821 44.95626 223.3287  13.2534226   0.326339981 
8  66.14391  3.6828843 171.9624 66.14391 148.8870  23.0754677   0.568829360 
9  45.53040  4.8311616 187.0553 45.53040 214.0832 -27.0279262  -0.646090667 
10  5.00000  5.0000000 530.0000       NA 337.0535 192.9465135   5.714275585 
11 64.71719  6.4007245 164.8052 64.71719 159.9911   4.8141018   0.118618011 
12 54.43665  7.8695891 192.8824 54.43665 194.7454  -1.8630426  -0.046004311 
13 45.78278  4.9921489 182.2957 45.78278 213.7223 -31.4266180  -0.751115595 
14 49.59998  4.7716099 146.3090 49.59998 201.6296 -55.3205552  -1.321042392 
15 45.07720  4.2355525 192.9041 45.07720 213.9655 -21.0613819  -0.504406009 
16 62.27717  7.1518606 186.6482 62.27717 169.2455  17.4027250   0.430262983 
17 48.50446  3.0712422 228.3253 48.50446 200.6938  27.6314695   0.667366651 
18 65.49983  5.4609713 184.8983 65.49983 155.2768  29.6214506   0.726319931 
19 44.38387  4.9305222 213.9378 44.38387 217.7981  -3.8603382  -0.092354925 
20 43.52883  8.3777627 203.5657 43.52883 228.9961 -25.4303732  -0.634725264 
<snip> 
49 45.28317  5.0219647 208.1318 45.28317 215.3075  -7.1756966  -0.171560291 
50 44.84145  3.6252663 251.5620 44.84145 213.1535  38.4084869   0.923804784 
       Ynew 
1  169.3296 
2  200.9038 
3  189.4652 
4  177.5159 
5  210.4360 
6  203.8361 
7  236.5821 
8  171.9624 
9  187.0553 
10       NA 
11 164.8052 
12 192.8824 
13 182.2957 
14 146.3090 
15 192.9041 
16 186.6482 
17 228.3253 
18 184.8983 
19 213.9378 
20 203.5657 
<snip> 
49 208.1318 
50 251.5620 

明らかに、Lundテスト(Grubbsが思い浮かぶ)以外の外れ値テストもありますが、多変量データに適しているのかどうかはわかりません。


1
単変量箱ひげ図は、単変量の外れ値を見つけるのに役立ちます。しかし、多変量の外れ値を完全に見落とす可能性があります。YとたくさんのX変数があれば、回帰のアイデアは大丈夫​​です。しかし、質問で言ったように、Yはないので、回帰は不適切です。
ロブハインドマン

@RobHyndman-Yを修正(定数にする)し、切片なしで多重回帰のモデル化を試みることができます。実際には美しく機能します。本質的に、これは、典型的な異常検出である基本的に監視されていない問題を監視された問題に変換します。
アリエル

@arielf興味深い。そのためのリファレンスはありますか?
ロブハインドマン

@RobHyndmanは学術論文ではありませんが、おそらくもっと良いので、自分で試してみてください。上の私のgithubのページを参照してくださいvw-top-errors@ goo.gl/l7SLlB (Y.を固定することにより、あまりにも教師なしの問題で非常に成功し、そこに例がYを持って起こるが、私は同じ技術を使用していることに注意してください)
arielf

1

上記の回答の1つは、マハラノビス距離で触れました。おそらく、さらに一歩進んで、同時信頼区間を計算すると、外れ値の検出に役立ちます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.