0Pricing
Learn AI with Python · レッスン

外れ値の検出と除去

Z スコア法、IQR 法、Isolation Forest の概念、実務での外れ値処理を学びます。

「外れ値の検出と除去」はCoddyKit上の無料Learn AI with Pythonレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn AI with Python学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn AI with Pythonコースには全4レッスンが含まれています。

外れ値とは

外れ値とは、データの他の値から大きく離れた値です。実際に極端な値である場合もあれば、データ入力ミスやセンサーの不具合である場合もあります。外れ値は平均、分散、モデルを歪める可能性があるため、意図的に検出してください。

Zスコア法

zスコアは、値が平均から標準偏差何個分離れているかを測定します:z = (x - mean) / std。一般的なルールでは、|z| > 3の点を外れ値として検出します。

import numpy as np
data = np.array([10, 12, 11, 13, 12, 100])
z = (data - data.mean()) / data.std()
print(np.round(z, 2))

scipy zscoreで検出する

scipy.stats.zscoreは配列のzスコアを計算します。しきい値と組み合わせると、外れ値を示すブールマスクを作成できます。

from scipy import stats
z = np.abs(stats.zscore(data))
outliers = z > 3
print(data[outliers])

Zスコアの限界

zスコアで使用する平均と標準偏差自体が、外れ値の影響を受けます。データが大きく偏っている場合や極端な値がある場合、zスコアでは外れ値を見逃しやすくなります。IQR法のほうが頑健です。

IQR法

四分位範囲(IQR = Q3 - Q1)は、中央の50パーセントの範囲です。外れ値による変動が小さい四分位数から計算するため、頑健な指標です。

q1 = np.percentile(data, 25)
q3 = np.percentile(data, 75)
iqr = q3 - q1
print(q1, q3, iqr)

IQRフェンス

Tukeyのフェンスでは、下限と上限を次のように定義します:lower = Q1 - 1.5*IQR、upper = Q3 + 1.5*IQR。範囲外の値はすべて検出対象になります。同じルールで箱ひげ図のひげも描画されます。

lower = q1 - 1.5 * iqr
upper = q3 + 1.5 * iqr
mask = (data < lower) | (data > upper)
print(data[mask])   # outliers

箱ひげ図による可視化

箱ひげ図はIQRのルールを可視化します。箱はQ1からQ3まで、線は中央値、ひげはフェンスまでを示し、その外側の点は個々の外れ値として描画されます。

# import matplotlib.pyplot as plt
# plt.boxplot(data)
# plt.show()

外れ値を削除する

外れ値を検出したら、その行を削除できます。ただし、実際のデータを削除すると結果に偏りが生じる可能性があるため、慎重に行ってください。何を削除したのか、なぜ削除したのかを記録してください。

clean = data[~mask]
print(clean)   # outlier removed

np.clipでウィンザー化する

削除する代わりに、ウィンザー化によって、np.clipで極端な値を指定した上限・下限に置き換えることができます。これにより行数を維持しながら、極端な値の影響を抑えられます。

capped = np.clip(data, lower, upper)
print(capped)   # extreme value pulled to the upper fence

パーセンタイルで切り取る

ウィンザー化では、1パーセンタイルと99パーセンタイルに収める方法がよく使われます。これにより、最も極端な値のうち左右対称に合計2パーセントだけを除外できます。

lo, hi = np.percentile(data, [1, 99])
print(np.clip(data, lo, hi))

削除するか、上限・下限を設けるか

状況に応じて選択してください。明らかなエラー(あり得ない値)は削除し、残したいものの実際に極端な値は上限・下限を設け、外れ値自体が信号である場合(不正検出など)は残すこともあります。判断の理由を記録してください。

理解度チェック

外れ値に関する知識を確認しましょう。

まとめ

外れ値処理のツールキット:

  • Zスコア:scipy.stats.zscoreを使って|z| > 3を検出します(外れ値の影響を受けやすい方法です)
  • IQRフェンス:Q1-1.5*IQRからQ3+1.5*IQRまで(頑健で、箱ひげ図の基礎となります)
  • 実際のエラーは削除し、極端な値にはnp.clipでウィンザー化して上限・下限を設けます
  • 値を削除または上限・下限処理した理由を必ず記録してください

よくある質問

「外れ値の検出と除去」レッスンは無料ですか?

はい。「外れ値の検出と除去」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn AI with Pythonコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn AI with Pythonコースには全4レッスンが含まれています。

「外れ値の検出と除去」で何を学びますか?

Z スコア法、IQR 法、Isolation Forest の概念、実務での外れ値処理を学びます。 ブラウザで直接実行するハンズオンコードでLearn AI with Pythonを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Learn AI with Pythonを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのLearn AI with Pythonは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「外れ値の検出と除去」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このLearn AI with Pythonレッスンでコードを書いて実行できますか?

はい。すべてのLearn AI with Pythonレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 外れ値の検出と除去
  2. カテゴリ変数のエンコーディング
  3. 特徴量スケーリング:正規化と標準化
  4. 前処理パイプラインの構築
← Learn AI with Pythonに戻る