【2020/5月更新】誰でもAIモデルが作れる! Watson Studioに新しく搭載された機械学習の自動化機能「AutoAI」をザクっとご紹介します

![image](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108535/71e33a16-cf9a-f8bf-cdae-c1dd37ad99b0.png)
# 要は(TL;DR;)
- 2019/5/31からWatson Studioに**機械学習を自動化**する「**AutoAI**」が搭載されました
- 「**AutoAI**」はその名前の通り、数値や文字列などの**構造化データ(CSV)を入力にして、判定(分類)と数値予測(回帰)のモデルを数クリックで簡単に作れる**ツールです
- Watson Studioの一機能としてのリリースなので、**追加のお金はかかりません**し、無償の**ライトアカウントでもお試し**できます
- (:wink: 要はぶっちゃけ、**Data RobotやH2O Driverless AIみたいなもん**ですわ..　)　
- Watson Studioにはディープラーニングの画像分類などをカンタンに自動化するNeuNets[^1]も付いてますよ！

[^1]: NeuNetsは出た時点ではOpenScaleの一機能でしたが、その後WatsonStudioの機能になったのでOpenScaleを買わなくても標準で使えます！

# はじめに
こんにちわ、石田です！今日は2019/05/31からWatson Studioで一般利用可能(GA)になった「**AutoAI**」をご紹介させてください。「AutoAI」を使えば専門家でなくても数クリックで精度の高いAIモデルを簡単に作れますし、モデルの本番環境(WML)へのデプロイも超簡単です！

:blue_book: [What's new - May 31, 2019](https://dataplatform.cloud.ibm.com/docs/content/wsj/getting-started/whats-new.html)
:blue_book: [AutoAI Overview](https://dataplatform.cloud.ibm.com/docs/content/wsj/analyze-data/autoai-overview.html)

:video_camera: 約3分半のご紹介ビデオ@YouTube
[![AutoAI概要 - 機械学習モデルの自動生成](http://img.youtube.com/vi/P4JypDzq5JA/0.jpg)](https://www.youtube.com/watch?v=P4JypDzq5JA)

# どんな感じ? ざっくりと操作をご紹介

![image](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108535/9d8e4027-627f-ffc7-0177-8bfc75b8c901.png)
図1. 入力ファイルと予測フィールドの指定

:one: 入力にするCSVファイルを指定します
:two: 予測したいフィールド(ターゲット)を選びます
:three: ターゲットの特性により、自動的に手法と評価指標が選択されます（変更できます)
:four: あとは実行するだけ！自動的にトレーニングが起動します。簡単すぎますよね？

![image](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108535/90f19640-e2ad-a517-d75b-d3c96570de88.png)
図2. モデル作成中のパネル例


モデル作成では以下のような一連の項目を自動処理しています。（蛇足ですがこの一連の流れを一般的に**機械学習パイプライン(ML Pipeline)**と呼びます)

- 入力データセットの分割（今はTraining:HoldOut=90:10で固定)
- トレーニング・データの読み込み
- データの前処理（欠損値の補完、外れ値の除去など）
- 最適なモデリング手法( estimator ) の選定（分類=30種 回帰=44種より)
- ハイパーパラメーターの最適化( HPO )
- 特徴量の加工(Feature Engeneering)
- アンサンブル(モデルのいいとこ取り）

![image](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108535/9862a75e-a20a-00a9-e98e-568995c3f88a.png)
図3. Relationship Mapの例

:memo: ( 2019/12追記) Relationship Mapでは以下のような情報をビジュアルに示してくれますので、**ともすると「ブラックボックス」になりがち**なこの類のツールで、中身の確認や理解促進に有効です。
- データをどのように分割したか(基本３分割での交差検証+ホールドアウト)
- どのアルゴリズムを選んだか(少量データにて簡易評価)
- そのアルゴリズムでどのようなパイプラインを試みたか（基本は４パターン)
- 各パイプラインでどのような特徴量生成が有効だったか

![image](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108535/9bdf8046-f933-e317-891e-cc054dbd1ccc.png)
図4. モデル完成時の出力パネル例
トレーニングが完了すると、複数のパイプラインの評価結果を成績の良い順に提示してくれます。

![image](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108535/2c0806d5-760a-584c-c56f-f2025a071367.png)
図5. Pipeline Comparisonの例
:memo: ( 2019/12追記) 上記のようなPipeline Comparisonも提供されるようになりました。


![image](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108535/6bdad967-2af2-911c-af50-260f953fbd37.png)
図6. モデルの評価指標の可視化例


それぞれのモデルの評価の明細メタデータもみられますのでデータサイエンティストの方も満足！

![image](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108535/de657574-22ae-ea16-6995-bafe8df2862a.png)
図7. モデルの保管とデプロイ

パネルのUIから簡単にモデルの保管とWML環境(実行ランタイム)へのデプロイができます。あとはREST APIとして任意のクライアントから呼び出すだけ!

「やってみた」記事は長くなったので[こちら](https://qiita.com/ishida330/items/9f157747eb1f9c48c583)に置きました。

# 機能

:memo:(2019-07/22) 英語:us:かつディープな内容ですが、研究所主催のWebinarでAutoAIの**Featute Engineering**の詳細テクニックが説明されていました。参加登録すればどなたでも視聴できるようなので、ご興味ある方はどうぞ。[^2] 
:tv: [Deep dive on automating feature engineering](http://ibm.biz/BdzMc3)
![image](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108535/6c752d93-8bc3-5c62-af20-9da93efccfb3.png)

[^2]: 一般にFeatureEngineeringのアプローチは大きく3つあり、現時点のAutoAIの実装ではExploration(Cognito)は搭載済み、Prediction(LFE)は近々、Fusion(OneBM)は年内くらいにできれば、、とコメントで言ってました。


### 入力
- 現時点ではCSVファイル一択です。データベースは入力にできません
- CSVファイルの**最大サイズは~~100MB~~ 1GB**[^3]です
- CSVなので、**扱えるのは数値や文字などの構造化データのみ**です。画像やテキストなどの非構造化データを扱いたい場合はAutoAIではなくNeuNetsのほうをご検討ください

[^3]: 2020/3/13の機能拡張にて最大サイズが拡張されました。[What'sNew](https://dataplatform.cloud.ibm.com/docs/content/wsj/getting-started/whats-new.html)をご確認ください。

### 解決できる問題
以下の３つの問題に対応しています。いずれも正解データのある「教師あり学習（Supervised Learning）」です。「クラスタリング」などの「教師なし学習（Unsupervised Learning)」は対応していません。

| 問題 |ターゲットの例|代表的な評価指標|
|:---|:---|:---|
| 二値分類( Binary Classification )|0/1, Y/N, True/False | ROC AUC |
| 多クラス分類( Multi-Class Classification )|A/B/C, BRONZE/SILVER/GOLD | Accuracy |
| 回帰(Regression)| 数値(期待売上,身長,予想価格）|RMSE(Root Mean Squered Error)|

(2020/05/26) 更新↓
最新の詳細情報はドキュメント :blue_book:  [AutoAI implementation details](https://dataplatform.cloud.ibm.com/docs/content/wsj/analyze-data/autoai-details.html?audience=wdp)をご参照ください。

「**分類**」は下記のアルゴリズムから最適なものを選びます。
1. Decision Tree Classifier
2. Extra Trees Classifier
3. Gradient Boosted Tree Classifier
4. LGBM Classifier
5. Logistic Regression
6. Random Forest Classifier
7. XGBoost Classifier

「**回帰**」は下記のアルゴリズムから最適なものを選びます。
1. Decision Tree Regression
2. Extra Trees Regression
3. Gradient Boosting Regression
4. LGBM Regression
5. Linear Regression
6. Random Forest Regression
7. Ridge
8. XGBoost Regression

(↑更新ここまで)

### ランタイム
使う側からはまったく意識しませんが、内部的なランタイムは**Python - scikit-learn**らしく、この上にいろいろな自動化/最適化のテクニックを積み上げているらしいです。

![image](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108535/ba64c9c8-ccd7-e65a-5379-fb72f99c9398.png)


- （あくまで2019/5/31時点では）実行環境は「8 vCPUs and 32 GB RAM」で固定です。先々は他の機能同様に選べるようになるのでしょう。
- :warning: パネルにも記載ありますが、この構成は**20CUH/Hour**を消費します。他の機能での同等構成の消費量(4CUH/Hour)より多いので、ご注意ください。


### ~~Model Builderとの違い~~
:memo: (2019/08/06) [What's Newによると](https://dataplatform.cloud.ibm.com/docs/content/wsj/getting-started/whats-new.html) 2019/08/02付で、従来からご提供してきた簡単AIモデル作成機能の＊＊**Model Builderは無くなりました**。今後はAutoAIをご利用ください。
>Week ending 02 August 2019
>Retirement of Watson Machine Learning Model Builder
Watson Machine Learning Model Builder is no longer available for training machine learning models. Models trained with Model Builder and deployed to Watson Machine Learning will continue to be supported, but no new models can be trained using Model Builder. Instead, use AutoAI for training classification and regression models. Read about the announcement, or learn more about AutoAI.

~~以前からWatson Studioには似たような機能としてSparkMLベースの「Model Builder」があります。こちらもウイザード形式で超簡単にモデルを作れます。
![image](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108535/c4503562-0bd1-4fc0-048c-7a360ef75bbd.png)
「専門家不要/自動化」の「効用」だけ見ると同じ、なのですがAutoAIの方が後発な分、機能も多いし深いです。今は並存している過渡期ですが、**今後はAutoAIをご利用ください**。いちおうModel Builderと比べた時のAutoAIの利点は下記かと思います。~~

- ~~候補となるモデル数が多い~~
- ~~自動データ準備(ADP)も、より洗練されている~~
- ~~(ハイパーパラメータ最適化など)より洗練された方法でモデルを構築~~
- ~~様々な改善により、**一般にModel Builderより精度の高いモデルが作れる**~~
- ~~Confision Matrix始めモデルの評価結果の情報が可視化されており充実している~~

~~あと現時点ではModel Builderではバッチ処理もサポートしていますがAutoAIでは未サポートです。~~
 

### NeuNetSとの違い & (2019/12追記) 両者は2020年にマージされます

冒頭で書いてしまいましたが、要は**構造化データはAutoAI, 非構造化データはNeuNetS**です。いずれもWatson Studioの機能であり追加料金なしでご利用いただけますし、ライトアカウントでも試せます。構造化データ・非構造化データの両方に対し「機械学習の自動化」の恩恵を低価格(約1万円/月・人)でご提供できているのは、Watson Studioのいいところだと思います。

![image](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108535/dafe9cb4-6f39-f653-c01f-f0e51622cc6c.png)

NeuNetSについては以下のQiita記事などご参照ください。

:newspaper: [イメージと正解ラベルだけで高精度の画像認識DLモデル作成 - Watsonの最新機能NeuNetSのご紹介](https://qiita.com/makaishi2/items/78a12dd51a61a0ccf54b)
:newspaper: [NeuNetSでニューラルネットワークモデルを自動生成してみた](https://qiita.com/mura16/items/6196d4eaa7dde2670ab3)

:memo: (2019/12月追記) ブログ記事「[NeuNetS Merging into AutoAI in Watson Studio](https://www.ibm.com/cloud/blog/announcements/neunets-merging-into-autoai-in-watson-studio)」によりますと、**2020年にNeuNetsはAutoAIとマージされ一つの機能になる**そうです。記事によるとニューラル・ネットワークを用いてテーブル形式のデータ予測や時系列分析、テキストマイニング、イメージ認識などユースケースが拡がるらしいのでお楽しみに！(ベータ募集も書いてありました）

>Merging NeuNetS into AutoAI allows for the automation and enhancement of a new suite of neural network models, and it addresses much broader data science use cases, including tabular data prediction and classification, time-series forecasting, text mining, and image recognition.

### :memo: (2019/12追記) Pythonノートブックへの保存(beta)

2019/12月時点では絶賛クローズ・ベータ中ですが、AutoAIで生成したパイプラインをJupyter Notebookに保存できるようになりました。これによりデータサイエンティストの方はブラックボックスになりがちなAutoAIの中の動きをより深く理解できますし、カスタマイズや処理のバッチ化なども実現できるようになります。

![image](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108535/0338c93f-a8ad-7467-6cbc-4166bb0639da.png)
上記のようにパイプラインを選んで右クリックーSave asで簡単にNotebookに処理内容をエクスポートできます。

![image](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108535/8f529fb1-4eef-e1ae-83aa-263866f398b8.png)
基本的にNotebookはWatson Studio上のJupyter Notebookになりますので、このまま実行も可能です。

:newspaper: [Saving an AutoAI generated notebook](https://dataplatform.cloud.ibm.com/docs/content/wsj/analyze-data/autoai-notebook.html?audience=wdp&context=wdp)

# [おまけ] 著名データセットで実際にやってみた

小規模なものですが、機械学習でよく出てくる著名データセットにAutoAIを適用してみました。以下が結果ですが、なんもしないのに結構いい線行ってるのがおわかりいただけるかと思います。（使ったファイルはGithubに置いておきますのでご自由にどうぞ～）
ちなみに評価結果の見方は下記になります。
- ２クラス分類=ROC AUCは**1**に近いほど性能良い
- 複数クラス分類=Accuracyも**1**に近いほど性能良い
- 回帰=RMSEは**0**に近いほど性能が良い(＆異なるデータ間での比較は無意味)

|#|データの種類| CSV |大元|行数|カラム数|方式|指標|実行時間|評価結果|
|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|
|1|乳がんデータ|[Cancer](https://github.com/ishida330/AutoAISampleData/blob/master/cancer.csv)|sklearn|569|30|２クラス分類|ROC AUC|2min|0.992|
|2|ボストン市の住宅価格データ|[House](https://github.com/ishida330/AutoAISampleData/blob/master/house.csv)|sklearn|506|14|回帰|RMSE|2min|2.991|
|3|アヤメの品種データ|[Iris](https://github.com/ishida330/AutoAISampleData/blob/master/iris.csv)|sklearn|150|4|複数クラス分類|Accuracy|85s|0.978|
|4|タイタニックの生存者データ|[Titanic](https://github.com/ishida330/AutoAISampleData/blob/master/Titanic.csv)|kaggle|891|12|２クラス分類|ROC AUC|115s|0.86|
|5|ワインの品質データ|[Wine](https://github.com/ishida330/AutoAISampleData/blob/master/wine.csv)|sklearn|178|13|複数クラス分類|Accuracy|2min|0.975|
|6|ローン審査のデータ|[Credit](https://github.com/ishida330/AutoAISampleData/blob/master/Tree_Credit.csv) |SPSS Modeler|2465|6|２クラス分類|ROC AUC|6min|0.89|
|7|顧客離反のデータ|[Churn](https://github.com/ishida330/AutoAISampleData/blob/master/customer_churn.csv)|IBM|1799|19|２クラス分類|ROC AUC|6min|0.997|

# 最後に
ってことで、専門家でなくても超簡単にモデルが作れてしまうので、皆様もぜひお試しください！なお「やってみた」記事は[こちら](https://qiita.com/ishida330/items/9f157747eb1f9c48c583)です。
以上です。

# :clipboard: 改定履歴
当記事は今後も気付きがあったら追加しようと思うので改定履歴をつけます。初版から記述を追加/変更した箇所には:memo:マークを付けておきますね。

| 版| 日付| 変更内容|
|:---|:---|:---|
| 1.0 | 2019-06-05| 初版公開 |
| 1.1 | 2019-07-22 | AutoAIのWebinarの紹介を追加|
| 1.2 | 2019-08-06 | Model Builderが無くなった点を追記|
| 1.3 | 2019-12-02 | Relationship MapやNotebook Exportを追記|
| 1.4 | 2020-04-09 | CSVデータの最大が100MB->1GBに拡張された点を追記|
| 1.5 | 2020-05-26 | ドキュメント上、Watson Studioが内部的に使う手法の記述が変わってたので最新を反映|