特徴量エンジニアリング

# この記事の狙い・目的
機械学習を取り入れたAIシステムの構築は、
①データセット作成（前処理）→ ②モデルの構築 → ③モデルの適用
というプロセスで行っていきます。
その際「データセット作成（前処理）」の段階では、正しくモデル構築できるよう、事前にデータを整備しておくことが求めらます。
このブログでは、その前処理段階で行われる「**特徴量エンジニアリング**」の数々の手法ついて紹介していきます。

# プログラムの実行環境
Python3
MacBook pro（端末）
PyCharm（IDE）
Jupyter Notebook（Chrome）
Google スライド（Chrome）

# 特徴量エンジニアリング
特徴量とは、モデルにインプットする変数のことを言います。
特徴量エンジニアリングとは、手持ちのデータからドメイン知識などを駆使し、新たな特徴量を生成する取り組みのことです。
なぜ特徴量エンジニアリングが必要なのか、それはデータの質を向上させ、より無駄がなく、より意味のあるデータを機械学習のモデルに学習させることで、予測モデルの予測性能（汎化性能）を向上させることができるからです。

# ドメイン
ドメインとは、手持ちのデータが属する業界や事業等、その領域における専門知識・知見・トレンドなどを表す概念です。
なぜドメイン知識がデータサイエンスで必要となるのか、それはそのデータが生み出される仕組みや背景・経緯を知っていることで、データの構造、特徴や傾向をより深く・広く把握することができるためです。
例えば、IT事業会社のtoCの人材紹介会社のレコメンドシステムのデータを例に取ってみましょう。
マーケティングの基礎知識でもあるCT(CTR)、CPC、CPM、CV(CVR)などの概念を理解していれば、それぞれの数値の関係性を理解することができるでしょう。
またそれにより、広告表示における費用対効果の程度や推移を把握でき、より深い考察をデータから得ることができるでしょう。
このように、ドメイン知識がデータ解析の結果・精度に大きく影響する為、データサイエンティストはドメイン知識の習得・理解が不可欠となります。

# データ構造の理解・構造把握
それでは特徴量エンジニアリングのテクニックの解説に入る前に、前提となるデータ理解を深めるテクニック・考え方について解説していきます。

## 不均衡データ
まず初めに、データの全体概要を把握することが寛容です。
具体的には、データの正例・負例の割合や件数を把握すると良いでしょう。
予測したい事象が「頻繁に起こるものなのか」、または「稀にしか発生しない事象なのか」を把握していきましょう。
予測したい事象（正例）が非常に少ないデータを「不均衡データ」と呼びますが、不均衡データの場合は、特別な対応が必要となります。
具体的なアプローチは以下の記事で紹介していますので、是非参考にしてください。
##
https://qiita.com/tk-tatsuro/items/10e9dbb3f2cf030e2119
##

## 外れ値
次に「外れ値」の有無を把握することも重要でしょう。
外れ値とは、分布から大きく外れた値のことを言います。
「外れ値」はそのままの状態では、モデルの予測結果に想定外の影響を出してしまうものもあり、対処方法を検討する必要があります。
外れ値については、以下で紹介しています！
##
https://qiita.com/tk-tatsuro/items/a49ccab4441dc1dfc86c
##

## 欠損データ
もう一つ、欠損値の確認も必要でしょう。
欠損値とはその言葉の通り、値を持たない（データベース上ではNULLと言う）値のことを言います。
欠損値は、欠損していること自体に意味があるものもあり、また意味のある欠損値から新たに特徴量を生成することも有用です。
##
https://qiita.com/tk-tatsuro/items/3aaaf7139de19c0d8555
##

## 時系列データ
時系列データとは、時間の順序にしたがって並べられたデータを指します。
時系列データは、そのままの状態では解析に適さないデータもあり、扱い方には工夫が必要です。
時系列データの基本的な概念や、アプローチ方法については以下の記事で解説しています。

##
https://qiita.com/tk-tatsuro/items/16ce74fc954b5a58df00
##

# 特徴量エンジニアリングのテクニック
それでは特徴量エンジニアリングのテクニックについて、紹介していきます！

## 数値変換
数値変換とは、数値（量的）変数を、より説明力の高い、意味のある値に変換する手法です。
またデータ分析の過程では、データの解釈性を高めたり、アルゴリズムに適合する形に変換する目的でも使用されます。
##
https://qiita.com/tk-tatsuro/items/86c0a9ff744f73ad1832
##

## エンコーディング
エンコーディングとは、カテゴリ（質的）変数を、数値（量的）変数に変換する手法です。
よりデータの特徴を捉えたエンコーディングを行うことで、質の高いデータセットを作ることができるようになります。
##
https://qiita.com/tk-tatsuro/items/a06f1fa4f35639bcad8d
##

## 欠損値処理
欠損値処理は、欠損値自体に意味がある場合、また無意味な欠損値が数多くある場合などに対処する手法です。
アルゴリズムによっては欠損値をインプットできないものもあり、事前に前処理が必要です。
欠損値を用いた特徴量生成については、以下で紹介しています！
##
https://qiita.com/tk-tatsuro/items/3aaaf7139de19c0d8555
##

## クラスタリング
クラスタリングとは、あるデータを特定の規則に乗っ取ってグループ分けする手法です。
クラスター分析などは、データ分析時にもよく使用される手法ですが、以下の記事ではクタスタリングによる特徴量エンジニアリングの方法を紹介しています。
##
https://qiita.com/tk-tatsuro/items/1228c90e8803db378f31
##

## 主成分分析
主成分分析とは、より少ない情報に、その手持ちのデータを要約する手法です。
冗長な情報が多く含まれたデータセットでは、データの誤差（ノイズ）をモデルが学習してしまい、正確な予測を行えなくなってしまう危険があります。
ノイズにモデルが適合し過ぎることを過学習（オーバーフィット）と言います。
以下の記事ではその対処方法として「次元削減」の手法を紹介しています。
##
https://qiita.com/tk-tatsuro/items/705c865009bc7ccb6b04
##

## 相互作用特徴量
相関関係の強い変数が複数存在した場合、それら二つ以上の変数をかけ合わせた新しい変数を作る方法があります。以下の記事で生成方法について簡単に紹介しています。
##
https://qiita.com/tk-tatsuro/items/49a886cf3290a512aacf
##

## 特徴選択
これまで特徴量を生成する様々な手法について解説してきました。
ですが、生成したそれらの特徴量は、本当に効果的な特徴量か検証・精査してあげる必要があります。
その手法を「**特徴選択**」として以下で解説しています。
##
https://qiita.com/tk-tatsuro/items/759acd001d4fbb8ef6c5
##

# 分析、前処理、モデリング
これまで学んできたことを活用して「分析→前処理→モデリング」まで通して行った結果を解説しています。
##
https://qiita.com/tk-tatsuro/items/b72e418724ceb78e4af9
##

# まとめ
今回はこれまで解説してきた内容を、系統立てて紹介させていただきましました。
数学や統計的な知識だけでなく、データサイエンティストにとって業務知識に対する深い理解が重要であることを改めて感じました。

# 解析結果
[GitHub/tk-tatsuro/data_science](https://github.com/tk-tatsuro/data_science)

# 参考資料
##
https://www.oreilly.co.jp/books/9784873118680/
##
##
https://www.oreilly.co.jp/books/9784873118284/
##