Python で外れ値を削除する方法
外れ値とは、データセット内の他の値から異常に離れている観測値です。外れ値は分析結果に影響を与える可能性があるため、問題となる場合があります。
このチュートリアルでは、Python で外れ値を特定して削除する方法を説明します。
Python で外れ値を特定する方法
外れ値を削除する前に、まず何を外れ値とみなすかを決定する必要があります。これを行うには、次の 2 つの一般的な方法があります。
1. 四分位範囲を使用します。
四分位範囲 (IQR) は、データセット内の 75 パーセンタイル (Q3) と 25 パーセンタイル (Q1) の差です。値の平均 50% の分布を測定します。
観測値が第 3 四分位 (Q3) より上の四分位範囲の 1.5 倍、または第 1 四分位 (Q1) より下の四分位範囲の 1.5 倍である場合、その観測値を外れ値として定義できます。
異常値 = 観測値 > Q3 + 1.5*IQR または Q1 – 1.5*IQR
2. Z スコアを使用します。
Z スコアは、指定された値が平均からどれだけ標準偏差があるかを示します。次の式を使用して Z スコアを計算します。
z = (X – μ) / σ
金:
- X は単一の生データ値です
- μ は母平均です
- σ は母集団の標準偏差です
Z スコアが -3 未満または 3 より大きい場合、観測値を外れ値として定義できます。
外れ値 = Z スコアが 3 を超える、または -3 未満の観測値
Python で外れ値を削除する方法
何が外れ値であると考えるかを決定したら、それらを特定してデータセットから削除できます。これを行う方法を示すために、次のパンダ データフレームを使用します。
import numpy as np import pandas as pd import scipy.stats as stats #create dataframe with three columns 'A', 'B', 'C' np.random.seed(10) data = pd.DataFrame(np.random.randint(0, 10, size=(100, 3)), columns=['A', 'B', 'C']) #view first 10 rows data[:10] ABC 0 13.315865 7.152790 -15.454003 1 -0.083838 6.213360 -7.200856 2 2.655116 1.085485 0.042914 3 -1.746002 4.330262 12.030374 4 -9.650657 10.282741 2.286301 5 4.451376 -11.366022 1.351369 6 14.845370 -10.798049 -19.777283 7 -17.433723 2.660702 23.849673 8 11.236913 16.726222 0.991492 9 13.979964 -2.712480 6.132042
次に、Z スコア法または四分位範囲法を使用して外れ値を定義し、削除できます。
Zスコア法:
#find absolute value of z-score for each observation z = np.abs(stats.zscore(data)) #only keep rows in dataframe with all z-scores less than absolute value of 3 data_clean = data[(z<3).all(axis=1)] #find how many rows are left in the dataframe data_clean.shape (99.3)
四分位範囲法:
#find Q1, Q3, and interquartile range for each column Q1 = data.quantile(q=.25) Q3 = data.quantile(q=.75) IQR = data.apply(stats.iqr) #only keep rows in dataframe that have values within 1.5*IQR of Q1 and Q3 data_clean = data[~((data < (Q1-1.5*IQR)) | (data > (Q3+1.5*IQR))).any(axis=1)] #find how many rows are left in the dataframe data_clean.shape (89.3)
za スコア法では 1 つの観測値が外れ値として特定されて削除されたのに対し、四分位範囲法では合計 11 つの観測値が外れ値として特定されて削除されたことがわかります。
外れ値を削除する場合
データに 1 つ以上の外れ値が存在する場合は、まず、それらがデータ入力エラーの結果ではないことを確認する必要があります。データを保存するときに、単純に間違ったデータ値を入力してしまうことがあります。
外れ値がデータ入力エラーの結果であることが判明した場合は、データ セットの平均や中央値などの新しい値を割り当てることができます。
値が本当に外れ値であり、分析全体に重大な影響を与える場合は、その値を削除することを選択できます。最終レポートまたは分析では、外れ値を削除したことを必ず明記してください。
追加リソース
複数の変数を同時に操作している場合は、 マハラノビス距離を使用して外れ値を検出するとよいでしょう。