はじめに
この記事は、【統計自主学習④】
外れ値を統計的に検出する方法 ― IQR法とZスコア法をわかりやすく解説
の補足として、実際にPythonを使って外れ値検出を実装してみる内容です。
「理論はわかったけど、実際にどうやってコードにするの?」
という疑問を解消しましょう!
この記事では、
- IQR法による外れ値検出
- Zスコア法による外れ値検出 を、シンプルなデータを使って実践します。
1. 外れ値検出の流れを簡単におさらい
IQR法とは
- 四分位範囲(IQR)を基準に、
下限=Q1 − 1.5×IQR、上限=Q3 + 1.5×IQR
から外れたデータを「外れ値」とみなす方法です。
Zスコア法とは
- 各データの標準化スコア(Zスコア)を計算し、
Zスコアの絶対値が大きすぎるデータ(一般に2以上や3以上)を「外れ値」とみなします。
2. 実際にPythonでIQR法を使って外れ値検出!
まずは必要なライブラリをインポート
import numpy as np
import pandas as pd
データを用意
簡単なダミーデータを作ります。
data = [10, 12, 12, 13, 12, 11, 12, 100, 13, 14, 13, 11, 12]
df = pd.DataFrame(data, columns=['値'])
IQR法で外れ値検出
Q1 = df['値'].quantile(0.25, interpolation='midpoint')
Q3 = df['値'].quantile(0.75, interpolation='midpoint')
IQR = Q3 - Q1
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR
# 外れ値の判定
outliers = df[(df['値'] < lower_bound) | (df['値'] > upper_bound)]
print("IQR法で検出された外れ値:\n", outliers)
✅ 出力結果:100が外れ値として検出されるはずです!
※quantileの仕様上Q1を12とする場合があり、その場合は外れ値は10,100になります。

3. 次にZスコア法で外れ値検出!
必要なライブラリをインポート
from scipy import stats
Zスコアを計算して外れ値検出
z_scores = np.abs(stats.zscore(df['値']))
# しきい値は2または3をよく使う
threshold = 2
outliers_z = df[z_scores > threshold]
print("Zスコア法で検出された外れ値:\n", outliers_z)
✅ 出力結果:
こちらも同様に、100が外れ値と認識されるはずです!

4. まとめ
- IQR法は分布の形にあまり依存せず使いやすい
- Zスコア法はデータが「正規分布に近い」場合により効果的
- 実際にコードを書くと、理論だけでは気づかなかった注意点も見えてくる!
✅ この記事を通じて、外れ値検出の流れを「手を動かして」体感できましたね!
✅ 【参考記事】
▶ 外れ値を統計的に検出する方法 ― IQR法とZスコア法をわかりやすく解説
✅ 【次におすすめ】

コメント