新しい特徴量の作成 | 特徴量エンジニアリング | Pythonによる機械学習を学ぶ

スポンサーリンク
スポンサーリンク
amazon
スマイルSALE
--:--:--
~
ad. 価格範囲を指定して商品を探せます

新しい特徴量の作成

特徴量エンジニアリングは、機械学習モデルの性能を高めるために重要な工程です。特に、既存のデータを加工したり組み合わせたりして新しい特徴量を作成することで、モデルがデータの傾向をより捉えやすくなる場合があります。

この記事では、新しい特徴量を作成する基本的な考え方と、代表的な作成方法、Pythonを使った実装例、注意点について解説します。

新しい特徴量の作成を図で理解する

新しい特徴量の作成を図で理解する

新しい特徴量の作成とは?

新しい特徴量の作成とは、元のデータをそのまま使うだけでなく、計算、変換、抽出、組み合わせなどによって、モデルにとって有用な情報を追加することです。

たとえば、次のような処理が該当します。

  • 価格と数量から売上を作成する
  • 日付データから月や曜日を抽出する
  • 身長と体重からBMIを計算する
  • 住所から都道府県や地域を取り出す
  • 複数のカテゴリを組み合わせて新しい分類を作る

元のデータだけでは分かりにくい情報でも、新しい特徴量として表現することで、モデルがパターンを学習しやすくなることがあります。

なぜ新しい特徴量が重要なのか?

機械学習モデルは、与えられた特徴量をもとに予測を行います。そのため、どのような特徴量を与えるかによって、モデルの性能は大きく変わります。

たとえば、売上予測を行う場合、「価格」と「数量」を別々に使うだけでなく、「価格 × 数量」で求めた売上金額を特徴量として追加すると、モデルにとってより意味のある情報になる場合があります。

このように、特徴量エンジニアリングでは、単にデータを増やすのではなく、予測に役立つ形へ情報を整理することが重要です。

新しい特徴量を作成する代表的な方法

新しい特徴量を作成する方法は、データの種類や分析目的によって異なります。ここでは、代表的な手法を紹介します。

数値データを計算して作成する

数値データ同士を計算して、新しい特徴量を作成する方法です。シンプルですが、実務でもよく使われます。

たとえば、次のような特徴量が考えられます。

  • 価格 × 数量 = 売上
  • 身長と体重からBMIを計算
  • 収入と支出から貯蓄額を計算
  • 購入金額 ÷ 購入回数 = 平均購入単価
import pandas as pd

# サンプルデータ
data = {
    'Price': [100, 200, 150],
    'Quantity': [1, 3, 2]
}

df = pd.DataFrame(data)

# 売上を新しい特徴量として作成
df['Sales'] = df['Price'] * df['Quantity']

print(df)

この例では、PriceとQuantityを掛け合わせて、Salesという新しい特徴量を作成しています。価格と数量を個別に扱うだけでなく、売上という指標を追加することで、モデルが購買規模を捉えやすくなります。

日付や時刻から情報を抽出する

日付や時刻のデータには、多くの情報が含まれています。単なる日付文字列として扱うのではなく、月、曜日、時間帯、季節などに分解することで、予測に役立つ特徴量を作成できます。

たとえば、次のような特徴量が考えられます。

  • 月
  • 曜日
  • 週末かどうか
  • 祝日かどうか
  • 時間帯
  • 季節
import pandas as pd

# サンプルデータ
data = {
    'Date': ['2022-01-01', '2022-02-15', '2022-03-10']
}

df = pd.DataFrame(data)

# 日付型に変換
df['Date'] = pd.to_datetime(df['Date'])

# 月と曜日を抽出
df['Month'] = df['Date'].dt.month
df['DayOfWeek'] = df['Date'].dt.dayofweek

print(df)

このコードでは、日付データから月と曜日を取り出しています。売上予測、来店予測、アクセス数予測などでは、曜日や月の影響が大きい場合があります。

カテゴリカルデータを組み合わせる

カテゴリカルデータとは、国、商品名、性別、地域、会員ランクなど、分類を表すデータのことです。

複数のカテゴリを組み合わせることで、単独の特徴量では表現できない関係を表せる場合があります。

import pandas as pd

# サンプルデータ
data = {
    'Country': ['USA', 'Canada', 'USA'],
    'Product': ['A', 'B', 'A']
}

df = pd.DataFrame(data)

# 国と商品の組み合わせを作成
df['Country_Product'] = df['Country'] + '_' + df['Product']

print(df)

この例では、CountryとProductを組み合わせて、Country_Productという特徴量を作成しています。

たとえば、同じ商品であっても国によって売れ方が異なる場合、このような組み合わせ特徴量が有効になることがあります。

フラグ特徴量を作成する

条件を満たすかどうかを0または1で表す特徴量を作成することもあります。これをフラグ特徴量と呼びます。

たとえば、次のような特徴量です。

  • 購入金額が1万円以上かどうか
  • 週末かどうか
  • 初回購入かどうか
  • キャンペーン期間中かどうか
import pandas as pd

data = {
    'Sales': [5000, 12000, 8000]
}

df = pd.DataFrame(data)

# 売上が1万円以上かどうか
df['HighSalesFlag'] = (df['Sales'] >= 10000).astype(int)

print(df)

このようなフラグ特徴量は、特定の条件が予測に大きく影響する場合に有効です。

集約特徴量を作成する

ユーザー単位、商品単位、店舗単位などでデータを集計し、新しい特徴量を作る方法もあります。

たとえば、次のような特徴量が考えられます。

  • 顧客ごとの平均購入金額
  • 商品ごとの累計販売数
  • 店舗ごとの来店回数
  • ユーザーごとの最終購入日からの経過日数

集約特徴量は、顧客分析や売上予測、レコメンドなどでよく使われます。

新しい特徴量作成のメリット

新しい特徴量を作成することで、次のようなメリットがあります。

  • モデルの性能向上:予測に役立つ情報を追加することで、モデルがパターンを学習しやすくなります。
  • データの意味を明確にできる:売上、平均単価、曜日など、解釈しやすい指標を作成できます。
  • 複雑な関係を表現できる:複数の特徴量を組み合わせることで、単独の特徴量では見えない関係を表現できます。
  • ドメイン知識を反映できる:業務知識や現場感覚を特徴量としてモデルに取り込めます。

新しい特徴量作成の注意点

新しい特徴量は便利ですが、作れば作るほど良いというものではありません。注意すべき点もあります。

特徴量を増やしすぎない

特徴量を増やしすぎると、モデルが訓練データに過度に適合し、未知のデータに対する性能が下がることがあります。これを過学習と呼びます。

新しい特徴量を作成した後は、モデルの評価指標や特徴量重要度を確認し、本当に役立っているかを検証することが重要です。

データリークに注意する

予測時点では本来使えない情報を特徴量に含めてしまうと、実際よりも高い精度に見えてしまいます。これをデータリークと呼びます。

たとえば、購入前に予測するモデルであるにもかかわらず、購入後にしか分からない情報を特徴量に含めると、正しい評価ができません。

意味のない特徴量を作らない

モデルにとって役立たない特徴量を大量に追加すると、学習が不安定になったり、計算時間が増えたりします。

特徴量を作成する際は、「この特徴量は予測対象とどのような関係があるのか」を考えることが大切です。

ドメイン知識を活用する

良い特徴量を作成するためには、データだけでなく、業務や問題領域に関する知識も重要です。

たとえば、売上予測であれば、セール期間、祝日、季節、地域性、商品のライフサイクルなどが重要な特徴量になる場合があります。

まとめ

新しい特徴量の作成は、機械学習モデルの性能を向上させるための重要な工程です。

  • 既存のデータを加工・変換・組み合わせて新しい特徴量を作成する
  • 数値演算、日付情報の抽出、カテゴリの組み合わせ、フラグ作成、集約などの方法がある
  • 良い特徴量はモデルがデータのパターンを捉える助けになる
  • 特徴量を増やしすぎると過学習や計算コスト増加につながる
  • データリークを避け、予測時点で使える情報だけを使うことが重要
  • ドメイン知識を活用すると、より意味のある特徴量を作成しやすくなる

機械学習では、アルゴリズムの選択だけでなく、どのような特徴量を用意するかが結果に大きく影響します。元のデータに含まれる情報をうまく引き出し、目的に合った特徴量を作成することが、精度の高いモデル構築につながります。