外れ値
description
Transcript of 外れ値
シリーズ前処理2013外れ値
2013年2月23日
第29回Tokyo.R
@sfchaos
� これは,「シリーズ前処理」の発表の一つです.� 前回の@dichikaさんに続いて,今日は外れ値について
取り上げます.� この後も多くの皆さんが発表してくださることを期待し
ています.
欠測への対応
2(第29回) 外れ値 @sfchaos
1(第28回) @dichika
� � �
タイトル 発表者
シリーズ前処理
1. 自己紹介
2. データ分析のお仕事
3. 外れ値とその検出方法
4. まとめ
アジェンダ
1. 自己紹介
�TwitterID: @sfchaos
�職業: データ分析
2. データ分析のお仕事
2.1 俺たちの日常
「欠測への対応」@dichika再掲,ただしグラフは劣化
前処理
やりたかった分析
2.2 知識発見プロセス(Fayyad, etc.,1996)
データ 目的データ
選択 前処理
前処理済データ
変換
変換済データ
パターンの発見
パターン
解釈・評価
知識
広義の前処理
やりたかった分析(機械学習,自然言語処理,多変量解析等を用いた回帰,分類など)
データ分析の8~9割(more?)は,前処理に費やすとも言われるので
超重要
3. 外れ値とその検出方法
3.1 外れ値とは
� 外れ値とは,データセットの中で他から著しく乖離しているデータのこと.
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
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
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
3.2 外れ値検出のアプローチ
� 外れ値を検出するアプローチはいくつかある.
� 各アプローチで,仮定や考え方が異なるので,分析データの特性に応じて選ぶべし.
仮定・考え方 代表的なアプローチ
統計的アプローチ
(Statistical approaches)データは統計的なモデルに従って発生すると考え,そのモデルに従わないデータが外れ値
� 統計的検定
� 深さに基づくアプローチ
� 偏差に基づくアプローチ 等
空間的な近さに基づく方法
(Proximity-based method)他のデータと比べて近傍点への近接度合いが著しく異なるデータが外れ値
� 距離に基づくアプローチ
� 密度に基づくアプローチ
クラスタリングに基づく方法
(Clustering-based mathod)データをクラスタリングする際に,小さいクラスターに所属するデータが外れ値
3.2 外れ値検出のアプローチ
� 外れ値を検出するアプローチはいくつかある.
� 各アプローチで,仮定や考え方が異なるので,分析データの特性に応じて選ぶべし.
仮定・考え方 代表的なアプローチ
統計的アプローチ
(Statistical approaches)データは統計的なモデルに従って発生すると考え,そのモデルに従わないデータが外れ値
� 統計的検定
� 深さに基づくアプローチ
� 偏差に基づくアプローチ 等
空間的な近さに基づく方法
(Proximity-based method)他のデータと比べて近傍点への近接度合いが著しく異なるデータが外れ値
� 距離に基づくアプローチ
� 密度に基づくアプローチ
クラスタリングに基づく方法
(Clustering-based mathod)データをクラスタリングする際に,小さいクラスターに所属するデータが外れ値
3.3 統計的アプローチ
� 統計的検定,深さに基づくアプローチ,偏差に基づくアプローチなどがある.
3.3.1 統計的検定
� 箱ひげ図,Grubbs検定などがある.
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
3.3.1 (2)Grubbs検定
� 1次元のデータが全て正規分布から発生したと仮定.
� 一番大きな値(or小さい値,または両方)のzスコアが閾値以上かどうかにより,帰無仮説の棄却判定を行う.
� この検定の結果により,一番大きい(or小さい)値を持つデータが外れ値かどうかを判定する.
σxx
z−
=
22,2/
22,2/
21
−
−
+−−
≥NN
NN
tNt
NNz
α
α
帰無仮説 全データが同じ分布(正規分布)から生成される
対立仮説 一番大きい(or小さい)値のデータは他のデータとは異なる分布から生成される
x
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)")
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
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
・・・
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までの凸包を生成する.
3.4 空間的な近さに基づく方法
� 距離に基づくアプローチ,密度に基づくアプローチ等がある.
仮定・考え方 代表的な方法
距離に基づくアプローチ
(distance-based approaches)
近傍のデータ数が少ないデータが外れ値(距離を用いて近傍のデータ数をカウント)
� DB(ε, π)-外れ値 等
密度に基づくアプローチ
(density-based method)近傍点と比べて密度が大いに異なるデータが外れ値
� LOF 等
3.4.1 距離に基づくアプローチ
� DB(ε, π)-outlier
� 各データの周囲に半径ε以内に存在する点の割合がπ以下の点を外れ値と判定する.
ε
半径ε以内に1点しか存在しない(割合=1/7=0.14)
半径ε以内に4点存在する
(割合=4/7=0.57)
π=0.2のとき
外れ値でない 外れ値である
3.4.2 密度に基づくアプローチ
� 距離に基づくアプローチでは,データ全体を対象にデータ間の距離を計算しているので,以下のデータ o1, o2は外れ値とはみなされない.
� しかし,クラスターC1, C2を念頭におくと,o1, o2は外れ値とみなすこともできる.
距離に基づく方法では外れ値とはみなされない
C2
C1O1
O2
3.4.2 密度に基づくアプローチ
� 密度に基づくアプローチでは,このように局所的に発生する外れ値を検出することを目的とする.
� 代表的な手法がLOF(Local Outlier Factor)
� データ点付近の密度と,近傍点付近の密度が著しく異なる点を外れ値として判定する.
データの近傍点を用いて推定した局所的な密度
データの近傍点の密度
密度が著しく異なる点を外れ値と判定
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を実行
4. まとめ
� 外れ値 = データセット内で,他から著しく離れているデータ.
� 外れ値の検出は,統計的アプローチ,空間的な近さに基づくアプローチ,クラスタリングに基づくアプローチなどが代表的.
� 各アプローチが前提とする仮定・考え方が異なるので,データの性質に応じてアプローチや手法を選ぶべし.
参考資料文献名 著者 出版社等 コメント
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 データマイニングの代表的な教科書.まとまっていて分かりやすい.