データセットがあるとしましょう:Amount of money (100, 50, 150, 200, 35, 60 ,50, 20, 500)。私がしているGoogleでこのデータセット内の可能な外れ値を見つけるために使用することができる技術を探してウェブを、私は混乱してしまいました。
私の質問は次のとおりです。このデータセットで起こり得る異常値を検出するために使用できるアルゴリズム、手法、または方法はどれですか。
PS:データが正規分布に従っていないことを考慮してください。ありがとう。
データセットがあるとしましょう:Amount of money (100, 50, 150, 200, 35, 60 ,50, 20, 500)。私がしているGoogleでこのデータセット内の可能な外れ値を見つけるために使用することができる技術を探してウェブを、私は混乱してしまいました。
私の質問は次のとおりです。このデータセットで起こり得る異常値を検出するために使用できるアルゴリズム、手法、または方法はどれですか。
PS:データが正規分布に従っていないことを考慮してください。ありがとう。
回答:
外れ値分析にはBoxPlotを使用できます。Pythonでそれを行う方法を示します。
データを配列と見なします。
a = [100, 50, 150, 200, 35, 60 ,50, 20, 500]
ここで、seabornを使用して箱ひげ図をプロットします。
import seaborn as sn
sn.boxplot(a)
したがって、次のようなプロットが得られます。
500が私にとって唯一の異常値のようです。しかし、それはすべて、アナリストまたは統計家の分析と許容レベル、および問題の説明に依存します。
あなたはで見ることができ、私の答えの1以上のテストのためのCrossValidated SEに。
そして、外れ値と、それらを検出するためのアルゴリズムと手法について、いくつかの素晴らしい質問があります。
私の個人的なお気に入りはマハラノビス距離法です。
外れ値検出の考え方の1つは、予測モデルを作成してから、ポイントが予測の範囲内にあるかどうかを確認することです。情報理論の観点から、各観測値がモデルのエントロピーをどれだけ増加させるかを確認できます。
このデータを単に数値のコレクションとして扱い、それらの生成方法について提案されたモデルがない場合は、平均を確認することもできます。数値が正常に分布していないことが確実な場合は、特定の数値が平均からどれだけ「離れている」かについて説明することはできませんが、絶対的に見ることができます。
これを適用すると、すべての数値の平均を取り、各数値を除外して、他の数値の平均を求めることができます。グローバル平均と最も異なる平均が最大の外れ値です。ここにいくつかのpythonがあります:
def avg(a):
return sum(a)/len(a)
l = [100, 50, 150, 200, 35, 60 ,50, 20, 500]
m = avg(l)
for idx in range(len(l)):
print("outlier score of {0}: {1}".format(l[idx], abs(m - avg([elem for i, elem in enumerate(l) if i!=idx]))))
>>
outlier score of 100: 4
outlier score of 50: 10
outlier score of 150: 3
outlier score of 200: 9
outlier score of 35: 12
outlier score of 60: 9
outlier score of 50: 10
outlier score of 20: 14
outlier score of 500: 46
単純なアプローチは、箱ひげ図と同じものを使用することです。1.5(中央値-q1)または1.5(q3-中央値)=外れ値よりも離れています。
私はそれが完全ではなく、多分単純すぎるとしても、多くの場合に役立つと思います。
正常性を仮定しないという利点があります。