欠損データの検出と処理 | データ前処理の重要性 | Pythonによる機械学習を学ぶ

スポンサーリンク
スポンサーリンク
amazon
スマイルSALE
--:--:--
ad. 価格範囲を指定して商品を探せます

欠損データの検出と処理(削除、補完)

欠損データとは、データセット内で値が入力されていない部分のことです。機械学習では、欠損値をそのままにしておくと、モデルの学習時にエラーが発生したり、予測精度が低下したりすることがあります。

そのため、データ分析や機械学習を行う前に、欠損データを検出し、削除または補完によって適切に処理することが重要です。

欠損データの検出と処理を図で理解する

欠損データの検出と処理を図で理解する

欠損データとは

欠損データは、何らかの理由で値が存在しないデータです。アンケートの未回答、入力ミス、測定エラー、システム上の記録漏れなどによって発生します。

  • 値が空欄になっている
  • NaNとして扱われている
  • 一部の列だけ値が存在しない
  • データ収集時に記録されなかった

欠損データの検出

欠損データを処理するには、まずどの列や行に欠損があるかを確認します。Pythonでは、pandasを使って簡単に欠損値を検出できます。

欠損データの検出コード

import pandas as pd

# サンプルデータの作成
data = {
    'col1': [1, 2, None],
    'col2': [4, None, 6],
    'col3': [None, 8, 9]
}

df = pd.DataFrame(data)

# 欠損データの検出
print(df.isnull())

isnull()を使うと、欠損している部分がTrue、欠損していない部分がFalseとして表示されます。

欠損データの数を確認する

# 列ごとの欠損数を確認
print(df.isnull().sum())

このコードでは、各列に欠損値がいくつあるかを確認できます。

欠損データの主な処理方法

欠損データの処理には、大きく分けて削除と補完の2つがあります。

方法 内容 向いている場合
削除 欠損を含む行や列を取り除く 欠損が少ない場合
補完 欠損部分を別の値で埋める 欠損が多く、削除したくない場合

欠損データの削除

欠損値が少ない場合は、欠損を含む行や列を削除する方法が使えます。

欠損を含む行を削除する

# 欠損データを含む行を削除
df_dropped = df.dropna()

print(df_dropped)

dropna()を使うと、欠損値を含む行を削除できます。

欠損を含む列を削除する

# 欠損データを含む列を削除
df_dropped_columns = df.dropna(axis=1)

print(df_dropped_columns)

axis=1を指定すると、欠損値を含む列を削除できます。

欠損データの補完

欠損値が多い場合や、データを削除すると情報が大きく失われる場合は、欠損部分を別の値で補完します。

一定の値で補完する

# 欠損データを0で補完
df_filled = df.fillna(0)

print(df_filled)

この例では、すべての欠損値を0で補完しています。

平均値で補完する

# 各列の平均値で欠損を補完
df_filled_mean = df.fillna(df.mean(numeric_only=True))

print(df_filled_mean)

数値データでは、平均値や中央値を使って欠損値を補完することがあります。

中央値で補完する

# 各列の中央値で欠損を補完
df_filled_median = df.fillna(df.median(numeric_only=True))

print(df_filled_median)

外れ値の影響を受けにくくしたい場合は、平均値よりも中央値を使う方が適していることがあります。

前後の値で補完する

時系列データのように前後の値に意味がある場合は、直前または直後の値で補完する方法もあります。

# 前の値で補完
df_filled_ffill = df.ffill()

# 後の値で補完
df_filled_bfill = df.bfill()

ffill()は前の値で補完し、bfill()は後の値で補完します。

削除と補完の使い分け

状況 処理方法
欠損がごく少ない 行の削除
特定の列に欠損が多すぎる 列の削除を検討
数値データの一部が欠損 平均値・中央値で補完
時系列データ 前後の値で補完
削除するとデータ量が大きく減る 補完を検討

欠損データ処理の注意点

  • 欠損が発生した理由を確認する
  • 削除しすぎるとデータ量が不足する
  • 平均値補完はデータのばらつきを小さくすることがある
  • 時系列データでは順序を考慮して補完する
  • 訓練データとテストデータで処理方法を揃える

機械学習で欠損処理が重要な理由

多くの機械学習アルゴリズムは、欠損値をそのまま扱えません。欠損値が残っていると、学習時にエラーが発生したり、モデルが正しく学習できなかったりします。

  • 学習エラーを防ぐ
  • データ品質を高める
  • モデルの精度低下を防ぐ
  • 分析結果の信頼性を高める