コンテンツにスキップ

5.5.1 特徴量エンジニアリングロードマップ:学びやすいデータにする

特徴量エンジニアリングは、入力をモデルにとって有用で、安定し、安全な形にする作業です。モデルの問題に見えるものが、実は特徴量の問題であることはよくあります。

特徴量エンジニアリングロードマップ

特徴量エンジニアリング章フロー図

列を理解前処理作成選択Pipeline 化
手順最初の行動
理解数値、カテゴリ、テキスト、日付、target 列を分ける
前処理スケーリング、エンコード、欠損補完
作成比率、カウント、日付、交互作用を作る
選択役に立たない特徴量やリーク特徴量を外す
Pipeline前処理を再現可能にする

feature_first_loop.py を作り、pandasscikit-learn をインストールしてから実行します。

import pandas as pd
from sklearn.compose import ColumnTransformer
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import OneHotEncoder, StandardScaler
X = pd.DataFrame(
{
"age": [22, 35, 47, 52, 28, 41],
"city": ["A", "B", "A", "C", "B", "C"],
"visits": [2, 6, 5, 9, 3, 7],
}
)
y = [0, 1, 1, 1, 0, 1]
preprocess = ColumnTransformer(
transformers=[
("num", StandardScaler(), ["age", "visits"]),
("cat", OneHotEncoder(handle_unknown="ignore"), ["city"]),
]
)
pipe = Pipeline([("preprocess", preprocess), ("model", LogisticRegression())])
pipe.fit(X, y)
print("pipeline_steps:", list(pipe.named_steps))
print("training_accuracy:", round(pipe.score(X, y), 3))

出力:

pipeline_steps: ['preprocess', 'model']
training_accuracy: 1.0

このデータは小さすぎるため、本物の評価には使えません。ここで見るのは、前処理とモデルを一緒に運ぶ流れです。

このページを終えたら、この evidence card を残します。

特徴状態
生の列、型、欠損値、スケール、およびターゲットとの関係
変換
前処理、構築、選択、またはパイプライン手順
出力
transformされたfeature table、pipeline object、scoreの変化、または選択された特徴量
失敗確認
リーク、不一致な train/test 変換、高カーディナリティの落とし穴、または無意味な特徴
期待される成果
前後比較とメトリクスへの影響を含む特徴量パイプラインの証拠
順番読む練習すること
15.5.2 特徴量理解特徴量タイプ、target、リークリスク
25.5.3 データ前処理スケーリング、エンコード、欠損値
35.5.4 特徴量作成比率、ビン分割、日付、交互作用
45.5.5 特徴量選択ノイズ、冗長性、リークを減らす
55.5.6 Pipeline再現可能な前処理と学習

特徴量タイプを列挙し、前処理 Pipeline を1つ作り、train/test の流れの外で前処理するとリークにつながる理由を説明できれば合格です。

確認の考え方と解説
  1. まず特徴量タイプ、欠損値、スケール差、カテゴリ数、target リークの可能性を列挙します。
  2. 前処理は Pipeline または ColumnTransformer に入れます。train/test に同じ変換を適用しつつ、test 情報の混入を避けられます。
  3. 有用な特徴量変更には、変換後の列、スコア変化、エラーサンプルの変化、またはその特徴量を採用しない理由といった前後証拠が必要です。