特徴量エンジニアリングとは
特徴量エンジニアリングとは
特徴量エンジニアリング(Feature Engineering)とは、今あるデータの特徴量からドメイン知識などを生かして新しくデータの特徴量を作成する作業のことをいいます。
特徴量エンジニアリングの目的は、データの質を上げ機械学習モデルの予測性能、すなわち汎化性能を向上させることです。
機械学習モデルを作成するデータを取得していても、そのままの状態では機械学習モデルを作る際に使い物にならない事が多々あります。
汎化性能がいいモデルを作るには、質の良いデータを使い、そのデータにあったアルゴリズムと適切なパラメータを設定する必要があります。中でもデータの質は出来上がるモデルの汎化性能に非常に大きな影響を与えます。
ですので、特徴量エンジニアリングは非常に重要なプロセスとなります。
特徴量エンジニアリングの例
特徴量エンジニアリングの具体例を以下のデータを使って説明します。
例えば、店舗での購入履歴をデータで取得していたとします。(下図)
このデータを使い、どのようなお客様が再来店して購入するかを予測するモデルを作りたいと思います。
仮にこのデータに含まれる特徴量は以下の通りだとします。
このデータセットをそのままの状態で使用してもいい予測
そこで、いくつかの特徴を組み合わせて新しい特徴を作ります。これが特徴量エンジニアリングです。
例えば、メーカー、購入日、顧客ID、を組み合わせれば、同じメーカーの商品を複数回購入している人がわかります。
この特徴は「メーカーAから購入したか」などとして新しくデータに追加します。
また、顧客ID、商品価格、商品数量、ブランドを組み合わると 消費金額の合計 を新たな特徴として生成することができます。
お客様の中には、頻繁に買い物をしなくても、一度買い物をするとその金額が多い方もいます。
この特徴は顧客ロイヤルティを把握する上で重要な情報にもなり得ます。
作成した特徴を元の特徴とマージするとこのようなデータが出来上がります。
このようにいくつかの特徴を使って、新たな特徴量を作りモデルを作成して、予測精度を確認します。
もし予測精度が足りない場合は、再度特徴量エンジニアリングを行います。
特徴量エンジニアリングの流れ
- どのような特徴があるといいか仮説を立てる
- 特徴量を作成する
- モデルを作成し、汎化性能を確認し求める制度ではない場合は再度1に戻ります。
なぜ特徴量エンジニアリングが重要なのか
汎化性能を向上させるには、アルゴリズムのハイパーパラメータ最適化なども行われますが、多くのケースでそれ以上に特徴量エンジニアリングの方が汎化性能に与える影響が大きくなります。
特徴量エンジニアリングの自動化
特徴量エンジニアリンは機械学習モデルを作成するワークフローの中で非常に多くの割合を締める作業です。
一般的に、70%がこの作業に費やされると言われています。
そのため、この作業は自動化することで多くのケースで効率が上がり再現性も高くなるため恩恵を受けることができます。
ただ、注意しなければいけないのは自動化は必ずしも万能ではないということです。
自動特徴量エンジニアリングはデータサイエンティストを置き換えるものではなく、サポートする道具ですので、最終的にどの特徴量を採用するかはドメイン知識をもったデータサイエンティストが決めるべきです。