データの前処理:欠損値処理、データのクリーニング【AI入門シリーズ第8回】
今回は少し手を動かしてみましょう!忙しい方は読むだけでもかなりタメになります!
前回の記事はこちらからご覧ください。
AIモデルの精度を高めるためには、データそのものの質を向上させる「前処理」が非常に重要です。
データには、しばしば欠損値や異常値、ノイズが含まれており、これらをそのままモデルに入力すると、正確な予測が得られなくなります。
今回は、欠損値処理やデータクリーニングの基本的な方法について解説していきます。
欠損値処理:データの「穴」を埋める
データの欠損値は、AIモデルが学習するうえで障害となる可能性があるため、まずは適切に処理を行う必要があります。
欠損値処理にはいくつかの方法があり、データやプロジェクトの特性に応じて適した方法を選ぶことが大切です。
欠損値の確認
まず、データに欠損値があるかどうか確認してみましょう。
PythonのPandasライブラリを使えば簡単に確認できます。
import pandas as pd
# サンプルデータを作成
data = {'Name': ['Alice', 'Bob', 'Charlie', None],
'Age': [24, None, 22, 30],
'Score': [88, 92, None, 95]}
df = pd.DataFrame(data)
# 欠損値の確認
print(df.isnull().sum())このコードは各列にいくつの欠損値があるかを出力します。
欠損値処理の方法
1. 削除
データの一部を削除する方法です。欠損値が少ない場合には適切ですが、重要な情報が欠損している場合は慎重に検討する必要があります。
# 欠損値が含まれる行を削除
df_dropped = df.dropna()2. 平均値や中央値で補完
数値データの場合、列の平均値や中央値で補完するのが一般的です。これにより、データのばらつきが抑えられ、学習の安定性が向上します。
# 平均値で欠損値を補完
df_filled = df.fillna(df.mean())3. 前後のデータで補完(前方・後方補完)
時系列データなど、前後の値が影響する場合には、前後のデータで補完する方法もあります。
# 前方補完
df_ffill = df.fillna(method='ffill')4. 予測モデルで補完
欠損データを予測モデルで補完する方法です。例えば、他の特徴量を使って欠損値を予測することで、より精度の高いデータセットを構築できます。
データのクリーニング:ノイズや異常値を取り除く
データクリーニングとは、データ内の異常値や不要なデータを除去し、学習に適した状態にするプロセスです。これにより、モデルが誤った学習を行うのを防ぎ、精度を向上させます。
異常値の検出と処理
異常値は、通常の範囲から大きく外れた値を指します。例えば、年齢が200歳のような明らかに現実的でない値や、集計ミスで発生した極端な数値などがこれに該当します。
1. 統計的手法で検出
平均や標準偏差を利用して、ある範囲を逸脱した値を異常値とみなす方法です。
# 統計的手法で異常値を検出
mean = df['Score'].mean()
std_dev = df['Score'].std()
outliers = df[(df['Score'] < mean - 3 * std_dev) | (df['Score'] > mean + 3 * std_dev)]
print("異常値:", outliers)2. 視覚化で検出
箱ひげ図や散布図を用いて視覚的に異常値を検出する方法です。データの傾向を見ながら異常値を確認することができます。
import matplotlib.pyplot as plt
import seaborn as sns
sns.boxplot(x=df['Score'])
plt.show()3. 異常値の処理方法
• 削除:極端に外れた値が含まれる行を削除する
• 補正:平均値や中央値で置き換える
• モデル:異常値を扱う専用のモデル(異常検知モデルなど)を使う
カテゴリデータの処理
テキストデータやカテゴリデータ(例:性別や国の名前など)は、そのまま数値として扱えないため、AIが理解できる形式に変換する必要があります。これには以下の方法が一般的です。
1. ラベルエンコーディング
カテゴリごとに異なる数値を割り当てる方法です。
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
df['Name'] = le.fit_transform(df['Name'].astype(str))2. ワンホットエンコーディング
各カテゴリを個別の列に変換し、該当する場合に「1」、そうでない場合に「0」を割り当てる方法です。カテゴリが多い場合には、Pandasのget_dummies関数が便利です。
df = pd.get_dummies(df, columns=[‘Name’])
データスケーリング:標準化と正規化
数値データのスケール(値の範囲)が異なると、学習に影響を与える場合があります。特に、数値が大きく異なる特徴量が存在する場合、データスケーリングが重要です。
• 標準化:平均を0、標準偏差を1にする
• 正規化:値を0~1の範囲に収める
from sklearn.preprocessing import StandardScaler, MinMaxScaler
scaler = StandardScaler()
df[['Age', 'Score']] = scaler.fit_transform(df[['Age', 'Score']])まとめ
データの前処理は、AIモデルが高い精度で予測を行うための重要なステップです。
特に、欠損値の補完や異常値の処理、カテゴリデータの変換とスケーリングなどを適切に行うことで、データの質が向上し、学習の効率も高まります。
