データ解析

機械学習で重要な特徴量エンジニアリングとは?

特徴量エンジニアリング
記事内に商品プロモーションを含む場合があります
ウマたん
ウマたん
当サイト【スタビジ】の本記事では、精度の高いモデルを構築する上で非常に重要な特徴量エンジニアリングについて簡単に解説していきます。特徴量エンジニアリングの流れやテクニックを知っているのと知っていないのとではたたき出すアウトプットの質が全く違うので必ず理解しておきましょう!

こんにちは!

データサイエンティストのウマたん(@statistics1012)です!

機械学習を使ってモデルを構築する上で、非常に重要なのが特徴量エンジニアリング。

特徴量とは、モデルにインプットする要素・変数のこと。

例えばお店の売上を予測するために気温や曜日のデータを使う場合、気温や曜日が特徴量になります。

統計学の世界では変数という言葉を使いますが、専ら機械学習界隈では特徴量と言いますね。

そんな特徴量を上手く作り出し精度を高めようとする取り組みが特徴量エンジニアリングなのです。

ロボたん
ロボたん
なんだか難しそうだなー!
ウマたん
ウマたん
難しくはないんだけど知っておいた方が良いテクニックもあるので注意が必要だ!

この記事では、そんな特徴量エンジニアリングに必要な考え方やテクニックを紹介していきます!

特徴量エンジニアリングに必要な考え方

メモ

特徴量エンジニアリングの目的は予測精度を上げるコトであり様々なアプローチがあります。

・全く新しい特徴量を追加する
・特徴量の集計方法を変える
・特徴量を変換する
・既存の特徴量を組みあわせて新たな特徴量を作り出す
・サンプルを操作する

などなど。

特徴量エンジニアリングには、ドメイン知識が非常に重要。

ドメイン知識とは、そのデータセットの領域に関係する知識のこと。

業界や職種によってドメインは区切られます。

BtoBとBtoCの商材ではもちろん特徴量の勘所は違いますし、BtoCでも車を扱う会社と日用品を扱う会社で違うというのは理解できるでしょう。

そのドメイン特有の考え方や重要指標が存在するので、それをしっかり理解して特徴量として追加したり加工したりすることがモデルの精度を高める上で非常に重要になってきます。

ただ、いくらドメイン知識があっても特徴量エンジニアリングのテクニックを知らないと筋の良いモデルは作り出せません。

いくつかある特徴量エンジニアリングについて解説していきます!

特徴量エンジニアリングのテクニック

PC

ここでは、既存のデータを加工したり、既存の特徴量を組みあわせて新たな特徴量を作り出すテクニックを紹介します。

Kaggleなどのデータコンペでは全員に決まったデータが与えられるので、与えられたデータの中でどのような特徴量を生み出すかが肝になりますが、実務ではそもそもデータを計測するところから設計したり、他のテーブルデータから必要なデータを引っ張ってきたりすることも多いです。

特徴量エンジニアリングのテクニックを知っておくのは大事ですが、近視眼的になるのではなく広い視野で特徴量を見つけられるようにしておきましょう!

one-hot-encoding

one-hot-encodingは、統計学の世界で言うダミー変数化とほぼ同義で多クラスのカテゴリーを01ラベルで表す特徴量として展開していきます。

例えば以下のようなケースだと、

カテゴリ
A
B
A
C
・・・
A
B

one-hot-encodingをすることにより以下のようなデータ構造に変換されます。

AB
10
01
10
00
10
01

この時、Aが0でBが0であればCということが明示的に分かるのでCのカラムは必要ありません。

逆にCのカラムを追加してしまうと変数同士の重複が起き「多重共線性」という問題が生じ推定精度が不安定になります。

Pythonでは、pandasのget_dummiesを使って簡単にone-hot-encoding化することができます。

XgboostLightgbmなど決定木モデルの場合は、one-hot-encoding化を行わずそのままカテゴリでデータをインプットしても問題ないのですが、それ以外の学習器を使用する場合はone-hot-encoding化が必要です。

ロボたん
ロボたん
ただ単に数字に変換するだけじゃダメなの?
ウマたん
ウマたん
それだと「カテゴリ」だったものに大小関係を与えてしまうんだ!そうすると元々のカテゴリとしての意味は全くなくなってしまうよ!

Feature hashing

one-hot-encodingでは、10の水準を持つカテゴリの場合、新たな特徴量が9つ生成されることになります。

つまり水準が多ければ多いほど特徴量が増え高次元になっていき計算が不安定になる可能性が考えられます。

そこで行われるのがこのFeature hashingです。

Feature hashingでは、複数の水準を1つのカラムで表現します。

例えば

カテゴリ
A
B
D
C
・・・
A
B

の場合Feature hashingを使うと例えば以下のようになります。

AかつCB
10
01
00
10
10
01

これにより特徴量が増えすぎるのを防ぐことができます。

Frequency encoding

各水準の出現回数でカテゴリ変数を置き換えます。

例えば以下のような特徴量は、

カテゴリ
A
A
C
C
A
A
B

は以下のように変換できます。

カテゴリ
4
4
2
2
4
4
1

target encoding

目的変数の情報を使ってカテゴリ変数を置き換える方法です。

カテゴリ目的変数
A1
A1
C0
C1
A0
A1
B0

この場合、それぞれの平均を取って以下のように変換できます。

A=(目的変数の総計が3)/4=0.75
B=(目的変数の総計が0)/1=0
B=(目的変数の総計が1)/2=0.5

カテゴリ目的変数
0.751
0.751
0.50
0.51
0.750
0.751
00

ただ、この場合目的変数の情報を特徴量に用いることになるので、リーク(知らないはずのデータを情報として取り入れてしまい予測精度の悪化を招くこと)に気を付けなくてはいけません。

以下の書籍に詳しいので詳しく知りたい方は、ぜひチェックしてみてください!

created by Rinker
¥3,536
(2024/04/26 17:56:56時点 Amazon調べ-詳細)

日付の処理

インプットするデータが時系列データの場合は日付の処理が非常に重要です。

一口に日付と言っても本当に様々なデータの処理が可能なのです。

例えば、テーブルに日付データが2021-03-31と入っていたとしましょう。

この日付データを年月日、そして曜日データにブレイクダウンするのは最初に思いつく変換方法です。

他にも月の中での上旬・中旬・下旬に分けて特徴量に追加したり、季節ごとに分けて特徴量に追加したりすることも考えられます。

また、日付データを他の特徴量と組みあわせて様々な粒度の特徴量を生成することが可能です。

例えば、2021-03-31の売上を予測する上で過去30日の訪問回数や売上を集計して特徴量にしたり過去7日ログデータを集計して特徴量にしたり、など集計する期間を変えることで様々な期間の特徴量を生成することが可能です。

クラスタリングで特徴量作成

実は大学時代に研究でクラスタリングで特徴量を生成して精度を高めるという研究をしていたことがあるのですが、この方法も精度を高めるのに有効です。

クラスター分析
【5分で分かる】クラスター分析のPythonとRでの実装方法を見ていこう!当サイト【スタビジ】の本記事では、クラスター分析についてまとめていきます。クラスター分析は教師なし学習の定番手法で、データの構造や傾向を把握するのに非常に役立ちます。クラスター分析を利用してデータを可視化してみましょう!...

複数ある説明変数をクラスタリングにかけて、新たなカテゴリを生成しそれを新たな説明変数として加えることで精度が上がるコトがあります。

クラスタ中心からの距離を特徴量とするテクニックもデータセットによっては有効になります。

主成分分析で次元圧縮

主成分分析とは、複数の特徴量を圧縮して少なくする手法です。

主成分分析
主成分分析とは?簡単な説明とPythonでの実装!当サイト【スタビジ】の本記事では、実務の基礎分析にて使われることの多い主成分分析について詳しく見ていきます。最後にはカンタンなPythonでの実装も載せていますのでぜひ参考にしてみてください!...

精度を追い求める場面ではそれほど使われることはありませんが、あまりにも特徴量の多い高次元データには有用です。

既存の特徴量から演算で特徴量作成

複数の変数の特徴量を組みあわせて新たな特徴量を生成する方法も有用の時があります。

例えば、顧客別の購入金額と購入件数があった時にそれらを除算して購入単価という変数を作ることで精度が上がる場合があります。

モデル構築時の過程で、このような効果も加味してくれますが、明示的に特徴量を生成した方がよいことが多いです。

欠損値の処理

欠損値(欠測値)の処理も重要な特徴量エンジニアリングの1つです。

欠損値

Xgboostなどの決定木モデルでは、欠損値を含んでいてもそのまま学習データとしてインプットが可能なので特別な処理をせずそのまま使うことが多いですが、他の手法を使用する場合は欠損値の処理が必要です。

欠損値の処理には、

・代表的な値で補完する
・欠損値そのものを目的変数にして予測補完する
・欠損値が生じていることことフラグ立てしてカテゴリ変数化する(non-encoding)

などがあります。

ちなみい欠損値が生じる原因によってタイプが分かれており、

・完全ランダムでは発生しているのか
・他の変数に起因して発生しているのか
・欠損値が生じている変数自身に起因して発生しているのか

によって対応が変わってきます。

欠損値
欠損値の埋め方を確認して実際にPandasで補完処理してみよう!当サイト【スタビジ】の本記事では、欠損があるデータの解析方法について説明していきます。欠損データ解析は非常に重要ですが知っておくべきことが多いので、まずは全体の概要と方法について理解してもらえたら嬉しいです。最後のパートではPandasで欠損値の補完をしていきますよ!...

スタッキング

機械学習における定番手法であるアンサンブル学習

データコンペティションのKaggleでもよく使われるXgboostLightgbmもアンサンブル学習を使っています。

そんなアンサンブル学習の1つであるスタッキング!

スタッキングはアンサンブル学習ですが、新たな特徴量を作る方法でもあります。

僕自身普段スタッキングは使わないのですが、簡単に説明します。

Step1:いくつかのFold(グループ)にデータを分けて、それぞれを各モデルで予測する(いわゆるクロスバリデーションを色んなモデルでやる)

Step2:それぞれの予測値を新たな特徴量とする

Step3:何回か繰り返して最終アウトプット算出

アンサンブル学習のついては以下の記事でまとめています!

アンサンブル学習とは?バギングとブースティングとスタッキングの違い当サイト【スタビジ】の本記事では、アンサンブル学習についてまとめていきます!加えて学習手法のバギング、ブースティング、スタッキングについても紹介します。アンサンブル学習とは機械学習を学ぶ上で非常に重要な考えであり、いくつかのモデルを組み合わせて汎化能力を上げるもの。有名なランダムフォレストやXgboostなどもアンサンブル学習によって生み出されているんです!...

アンダーサンプリング

実データを扱っていると度々現れるのが不均衡データ!

不均衡データとはデータの比率に偏りがあるもの。

金融取引の不正利用データやメールのCVデータなど、母数が大量にありその中で該当する正例が非常に少ないケースはよくあります。

アンダーサンプリングは、そのような不均衡データに対して「少数派のデータ群にあわせて多数派のデータ群を削除する」という方法です。

オーバーサンプリング

オーバーサンプリングはアンダーサンプリングとは違い、逆に「少数派のデータを多数派にあわせて増やす」という方法です。

オーバーサンプリングの中で特によく使われる手法がSMOTEと呼ばれるものです。

SMOTEは、Synthetic Minority Over-sampling TEchniqueの略でK近傍法のアルゴリズムを利用して少数派のサンプルを増やしていきます。

不均衡データに関しては以下の記事でまとめています!

smote
不均衡データの扱い方と評価指標!SmoteをPythonで実装して検証していく!当サイト【スタビジ】の本記事では、実データによくありがちな不均衡データの特徴とどのように分析していったら良いかについてまとめてみました!最終的にSMOTEというオーバーサンプリング手法を使ってPythonで解析していきます!...

特徴量同士の組み合わせで特徴量作成

その他にも特徴量同士を組み合わせることで新しい特徴量を作成するアプローチもあります。

たとえば、商品のサイズとカラーという質的な特徴量があった時にそれらを組みあわせてサイズ×カラーという組み合わせの特徴量を作成して精度を向上させることが可能です。

特徴量エンジニアリングを学ぶのにオススメな本・サービス

特徴量エンジニアリングを学ぶためにはどうすればよいか見ていきましょう!

Kaggleで勝つデータ分析の技術

特徴量エンジニアリングを学ぶのにオススメな本がこれ!

created by Rinker
¥3,536
(2024/04/26 17:56:56時点 Amazon調べ-詳細)

Kaggleで使用される特徴量エンジニアリングについて分かりやすく解説してくれます。

Kaggleでの具体例を出しながら、どのようなデータでどのようなテクニックが有効だったのか非常に分かりやすく学べるのでめちゃくちゃオススメです!

Kaggleはやらない人でも、実務で役立つエッセンスが詰まっていますよー!

ぜひ手に取って読んでみましょう!

Udemy

Udemyというサービスでは、世界中の講師が素晴らしい講座を公開しています。

僕自身もコースを公開していて特徴量エンジニアリングについて分かりやすく学べる講座にしているので興味のある方は是非受講してみてください!

【初学者向け】データ分析コンペで楽しみながら学べるPython×データ分析講座

Udemy-course
【オススメ度】
【講師】僕!
【時間】4時間
【レベル】初級~中級

僕自身がUdemyの色んなコースを受けてみた中で、他のコースにはないこんなコースあったらいいなみたいなコースを作ってみました。

このコースは、なかなか勉強する時間がないという方に向けてコンパクトに分かりやすく必要最低限の時間で重要なエッセンスを学び取れるように作成しています。

アニメーションを使った概要編ハンズオン形式で進む実践編に分かれており、概要編では体系的にデータ分析・機械学習導入をまとめています。

データサイエンスの基礎について基本のキから学びつつ、なるべく堅苦しい説明は抜きにしてイメージを掴んでいきます。

統計学・機械学習の基本的な内容を学び各手法の詳細についてもなるべく概念的に分かりやすく理解できるように学んでいきます。

そしてデータ分析の流れについては実務に即したCRISP-DMというフレームワークに沿って体系的に学んでいきます!

データ分析というと機械学習でモデル構築する部分にスポットがあたりがちですが、それ以外の工程についてもしっかりおさえておきましょう!

続いて実践編ではデータコンペの中古マンションのデータを題材にして、実際に手を動かしながら機械学習手法を実装していきます。

ここでは、探索的にデータを見ていきながらデータを加工し、その上でLight gbm という機械学習手法を使ってモデル構築までおこなっていきます。

是非興味のある方は受講してみてください!

Twitterアカウント(@statistics1012)にメンションいただければ2000円以下になる講師クーポンを発行いたします!

\30日以内なら返金無料/

Udemyについて詳しく知りたい方は以下の記事を参考にしてみてください!

Udemy レビュー
【体験談】評判の良いUdemyを30コース以上受けている僕が徹底レビュー!当サイト【スタビジ】の本記事では、世界最大のオンライン学習プラットフォームであるUdemyのメリット・デメリット・評判・口コミについてまとめていきます!実際にプログラミングやデータサイエンス、Webマーケ関連のコースを30個以上受講している体験談をもとにお伝えしていきます。...

スタアカ(スタビジアカデミー)

スタアカトップ公式サイト:https://toukei-lab.com/achademy/

【価格】ライトプラン:1280円/月
プレミアムプラン:149,800円
【オススメ度】
【サポート体制】
【受講形式】オンライン形式
【学習範囲】データサイエンスを網羅的に学ぶ
実践的なビジネスフレームワークを学ぶ
SQLとPythonを組みあわせて実データを使った様々なワークを行う
マーケティングの実行プラン策定
マーケティングとデータ分析の掛け合わせで集客マネタイズ

データサイエンティストとしての自分の経験をふまえてエッセンスを詰め込んだのがこちらのスタビジアカデミー、略して「スタアカ」!!

当メディアが運営するスクールです。

24時間以内の質問対応と現役データサイエンティストによる1週間に1回のメンタリングを実施します!

カリキュラム自体は、他のスクールと比較して圧倒的に良い自信があるのでぜひ受講してみてください!

そんな課題感に対して、実務で使うことの多いSQLや機械学習のビジネス導入プロセスの理解などもあわせて学べるボリューム満点のコースになっています!

特徴量エンジニアリングについても実践的なカリキュラムとともに手を動かしながら学んでいきます。

ウォルマートのデータを使って商品の予測分析をしたり、実務で使うことの多いGoogleプロダクトのBigQueryを使って投球分析をしたり、データサイエンティストに必要なビジネス・マーケティングの基礎を学んでマーケティングプランを作ってもらったり・Webサイト構築してデータ基盤構築してWebマーケ×データ分析実践してもらったりする盛りだくさんの内容になってます!

・BigQuery上でSQL、Google Colab上でPythonを使い野球の投球分析
・世界最大手小売企業のウォルマートの実データを用いた需要予測
・ビジネス・マーケティングの基礎を学んで実際の企業を題材にしたマーケティングプランの策定
・Webサイト構築してデータ基盤構築してWebマーケ×データ分析実践して稼ぐ

特徴量エンジニアリング まとめ

特徴量エンジニアリングについて解説してきました!

機械学習の手法自体は誰でも簡単に実装できますが、同じ機械学習手法でもそこにどのような特徴量をインプットするかで得られる結果は全く違います。

それゆえ、良いモデルを作るために特徴量エンジニアリングがめちゃくちゃ大事なんです!

ロボたん
ロボたん
なるほどー実際に色んな特徴量エンジニアリング手法を試してみたくなったよ!
ウマたん
ウマたん
ぜひ、適切な特徴量を作ってモデルの精度を上げていこう!

最後にここで紹介してきた特徴量エンジニアリングのテクニックを再度まとめておきましょう!

機械学習・データサイエンス・Pythonなどの勉強法については以下の記事で詳しく解説していますのであわせてチェックしてみてください!

機械学習独学勉強ロードマップ
【5分で分かる】機械学習の独学勉強ロードマップを徹底的にまとめていく!当サイト【スタビジ】の本記事では、機械学習の独学勉強ロードマップについて徹底的にまとめていきます。機械学習をいきなり理論からしっかり勉強しようとすると挫折しかねません。そこで、この記事ではなるべく挫折しないロードマップをお伝えしてきますよ!...
【5分で分かる】データサイエンティストに必要なスキルと独学勉強ロードマップ!当サイト【スタビジ】の本記事では、データサイエンティストに求められるスキルとそれを身に付けるための勉強法について徹底的にまとめていきます!入門者でも、しっかりデータサイエンティストについて理解しある程度独学で駆け出しの状態までいけることを目指します。...
Python独学勉強法
【Python独学勉強法】Python入門を3ヶ月で習得できる学習ロードマップ当サイト【スタビジ】の本記事では、過去僕自身がPythonを独学を駆使しながら習得した経験をもとにPythonを効率よく勉強する方法を具体的なコード付き実装例と合わせてまとめていきます。Pythonはできることが幅広いので自分のやりたいことを明確にして勉強法を選ぶことが大事です。...
スタビジアカデミーでデータサイエンスをさらに深く学ぼう!

スタアカサービスバナースタビジのコンテンツをさらに深堀りしたコンテンツが動画と一緒に学べるスクールです。

プレミアムプランでは私がマンツーマンで伴走させていただきます!ご受講お待ちしております!

スタビジアカデミーはこちら