欠損値・外れ値の検出と方針
欠損値と外れ値の検出方法、代表的な対処方針、そしてデータリークを避ける適用順序を学びます。
欠損値を検出する#
import pandas as pd
df = pd.read_csv("/kaggle/input/titanic/train.csv")
df.isnull().mean().sort_values(ascending=False) # 列ごとの欠損率欠損は「なぜ欠けているか」で意味が変わります。 ランダムな欠損もあれば、欠けていること自体が情報(例:未記入=該当なし)の場合もあります。
欠損値への方針#
| 方針 | 使いどころ | 注意点 |
|---|---|---|
| 行・列の削除 | 欠損が少数、または欠損率が極端に高い列 | 情報を失う・本番データに使えない |
| 代入(補完) | 多くのケース。数値は中央値、カテゴリは最頻値が無難 | 分布を歪めうる |
| 欠損フラグの追加 | 欠損そのものが意味を持つとき | 列が増える |
# 中央値で補完しつつ、欠損だったことをフラグとして残す
df["Age_missing"] = df["Age"].isnull().astype(int)
df["Age"] = df["Age"].fillna(df["Age"].median())外れ値を検出する#
代表的な手法は IQR 法と z-score です。
- IQR 法:第 1 四分位 、第 3 四分位 、 とし、 を下回る/ を上回る値を外れ値とみなす
- z-score:平均からの標準偏差単位の距離。目安として絶対値が 3 を超えると外れ値
q1, q3 = df["Fare"].quantile([0.25, 0.75])
iqr = q3 - q1
lower, upper = q1 - 1.5 * iqr, q3 + 1.5 * iqr
outliers = df[(df["Fare"] < lower) | (df["Fare"] > upper)]外れ値への方針#
- 除去:明らかな入力ミス(ありえない値)のみ
- クリップ(上下限で丸める):極端値の影響を抑えつつ件数を保つ
- 対数変換など:右に裾を引く分布(運賃・価格など)を圧縮する
注意
外れ値は安易に消さないこと。本物のレアケースを捨てると、本番で似た例を取りこぼします。 「ノイズか、意味のある稀少値か」を EDA で見極めてから方針を決めます。
リークを避ける適用順序#
注意
理解度チェック#
複数選択
このトラックのまとめ#
- NumPy のベクトル化と broadcasting で、数値処理を高速・簡潔に書ける
- pandas で読み込み・選択・集計・結合・変換まで一通り扱える
- 可視化と EDA で「効く特徴」「欠損・外れ値」「リークの兆候」を見つけられる
- 前処理は訓練データから学び、fold の内側で適用してデータリークを防ぐ
次のステップ#
次トラック(L2)では、いよいよ機械学習の基礎(教師あり学習・モデルの学習と評価)に進みます。 ここで身につけたデータ操作が、その土台になります。