【Pythonで外れ値検出】IQR法とZスコア法を実装して実データで試してみた|統計自主学習補足

はじめに

この記事は、【統計自主学習④】
外れ値を統計的に検出する方法 ― 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になります。

pythonでIQR法を実行した結果の画像

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が外れ値と認識されるはずです!

Zスコアを用いて外れ値を用いた結果の画像

4. まとめ


  • IQR法は分布の形にあまり依存せず使いやすい
  • Zスコア法はデータが「正規分布に近い」場合により効果的
  • 実際にコードを書くと、理論だけでは気づかなかった注意点も見えてくる!

✅ この記事を通じて、外れ値検出の流れを「手を動かして」体感できましたね!


✅ 【参考記事】

外れ値を統計的に検出する方法 ― IQR法とZスコア法をわかりやすく解説

✅ 【次におすすめ】

「相関係数の正しい読み解き方|因果関係との違いもスッキリ理解」

コメント

タイトルとURLをコピーしました