Kaggle Tutorial

欠損値・外れ値の検出と方針

欠損値と外れ値の検出方法、代表的な対処方針、そしてデータリークを避ける適用順序を学びます。

欠損値を検出する#

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 四分位 Q1Q_1、第 3 四分位 Q3Q_3IQR=Q3Q1\text{IQR} = Q_3 - Q_1 とし、 Q11.5×IQRQ_1 - 1.5 \times \text{IQR} を下回る/Q3+1.5×IQRQ_3 + 1.5 \times \text{IQR} を上回る値を外れ値とみなす
  • z-score:平均からの標準偏差単位の距離。目安として絶対値が 3 を超えると外れ値
z=xμσz = \frac{x - \mu}{\sigma}
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 で見極めてから方針を決めます。

リークを避ける適用順序#

注意

補完の中央値や外れ値のしきい値は、訓練データだけから計算し、検証・テストへ適用します。 全データから統計量を計算すると、検証側の情報が漏れるデータリークになり、 スコアが過大評価されます。これらの前処理は交差検証の各 fold の内側で行うのが原則です。

理解度チェック#

Quiz外れ値の検出に使える代表的な手法はどれ?(複数選択)
複数選択

このトラックのまとめ#

  • NumPy のベクトル化と broadcasting で、数値処理を高速・簡潔に書ける
  • pandas で読み込み・選択・集計・結合・変換まで一通り扱える
  • 可視化と EDA で「効く特徴」「欠損・外れ値」「リークの兆候」を見つけられる
  • 前処理は訓練データから学び、fold の内側で適用してデータリークを防ぐ

次のステップ#

次トラック(L2)では、いよいよ機械学習の基礎(教師あり学習・モデルの学習と評価)に進みます。 ここで身につけたデータ操作が、その土台になります。