データ分析入門してみた（2） - 機械学習

# はじめに
この記事は [データ分析入門してみた（1） - データサイエンス基礎](https://qiita.com/MAKOTO1995/items/ced6415cccd966e2c731) の続編です。

# 目次
1. [データサイエンス基礎](https://qiita.com/MAKOTO1995/items/ced6415cccd966e2c731#1-%E3%83%87%E3%83%BC%E3%82%BF%E3%82%B5%E3%82%A4%E3%82%A8%E3%83%B3%E3%82%B9%E5%9F%BA%E7%A4%8E)
1. [**機械学習の基礎**](https://qiita.com/MAKOTO1995/items/d4e966c716142f07489a#2-%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E3%81%AE%E5%9F%BA%E7%A4%8E)　← この記事で説明すること
1. [**機械学習の応用**](https://qiita.com/MAKOTO1995/items/d4e966c716142f07489a#3-%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E3%81%AE%E5%BF%9C%E7%94%A8)　← この記事で説明すること
1. [データ分析プロセス（CRISP-DM）](https://qiita.com/MAKOTO1995/items/59cbae8403729d32d14d#4-%E3%83%87%E3%83%BC%E3%82%BF%E5%88%86%E6%9E%90%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9crisp-dm)

# 2. 機械学習の基礎
## 機械学習とは
### 統計学と機械学習の違い
課題に対するアプローチのスタンスが違う。
**統計学**は現在のデータを解釈することが目的。データを解析しどのような内容なのか説明する。
一方、**機械学習は未知のデータを正確に予測することが目的**。

機械学習には**教師あり学習・教師なし学習・強化学習**の3つが存在する。

- 特徴量エンジニアリング
予測に効きそうな特徴量を作り出すこと。



## 教師あり学習
正解が紐づいているデータを学習する手法のこと。
例えば、お店の売り上げを曜日や気温などの変数で予測したい場合は、お店の売り上げという正解データをもとに学習するため教師あり学習と呼べる。

メリット
- 人間が正解となるデータを与えるため学習精度が高く、学習速度も早い
デメリット
- 正解が存在しない分野には利用できない。例えば初めて販売する製品のターゲット市場予測では利用できない。
- 正解となるデータの質が学習精度に影響する

正解データの種類によって、分析タスクの種類も異なる。
- 量的データ（ex: お店の売り上げ）→**回帰タスク**
- 質的データ（ex: 客が商品を購入するかどうか）→**分類タスク**



### 線形回帰分析
まず、回帰分析の目的は、目的変数（量的変数）を説明変数を用いて予測、説明すること。
説明変数が一つのとき単回帰分析、複数あるとき重回帰分析という。

線形回帰分析のモデル（回帰式）を求めるためのアプローチとして、**最小二乗法**がある。

例えば、単回帰分析で下記のような回帰式を考えるとする。
𝑦=𝑎𝑥+𝑏
実データに対して回帰線からの残差平方和（予測と実際の値のズレの和）が最小になるように回帰係数a, bを求めることで回帰式を求める。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/577028/7f981a48-dc29-35a2-de71-cc984566be58.png)

### ロジスティック回帰分析
線形回帰分析の拡張で、割合データや二値データなどの0~1の値しかとらないデータに対応できるようにしたもの。
「回帰」という名前がついているが、実際は2値分類に使用されるため注意。

### サポートベクターマシン（SVM）
主にクラスの数が2つの場合に用いられる手法。
クラス間に境界線を引き、その線と最も近いデータ（サポートベクトル）との距離が最大化させる（マージン最大化）ことで、新たなデータが追加されても正しくクラス化できる可能性を高められる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/577028/baa1fa51-3405-a79c-8b88-8b9c9a25107d.png)


### 決定木、アンサンブル学習
決定木は、Yes/Noで答えられる質問で構成された木構造によりデータを分析するアルゴリズム。
精度はそれほど高くないが、結果を木構造で表現でき解釈容易性が高いため、初期分析や説明に重きを置く現状のデータ構造把握などのフェーズでよく用いられる。

決定木単体では高精度は期待できないが、アンサンブル学習と組み合わせることで強力な精度を叩き出せる。

アンサンブル学習とは、複数のモデルを組み合わせて1つの学習モデルを生成する手法。
決定木とアンサンブル学習を組み合わせたランダムフォレストやXGBoost, LightGBMなどがある。

他にも、教師あり学習手法はk近傍法・k平均法など多くある。



## 教師なし学習
現存のデータから何らかの特徴を導き出す時の**セグメント分け**等で使われる。
ex: 顧客の行動データをもとに、どんな層がいるかのセグメント分けをする
**実際のビジネスでは、顧客の属性から教師なし学習でセグメントを作り、そのセグメントを１つの特徴量として教師あり学習で予測モデルを作る「組み合わせアプローチ」が行われることもある。**

メリット
- データに正解・不正解のラベルを付ける必要が無いため、教師あり学習と比べてスタートしやすい。そのため教師あり学習よりも効率的に時間やコストをかけず学習結果が得られる。
デメリット
- 正解となる学習データが無いため、精度は低くなる傾向にある

### クラスター分析
異なる要素や傾向を持つ集団のなかから、類似性を持ったものを集めて分類する方法。
複雑なデータをグループ化して利用しやすくすることが目的。
階層・非階層の２種類がある。
cf: https://www.onemarketing.jp/contents/cluster-re/#:~:text=%E9%9A%8E%E5%B1%A4%E3%82%AF%E3%83%A9%E3%82%B9%E3%82%BF%E3%83%BC%E5%88%86%E6%9E%90%E3%81%A8%E3%81%AF,%E7%90%86%E8%A7%A3%E3%81%A7%E3%81%8D%E3%82%8B%E3%81%93%E3%81%A8%E3%82%82%E7%89%B9%E5%BE%B4%E3%81%A7%E3%81%99%E3%80%82


### 階層的クラスター分析
データ群のなかから最も近いデータ同士を順にまとめていき、徐々にクラスター数を少なくしていく手法。教師あり学習の特徴量生成に使われる。
類似度を計算するための距離測定方法（ex: 最短距離法・最長距離法・群平均法・ウォード法）を用いる。

クラスター化の過程で「樹形図（デンドログラム）」を出力できるため、分類の経緯を分析者が理解できる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/577028/d9229bbf-6f6f-7dc2-42ab-c554b726e59d.png)

※ 実際には、クラスター分析をする前に、特定のユーザを目で追って肌感を掴むことで、消費者心理に気づくことができ、筋の良いクラスター群が作れる。


### 非階層的クラスター分析
最終的なクラスター数（代表点）を決めてから、自動グルーピングを行う手法。ビックデータのような複雑で階層構造に分類できないようなデータ群の分析に適している。また、大量のサンプルを分類しても分析結果の信頼性が高い。

非階層の分析手法としては、単純なアルゴリズムでできているk-means法、最適なクラスター数を自動的に決めてくれるx-means法、クラスター数を変化させながら最適なクラスタ数を確認できるエルボー法などがある。
※ x-means法は計算量が増加する・局所最適解に陥りやすいなどのデメリットもあるため、クラスター数をあらかじめ決めれるのであればk-means法が望ましい。

### 主成分分析
Principal Component Analysis: `PCA` と呼ばれる。
データセット内の **次元（特徴の数）** を減らしながらも、できるだけ多くの情報を保持しようとするもの。
このアルゴリズムを使用すると、特徴量の中で相関が高いもの同士を新しい次元にまとめることができる。
入力データに特徴量が多くあり特徴量を減らしたい場合や、特徴量同士の相関があることでモデルの精度に影響が出ている場合などで使用される。


## 強化学習
エージェントと呼ばれる対象が特定の行動をした結果に対して、報酬を返し、報酬をたくさんもらえるように最適なモデルを構築していく手法。


# 3. 機械学習の応用
### アンサンブル学習
アンサンブル学習とは、複数のモデルを組み合わせて1つの学習モデルを生成する手法。
ただし、複雑に組み合わせるほど学習に時間がかかるため、実務ではほとんど複雑なアンサンブル学習は行わない。
ex: 決定木とアンサンブル学習を組み合わせたランダムフォレストやXGBoost, LightGBMなどがある。

#### アンサンブル学習の種類
- バギング
並列的にモデルを構築し、各モデルの結果を利用する。バギングの方が素早く学習できる。
ex: 決定木とバギングを組み合わせた、ランダムフォレストという手法がある。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/577028/c7b4fe99-a729-6f8b-69cb-28b2adc2db0b.png)


- ブースティング
直列的に学習する方法。
前の学習器の弱点を補うように次の学習器を作るので、全体として、より精度の高いモデルを得ることができる。
ex: 決定木とブースティングを組み合わせた、XGBoost, LightGBMといった手法がある。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/577028/537c0ef9-f2a3-1f96-d0e8-648505d6c661.png)


※ **精度を上げる上ではアンサンブル学習にこだわるよりも、まずは新たな特徴量を作り出したり単独のモデルをチューニングした方が良い場合が多い。そのためアンサンブル学習は最後の手段と考えておく。**


#### 決定木と決定木xアンサンブル学習の比較
精度と解釈容易性は比較的トレードオフの関係にあるため、解釈容易性を求めるなら決定木、精度を求めるなら決定木xアンサンブル学習（ランダムフォレスト・XGBoost, LightGBM）を用いる。



### ベイズ統計学
統計学は大きく3つに分られる。
- **ベイズ統計学**
標本を必ずしも必要としない、母数が確率的に動くとみなす学問  
- **記述統計学(古典統計学)**
データを集計する手法を学ぶ学問、データの特徴を表現(以下の推測統計の基礎となる)  
- **推計統計学**
限られた標本のうち全体となる母集団の性質を推測する学問

つまりベイズ統計学とは、頻度主義の統計学（統計的検定など）とは違い、確率的な考え方を用いた統計学。



### ディープラーニング
ディープラーニングはニューラルネットワークの層構造をより複雑にした状態.

- パーセプトロン
ディープラーニングの大元となるアルゴリズム。
ある信号を入力として受け取り、あるルールに基づいて変換し特定の信号を出力する。

入力が2つの場合のパーセプトロンは下記のようなイメージ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/577028/55b8c3ab-dadb-3e21-c2ed-538313bb20ec.png)
（バイアスは、１を出力する度合を調整するための値）、また入力の重みを変えて出力を調節する

- ニューラルネットワーク
パーセプトロンの考え方を拡張して、機械学習により自動的に最適な重みを算出できるようにする手法。
パーセプトロンが増えた時に、損失関数を最小化するように重みを調整する。
損失関数：機械が算出した出力と実際に欲しい出力の差

- ディープラーニング
ニューラルネットワークの層構造をより複雑にした状態で、高精度かつ高速に解をアウトプットできようにしたもの。ベースはニューラルネットワーク

- ディープラーニングでできること
	- 画像認識
	　　大量のデータをあらかじめインプットさせておくことで、その画像がなんなのか見極めさせる技術。
	- 自然言語処理
	　　人間の言葉を機械に理解させる処理。SiriやAlexaもこの技術がもちいられている。

- 畳み込みニューラルネットワーク（CNN）
画像認識で強い効果を発揮する技術。畳み込み層という層を全結合層のかわりに使うことで、３次元における情報を失わずにニューラルネットワークのモデルを構築できる。

- 形態素解析
自然言語処理の中で、単語理解するための処理。
文章を単語単位で区切り、それぞれの単語に情報を付与する。


### 数理最適化
現実の問題を数式（数理モデル）として定義し、制約条件を満たしつつ、コストの最小化や利益が最大化されるような変数の値を求める手法のこと。
**機械学習はあくまで予測値を算出するだけであり、その後のアクションとは結びつかない。そこで数理最適化によりアクションプランを考える。**

数理最適化で一度定式化すれば、新たなデータが与えられるたびにアルゴリズムによって最適な変数の値を自動で算出できる。そのため、人間が毎回データを見てからしていた意思決定を自動化、支援する手法として、ビジネスでよく利用されている。
→**主観が入り込まない迅速な意思決定の実現**

※ 良質なアウトプットのためには、アルゴリズム自体よりもインプットデータが非常に重要。

### 予測精度を取るか、解釈容易性をとるか
実ビジネスでは予測精度/解釈容易性のどちらに軸足を置くかで使うべき手法が大きく異なる。

たとえば　、下記の通り
- **目的が売り上げ最大化であれば、解釈容易性を重要視**し、特徴量を厳選して**統計的なアプローチ**をとる。(どの要素にテコ入れをすればどのくらい売り上げが上がるのかという解釈容易性が重要であるため)
- **目的が人材配置や在庫最適化であれば、予測精度を重要視**し、特徴量を多くして**機械学習的なアプローチ**をとる。（売上をいかに正しく予測できるかが重要であるため）

統計学的手法...重回帰分析、主成分分析、クラスター分析など
機械学習的手法...ランダムフォレスト、ニューラルネットワーク、 SVMなど



# 参考
- [データサイエンス大全](https://www.socym.co.jp/book/1402)
- [サポートベクターマシン (SVM)](https://zero2one.jp/ai-word/support-vector-machine/)
- [クラスター分析の手法②（階層クラスター分析）](https://www.albert2005.co.jp/knowledge/data_mining/cluster/hierarchical_clustering)
- [クラスター分析とは？階層クラスター分析と非階層クラスター分析の違い・活用例・注意点](https://www.onemarketing.jp/contents/cluster-re/)
- [バギングの意味と、ブースティングとの違い](https://mathwords.net/bagging)
- [５分でわかる！パーセプトロンの仕組みと実装方法](https://blog.apar.jp/deep-learning/11979/)