特徴量(フィーチャー)とターゲットの理解
この記事では、機械学習における「特徴量(フィーチャー)」と「ターゲット」の基本的な概念について解説します。機械学習モデルは、特徴量を入力として受け取り、ターゲットを予測するように学習します。特徴量とターゲットの関係を理解することは、機械学習を学ぶうえで最も基本となる部分です。
この記事では、住宅価格の予測を例にしながら、特徴量とターゲットの違い、データの分け方、特徴量エンジニアリングの考え方について、Pythonの実装例も交えて説明します。
特徴量とターゲットの関係を図で理解する

特徴量(フィーチャー)とは?
特徴量(Feature)とは、機械学習モデルに入力するデータのことです。モデルは特徴量をもとにして、予測や分類に必要なパターンを学習します。
たとえば、住宅価格を予測するモデルの場合、次のような情報が特徴量になります。
- 家の面積
- 部屋の数
- 築年数
- 駅からの距離
- 立地
これらの情報を入力として与えることで、モデルは「面積が広いほど価格が高くなりやすい」「駅から近いほど価格が高くなりやすい」といった関係を学習します。
特徴量の種類
特徴量にはさまざまな種類があります。データの種類に応じて、適切な前処理や変換が必要になります。
| 特徴量の種類 | 説明 | 例 |
|---|---|---|
| 数値特徴量 | 数値として扱える特徴量です。 | 年齢、収入、面積、距離 |
| カテゴリ特徴量 | いくつかの分類に分かれる特徴量です。 | 性別、国籍、職業、地域 |
| テキスト特徴量 | 文章や文字列をもとにした特徴量です。 | レビュー本文、商品説明、問い合わせ内容 |
| 画像特徴量 | 画像から得られる特徴量です。 | ピクセル情報、輪郭、色、形状 |
| 日時特徴量 | 日付や時刻から得られる特徴量です。 | 月、曜日、時間帯、季節 |
ターゲットとは?
ターゲット(Target)とは、モデルが予測したい値や分類したいラベルのことです。日本語では、目的変数や正解データと呼ばれることもあります。
住宅価格を予測する場合、ターゲットは「住宅価格」です。メールをスパムかどうか分類する場合、ターゲットは「スパム」または「通常メール」というラベルになります。
- 回帰問題:住宅価格、売上、気温、株価などの数値を予測する
- 分類問題:猫か犬か、スパムか通常メールか、購入するかしないかを分類する
機械学習では、訓練データに含まれる特徴量とターゲットの関係を学習し、新しいデータに対してターゲットを予測します。
ターゲットの種類
| ターゲットの種類 | 説明 | 例 |
|---|---|---|
| 数値ターゲット | 回帰問題で予測する連続的な数値です。 | 住宅価格、売上、気温、株価 |
| カテゴリターゲット | 分類問題で予測するカテゴリラベルです。 | スパム/通常メール、猫/犬、購入する/しない |
特徴量とターゲットの関係
特徴量とターゲットの関係は、機械学習の基本構造そのものです。
簡単に表すと、次のようになります。
特徴量(入力) → モデル → ターゲット(予測したい値)
たとえば、住宅価格予測では次のように考えます。
| 特徴量 | 面積、部屋数、築年数、駅からの距離 |
|---|---|
| ターゲット | 住宅価格 |
モデルは、特徴量とターゲットの関係を学習します。そして、新しい住宅データが与えられたときに、その住宅価格を予測します。
Pythonで特徴量とターゲットを分ける例
以下は、住宅の面積と部屋数を特徴量として、住宅価格をターゲットにする簡単な例です。
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
# サンプルデータ
data = pd.DataFrame({
'area': [50, 60, 70, 80, 90],
'bedrooms': [1, 2, 3, 3, 4],
'price': [300, 400, 500, 550, 650]
})
# 特徴量とターゲットに分ける
X = data[['area', 'bedrooms']]
y = data['price']
# 訓練データとテストデータに分割
X_train, X_test, y_train, y_test = train_test_split(
X,
y,
test_size=0.2,
random_state=42
)
# 線形回帰モデルを作成
model = LinearRegression()
# 学習
model.fit(X_train, y_train)
# 予測
y_pred = model.predict(X_test)
# 評価
mse = mean_squared_error(y_test, y_pred)
print(f'Mean Squared Error: {mse}')
この例では、areaとbedroomsを特徴量、priceをターゲットとして扱っています。
Xにはモデルに入力する特徴量を入れ、yには予測したいターゲットを入れます。このように、機械学習では特徴量をX、ターゲットをyとして表すことが一般的です。
特徴量エンジニアリングとは?
実際のデータ分析では、元の特徴量をそのまま使うだけでは十分な精度が出ないことがあります。そこで重要になるのが、特徴量エンジニアリングです。
特徴量エンジニアリングとは、既存のデータを加工、変換、組み合わせることで、モデルが学習しやすい特徴量を作成する工程です。
たとえば、次のような処理があります。
- 欠損値を補完する
- カテゴリデータを数値に変換する
- 数値データを標準化・正規化する
- 日付データから月や曜日を抽出する
- 複数の特徴量を組み合わせて新しい特徴量を作る
特徴量エンジニアリングの主な処理
| 処理 | 内容 |
|---|---|
| 欠損値の処理 | 欠けている値を削除したり、平均値や中央値などで補完したりします。 |
| カテゴリデータの変換 | 文字列のカテゴリを、One-Hot Encodingなどで数値に変換します。 |
| 標準化・正規化 | 特徴量のスケールをそろえ、モデルが学習しやすい形にします。 |
| 新しい特徴量の作成 | 特徴量同士を組み合わせたり、日付から曜日を抽出したりして、新しい情報を作ります。 |
Pythonでの標準化の例
from sklearn.preprocessing import StandardScaler
# 標準化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
print(X_scaled)
このコードでは、StandardScalerを使って特徴量を標準化しています。
標準化を行うと、平均が0、標準偏差が1になるように特徴量が変換されます。特徴量ごとのスケール差が大きい場合、標準化によってモデルが学習しやすくなることがあります。
特徴量とターゲットを扱うときの注意点
特徴量とターゲットを設定するときは、単に列を分けるだけでなく、予測の目的に合っているかを確認することが重要です。
ターゲットに近すぎる情報を特徴量に入れない
予測時点では本来使えない情報を特徴量に含めると、実際よりも高い精度に見えてしまいます。これをデータリークと呼びます。
たとえば、購入前に購入金額を予測するモデルで、購入後にしか分からない情報を特徴量に含めてはいけません。
特徴量の意味を確認する
特徴量が多ければよいというわけではありません。予測に関係のない特徴量を大量に入れると、モデルが不安定になったり、過学習しやすくなったりします。
特徴量を選ぶときは、「この情報はターゲットを予測するために意味があるか」を考えることが大切です。
訓練データとテストデータで同じ処理を行う
標準化やカテゴリ変換などの前処理は、訓練データとテストデータで一貫して行う必要があります。
ただし、平均や標準偏差などを計算する処理では、テストデータの情報を学習時に使わないよう注意が必要です。通常は、訓練データで前処理の基準を学習し、その基準をテストデータに適用します。
まとめ
特徴量とターゲットは、機械学習モデルを構築するうえで基本となる要素です。
- 特徴量は、モデルに入力する情報
- ターゲットは、モデルが予測したい値やラベル
- 回帰問題では数値ターゲットを予測する
- 分類問題ではカテゴリターゲットを予測する
- 特徴量エンジニアリングによって、モデルの性能が向上する場合がある
- データリークを避け、予測時点で使える情報だけを特徴量にすることが重要
機械学習では、どのアルゴリズムを使うかだけでなく、どの特徴量を入力し、何をターゲットとして予測するのかを正しく設計することが重要です。特徴量とターゲットの役割を理解することで、機械学習モデルの仕組みをより深く理解できるようになります。