📊 データが命!良いAIを作るためのデータ前処理入門【猿でもわかるAI・機械学習入門シリーズ #5】🐵🔰
みなさん、こんにちは!✨ 機械学習の基礎を少しずつ理解してきましたか?
前回は「Pythonで機械学習モデルを作る方法」を紹介しましたが、今回は 「AIの精度を上げるために最も重要な工程」 である データ前処理(Preprocessing) について解説します!
機械学習の世界では、よく 「Garbage in, Garbage out(ゴミを入れたらゴミが出る)」 という言葉が使われます。つまり、データの質が悪いと、どんなに高度なアルゴリズムを使っても良い結果は得られません! 🚨
では、どうやって「質の良いデータ」にすればいいのか?本記事で データ前処理の基本テクニック を学んでいきましょう!💡
📌 1. データ前処理って何?
データ前処理とは、 「機械学習モデルに適した形にデータを整える作業」 のことです。
実際のデータは 欠損値(Missing Values) があったり、異常値(Outliers) が含まれていたり、フォーマットがバラバラ だったりします。そのまま学習させると、AIは正しく学習できません💥
✨ データ前処理の主な目的
✅ ノイズを減らして、AIが学習しやすいデータにする
✅ データのバラつきを統一して、予測の精度を上げる
✅ 不要なデータを除外し、効率の良い学習を実現する
🔧 2. 実践!Pythonでデータ前処理
🎯 ステップ1:データを読み込む
まずは、前処理を行うためのサンプルデータを用意しましょう。
import pandas as pd
# サンプルデータを作成
data = {
"年齢": [25, 30, 35, None, 45, 50, 120, 40, None, 29], # Noneは欠損値
"収入": [300, 400, None, 600, 800, 1000, 5000, 750, 700, 380], # Noneは欠損値
"職業": ["会社員", "自営業", "会社員", "会社員", "公務員", "自営業", "会社員", None, "公務員", "会社員"]
}
df = pd.DataFrame(data)
print(df)
📌 このデータには、欠損値(None)や異常値(120歳の年齢)が含まれています!
🎯 ステップ2:欠損値の処理
欠損値を処理する方法はいくつかありますが、代表的な方法は 「削除」 と 「補完(埋める)」 の2つです。
📝 方法1:欠損値を削除する
df_cleaned = df.dropna() # 欠損値を含む行を削除
print(df_cleaned)
📌 ただし、削除するとデータが減ってしまうので注意!⚠️
📝 方法2:平均値や中央値で埋める
df["年齢"].fillna(df["年齢"].median(), inplace=True) # 年齢の欠損値を中央値で埋める
df["収入"].fillna(df["収入"].mean(), inplace=True) # 収入の欠損値を平均値で埋める
print(df)
📌 平均値・中央値で補完することで、データのバランスを維持できます!
🎯 ステップ3:異常値の処理
例えば、「120歳」というデータは明らかに異常値 ですよね?このような値を処理する方法を見ていきましょう!
📝 方法1:閾値(しきい値)を決めて削除
df = df[(df["年齢"] >= 18) & (df["年齢"] <= 80)] # 年齢が18〜80歳の範囲に収まるデータのみ残す
print(df)
📌 現実的な範囲を決めて、異常値を排除しましょう!
📝 方法2:標準偏差を使って異常値を検出
import numpy as np
mean = df["収入"].mean()
std_dev = df["収入"].std()
# 平均値±2標準偏差の範囲内に収まるデータのみ残す
df = df[(df["収入"] >= mean - 2 * std_dev) & (df["収入"] <= mean + 2 * std_dev)]
print(df)
📌 統計的に異常値を検出する方法もあります!
🎯 ステップ4:カテゴリデータの処理
「職業」のように、テキスト(カテゴリデータ) を含むデータも機械学習ではそのまま使えません。数値に変換する必要があります!
📝 方法1:ラベルエンコーディング(Label Encoding)
from sklearn.preprocessing import LabelEncoder
encoder = LabelEncoder()
df["職業"] = encoder.fit_transform(df["職業"])
print(df)
📌 「会社員」→0、「自営業」→1、「公務員」→2 のように数値に変換!
📝 方法2:ワンホットエンコーディング(One-Hot Encoding)
df = pd.get_dummies(df, columns=["職業"])
print(df)
📌 「職業_会社員」「職業_自営業」「職業_公務員」といった列ができ、それぞれ0 or 1に変換されます!
🎯 まとめ
✅ データ前処理は、AIの精度を大きく左右する重要なステップ!
✅ 欠損値は「削除」か「補完(平均・中央値)」で処理
✅ 異常値は「閾値を設定」または「標準偏差」を使って検出・除去
✅ カテゴリデータは「ラベルエンコーディング」や「ワンホットエンコーディング」で数値化
次回は 「機械学習モデルの学習と評価の流れを理解しよう」 を解説します!📌 お楽しみに!🎉
それでは、またね~👋✨
📢 質問や感想はコメント欄へ!
📝 シリーズ記事一覧はこちら → [リンク]
📍 X(Twitter)もフォローしてね → [@あなたのアカウント]