PyCaretでタイタニック生存予想をしてみた

#はじめに
先日、リリースされた機械学習ライブラリーPyCaretを使ってみました。
データの特徴量分析や複数のモデルとの性能比較作業が自動化され、これまでのデータサイエンティストの作業時間がだいぶ減ると思います。

今回は、タイタニック生存予想問題を、PyCaretにかけて、予測結果をKaggleにSubmissionし、その結果を見てみます。

**前回に掲載した、[PyCaretでワインの品質を分類してみた](https://qiita.com/kotai2003/items/c8fa7e55230d0fa0cc8e) の後続記事です。 **


#1. PyCaretのインストール

下記のコードを実行しインストールします。
Anacondaを使っていますが、PyCaret専用の仮想環境を立ち上げてインストールしました。
既存のCondaで管理されてる仮想環境では、エラーが発生する場合があります。(恐らくpipとcondaとの衝突が原因）

```
pip install pycaret
```

#2.データの取得

KaggleのTitanicサイトで、train.csvとtest.csvがダウンロード可能です。
https://www.kaggle.com/c/titanic/data


```Python
import pandas as pd
train_data = pd.read_csv("train.csv")
train_data.head()
```

>結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208980/b56402a1-d82d-b371-a2c7-291a4565e89f.png)


Pandasのprofile_report()を使い、データの中身を見てみます。

```Python
import pandas_profiling
train_data.profile_report()
```
>結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208980/5ade2cfb-9f4a-0e08-6589-35ae23bfacc5.png)



#3.データの前処理
setup()を利用して、データの前処理を行います。その時、目的変数を引数でSurvivedと指定します。

```Python
from pycaret.classification import *
exp_titanic = setup(data = train_data, target = 'Survived')
```

結果 (10項目まで表記）
>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208980/b23c77c9-a775-f91a-a1b2-3c2762b20c6e.png)



#4.モデルの比較

compare_models()で、データセットを複数の分類モデルを用いて分析を行い、その結果を表にまとめます。どの分類モデルを使うか検討の時、かなり役に立つ機能です。

Pycaretが提供する分類モデルは10種類以上で、下記のリンクで確認が可能です。

https://pycaret.org/classification/

```Python
compare_models()
```

catBoost ClassifierのAccuracy 83.63%でした。今回は、PyCaretの性能評価ということで、9位のRandom Forest Classifierで話を進めます。

結果 
>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208980/aaa17d9a-5963-df38-f04b-8f46bc61936d.png)




#5.分析モデルの生成
分類モデルを選択して、モデリングを行います。create_model()を使います。
今回は、Random Forest Classifierモデルを利用します。

```Python
dt = create_model('rf', round=2)
```

結果 
>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208980/6517e9e7-a057-16de-cc73-63383407fdb8.png)



#6.分析モデルのチューニング
tune_modelを用いて、モデルのチューニングも行います。

```Python
tuned_rf = tune_model('rf',round=2)
```

結果 

チューニング前のAccuracyの平均が0.80、チューニング後のAccuracyの平均が0.81と改善されました。
>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208980/2fbb0806-9725-7b51-5601-ec8ad6c724e7.png)



#7.分析モデルの可視化
plot_modelを用いて、分析結果を可視化します。

まず、AUC曲線をプロットします。

```Python
plot_model(tuned_rf, plot = 'auc')
```
結果 
>!![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208980/dd819bb3-be1c-fd22-2597-c9af31a7f0c0.png)


次に、混同行列をプロットします。

```Python
plot_model(tuned_lightgbm, plot = 'confusion_matrix')
```
結果 
>!![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208980/4d38bc7b-6eac-05fd-b78f-d227111b8d72.png)


#8.分析モデルの評価
evaluate_model()を使い、複数の評価を同時に行うことが可能です。

```Python
evaluate_model(tuned_rf)
```
黄色い枠の中のボタンを押すと、各々の評価結果が表示されます。

結果 
>!![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208980/abe048e8-cd21-cc9e-ae57-8d813fd0dda7.png)


#9.予測

finalize_model()でモデルをFinalizeした後、predict_model()で予測を行います。
予測の時には、テストデータ（ここでは、test.csv)を使います。

```Python
final_rf = finalize_model(tuned_rf)
data_unseen = pd.read_csv('test.csv')
result = predict_model(final_rf, data = data_unseen)
```
Label列は、予測の結果を意味します。

結果 
>
!![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208980/44918df1-891d-f6ad-064e-c01fc7f2f4fc.png)

Kaggleにこの結果をUploadしました。Scoreは0.76076でした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208980/d8442fd7-fc66-0dd0-03af-fd38e4970b76.png)


#10.まとめ

1. タイタニック生存予測のデータセットを利用し、PyCaretで分析を行いました。
2. 大変使いやすいです。商用分析ツールのAlteryx, DataRobotにも負けないほどの高い分析機能だと思います。

## 10.1  分析に使用したPycaret関数一覧
1. データの前処理：　setup()
2. モデルの比較：   compare_models()
3. 分析モデルの生成：   create_model()
4. チューニング：  tune_model()
5. 可視化：  plot_model()
6. 評価：  evaluate_model()
7. 予測：  finalize_model(), predict_model()


#11.参考資料

1.PyCaret Home Page , http://www.pycaret.org/
2.PyCaret Classification, https://pycaret.org/classification/
3. 最速でPyCaretを使ってみた, https://qiita.com/s_fukuzawa/items/5dd40a008dac76595eea
4.PyCaretでワインの品質を分類してみた. https://qiita.com/kotai2003/items/c8fa7e55230d0fa0cc8e