Back to Blog
2025.11.24 AI開発 ad-logos

特徴量エンジニアリングとは?実践をもとに手法を徹底解説

1. はじめに

機械学習において、特徴量エンジニアリングは「データの調理」に例えられます。特に、シンプルで解釈性の高いアルゴリズムである線形回帰は、予測が入力特徴量の重み付けされた合計として表現されるため、入力データに厳しい制約を求めます。そのため、特徴量エンジニアリングの良し悪しがモデルの成否に直結します。

本記事では、カリフォルニア住宅価格データセット(California Housing)を使用し、特徴量エンジニアリングを適用することで、いかに線形回帰の予測精度が向上するかの実証を通して、初心者でも特徴エンジニアリングが理解できるように説明していきます。

2. 分析について

2.1. 使用データセットについて

今回使用するカリフォルニア住宅価格データセットは、1990年の国勢調査データに基づき、カリフォルニア州の各地域ブロック(ブロックグループ)の情報を集計したものです。この予測タスクの目的は、与えられた地域情報から住宅価格の中央値(median_house_value)を予測することです。

今回のデータセットは以下の特徴量を含みます。

特徴量名内容データ型特徴
longitude経度数値位置情報
latitude緯度数値位置情報
housing_median_age住宅の築年数(中央値)数値住宅の「新しさ」を示す。
total_rooms総部屋数数値地域ブロック内の合計の部屋数。
total_bedrooms総寝室数数値地域ブロック内の合計の寝室数。
population総人口数値地域ブロック内の合計人口。
households総世帯数数値地域ブロック内の合計世帯数。
median_income所得中央値数値地域ブロックの世帯所得中央値。
ocean_proximity海洋近接度カテゴリ海との距離を示すカテゴリ(例: ‘NEAR BAY’, ‘INLAND’)。
median_house_value住宅価格中央値数値目的変数(予測対象)

2.2. 分析指標について

今回の分析の指標は以下の2つです。

RMSE: 予測誤差の大きさ。元の価格スケールでの平均的な誤差を示すため、値が小さいほど良い。

R²スコア: モデルがデータの変動をどれだけ説明できているか。0.0から1.0の間で、1.0に近いほどモデルの説明力が高いことを示す。

要するに、RMSEをなるべく下げ、R²をなるべく上げるのが今回の目的です。

3.特徴量変換・スケーリング

3.1. 目的変数(Y)の変換

線形回帰のルールは、「どの価格帯の住宅に対しても、予測誤差のバラツキ(分散)が均一であること」を求めます。

しかし、今回の価格データでは、以下に示す通り、価格の安い住宅では誤差が小さく、価格の高い住宅では誤差が極端に大きくなります。これは統計的な仮定を破る行為であり、モデルは不安定になり、予測の信頼性が低下します。

image.png

そのため、これを対数変換します。対数変換の式としては、もとの変数yに対して、log(1+y)を採用します。
そうするとグラフは以下のようになり、分散が均一になります。(一番右のパラメーターの量が大きいのは、もとのデータの上限に基づくものであり、今回は気にしないものとします。)

image.png

この時のスコアは以下のようになります。

Model (モデル)RMSE (誤差)R² スコア
Baseline (Y変換のみ)89,039.30.395

R²スコアはまだ低く、精度が低いことがわかります。

3.2. 入力特徴量(x)の変換・スケーリング

精度が低い要因として、特徴量のスケールや分布が一様でないことがあげられます。
そのため、以下の2つの施策を行います。

1. 対数変換の適用

median_income(所得中央値)のように極端に右に歪んだ分布を持つ特徴量は、線形回帰の「線形性」の仮定(XとYの関係が直線的であること)を満たしません。
そのため、これらのいくつかの特徴量に対して、yと同じように変換を施します。

2. 標準化の適用

線形回帰の学習メカニズムは、数値の大きさに敏感です。例えば、「人口」(数千人)と「築年数」(数十)のスケールが大きく異なると、「人口」の特徴量ばかりがモデルの重みを大きく左右してしまいます。

そのため、すべての数値特徴量を平均0、標準偏差1に変換し、すべての特徴量を均等なスケールに揃えます。

これらを施したときと、yのみを対数変換したときのスコアの比較は以下のようになります。

ModelRMSE (誤差)R² スコア
y変換のみ89,039.30.395
x変換後72,849.00.595

精度が上がっていることがわかります。

4. 特徴量抽出・選択

元の特徴量である total_rooms(総部屋数)や population(総人口)は、地域ブロック全体の絶対数を示しています。線形回帰の観点から見ると、これらの絶対数だけでは、個々の住環境の質や混雑度という重要な文脈情報が欠けています。

住宅の価格を正確に予測するためには、その地域ブロックの規模ではなく、「1世帯あたりのリソース(部屋数)」や「1世帯あたりの負荷(人口)」といった密度情報が必要です。そのため、最も重要な指標である世帯数(households)を分母として使用し、以下の3つの比率特徴量を抽出しました。

特徴量名内容特徴
BedrmsPerHousetotal_bedrooms / households世帯あたりの寝室数
RoomsPerHousetotal_rooms / households世帯あたりの部屋数
AveOccupancypopulation / households世帯あたりの人口

代わりに、total_bedrooms、total_rooms、population、householdsは特徴量から削除しました。

これらの新しい特徴量も、3.2. と同様に対数変換、スケーリングを行い、学習、推論した結果は以下のようになりました。

ModelRMSE (誤差)R² スコア
y変換のみ89,039.30.395
x変換後72,849.00.595
特徴量作成後67737.70.650

さらに精度が上がっていることがわかります。

5. まとめ:

今回の分析において、線形回帰の性能を最大化するために、以下の特徴量エンジニアリングを行いました。

対数変換: 線形回帰の安定性確保のため、まず変数の歪みを対数変換で矯正し、モデルの統計的な妥当性を確立しました。

スケーリング: 特徴量のスケールを統一し、学習の安定性と特徴量間の公平性を確保しました。
特徴量の作成: 特徴量抽出によって、元の絶対数(total_rooms, populationなど)から価格予測に直結する密度情報(RoomsPerHouse, AveOccupancyなど)を生成しました。

これらによって、誤差は21300ドルほど小さくなりました。

これは、住宅価格の予想を日本円で300万円以上、正確に予測できたことになり、特徴量エンジニアリングが重要であることがわかりました。