最速でPyCaretを使ってみた


# はじめに
早速ですが、先日リリースされた機械学習ライブラリー[PyCaret](https://pycaret.org/)を使用してみました。
誰でも簡単にモデリングができるなと実感しました。本当にめちゃくちゃ簡単でした！
10行もコードを書かずに前処理から、チューニング、予測ができます！
引数などまだ把握できていない部分が多くありますが、PyCaretの記事を1番に書こうと思い書きました。
気づいた点があればコメントお願いします。

# 0. 環境とversion
- PyCaret 1.0.0
- Google Colaboratory

# 1. まずはインストールから
下記のコードを実行しインストールします。
体感ですが、2,3分で終わりました。
ローカルでインストールしたらエラーが出てきたので、一旦断念しています。

```python
! pip install pycaret
```

# 2. データの取得
今回はbostonのデータを使用していきます。以下のコードでデータを取得できます。

```python
from pycaret.datasets import get_data
boston_data = get_data('boston')
```

# 3. 前処理
前処理を行います。
setup()にデータとターゲット変数を定義し、初期化しています。
今回は回帰問題を解くので、`pycaret.regression`を指定しています。
分類問題の場合は、`pycaret.classification`を指定してください。
自然言語処理、クラスタリングなどのタスクを行うこともできます。

setup()は欠損値処理や、カテゴリーデータのエンコーディング、train-test-splitなどを行なってくれます。
詳しくは、[こちら](https://pycaret.org/setup/)を参照ください。

```python
from pycaret.regression import *
exp1 = setup(boston_data, target = 'medv')
```

実行するとセットアップが完了します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/378513/d6f9e7c2-ebbb-bcb1-1231-460d86756bbc.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/378513/22bccb6e-01b6-c2ec-86e8-42f7bb59e57a.png)

# 4. モデルの比較
モデルの比較し選択していきましょう。
モデルの比較については、下記の1行で行えます。2、3分で終了しました。
評価指標も一覧で確認できて便利ですね！デフォルトで、k-foldを10分割で行なっています。
引数で、fold数や、ソートする指標を指定できます。(実行はデフォルトで行なっています。)


```python
compare_models()
```
実行結果はこちら
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/378513/f26a26fb-4859-52ec-9d48-2924ee9c2485.png)

# 5.モデリング

モデルを選択してモデリングを行います。今回はRandom Forestを使用しています。（完全に気分ですね。）
この関数は、k-foldしたスコアとトレーニング済みモデルオブジェクトを含むテーブルを返します。
SDも確認できてとても便利ですね！

```python
rf = create_model('rf')
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/378513/d075cc5f-06f0-c339-b858-04d5dd0b45fe.png)


トレーニング済みオブジェクトの後ろにピリオドで指定することで、下記に様に確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/378513/00470bc7-4c04-1ec4-9361-31512a1dc3b5.png)


# 6.チューニング
チューニングも1行で行えます。

```python
tuned_rf = tune_model('rf')
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/378513/e0c504a3-6069-5927-743e-44c427c910b8.png)

パラメータの取得は下記でできます。

```python
tuned_rf.get_params
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/378513/d295c005-dfac-0be7-a794-62a9c204eae8.png)


# 7.モデルの可視化
モデルの精度を可視化してみましょう。回帰のプロットは以下の図ですが、分類問題の場合は、指標に合わせてアウトプットを選択できます。
分類問題の可視化のバリエーションが豊富なので、ここにきて分類問題を選択しておけばよかったと少し後悔しました。。。

```python
plot_model(tuned_rf)
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/378513/6c5611fb-e6ce-6910-7071-977008dc05fa.png)

# 8.モデルの解釈
モデルの解釈はSHAPを用いて行なっております。
グラフの見方や、モデルの解釈方法については、[SHAPのgit](https://github.com/slundberg/shap#citations)を確認ください。

```python
interpret_model(tuned_rf)
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/378513/0c7b8f92-5b51-5bb6-51df-64b489906ffc.png)


# 9.予測
testデータに対しての予測は下記の様に書きます。
実行結果は、setup()でtrain-test-splitした30％のテストデータに対して予測した結果を返してくれます。

```python
rf_holdout_pred = predict_model(rf)
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/378513/e4f0973d-dd00-73c6-4243-f265fb6b0e83.png)


新たなデータに対して予測を行う際には、dataの引数にデータセットを渡します。
※今回は元のデータを使い回しています。

```python
predictions = predict_model(rf, data=boston_data)
```
一番右に予測結果が追加されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/378513/0f4013cc-f916-5508-0e4b-365255a19b75.png)


# 最後に
最後までお読みいただきありがとうございました。
何かありましたら、コメントよろしくお願いいたします。

# 参考サイト
- [Announcing PyCaret 1.0.0](https://towardsdatascience.com/announcing-pycaret-an-open-source-low-code-machine-learning-library-in-python-4a1f1aad8d46)
- [PyCaret](https://pycaret.org/)
- [PyCaret git](https://github.com/pycaret)
- [SHAP git](https://github.com/slundberg/shap#citations)