特徴量エンジニアリングとは?変換・選択・自動化の工程と実装判断【2026年版】
特徴量エンジニアリングは、生データをそのままモデルに渡さず、学習アルゴリズムが扱える形の列へ作り替える工程です。この記事では、生成・変換・選択・抽出という4つの工程の切り分けから、scikit-learn 1.9系のPipelineで学習と推論の変換をそろえる実装、カテゴリ列のエンコードで汎化性能が割れる境目、Featuretoolsによる自動生成が実務でどこまで届くかまでを、受託開発の現場で判断する順に並べた構成です。最後に、交差検証の揺らぎを下回る改善幅の特徴量を捨てる基準と、特徴量づくりを打ち切ってデータ量とモデル側へ寄せる条件を条件付きで示します。特徴量そのものの定義や重要度の読み方は特徴量とは?機械学習での意味と作り方・重要度の見方で扱っているため、本記事は工程の設計と実装に絞ります。
まとめ:特徴量エンジニアリングの工程配分と打ち切り判断の要点
特徴量エンジニアリングは4工程に分かれますが、実務の工数は前半の生成と変換に偏ります。列を作る段階で業務知識が入るぶん自動化が効きにくく、後半の選択と抽出は既存ライブラリでほぼ機械的に処理できるからです。まず取り組むべきは、学習時と推論時で同じ変換が再現される構成を先に固めることです。ここが崩れたまま列を増やすと、検証環境の数値だけが上がります。
カテゴリ列の扱いが精度を最も分けます。水準数が数十を超える列にOne-Hotを当てると列数が膨らみ、目的変数を使うtarget encodingは実装を誤ると答えを漏らす原因です。scikit-learnのTargetEncoderはfit_transformのときだけ内部で交差適合(cross-fitting)を行い、既定では5分割で学習用データを符号化します。勾配ブースティング系を使うなら、そもそもカテゴリ列を内部で扱える実装に任せて手作業を減らす選択が現実的です。
自動特徴量生成は、集計で作れる列に限れば人手を置き換えます。代表格のFeaturetoolsは1.31.0が2024年12月14日のリリースで、その後の更新が止まっている状態です。ツールに任せられるのは定型の集計と結合までで、業務知識から導く列は人が設計する前提を崩さないでください。
打ち切りの基準は数値で決めます。交差検証の分割間ばらつき(標準偏差)を下回る改善幅しか出ない特徴量は、本番で再現しないと考えて捨てる。学習データが数十万行を超え、勾配ブースティングが既にカテゴリ列と欠損を内部処理している案件では、列を足すよりデータ期間の延長とハイパーパラメータ探索へ工数を振り替えたほうが速く効きます。
特徴量エンジニアリングの定義と、生成・変換・選択・抽出の工程切り分け
用語の輪郭がぼやけたまま作業に入ると、前処理との責任分界が曖昧になります。まず定義と工程の内訳を固定します。
特徴量エンジニアリングと前処理を分ける、目的変数との関係の有無
前処理は、欠損の補完・型変換・外れ値の除去のように、モデルに渡す前にデータを扱える状態へそろえる作業を指します。特徴量エンジニアリングはその先で、予測対象との関係を強めるために列を作り替える作業です。両者の境目は「目的変数との関係を意識しているか」に置くと実務で迷いません。
たとえば欠損を中央値で埋めるのは前処理ですが、「欠損しているかどうか」を0と1のフラグ列として新設するのは特徴量エンジニアリングにあたります。欠損そのものが申込フォームの未入力を意味する場合、そのフラグが効くことがあるためです。欠損の種類と補完手法の選び分けは欠測値と欠損値の違い・補完と削除の対処法に整理しています。
生成・変換・選択・抽出の4工程で、実務の工数が偏る順序と理由
工程は4つに分かれます。生成は既存列から新しい列を作る作業、変換は分布やスケールを整える作業、選択は作った列から役立つものを残す作業、抽出は主成分分析のように元の列を圧縮して少数の合成列へ落とす作業です。
受託案件で工数が集中するのは生成です。「直近30日の購入回数」「初回申込からの経過日数」といった列は、業務の定義を確認しないと作れません。変換と選択はライブラリの既定設定でおおむね動き、抽出は使う場面が限られます。線形モデルや距離ベースの手法で列数を絞りたいときに主成分分析による次元圧縮が候補になりますが、圧縮後の列は解釈できなくなるため、説明責任が求められる与信や医療の案件では避けたほうが無難です。
| 工程 | 代表的な処理 | 自動化の効き | 工数の目安 |
|---|---|---|---|
| 生成 | 集計列・比率列・フラグ列 | 低い | 全体の半分前後 |
| 変換 | 対数変換・ビン化・符号化 | 高い | 2〜3割 |
| 選択 | 相関除去・重要度で足切り | 高い | 1〜2割 |
| 抽出 | 主成分分析・埋め込み圧縮 | 高い | 1割未満 |
この配分は、業務データを扱う分類・回帰の案件で繰り返し現れる形です。画像や自然言語が主のデータでは抽出側の比重が上がり、手作業の生成はほとんど消えます。
学習と推論で同じ変換を再現するPipeline設計と列別の変換分岐
特徴量エンジニアリングの失敗は、変換の中身より再現方法の設計で起きます。学習時のノートブックで作った列を、推論時に手作業で作り直す構成が典型です。
ColumnTransformerで数値列とカテゴリ列の変換処理を分離する構成
scikit-learnでは、列ごとに異なる変換を割り当てるColumnTransformerと、変換と推定器を直列につなぐPipelineを組み合わせます。数値列には欠損補完と標準化、カテゴリ列には欠損補完と符号化を割り当て、その全体を1つの推定器として扱う形です。
この構成にすると、交差検証の分割ごとに変換が学習し直されます。分割前に全データで標準化してしまうと、検証用データの統計量が学習側へ流れ込む状態です。scikit-learn 1.2系以降はset_outputで変換後の出力をpandasのDataFrameへそろえられるため、列名を保ったまま後段の重要度確認へつなげられます。実装を1つの推定器に閉じ込めておけば、推論側は保存した推定器を読み込んでpredictを呼ぶだけになります。
対数変換とビン化で数値列の分布の偏りを均す判断基準と不要な場面
売上金額やページ滞在時間のように、右に長く裾を引く分布は対数変換の候補です。線形回帰やロジスティック回帰では、裾の長い列がそのまま係数の推定を引っ張るため、log1pを当てて分布を寄せると当てはまりが改善します。ゼロを含む列にはlogではなくlog1pを使ってください。
一方、決定木を基にした勾配ブースティングでは、単調増加の変換は分割点の位置を変えないため効果がほぼ出ません。同じ理由で、木系モデルに標準化を当てる必要もありません。ビン化は、年齢を10歳刻みにまとめるように、業務側の解釈と合わせたい場面に限って使います。連続値のまま扱える情報を捨てる操作なので、精度目的で機械的に当てるのは避けます。
fit_transformとtransformを取り違えたときに起きる精度の乖離
変換器の学習と適用を混同すると、検証スコアだけが高くなります。学習用データにはfit_transform、検証用と本番データにはtransformを使うのが原則です。ここを取り違えて検証用データにもfit_transformを呼ぶと、検証側の統計量で符号化された値がモデルへ渡り、実際には得られない情報で採点することになります。
後述するTargetEncoderでは、この2つの挙動差がさらに大きくなります。同じ入力を与えてもfit_transformとfitのあとのtransformは一致しません。Pipelineに変換器を載せておけば、交差検証の各分割で呼び分けが自動的に行われるため、この種の取り違えは構成で防げます。
カテゴリ変数のエンコードで汎化性能が割れる、目的変数利用の線引き
数値列より判断が要るのがカテゴリ列です。水準数と目的変数の使用可否で、選ぶ手法が変わります。
One-Hotとラベルエンコードを列の水準数で使い分ける基準
水準が数個から十数個であればOne-Hotが素直です。列数の増加が許容範囲に収まり、線形モデルでも木系でも扱えます。数十を超えると列数が膨らみ、疎な行列が学習速度と汎化の双方を圧迫します。
ラベルエンコードは水準に整数を振るだけの手法で、木系モデルには使えますが、線形モデルや距離ベースの手法では「2は1の2倍」という誤った順序関係を持ち込みます。郵便番号や商品コードのように水準が数千に及ぶ列は、上位の水準だけ残して残りを「その他」へまとめる、あるいは頻度で符号化する方法が現実的です。
TargetEncoderのcross-fittingが防ぐ、目的変数の漏れ込み
目的変数の平均で水準を符号化するtarget encodingは、高水準のカテゴリ列で効きます。ただし素朴に実装すると、その行自身の答えを含む平均で符号化してしまい、学習データにだけ都合のよい列ができあがります。
scikit-learnのTargetEncoderは、fit_transformのときに内部で交差適合を行い、この漏れを抑えます。cvの既定値は5で、目的変数が連続ならKFold、二値や多クラスならStratifiedKFoldが選ばれる仕様です。smoothの既定値はautoで、経験ベイズ推定により全体平均と水準ごとの平均の混ぜ具合が決まります。出現数が数件しかない水準は全体平均側へ寄り、過剰な符号化が抑えられる設計です。自前で符号化を書く前に、この既定の挙動で足りるかを先に確かめてください。
LightGBMやCatBoostの内部処理で不要になる前処理の範囲
勾配ブースティング系のライブラリは、カテゴリ列と欠損を内部で処理できます。LightGBMはcategorical_featureの指定でカテゴリ列を直接扱い、欠損は分割時に片側へ寄せて処理する仕様です。CatBoostはordered target statisticsと呼ぶ順序付きの符号化を内部に持ち、target encoding相当の処理を漏れを抑えた形で実行します。
この2つを使う案件では、One-Hotの列爆発を自分で抱え込む理由がほとんどありません。勾配ブースティングの分割の仕組みはLightGBMの仕組みとXGBoostとの違いで扱っています。手作業を減らす判断の順序としては、まずライブラリの内部処理へ寄せ、それでも表現しきれない業務由来の列だけを自分で作る形になります。
フィルタ・ラッパー・埋め込みの3系統で分ける特徴量選択の使い分け
列を作ったあとは、残す列を決めます。手法は3系統に整理でき、計算コストと精度への効き方が異なります。
相関係数と分散のしきい値で落とすフィルタ法の限界と使いどころ
フィルタ法は、モデルを学習させずに統計量だけで列を落とします。分散がほぼゼロの列、相関係数が0.95を超える列の片方、目的変数との相関が極端に低い列などが対象です。計算が軽く、数千列から数百列へ粗く絞る前処理として機能します。
限界は、単変量で見るために組み合わせで効く列を落とす点にあります。単独では目的変数とほぼ無相関でも、別の列との比を取ると強く効く列は珍しくありません。フィルタ法は「明らかに要らない列を機械的に除く」用途に留め、精度を詰める段階の判断材料にはしないでください。
モデルの重要度で選ぶ埋め込み法と、再学習コストの見積もり手順
埋め込み法は、学習の過程で列の取捨が決まる手法です。L1正則化つきの線形モデルは係数をゼロへ潰し、勾配ブースティングは分割への寄与から重要度を出します。学習1回で選択まで終わるため、実務ではこの系統が主軸になります。
ラッパー法は、列の組み合わせを変えながらモデルを繰り返し学習させて選ぶ手法です。再帰的特徴量削減(RFE)が代表例で、100列から1列ずつ削るなら学習は約100回に達する計算です。1回の学習が5分なら8時間を超える計算になるため、列数が数十程度で1回の学習が数秒に収まる案件に限定します。列の重要度の読み方そのものは特徴量の重要度を測る3手法の使い分けで扱っています。
集約特徴量と時系列データで参照時点を固定する集計設計の実務基準
顧客単位や機器単位の集約列は効きますが、集計の参照時点を誤ると本番でだけ精度が落ちます。設計時に時点を固定する手順を決めておきます。
ウィンドウ集計で参照時点を誤ったときに起きる本番精度の落ち込み
「過去90日の平均購入額」のような列は、どの時点から見た過去なのかを行ごとに固定する必要があります。学習データ全体を通して集計すると、予測対象の時点より後の行動が混ざります。検証では高い数値が出て、本番では説明のつかない劣化が起きる典型がこれです。
設計の基準はひとつです。各行に「予測を行う時点」を持たせ、集計はその時点より前のデータだけで組む。時系列の交差検証では、分割も時間順に切って未来のデータが学習側へ入らないようにします。大量の行を時点ごとに集計する処理はPolarsによる高速なデータ処理のような列指向の実装に寄せると、試行の回転が上がります。
日付・カレンダー特徴量とラグ特徴量の設計で分かれる予測の精度
日付列は、そのまま渡しても木系モデルは扱えません。年・月・曜日・月内の日・祝日フラグへ分解すると、週次や月次の周期が拾えるようになります。曜日のような循環する値は、正弦と余弦の2列へ変換して「日曜と月曜が離れた値になる」問題を回避する方法もあります。
ラグ特徴量は、1期前・7期前・28期前のように業務の周期に合わせて置きます。小売なら7の倍数、製造ラインなら稼働シフトの周期が候補です。ラグ幅を機械的に1から30まで並べる作り方は列数だけが増え、後段の選択工程で結局落ちます。周期の根拠を業務側に確認してから列を作ってください。
Featuretoolsと自動特徴量生成で人手の工程がどこまで減るかの実際
自動生成は工程の一部を置き換えます。どこまで任せられるかを、ツールの現状を踏まえて線引きします。
Deep Feature Synthesisが自動生成する列と、更新停滞の現状
FeaturetoolsのDeep Feature Synthesisは、複数テーブルの親子関係を定義すると、集約(合計・平均・件数)と変換(月の抽出・差分)を組み合わせた列を自動で作ります。顧客テーブルと注文テーブルの関係を与えれば、顧客ごとの注文件数や平均金額が一括で生成される仕組みです。
採用判断で押さえる点があります。FeaturetoolsはPyPI上の最新が1.31.0で、リリース日は2024年12月14日です。2026年7月時点でその後のリリースが確認できないため、新規案件で依存先に据えるかは慎重に判断してください。生成される列の大半はSQLの集約で書ける内容なので、既存のデータ基盤に集計処理を置くほうが運用の見通しは立ちます。
AutoMLに任せる範囲と、業務知識由来の列を人が作る判断の線引き
AutoMLの製品群は、符号化・欠損補完・列選択・ハイパーパラメータ探索までを自動で回します。定型の変換と選択に限れば、人が手で書く価値はほとんど残っていません。ここは任せてよい範囲です。
任せられないのは、業務の定義が入る列です。「解約予兆として直近3か月の問い合わせ件数が前年同期比で2倍を超えたか」という列は、解約の定義と問い合わせの分類基準を知らないと作れません。自動生成は列の組み合わせを網羅しますが、どの組み合わせに意味があるかは判断しないためです。工数配分としては、定型部分を自動へ寄せ、空いた時間を業務ヒアリングと列の定義づくりへ回す形が現実的です。
アブレーションと交差検証で効果を測り、投資を打ち切る判断の基準
列を足し続ければ精度が上がるわけではありません。効果を測る手順と、止める条件を先に決めておきます。
交差検証の標準偏差を下回る改善幅しかない特徴量を捨てる判定手順
特徴量の効果は、追加前後で交差検証のスコアを比べて判定します。ここで見るのは平均値だけではありません。5分割なら5つのスコアが出るので、その標準偏差を必ず併記します。平均が0.003上がっても標準偏差が0.008あるなら、その差は分割の引き当て運の範囲です。
判定は言い切ります。改善幅が分割間の標準偏差を下回る列は捨てる。残すのは、複数の乱数シードで分割をやり直しても改善方向が揃う列だけです。アブレーション(1列ずつ抜いてスコアの落ち方を見る手法)を全列に当てると計算量が膨らむため、重要度の上位20列に絞って実施すれば実務では足ります。この検証記録を実験管理ツールへ残しておくと、担当者が変わったあとも「なぜこの列を捨てたか」を追える状態です。運用側の仕組みはMLOpsによる機械学習の運用の観点で設計します。
特徴量づくりを止めてデータ量とモデル側へ寄せる案件の条件と兆候
次の条件が重なったら、特徴量エンジニアリングへの追加投資は見送ります。学習データが数十万行を超えている。勾配ブースティングを使っていてカテゴリ列と欠損は内部処理に任せている。直近10列ほどを追加してもスコアが標準偏差の範囲内でしか動いていない。この3つが揃った案件では、列を足す作業は工数に見合いません。
振り替え先は2つあります。データ期間を延ばして学習行数を増やすか、ハイパーパラメータ探索と検証設計の見直しに時間を使うかです。逆に、行数が数千規模で列も限られる案件では、業務知識由来の列が1本入るだけでスコアが跳ねることがあります。データが小さいほど特徴量エンジニアリングの費用対効果は高くなる、という向きで判断してください。どの工程に工数を置くかを含めた設計は、機械学習モデル開発の初期フェーズで実データを見ながら詰めています。
よくある質問
特徴量エンジニアリングの実装で問い合わせが多い論点を、5つに絞って回答します。
特徴量エンジニアリングと前処理は何が違いますか?
前処理は、欠損補完・型変換・外れ値処理のように、データをモデルへ渡せる状態にそろえる作業です。特徴量エンジニアリングは、予測対象との関係を強める目的で列を作り替える作業を指します。実務では工程が連続するため、目的変数との関係を意識しているかどうかで線を引くと整理しやすくなります。欠損を中央値で埋めるのは前処理、欠損の有無をフラグ列にするのは特徴量エンジニアリングです。
特徴量エンジニアリングは深層学習でも必要ですか?
画像・音声・自然言語では、特徴量の抽出をネットワーク自体が担うため、人手の列づくりはほとんど不要です。一方、表形式データを深層学習で扱う場合は、勾配ブースティングと同様にカテゴリ列の符号化や集約列の設計が効きます。データ形式で判断してください。表形式であれば、モデルの種類にかかわらず工程は残ります。
target encodingは自前で実装しても問題ありませんか?
実装自体は難しくありませんが、交差適合を入れ忘れると学習データへ答えが漏れます。scikit-learnのTargetEncoderはfit_transformのときだけ内部で交差適合を行い、既定の分割数は5です。まずこの実装で足りるかを確かめ、業務要件で独自の平滑化が必要な場合に限って自前実装へ移る順序を推奨します。CatBoostを使うなら、内部の順序付き符号化で代替できます。
特徴量は何列まで増やしてよいですか?
上限は行数との比で考えます。学習データが1万行なら、数百列を超えたあたりから過学習と学習時間の両方が問題になります。列数そのものより、追加した列が交差検証の標準偏差を超えて改善しているかを判定基準にしてください。改善が誤差の範囲なら、列数が少なくても足し過ぎです。
自動特徴量生成のツールだけで完結できますか?
集約と変換の定型部分は自動生成で置き換えられます。ただし業務の定義が入る列は自動では作れません。解約予兆や異常の定義は、業務側へのヒアリングでしか確定しないためです。自動生成で土台の列を作り、業務知識由来の列を人が数本足す構成が、受託案件では現実的な分担になります。
関連記事
- 特徴量とは?機械学習での意味と作り方・重要度の見方を実装目線で解説【2026年版】:特徴量そのものの定義、データ型別の作り方、重要度を測る3手法をまとめています。
- CatBoostとは?特徴・XGBoost・LightGBMとの違いとPython実装を解説:カテゴリ列の内部符号化を持つ実装の挙動を確認できます。
- 主成分分析とは?定義・仕組み・分析手順から導入判断まで実装目線で解説:特徴量抽出で列を圧縮する場面の判断材料になります。
- MLOpsツール比較|実験管理・パイプライン・監視の主要スタックと選定基準:特徴量の検証記録を残す実験管理の選び方を扱っています。
- 競馬予想AIの特徴量一覧とLightGBM(ランキング学習)による着順予測の実装:集約列とラグ列を実データで組んだ実装例です。