Pythonでの外れ値処理入門:方法と実装
この記事のゴール:
データ分析の初心者でも、Pythonで外れ値の検出と処理ができるようになることがゴールです。外れ値の対処はデータの品質を向上させ、分析の精度を高める重要なステップです。このブログでは、外れ値の検出方法、処理方法、注意点について具体的なPythonコードを使いながら解説します。
目次
- 外れ値とは?
-
Pythonでの外れ値の検出方法
- Zスコア法
- IQR法
- 外れ値の処理方法
- 外れ値処理時の注意点
- 参考文献
外れ値とは?
外れ値は、通常のデータ範囲から外れた極端な値のことです。これらの値は、データに誤差がある場合や異常な条件下で記録されたデータを示すことが多く、処理しないと結果に悪影響を及ぼすことがあります[1]。
Pythonでの外れ値の検出方法
1. Zスコア法
Zスコア法では、データが平均からどれだけ離れているかを標準偏差の単位で計算します。通常、Zスコアの絶対値が3以上のデータを外れ値とみなします。
import numpy as np
# サンプルデータの作成
data = np.array([10, 12, 13, 15, 100, 14, 12, 13, 11])
# Zスコアの計算
mean = np.mean(data)
std_dev = np.std(data)
z_scores = (data - mean) / std_dev # Zスコア計算
# 外れ値の検出
outliers = data[np.abs(z_scores) > 3] # Zスコアが3以上のデータを外れ値とする
print("外れ値 (Zスコア法):", outliers)
2. IQR法 (四分位範囲法)
IQR法では、四分位数を用いて外れ値を検出します。第1四分位数(Q1)と第3四分位数(Q3)を計算し、それぞれから1.5倍のIQR範囲を超えるデータを外れ値とみなします[3]。
# 四分位数の計算
Q1 = np.percentile(data, 25) # 第1四分位数
Q3 = np.percentile(data, 75) # 第3四分位数
IQR = Q3 - Q1
# 外れ値の範囲
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR
# 外れ値の検出
outliers_iqr = data[(data < lower_bound) | (data > upper_bound)]
print("外れ値 (IQR法):", outliers_iqr)
外れ値の処理方法
a) 外れ値の削除
外れ値を削除すると、データの一部を失いますが、分析がシンプルになります[4]。
# 外れ値以外のデータを選択して新しいデータセットを作成
cleaned_data = data[(data >= lower_bound) & (data <= upper_bound)]
print("外れ値を除去したデータ:", cleaned_data)
b) 外れ値の変換
対数変換やBox-Cox変換で外れ値の影響を軽減することも可能です。
import numpy as np
# 対数変換
transformed_data = np.log(data + 1) # log(0)を避けるために1を足す
print("対数変換後のデータ:", transformed_data)
c) 補完による置き換え
外れ値を中央値や平均値で置き換えることで、データの損失を防ぎます[4]。
# 中央値で外れ値を置き換える
median_value = np.median(data)
data_with_imputed_outliers = np.where((data < lower_bound) | (data > upper_bound), median_value, data)
print("補完後のデータ:", data_with_imputed_outliers)
d) トリミング
両端から一定割合をカットすることで、外れ値の影響を排除します[5]。
外れ値処理時の注意点
-
外れ値の検出方法を正しく選ぶ:
Zスコア法とIQR法のどちらを使うかはデータの性質によって変わります[1][3]。 -
外れ値を除去するリスク:
外れ値が有意な情報を持つ場合もあるため、データを失うことによるリスクも考慮しましょう[1]。 -
外れ値を可視化する:
外れ値の検出前後でデータの分布を確認し、意図通りの変化があるかチェックすることが重要です[5]。
参考文献
[1] "外れ値処理の考え方," Sales Analytics, https://www.salesanalytics.co.jp/column/no00397/
[2] "データ分析における外れ値処理方法," Blog Since 2020, https://blog.since2020.jp/data_analysis/%E5%A4%96%E3%82%8C%E5%80%A4%E3%81%AE%E5%87%A6%E7%90%86%E6%96%B9%E6%B3%953%E9%81%B8%EF%BC%81/
[3] "Pythonでの外れ値検出 (IQR法)," Codexa, https://www.codexa.net/python-outlier/
[4] "外れ値の検出と処理方法," Note, https://note.com/united_code/n/n7c49170b882f
[5] "データの外れ値処理に関するガイドライン," Gochikika, https://gochikika.ntt.com/Preprocessing/outlier.html
引用
- 外れ値の検出方法は「Pythonでの外れ値検出 (IQR法)」(Codexa)を参考にしています。
- 外れ値の処理方法における各手法のメリット・デメリットについては、「データ分析における外れ値処理方法」(Blog Since 2020)から引用しました。
- 注意点の内容は「外れ値処理の考え方」(Sales Analytics)から参考にしています。
以上で、Pythonで外れ値を検出し、適切に処理する方法についての解説は終わりです。分析の精度を高めるため、外れ値を安易に削除せず、データの性質に合わせて慎重に処理するよう心がけましょう。