忍者ブログ
統計、機械学習、AIを学んでいきたいと思います。 お役に立てば幸いです。

【機械学習の知識】データ前処理の基本手順

機械学習において、クレンジングによって汚れを取り除いたデータは、そのままではまだAIが効率よく学習できません。データの単位を揃えたり、コンピュータが理解できる形に翻訳したりして、モデルの性能を最大限に引き出すための加工プロセスが「データ前処理」です。

1. 【 概要 】

データ前処理とは、機械学習モデルの学習効率や予測精度を高めるために、データを最適な状態へと変換する一連の手順です。数値の桁数を揃えるスケーリングや、文字データを数値に変えるエンコーディング、データの分割など、実務で必須となる6つの主要なプロセスを整理します。


2. 【 基本手順 】

(1) データのスケーリングを行い、特徴量のスケールを統一する
(2) 特徴量のエンコーディングで、カテゴリデータを数値に変換する
(3) データをモデルの訓練データとテストデータへ分割する
(4) 次元削減を行い、重要な情報を残して特徴量の数を減らす
(5) 特徴量エンジニアリングで、予測に役立つ新しい特徴量を生成する
(6) データの平滑化やノイズ除去を行い、データのブレを抑える

3. 整理:各ステップの具体的な処理内容

データ前処理で行われる具体的な手法とポイントを、ステップごとに深く見ていきましょう。

【 各プロセスの具体的な処理内容 】

ステップ(1):データのスケーリング
「家賃(数万円)」と「面積(数十平米)」のように、単位や桁数が大きく異なる特徴量をそのまま扱うと、AIが桁数の大きな項目ばかりを重視してしまいます。これを防ぐためにスケールを統一します。
1.1 標準化:データの「平均を 0、分散を 1」にする変換です。外れ値の影響を受けにくい特徴があります。
1.2 正規化:データを「0 から 1 の範囲」に収める変換です。最小値が0、最大値が1になります。

ステップ(2):特徴量のエンコーディング
AIは「男性・女性」や「都道府県名」のような文字(カテゴリデータ)をそのまま計算できません。そのため、数値データに翻訳します。
2.1 One-Hotエンコーディング:カテゴリごとに新しい列を作り、該当箇所を 1、それ以外を 0(ダミー変数)にする変換です。
2.2 ラベルエンコーディング:「東京=0」「大阪=1」のように、各カテゴリに一意の整数を割り振る変換です。

ステップ(3):データの分割
作成したモデルの本当の実力を測るために、手元のデータを「学習用の訓練データ」と「検証用のテストデータ」の2つにあらかじめ分割しておきます。

ステップ(4):次元削減
データの項目数(特徴量の次元)が多すぎると、計算時間がかかり予測精度も落ちることがあります(次元の呪い)。主成分分析(PCA)などを用いて、重要な情報を保ったまま項目数をギュッと減らします。

ステップ(5):特徴量エンジニアリング
元のデータをもとに、「日付から『曜日』を取り出す」「購入額と回数から『顧客単価』を作る」といった、モデルの性能向上に直結する新しい項目を人間の知見で生成します。

ステップ(6):データの平滑化やノイズ除去
株価やセンサーデータなどの時系列データに含まれる突発的なギザギザ(ノイズ)を除去します。移動平均などを利用してデータをなめらかにすることで、全体のトレンドを捉えやすくします。

4. 関連して押さえたい「前処理における情報漏洩(データリーケージ)の罠」

データ前処理を行う際、機械学習の初心者が最も注意しなければならないのが「データリーケージ(情報漏洩)」という罠です。

例えば、ステップ1のスケーリング(標準化や正規化)を行う際、データを「訓練データ」と「テストデータ」に分割する前に、データ全体に対して平均値や最大値を計算してスケーリングを適用してしまうケースが多々あります。

これを行ってしまうと、本来はモデルが「知らないはず」のテストデータの情報(平均値など)が、訓練データ側に漏れ出して(リークして)しまいます。その結果、手元での検証スコアは異常に高くなるものの、いざ実戦で未知のデータを予測させると全く当たらないモデルになってしまいます。前処理の計算は、必ず「データを分割した後に、訓練データの基準を使って適用する」という正しい手順を徹底しましょう。


5. 補足:Python(Scikit-learn)での代表的な前処理クラス

実際の機械学習開発(Python)で、データ前処理を行う際によく使われるScikit-learnの代表的なクラスをまとめました。
実務コードを読む際のカンペとしてお役立てください。

# 1. データのスケーリング
from sklearn.preprocessing import StandardScaler # 標準化
from sklearn.preprocessing import MinMaxScaler # 正規化

# 2. 特徴量のエンコーディング
from sklearn.preprocessing import OneHotEncoder # One-Hot
from sklearn.preprocessing import LabelEncoder # ラベル

# 3. データの分割
from sklearn.model_selection import train_test_split # 訓練/テスト分割

# 4. 次元削減
from sklearn.decomposition import PCA # 主成分分析

6. まとめ

データサイエンスや機械学習の現場において、モデル構築の成否を分ける最重要フェーズが、この「データ前処理」です。スケーリング、エンコーディング、分割、次元削減、特徴量エンジニアリング、平滑化という6つの基本手順それぞれの目的と処理内容をしっかりと理解し、機械学習モデルが最も力を発揮できる形へとデータを美しく仕立て上げられるようになりましょう!


PR