外れ値

31
シリーズ前処理2013 外れ値 2013年2月23日 第29回Tokyo.R @sfchaos

description

 

Transcript of 外れ値

Page 1: 外れ値

シリーズ前処理2013外れ値

2013年2月23日

第29回Tokyo.R

@sfchaos

Page 2: 外れ値

� これは,「シリーズ前処理」の発表の一つです.� 前回の@dichikaさんに続いて,今日は外れ値について

取り上げます.� この後も多くの皆さんが発表してくださることを期待し

ています.

欠測への対応

2(第29回) 外れ値 @sfchaos

1(第28回) @dichika

� � �

タイトル 発表者

シリーズ前処理

Page 3: 外れ値

1. 自己紹介

2. データ分析のお仕事

3. 外れ値とその検出方法

4. まとめ

アジェンダ

Page 4: 外れ値

1. 自己紹介

Page 5: 外れ値

�TwitterID: @sfchaos

�職業: データ分析

Page 6: 外れ値

2. データ分析のお仕事

Page 7: 外れ値

2.1 俺たちの日常

「欠測への対応」@dichika再掲,ただしグラフは劣化

前処理

やりたかった分析

Page 8: 外れ値

2.2 知識発見プロセス(Fayyad, etc.,1996)

データ 目的データ

選択 前処理

前処理済データ

変換

変換済データ

パターンの発見

パターン

解釈・評価

知識

広義の前処理

やりたかった分析(機械学習,自然言語処理,多変量解析等を用いた回帰,分類など)

データ分析の8~9割(more?)は,前処理に費やすとも言われるので

超重要

Page 9: 外れ値

3. 外れ値とその検出方法

Page 10: 外れ値

3.1 外れ値とは

� 外れ値とは,データセットの中で他から著しく乖離しているデータのこと.

Page 11: 外れ値

3.2 外れ値の例

� Kolaデータセット(ロシアの土壌の成分)> library(mvoutlier)> library(mvoutlier)> library(mvoutlier)> library(mvoutlier)> data(> data(> data(> data(mossmossmossmoss))))> dim(moss)> dim(moss)> dim(moss)> dim(moss)[1] 598 34[1] 598 34[1] 598 34[1] 598 34> moss[1:5, 1:10]> moss[1:5, 1:10]> moss[1:5, 1:10]> moss[1:5, 1:10] ID XCOO YCOO Ag Al As B Ba Bi Ca ID XCOO YCOO Ag Al As B Ba Bi Ca ID XCOO YCOO Ag Al As B Ba Bi Ca ID XCOO YCOO Ag Al As B Ba Bi Ca1 1 547960.4 7693790 0.016 71.2 0.123 1.74 14.0 0.002 23101 1 547960.4 7693790 0.016 71.2 0.123 1.74 14.0 0.002 23101 1 547960.4 7693790 0.016 71.2 0.123 1.74 14.0 0.002 23101 1 547960.4 7693790 0.016 71.2 0.123 1.74 14.0 0.002 23102 2 770024.8 7679167 0.073 245.0 0.299 2.77 17.4 0.039 24602 2 770024.8 7679167 0.073 245.0 0.299 2.77 17.4 0.039 24602 2 770024.8 7679167 0.073 245.0 0.299 2.77 17.4 0.039 24602 2 770024.8 7679167 0.073 245.0 0.299 2.77 17.4 0.039 24603 3 498650.6 7668151 0.032 103.0 0.176 1.89 20.9 0.012 34303 3 498650.6 7668151 0.032 103.0 0.176 1.89 20.9 0.012 34303 3 498650.6 7668151 0.032 103.0 0.176 1.89 20.9 0.012 34303 3 498650.6 7668151 0.032 103.0 0.176 1.89 20.9 0.012 34304 4 795151.9 7569386 0.118 307.0 0.423 2.30 21.8 0.033 28604 4 795151.9 7569386 0.118 307.0 0.423 2.30 21.8 0.033 28604 4 795151.9 7569386 0.118 307.0 0.423 2.30 21.8 0.033 28604 4 795151.9 7569386 0.118 307.0 0.423 2.30 21.8 0.033 28605 5 437050.0 7855900 0.038 253.0 0.119 4.65 31.1 0.002 31905 5 437050.0 7855900 0.038 253.0 0.119 4.65 31.1 0.002 31905 5 437050.0 7855900 0.038 253.0 0.119 4.65 31.1 0.002 31905 5 437050.0 7855900 0.038 253.0 0.119 4.65 31.1 0.002 3190

Anne Ruiz-Gaze and Christine Thomas-Agnan, Identification of local mutivariate outliers, http://bit.ly/XqDlfG

Page 12: 外れ値

3.1 外れ値

� 例1. バリウムの濃度の分布

外れ値?

> > > > hist(moss$Ba, label=T, main="", xlab="Ba"hist(moss$Ba, label=T, main="", xlab="Ba"hist(moss$Ba, label=T, main="", xlab="Ba"hist(moss$Ba, label=T, main="", xlab="Ba"))))

Ba

Frequency

0 50 100 150

050

100

150

200

250

300

334

234

214 4 0 0 0 1

Page 13: 外れ値

3.1 外れ値

� 例2. バリウムとカルシウムの散布図(対数変換済み)> corr.plot(log(moss$Ba), log(moss$Ca), xlab="log(Ba)", ylab="log(Ca)")> corr.plot(log(moss$Ba), log(moss$Ca), xlab="log(Ba)", ylab="log(Ca)")> corr.plot(log(moss$Ba), log(moss$Ca), xlab="log(Ba)", ylab="log(Ca)")> corr.plot(log(moss$Ba), log(moss$Ca), xlab="log(Ba)", ylab="log(Ca)")$cor.cla$cor.cla$cor.cla$cor.cla[1] 0.663193[1] 0.663193[1] 0.663193[1] 0.663193

$cor.rob$cor.rob$cor.rob$cor.rob[1] 0.7130014[1] 0.7130014[1] 0.7130014[1] 0.7130014

2.0 2.5 3.0 3.5 4.0 4.5 5.0

7.5

8.0

8.5

9.0

log(Ba)

log(Ca)

Classical cor = 0.66 Classical cor = 0.66 Classical cor = 0.66 Classical cor = 0.66 Robust cor = 0.71 Robust cor = 0.71 Robust cor = 0.71 Robust cor = 0.71

Page 14: 外れ値

3.2 外れ値検出のアプローチ

� 外れ値を検出するアプローチはいくつかある.

� 各アプローチで,仮定や考え方が異なるので,分析データの特性に応じて選ぶべし.

仮定・考え方 代表的なアプローチ

統計的アプローチ

(Statistical approaches)データは統計的なモデルに従って発生すると考え,そのモデルに従わないデータが外れ値

� 統計的検定

� 深さに基づくアプローチ

� 偏差に基づくアプローチ 等

空間的な近さに基づく方法

(Proximity-based method)他のデータと比べて近傍点への近接度合いが著しく異なるデータが外れ値

� 距離に基づくアプローチ

� 密度に基づくアプローチ

クラスタリングに基づく方法

(Clustering-based mathod)データをクラスタリングする際に,小さいクラスターに所属するデータが外れ値

Page 15: 外れ値

3.2 外れ値検出のアプローチ

� 外れ値を検出するアプローチはいくつかある.

� 各アプローチで,仮定や考え方が異なるので,分析データの特性に応じて選ぶべし.

仮定・考え方 代表的なアプローチ

統計的アプローチ

(Statistical approaches)データは統計的なモデルに従って発生すると考え,そのモデルに従わないデータが外れ値

� 統計的検定

� 深さに基づくアプローチ

� 偏差に基づくアプローチ 等

空間的な近さに基づく方法

(Proximity-based method)他のデータと比べて近傍点への近接度合いが著しく異なるデータが外れ値

� 距離に基づくアプローチ

� 密度に基づくアプローチ

クラスタリングに基づく方法

(Clustering-based mathod)データをクラスタリングする際に,小さいクラスターに所属するデータが外れ値

Page 16: 外れ値

3.3 統計的アプローチ

� 統計的検定,深さに基づくアプローチ,偏差に基づくアプローチなどがある.

Page 17: 外れ値

3.3.1 統計的検定

� 箱ひげ図,Grubbs検定などがある.

Page 18: 外れ値

3.3.1 (1)箱ひげ図

> res <- boxplot(moss$Ba)> res <- boxplot(moss$Ba)> res <- boxplot(moss$Ba)> res <- boxplot(moss$Ba)> res$stats> res$stats> res$stats> res$stats [,1] [,1] [,1] [,1][1,] 6.71[1,] 6.71[1,] 6.71[1,] 6.71[2,] 15.20[2,] 15.20[2,] 15.20[2,] 15.20[3,] 19.00[3,] 19.00[3,] 19.00[3,] 19.00[4,] 23.90[4,] 23.90[4,] 23.90[4,] 23.90[5,] 36.70[5,] 36.70[5,] 36.70[5,] 36.70

050

100

150

Ba

Frequency

0 50 100 150

050

100

150

200

250

300

334

234

214 4 0 0 0 1

Page 19: 外れ値

3.3.1 (2)Grubbs検定

� 1次元のデータが全て正規分布から発生したと仮定.

� 一番大きな値(or小さい値,または両方)のzスコアが閾値以上かどうかにより,帰無仮説の棄却判定を行う.

� この検定の結果により,一番大きい(or小さい)値を持つデータが外れ値かどうかを判定する.

σxx

z−

=

22,2/

22,2/

21

+−−

≥NN

NN

tNt

NNz

α

α

帰無仮説 全データが同じ分布(正規分布)から生成される

対立仮説 一番大きい(or小さい)値のデータは他のデータとは異なる分布から生成される

x

Page 20: 外れ値

3.3.1 (2)Grubbs検定

� バリウムのデータは正規分布に従っていないので,対数変換を行って正規分布に近づける.

Ba

Frequency

0 50 100 150

050

100

150

200

250

300

334

234

214 4 0 0 0 1

log(Ba)

Frequency

2.0 2.5 3.0 3.5 4.0 4.5 5.0

020

4060

80100

120

140

3 4

23

60

107

137

128

69

30

1611

4 1 40 0 1

対数変換

> library(e1071)> library(e1071)> library(e1071)> library(e1071)> moss.Ba.log <- log(moss$Ba)> moss.Ba.log <- log(moss$Ba)> moss.Ba.log <- log(moss$Ba)> moss.Ba.log <- log(moss$Ba)> kurtosis(moss.Ba.log)> kurtosis(moss.Ba.log)> kurtosis(moss.Ba.log)> kurtosis(moss.Ba.log)[1] 2.690639[1] 2.690639[1] 2.690639[1] 2.690639> hist(log(moss$Ba), labels=T, nclass=20, main="", > hist(log(moss$Ba), labels=T, nclass=20, main="", > hist(log(moss$Ba), labels=T, nclass=20, main="", > hist(log(moss$Ba), labels=T, nclass=20, main="",

xlab="log(Ba)")xlab="log(Ba)")xlab="log(Ba)")xlab="log(Ba)")

Page 21: 外れ値

3.3.1 (2)Grubbs検定

> grubbs.test(moss.Ba.log)> grubbs.test(moss.Ba.log)> grubbs.test(moss.Ba.log)> grubbs.test(moss.Ba.log)

Grubbs test for one outlier Grubbs test for one outlier Grubbs test for one outlier Grubbs test for one outlier

data: moss.Ba.log data: moss.Ba.log data: moss.Ba.log data: moss.Ba.log G = 5.5434, U = 0.9484, p-value = 5.892e-06G = 5.5434, U = 0.9484, p-value = 5.892e-06G = 5.5434, U = 0.9484, p-value = 5.892e-06G = 5.5434, U = 0.9484, p-value = 5.892e-06alternative hypothesis: highest value 5.16478597392351 is an alternative hypothesis: highest value 5.16478597392351 is an alternative hypothesis: highest value 5.16478597392351 is an alternative hypothesis: highest value 5.16478597392351 is an

outlieroutlieroutlieroutlier

外れ値!

log(Ba)

Frequency

2.0 2.5 3.0 3.5 4.0 4.5 5.0

020

4060

80100

120

140

3 4

23

60

107

137

128

69

30

1611

4 1 40 0 1

Page 22: 外れ値

3.3.2 深さに基づくアプローチ

� 統計的な分布とは独立に,データ空間の境界の外れ値を探索する.

� データを凸包で囲み,その外側にあるデータを外れ値と判定する.

� ISODEPTHなどのアルゴリズムがある.

2.0 2.5 3.0 3.5 4.0 4.5 5.0

7.5

8.0

8.5

9.0

log(Ba)

log(Ca)

2.0 2.5 3.0 3.5 4.0 4.5 5.0

7.5

8.0

8.5

9.0

log(Ba)

log(Ca)

2.0 2.5 3.0 3.5 4.0 4.5 5.07.5

8.0

8.5

9.0

log(Ba)

log(Ca)

深さ1

深さ2

深さ1

深さ2

深さ3

深さ1

・・・

Page 23: 外れ値

3.3.3 深さに基づくアプローチ

> library(depth)> library(depth)> library(depth)> library(depth)> isodepth(log(moss[, c("Ba", "Ca")]), dpth=1:5, > isodepth(log(moss[, c("Ba", "Ca")]), dpth=1:5, > isodepth(log(moss[, c("Ba", "Ca")]), dpth=1:5, > isodepth(log(moss[, c("Ba", "Ca")]), dpth=1:5,

mustdith=T, xlab="log(Ba)", ylab="log(Ca)")mustdith=T, xlab="log(Ba)", ylab="log(Ca)")mustdith=T, xlab="log(Ba)", ylab="log(Ca)")mustdith=T, xlab="log(Ba)", ylab="log(Ca)")

2.0 2.5 3.0 3.5 4.0 4.5 5.0

7.5

8.0

8.5

9.0

log(Ba)

log(Ca)

外れ値と判定する深さの閾値は,ユーザが指定する必要がある

� 深さ1~5までの凸包を生成する.

Page 24: 外れ値

3.4 空間的な近さに基づく方法

� 距離に基づくアプローチ,密度に基づくアプローチ等がある.

仮定・考え方 代表的な方法

距離に基づくアプローチ

(distance-based approaches)

近傍のデータ数が少ないデータが外れ値(距離を用いて近傍のデータ数をカウント)

� DB(ε, π)-外れ値 等

密度に基づくアプローチ

(density-based method)近傍点と比べて密度が大いに異なるデータが外れ値

� LOF 等

Page 25: 外れ値

3.4.1 距離に基づくアプローチ

� DB(ε, π)-outlier

� 各データの周囲に半径ε以内に存在する点の割合がπ以下の点を外れ値と判定する.

ε

半径ε以内に1点しか存在しない(割合=1/7=0.14)

半径ε以内に4点存在する

(割合=4/7=0.57)

π=0.2のとき

外れ値でない 外れ値である

Page 26: 外れ値

3.4.2 密度に基づくアプローチ

� 距離に基づくアプローチでは,データ全体を対象にデータ間の距離を計算しているので,以下のデータ o1, o2は外れ値とはみなされない.

� しかし,クラスターC1, C2を念頭におくと,o1, o2は外れ値とみなすこともできる.

距離に基づく方法では外れ値とはみなされない

C2

C1O1

O2

Page 27: 外れ値

3.4.2 密度に基づくアプローチ

� 密度に基づくアプローチでは,このように局所的に発生する外れ値を検出することを目的とする.

� 代表的な手法がLOF(Local Outlier Factor)

� データ点付近の密度と,近傍点付近の密度が著しく異なる点を外れ値として判定する.

データの近傍点を用いて推定した局所的な密度

データの近傍点の密度

密度が著しく異なる点を外れ値と判定

Page 28: 外れ値

3.4.2 密度に基づくアプローチ

> library(DMwR)> library(DMwR)> library(DMwR)> library(DMwR)> lof <- lofactor(log(moss[, c("Ba", "Ca")]), 10)> lof <- lofactor(log(moss[, c("Ba", "Ca")]), 10)> lof <- lofactor(log(moss[, c("Ba", "Ca")]), 10)> lof <- lofactor(log(moss[, c("Ba", "Ca")]), 10)> hist(lof, nclas=20, labels=T, main="", xlab="LOF")> hist(lof, nclas=20, labels=T, main="", xlab="LOF")> hist(lof, nclas=20, labels=T, main="", xlab="LOF")> hist(lof, nclas=20, labels=T, main="", xlab="LOF")

LOF

Frequency

1.0 1.5 2.0 2.5 3.0 3.5

050

100

150

200

250

164

285

57

36198 7 6 1 4 2 2 4 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 1

外れ値と判定するLOFの閾値はユーザが指定

外れ値?

� 密度の推定に使用する近傍点の個数を10個としてLOFを実行

Page 29: 外れ値

4. まとめ

Page 30: 外れ値

� 外れ値 = データセット内で,他から著しく離れているデータ.

� 外れ値の検出は,統計的アプローチ,空間的な近さに基づくアプローチ,クラスタリングに基づくアプローチなどが代表的.

� 各アプローチが前提とする仮定・考え方が異なるので,データの性質に応じてアプローチや手法を選ぶべし.

Page 31: 外れ値

参考資料文献名 著者 出版社等 コメント

Outlier Analysis Charu C. Aggarwal Springer 最近刊行された書籍.若干敷居は高いが読む価値は大いにアリ.

https://sites.google.com/site/scriptofbioinformatics/mian-qiangmemo/waire-zhi-jian-chu-zhi-shi

まとまっていて分かりやすい.一度目を通すと良い.

Outlier Detection Techniques

H-P.Kriegel, P.Kroger, A.Zimek

Tutorial Notes: SIAM SDM 2010, Columbus, Ohio

外れ値の検出に関して俯瞰したサーベイ.一読すべし.

Data Mining: Concepts and Techniques(12章)

Jiawei Han, Micheline Kamber, Jian Pei

Morgan Kaufmann データマイニングの代表的な教科書.まとまっていて分かりやすい.