【Optuna】ノーコードツールでハイパーパラメータ最適化からのPythonで利用【LightGBM】

#VARISTA
VARISTAとはノーコードで機械学習のモデリングおよび実験管理、デプロイまでサポートしているクラウド型機械学習プラットフォームSaaSです。

https://www.varista.ai/


#作業の流れ
1. 最終的に学習させるデータを用意
2. VARISTAにデータアップロード
3. 学習テンプレート作成
4. 学習開始
5. AutoTune(パラメータ最適化)結果を確認
6. Pythonで最適化されたパラメータを利用

#データ
今回はタイタニックでやってみます。

https://www.kaggle.com/c/titanic/data

#VARISTAの準備
サインアップ（無料プラン有り）してワークスペース、プロジェクトを１つ作成しておきます。

https://www.varista.ai/docs/introduction/

#データアップロード
早速プロジェクトにデータをアップロードしていきます。
「サイドバー› データ› データを追加」
![スクリーンショット 2021-03-16 8.57.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620435/dffc4d5c-e1e5-ee92-8d0b-c1aaf61163b7.png)

![スクリーンショット 2021-03-16 8.57.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620435/fe1fcf51-9398-de24-96ab-bb7a771d7936.png)

![スクリーンショット 2021-03-16 8.58.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620435/30cd468b-10e2-cc76-2767-bd8aed605e47.png)
解析完了後、データを開いて、Survivedを目的変数に設定します。

#学習テンプレート作成
あらかじめいくつか学習テンプレートが用意されていますが、今回はVARISTAのAutoTune機能を利用するので
新たに学習テンプレートを作成します。

「サイドバー› モデリング› 上部タブ› テンプレート› 新規作成」
![スクリーンショット 2021-03-16 8.59.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620435/45207dbc-b2a2-5a02-b47a-a390f0431925.png)

![スクリーンショット 2021-03-16 8.59.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620435/f330653a-3280-3160-aa55-10ded55d5e32.png)
「基本設定」は今回タイタニックなのでObjectiveを「Classification」に設定
あとはデフォルト
![スクリーンショット 2021-03-16 9.00.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620435/040e8229-bcf8-800d-6164-db8b1e90a93e.png)
今回は学習タイプは「Single」で試します。複数のアルゴリズムのパラメータを同時に探索したい場合などは「Auto Selection」にするといいかもしれません。
![スクリーンショット 2021-03-16 9.00.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620435/bbd4cb39-15b2-99d3-bb51-6643021eb065.png)

「アルゴリズム」を「LightGBM Classifier」に設定（他のアルゴリズムでやる人はここで選択）
さらに「AutoTune」の項目を「TPE Optimization with optuna」に設定することでoptunaをノンコードで利用することができます。
カンマ区切りでデータの探索範囲を設定しましょう。
![スクリーンショット 2021-03-16 9.01.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620435/1b69735c-78fc-81a3-308e-ec7e699181d8.png)
以下公式ドキュメント👇

https://www.varista.ai/docs/autotune/

https://optuna.readthedocs.io/en/stable/

![スクリーンショット 2021-03-16 9.01.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620435/9fd12354-7a8a-2711-5222-086bf78eb344.png)
テンプレートを保存して完了！
#学習
「サイドバー› モデリング› 新規モデル」からモデルを学習させましょう。
![スクリーンショット 2021-03-16 9.02.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620435/3ee904cc-205c-de54-f281-8179cbc9355d.png)
![スクリーンショット 2021-03-16 9.02.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620435/51a71526-33b2-df27-48f2-a7e0abfca161.png)

データとテンプレートを選択し、作成！
学習が始まります。
#結果確認
今回は87秒で学習が完了しました。
このようにトレーニングの結果が確認できます。
![スクリーンショット 2021-03-16 9.24.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620435/4ad7228f-0312-f310-9e46-f2e6f132581f.png)

早速パラメータ調整の結果をみてみましょう
「上部タブ› アルゴリズム› Selected Estimator› AutoTune」から確認できます。
![スクリーンショット 2021-03-16 9.25.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620435/1e1ed8bf-cac0-aac7-17e6-9a34bc0f6df9.png)
このように設定した評価指標（f1 score）をもとにチューニングされてるのがわかります。
![スクリーンショット 2021-03-16 9.27.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620435/c9fe0552-bfe2-fb46-9789-06b5d4637b22.png)
パラメータの設定値とスコアの関係を可視化してくれる機能もあります。

#チューニングされたパラメータを利用
「上部タブ› アルゴリズム› Selected Estimator› Parameters」から最終的に利用されたパラメータを取得できます。
![スクリーンショット 2021-03-16 9.29.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620435/1ec47082-00f0-16b9-7c3a-cd63c86b2aff.png)
こちらをコピーすることでそのままコードで利用することが可能です。
以下のように利用してみました。

```python
from lightgbm import LGBMClassifier

#~~~~~ 省略 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

params = {
    'colsample_bytree': 0.9703433354519538,
    'reg_lambda': 0.9949322422230866,
    'max_depth': 9,
    'min_child_samples': 26,
    'num_leaves': 185,
    'reg_alpha': 2.0268086933514935,
    'subsample': 0.9657031906272966,
    'subsample_freq': 1,
    'learning_rate': 0.24476370705062717
}
clf = LGBMClassifier(**params)
clf.fit(X, y)

```
#まとめ
パラメータ探索のコードをただ実装するとなっても、そこまで大変な作業ではないかもしれませんが
複数の探索手法、複数のアルゴリズムなどそれぞれ試すとなったら実装も面倒ですし、結果の管理も余計なコストがかかってしまうことでしょう
そんなときにノンコード、GUIで設定から実験管理まで行えるVARISTAのAutoTune機能が役に立つかもしれません。
普段はPythonで機械学習やっているからGUIツールは関係ない！って思っている方もぜひ一度試してみてはいかがでしょうか？