数値変換 — スケーリング・ビニング・対数・交互作用
数値特徴のスケーリング、ビニング、対数/Box-Cox 変換、交互作用特徴の作り方を学びます。
スケーリング#
特徴ごとに大きさ(スケール)が違うと、線形モデルや距離ベースの手法が偏ります。
from sklearn.preprocessing import StandardScaler
X_scaled = StandardScaler().fit_transform(X[num_cols])メモ
勾配ブースティング(GBDT)は分割ベースなのでスケーリング不要です。スケーリングが効くのは 主に線形モデル・SVM・k近傍法・ニューラルネットです。
歪んだ分布を整える#
裾の長い分布は対数変換や Box-Cox / Yeo-Johnson で対称に近づけると、線形モデルが扱いやすくなります。
import numpy as np
df["Fare_log"] = np.log1p(df["Fare"]) # log(1 + x)ビニング(離散化)#
ビニングは連続値を区間に区切ってカテゴリ化します。非線形な関係の表現や外れ値の緩和に有効です。
df["Age_bin"] = pd.cut(df["Age"], bins=[0, 12, 18, 40, 60, 200],
labels=["child", "teen", "adult", "middle", "senior"])交互作用特徴#
複数の特徴を掛け合わせる/比を取ると、単独では捉えられない関係を表現できます。
df["Fare_per_person"] = df["Fare"] / (df["SibSp"] + df["Parch"] + 1)
df["Pclass_x_Sex"] = df["Pclass"].astype(str) + "_" + df["Sex"]ヒント
交互作用は無数に作れますが、闇雲に増やすと過学習やノイズの原因になります。 ドメイン知識で「意味のある組み合わせ」に絞り、CV で効果を確認しましょう。
理解度チェック#
次のステップ#
次は、日時・周期・地理・集約といった、構造を持つデータからの特徴量生成を学びます。