データ前処理(Data Preprocessing)は、機械学習プロジェクトの品質を大きく左右する基盤的な工程です。
現実のデータはしばしば欠損・外れ値・ノイズを含み、またモデルが直接扱えない形式になっているため、前処理によって 「モデルが学習しやすい形に整える」 必要があります。
ここでは、機械学習における主要な前処理工程を深掘りし、なぜそれが必要なのか、どのような手法があるのかを詳細に整理します。
欠損値処理(Missing Value Handling)
なぜ欠損は問題になるのか?
- 多くのアルゴリズムは欠損をそのまま扱えない
- 欠損の偏りがあると統計的にバイアスが生じる
- 欠損の要因自体が意味を持つ場合がある
欠損の発生メカニズムは
- MCAR(完全にランダム)
- MAR(観測された要因に依存)
- MNAR(観測されていない要因に依存)
に分類され、これにより解決策が変わります。
主な処理方法
削除
- 行削除:欠損がわずかな場合に有効
- 列削除:欠損が多すぎる特徴量を落とすケース
補完(Imputation)
- 平均値・中央値・最頻値補完
- 近傍法(kNN)
- 回帰による補完
- 多重代入法(MICE):統計的により厳密で再現性も高い
どの方法を選ぶかは、欠損の種類と、データの性質に依存します。
外れ値処理(Outlier Handling)
なぜ外れ値が重要なのか?
外れ値は、特に線形モデルや距離ベースの手法で学習結果を大きく歪めます。
ただし、タスクによっては外れ値自体が重要な意味を持つ(例:異常検知)場合もあるため、外れ値の扱いは文脈依存です。
外れ値の検出方法
- Zスコア(標準スコア)
- IQR(四分位範囲)法
- 箱ひげ図による可視化
- Isolation Forest や LOF などの異常検知アルゴリズム
外れ値の処理方法
- 削除
- 別値への丸め(Winsorizing)
- ログ変換や平方根変換で分布を正規化
- モデルで外れ値耐性のあるロバスト手法を使う
スケーリング(Scaling)
特徴量間でスケールが大きく異なると、モデルが特定の変数に過度に引きずられることがあります。
代表的なスケーリング手法
標準化(Standardization)
平均0・分散1の正規化
→ SVM / 線形モデルで効果的
正規化(Min-Max Scaling)
0〜1の範囲にスケーリング
→ ニューラルネットワークなどで多用
Robust Scaler
中央値とIQRを使用
→ 外れ値が多いデータに強い
カテゴリ変数のエンコーディング
機械学習モデルは数値データしか扱えないため、カテゴリ変数をエンコードする必要があります。
主な手法
One-Hot Encoding
カテゴリを0/1の複数列に展開
→ シンプルで汎用性が高い
→ 次元増加に注意
Label Encoding
整数に変換
→ 木系モデル(XGBoost, LightGBMなど)とは相性が良い
→ 非順序カテゴリには注意
Target Encoding
目的変数の平均値などでカテゴリを置換
→ 高精度モデルで強力
→ 過学習を避けるためには
- クロスバリデーション内での計算
- スムージング
が推奨される
テキストデータの前処理
テキストは構造化されていないため、機械学習向けに加工する必要があります。
基本的な前処理
- 記号・数字・HTMLタグなどの除去
- Tokenization(単語分割)
- ストップワード除去
- ステミング・レンマ化
特徴量化の方法
- Bag-of-Words
- TF-IDF
- Word2Vec / GloVe などの分散表現
- BERTなどのコンテキスト埋め込み(前処理がシンプルな傾向にある)
タスクやモデルに応じて適切な方法を選択します。
日付・時系列データの前処理
時系列データでは、時刻情報とその周期性・連続性が重要になります。
主な処理
- 日付型への変換
- 年、月、曜日、時間帯などの特徴量抽出
- ラグ特徴量(例:1日前、7日前の値)
- 移動平均などのローリング特徴量
- トレンド・季節性の抽出
注意点
未来データを誤って学習に取り込まないよう、情報リークの防止が重要です。
特徴量エンジニアリング(Feature Engineering)
前処理と密接に関連する工程で、モデル性能向上の鍵となります。
よく行われる処理
- 複数の変数の比率を計算
- 累積値の生成
- 過去◯期間の統計量(平均・分散など)
- 対数変換・平方根変換
- PCAなどによる次元削減
優れた特徴量エンジニアリングは、モデルそのものの変更以上に精度向上に寄与します。
データの分割(Train / Validation / Test)
前処理の前に、データ分割の方法が前処理手順に影響します。
分割の役割
- 訓練(Train):モデル学習
- 検証(Validation):ハイパーパラメータ調整
- テスト(Test):最終評価
時系列ではランダム分割を避ける
時系列データでは、時間順に分割することが必須です。
データリークを避ける前処理ルール
- スケーラー・エンコーダーの fit は訓練データのみで行い
- 検証・テストは transform のみ適用
前処理パイプライン(scikit-learn Pipeline)
パイプラインは、前処理とモデル学習を連結して管理する仕組みです。
利点
- データリーク防止
- 手続きの自動化
- 再現性の向上
- 本番運用での安定化
前処理を体系的に扱う上で非常に重要な機能です。
まとめ:前処理は機械学習の品質を決める最重要工程
前処理は、
- 欠損値
- 外れ値
- スケーリング
- エンコーディング
- テキスト処理
- 時系列加工
- 特徴量エンジニアリング
- データリーク対策
- パイプライン化
といった多くの工程から成り立っています。
そして本質は、「データをモデルが理解しやすい形に整えること」に尽きます。
前処理が正しければ、シンプルなモデルでも十分に高い性能を引き出すことができます。
以上、機械学習のデータの前処理についてでした。
最後までお読みいただき、ありがとうございました。
