外れ値の検出と除去
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 removednp.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フィードバックを取得できます。ローカル設定は不要です。