どんなもん？AutoMLのパフォーマンスについて

# はじめに

今回はDatabricksのAutoMLのパフォーマンスについてちょっとお話ししたいとおもいます。

# DatabricksのAutoMLとは


### 数クリックで実行可能なGUI/CUIベースのAutoML

- clusterの選択
- ML Problem type(回帰、分類、時系列予測)
- データ（テーブルの指定)
- 予測したいfield


![Screenshot 2022-12-08 at 10.48.05.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190656/9213ea31-adb2-bf0e-51db-4ca74106e738.jpeg)


### AutoMLで生成されたモデルはすべてmlflowで自動でTracking

- 実験結果のOverview
![Screenshot 2022-12-08 at 11.06.30.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190656/522367da-c9c4-4076-f162-fe38af0ca28f.jpeg)


- 各モデルの比較

![Screenshot 2022-12-08 at 11.12.35.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190656/1e4e425c-d19f-f8a8-584d-b96a341c2bfd.jpeg)

![Screenshot 2022-12-08 at 11.11.13.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190656/c67bf03e-5458-9150-f93f-0134db88d9ce.jpeg)

# 精度の確認
今回、どのくらいの精度がでるかというところで、SIGNATE様が出されているTest用のCompetitionデータを使ってAutoMLを回して見たいと思います。
https://signate.jp/competitions/126

タスクとしてはコロラド州のルーズベルト国有林の樹木観察情報から林形(7種）を分類する多変量のタスクになります。

## データ準備
データをSIGNATEのサイトからダウンロードして、DBFSにupload後、automl用にDeltatable化しておきます。
AutoML側で特徴量の抽出をさせるので、特に加工せずにBronze tableとして扱います。

```python
df = (spark.read.option('header', 'true')
                .option('sep', '\t')
                .option('inferSchema', 'true')
                .csv('/FileStore/tmp/train-1.tsv')
)

df.write.mode("append").saveAsTable("suda_automltable_forest")
```

## AutoMLを実行
![Screenshot 2022-12-16 at 11.24.43.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190656/c7c7c4ab-be00-ea13-a1de-72649976f099.jpeg)

- 選択項目
    - Cluster : 利用するCluster(ML Runtime）のものを利用します。(AutoMLを実行した分だけ課金される仕組みです）
    - ML problem type : Classfication   (他には回帰、時系列予測が使えます）
    - Input Training Dataset : ↑で作成したtableを設定
    - Prediction Target : 今回はCover typeを選択します（林の型)
    - Evaluation Metrics : 今回のテストコンペの評価指標はaccuracyを選択します（他にはf1score、logloss、ROCなどを選択できます）

項目を選択後、Startを押して実行します。

![Screenshot 2022-12-16 at 11.33.32.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190656/80ce028d-3374-093d-585c-ec328f50bb0b.jpeg)

データセットにもよるので、なんとも言えませんが開始5分程度で13個ほどのモデルが学習されている状態になります。
アルゴリズム、ハイパーパラメータチューニングなどを自動で行い、結果300ほどのモデル生成が行われました。

![Screenshot 2022-12-16 at 11.36.23.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190656/d3ea00dc-c4eb-689e-026c-2738bc3bb0f6.jpeg)

AutoMLを実行したころのaccuracyの値はかなり低いのですが、時間が経つにつれ、精度がよくなっていっていることがわかっていただけるかとおもいます。

・初期のころ
![Screenshot 2022-12-16 at 11.35.48.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190656/4936640c-5fa3-8b0f-5255-51ec3f62b732.jpeg)

・最終のころ
![Screenshot 2022-12-16 at 11.36.07.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190656/7079e2f4-49dd-74df-3371-ce0ed5f0f8b9.jpeg)

## 中身を見てみる
DatabricksのAutoMLでは作成したモデルに対して、notebookが出力されます。
どういうデータをloadしたのか、特徴量の抽出、データ加工、ハイパーパラメータになにを与えていたかなどが全てわかるので、AutoMLでベースラインを作成して、さらにチューニング、mlflowで比較といった流れを作ることができます。

![Screenshot 2022-12-16 at 11.41.20.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190656/dd87000d-e63b-4ad7-d371-606aacee6707.jpeg)

![Screenshot 2022-12-16 at 11.41.48.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190656/4010846e-4473-e666-d7fb-80af42e462fa.jpeg)

![Screenshot 2022-12-16 at 11.43.43.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190656/89df8a74-22d7-588d-b68e-1ce2675c165e.jpeg)

また、作成したmodel自体はartifactとして保存されるので、pyspark、pandasからの呼び出しサンプルコード、pklも生成されており、sagemakerなどとの連携も可能です。

Datbricks側でモデル登録、REST APIを使ったmodel servingも可能ですので、End to EndのMLOPSも対応できます。

![Screenshot 2022-12-16 at 12.44.00.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190656/e1a643c9-b65c-318d-610f-18916906b02e.jpeg)


## 精度は？
最終的に最もよい精度(accuracy)は0.934を記録しているので、精度としてはいい値かと思います。
コンペの上位の方達も9.7近くの値をだされているので、baselineの作成としてはAutoMLを活用いただけるのでは！

![Screenshot 2022-12-16 at 11.45.55.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190656/f9a11c2a-cac6-9afe-5185-08658ffaee0f.jpeg)