DataRobotによるAutoML超入門

# 概要

「[Qiita夏祭り](https://qiita.com/summer-festival)」、「[DataRobotのAuto MLを使って、簡単にデータxAI活用！](https://qiita.com/official-events/ff7f07f95b9ed2407d1f)」の記事です。

今日、さまざまな業界で機械学習をはじめとするAI技術が普及しており、課題解決のために活用されています。そして、機械学習モデルの構築に関する反復的な作業を自動化するAutoMLが開発され、機械学習は誰もが利用できる技術になることが期待されます。

AutoMLを提供しているDataRobotは、2020年7月1日から、「DataRobot AI Platformトライアル」の国内提供を開始しました。これにより、14日間、DataRobotを無償で体験できます。このような貴重な機会をいち早く活用して、DataRobotに触れて、先進的なAutoMLを体験したいと思います。

まずは、サンプルデータセットを用いて、さまざまな機能を体験します。次に、実際の使用例に基づき、用意したデータセットでモデルの構築、予測を試みます。

最終的に、DataRobotを利用することで、コードを一切書くことなく予測などが可能で、機械学習は誰もが利用できる技術になるであろうという実感が得られました。

# はじめに

## AI活用

今日、さまざまな業界で機械学習をはじめとするAI技術が普及しています。そして、課題解決のために活用されています。たとえば以下のような業界においてAI活用がなされています。

- 銀行
- 消費財
- フィンテック
- ヘルスケア
- 保険業
- 製造業
- マーケティング
- 公共部門
- 小売業
- ロボティックプロセスオートメーション
- スポーツ
- 石油とガス

以上のように挙げた業界におけるAI活用のために、データサイエンティストやソフトウェアエンジニアは以下のようなさまざまな作業を反復的に取り組んでいます。

- 特徴エンジニアリング
- モデル選択
- パラメータチューニング
- モデルの評価・検証

## AutoML

AutoML（Automated Machine Learning：自動化された機械学習、自動機械学習）[^AutoML1][^AutoML2]とは、機械学習モデルの構築に関する反復的な作業を自動化する製品や概念です。これにより、データサイエンティストとソフトウェアエンジニアは、モデルの品質を維持しながら、大規模で効率的で生産的なモデルを構築できます。とくに、タスク設定などの他の領域に焦点を当てることができます。

[^AutoML1]: https://www.atmarkit.co.jp/ait/articles/1901/06/news029.html
[^AutoML2]: https://docs.microsoft.com/ja-jp/azure/machine-learning/concept-automated-ml

以下にAutoMLとして提供されている製品を紹介します。

- AutoML Tables(Google)[^AutoMLTables]
- AutoAI(IBM)[^AutoAI]
- AutomatedML(Microsoft)[^AutomatedML]
- Prediction One(SONY)[^PredictionOne]
- H2O Driverless AI[^H2ODriverless]
- DataRobot[^DataRobot]

[^AutoMLTables]: https://cloud.google.com/automl-tables?hl=ja
[^AutoAI]: https://www.ibm.com/jp-ja/cloud/watson-studio/autoai
[^AutomatedML]: https://azure.microsoft.com/ja-jp/services/machine-learning/automatedml/
[^PredictionOne]: https://predictionone.sony.biz/
[^H2ODriverless]: https://www.ibm.com/jp-ja/marketplace/driverless-ai
[^DataRobot]: https://www.datarobot.com/jp/

Google[^Google]やMicrosoft[^Microsoft]といったIT業界を代表するような企業も製品を提供しており、AutoMLがいかに注目されているかがわかるかと思います。

[^Google]: https://about.google/?fg=1&utm_source=google-JP&utm_medium=referral&utm_campaign=hp-header
[^Microsoft]: https://www.microsoft.com/ja-jp

## DataRobot

DataRobotとは、AutoMLのプラットフォームおよびそれを提供する企業です。DataRobotは以下のように述べており「AI活用の民主化」、つまり、プログラミングができなくとも、誰もがAIを活用した課題解決に取り組むことができる社会の実現を目的としています[^DataRobot_引用]。

> DataRobotのエンタープライズ AI プラットフォームを使用すれば、データサイエンスを民主化し、大規模な環境で AI を構築、デプロイ、メンテナンスするためのプロセス全体を自動化できます。最新のオープンソースアルゴリズムを採用し、クラウドやオンプレミスで、または完全管理型の AI サービスとして利用できる DataRobot なら、AI を活用してビジネスでより優れた成果を生み出せます。

[^DataRobot_引用]: https://www.datarobot.com/jp/platform/

## DataRobot AI Platformトライアル

DataRobotは、2020年7月1日から「DataRobot AI Platformトライアル」の国内提供を開始しました。これにより、14日間、DataRobotを無償で体験できます[^DataRobot AI Platformトライアル]。このような貴重な機会をいち早く活用して、DataRobotに触れて、先進的なAutoMLを体験したいと思います。

[^DataRobot AI Platformトライアル]: https://www.datarobot.com/jp/news/launch-datarobot-ai-platform-trial-in-japan/

# DataRobot AI Platformトライアルの申し込み

以下リンクよりDataRobot AI Platformトライアルに申し込むことができます。

[DataRobot AI Platform トライアル | DataRobot](https://www.datarobot.com/jp/lp/trial/)

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/65e9835c-0ccf-6f00-928f-2065b164a901.png)

はじめに、必要事項を記入して「送信」ボタンを押します。すると、登録したメールアドレス宛にメールが届きます。受信したメールに記載されている「14日間の試用を開始」というリンクを押下し、指示にしたがってアカウントを設定します。

※以下のように、トライアル版は、製品版と比較して、一部の機能に制限があります。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/bcd4fa53-ed30-74e6-7865-76b1328fd227.png)

アカウントの設定後、ログインをすると以下のページに遷移します。ここからDataRobotのさまざまな機能を利用できます。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/7015f68b-8d38-162d-7e81-69a1fe98733e.png)

# サンプルデータセットを用いたDataRobotの体験

ひとまず、DataRobot AI Platformに用意されているサンプルデータセットを用いて、予測をしたいと思います。DataRobotでは、以下のように、さまざまな業界における一般的なユースケースにしたがう12種類のサンプルデータセットが用意されています。用意されているサンプルデータセットからもさまざまな業界や場面でのAI活用が期待されていることが分かりますね。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/118d1807-522d-1eed-17f7-e7dc01fca5f5.png)

| ユースケース                   |  ターゲット特徴量 |  業界          |
|-------------------------------|-----------|--------------|
| 再入院                        |  再入院      |  ヘルスケア       |
| 夢の野球チームの予測            |  Woba     |  スポーツ分析      |
| 予防保全                      |  故障       |  オイル・ガス      |
| ローンの債務不履行リスクの理解    |  貸し倒れ     |  銀行業         |
| ローンの繰上支払いを予測         |  解約       |  銀行業         |
| 戦略的疑惑リスト                |  SSLスコア   |  セキュリティ      |
| 鋼板の欠陥の予測                |  欠陥       |  製造          |
| ローンの債務不履行を予測         |  貸し倒れ     |  フィンテック      |
| 不正請求検知                   |  保険金詐欺    |  保険          |
| ターゲット化された顧客サービス          |  提案プラン    |  テレコミュニケーション |
| マネーロンダリング防止アクティビティスコアリング |  疑わしい取引   |  銀行業         |
| 保険の統計的推測                 |  発生保険金    |  保険          |

「詳細」を押下することで、ユースケース・データセットの詳細を確認できます。以下は「再入院」の詳細です。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/65f49064-4569-53cc-6275-f209fb50305f.png)

今回は「再入院」を用いて、再入院のリスクが高い患者を予測したいと思います。患者が再入院するか否かの分類です。せっかくなので、その過程でさまざまな機能を触ってみて、気になったことを記載します。

## データ

### プロジェクトを作成

トップページにある「再入院」の「プロジェクトを作成」を押下します。直後、データのアップロード、元データの読み取り、探索的データ解析が実行されます。これらには多少の時間を必要とします。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/2802cc5b-7162-d783-760a-db565bf4dcdc.png)

探索的データ解析が完了しました。以下のように「何を予測しますか？」と問われています。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/4080eb25-924e-0e25-fff4-d561b06c5933.png)

### データ品質の確認

そして、下の方では「データ品質」も表示されます。「特徴量の数」、「データ行数」、「外れ値の有無」などが確認できます。とくに、数値型の特徴量の場合、基本的な統計量の確認が可能です。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/695747d4-3be4-4975-1231-aab2a1fa0f1c.png)

### データ品質評価

「データ品質評価」という欄に「:warning:」と表示されており、警告されています。これにより、一部の特徴量に外れ値が存在していることを把握できました。他にも「偽装欠損値」、「過剰なゼロ」、「インライア」が警告の対象となります。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/9381f450-72c7-9f00-c588-4ad7555b3cf2.png)

また、警告を受けている対象の特徴量についてフィルタリングも可能です。今回の受けている警告を許容して問題がないか否かを判断するさい、手がかりとなりうる特徴量の確認が容易にできます。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/a47a96a3-7133-c690-b9de-d8fba4acd435.png)

これらの特徴量の品質を目視でも確認します。

### 特徴量の確認

#### 数値型の特徴量

数値型の特徴量を確認します。外れ値が存在していると警告を受けていた「投薬回数」を確認します。表中の「投薬回数」を押下すると、ヒストグラム、頻出値、表、特徴量の型変換を確認できます。

以下は「ヒストグラム」です。特徴量の傾向を把握することに役立ちそうです。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/206f9844-8389-0408-4381-33af5a90163f.png)

以下は「頻出値」です。こちらもヒストグラムと同様に、特徴量の傾向を把握することに役立ちそうです。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/b7968ae3-1a25-1d38-1f69-ec2f02c8ba84.png)

以下は「表」です。頻出値の元のデータです。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/fa48d586-733e-2326-43b7-81a72c7d1ece.png)

以下は「特徴量の型変換」です。カテゴリ変数に変更し、新しい特徴量として追加できるようです。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/8699a3c7-6ae9-e661-82d9-de95f17183f1.png)

#### カテゴリ型の特徴量の確認

数値型の特徴量を確認したため、カテゴリ型の特徴量も確認します。「性別」を確認します。表中の「性別」を押下すると、頻出値、表、特徴量の型変換を確認できます。

以下は「頻出値」です。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/bf2ff0ef-7eb9-d6b6-f68d-8df903a39042.png)

以下は「表」です。頻出値の元のデータです。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/e4b6bed0-b05f-0e91-fb1d-3bdd1819e7ab.png)

以下は「特徴量の型変換」です。他の型の変数に変更し、新しい特徴量として追加できるようです。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/565dff70-99d7-18fa-32ae-1156070b3222.png)

## モデル

### モデル構築

今回は元々設定されていたユースケースにしたがって、「再入院」を予測対象とします。画面の一番上に戻り、「何を予測しますか？」と問われている部分に予測対象として設定したい特徴量をターゲット名として記入します。また、「推奨されるターゲット」の「再入院」を押下することでも「再入院」を予測対象とできます。すると、以下のように、「再入院」の情報が表示され、真ん中に存在する「開始」ボタンのグレーアウトが解除されます。この「開始」ボタンを押下することで、モデリングが実行されます。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/1528fb0d-bc68-0972-efa4-8730794976e4.png)

この時、「モデリングモード」を選択できます。今回はデフォルトとして設定されていた「クイック」のまま、開始ボタンを押下します。これにより、モデリングが実行されます。この時、さまざまな手法を用いて、さまざまなモデルが構築されます。予測には多少の時間を必要とします。以下のように実施しているモデリングの進捗がリアルタイムで表示されます。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/7e5b75fa-44ce-c3c9-dd27-b5dd9e7fa30b.png)

モデリングが完了したようです。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/93ef37cf-8399-9641-6dd8-5329acb2169e.png)

### モデルの一覧

左上の「モデル」タブを押してみると、作成されたモデルの一覧を表示させることができます。今回は36種類のモデルが作成されたようです。以下に示す状態では、指標をLogLossとして、交差検証でスコアが高かった順に並んでいます。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/b042a2ad-76d5-9614-b2ff-1f22143d06d0.png)

現状の設定で、もっともスコアの高いモデルに「デプロイ推奨」というバッジが付与されています。このバッジは以下のように、名の通り自動的に利用が望ましいと判断されたモデルに付与されるようです。今回は最近コンペでも利用頻度が高い手法であるXGBoost(eXtreme Gradient Boosting)[^XGBoost]をもとにしたモデルのようです。

[^XGBoost]: https://xgboost.ai/

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/16a72738-a527-1144-c4a5-0d1cf416ff07.png)

また、以下のように指標はLogLoss以外にも、AUCなどさまざまなものに変更が可能です。ユースケースや課題設定に応じて変更してモデルの選択に役立てることができます。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/8a3a8034-c1b3-67af-2f32-1c4c5d26951d.png)

### モデルの詳細

特定のモデルを押下すると、その詳細の確認が可能です。モデルがどのような構成なのか、どの特徴量にインパクトがあるのかなどの確認が可能です。

以下はモデルの構成です。モデルの概要として、モデルファイルサイズ、予測時間、サンプルサイズの割合がまとめられています。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/46e9fe1d-986d-8646-060d-02be8bf1f35d.png)

以下は「モデル情報」です。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/a6b66f3b-90a9-0a3f-c78b-bb646fdbd3b7.png)

以下は「選択サマリー」、「ROC曲線」などです。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/7fa7f481-8242-9fb1-fca3-bfc5b293ce84.png)

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/fcfb12f5-d9e2-a382-575c-9e9a16e7e0df.png)

以下は「特徴量のインパクト」です。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/15c58617-a837-f232-37d9-b24fbcd0cf92.png)

以下は「予測の説明」です。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/523b8da0-0bb9-baf6-f980-15f4402c6b22.png)

このようにモデルの詳細を確認できます。

### モデルの比較

2つ以上のモデルに対して、評価値などを比較できます。

以下は「学習曲線」です。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/2a6b8756-31eb-1cc3-fef0-041fcaec099b.png)

以下は「速度 対 精度」です。実業務では、モデル構築などに必要とされる時間を含むコストの観点も大切になります。これを確認できることは便利ですね。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/dc32f2ab-fe22-d1ef-1ccb-bc0a9d7f5f4e.png)

2つのモデルの比較として、デュアルリフト、リフト、ROC曲線の確認が可能です。

以下は「デュアルリフト」によるモデルの比較です。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/b920fcb5-d96d-3894-9e14-1b24a58b3b2f.png)

以下は「リフト」によるモデルの比較です。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/3e8dc132-5cb3-6ca1-67b6-af8b812da974.png)

以下は「ROC曲線」によるモデルの比較です。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/4365e7b6-490c-39e6-0329-7d335eb57f01.png)

ここまでで、自動的に生成されたモデルを十分に確認できます。

## 予測

それでは、モデルリストにおいて「デプロイ推奨」のバッジが付与されているモデルを用いて、予測をします。

モデルを選択すると表示される「予測」タブを押下します。予測用のデータセットが用意されているので、今回はそちらをダウンロードして、これをアップロードして予測します。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/cd906244-601c-2c8a-9199-7a972ddfd012.png)

アップロードが完了したら、「予測を計算」を押下します。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/7179a18c-e172-ed5e-82e3-5683dd6de9b3.png)

予測が完了しました。予測結果をダウンロードして結果を確認します。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/5f14d117-b501-3193-4404-7c348dc2b0aa.png)

以下はCSVで出力された予測結果の一部です。問題なく予測し、CSVとして出力できていることが確認できました。個人的に、デフォルトで予測結果に加えて予測確率も出力されるところが好みです。ビジネスで利用する場合、この予測確率から議論することもあるかと思います。

| row_id | Prediction          | PredictedLabel |
|--------|---------------------|----------------|
| 0      | 0.19594717025756836 | 0              |
| 1      | 0.24459081888198853 | 0              |
| 2      | 0.5186466574668884  | 1              |
| 3      | 0.17647013068199158 | 0              |
| 4      | 0.25154659152030945 | 0              |
| 5      | 0.35077783465385437 | 0              |
| 6      | 0.11393532902002335 | 0              |
| 7      | 0.5681907534599304  | 1              |
| 8      | 0.5429481267929077  | 1              |
| 9      | 0.2699979841709137  | 0              |
| 10     | 0.3045080304145813  | 0              |
| …      | …                   | …              |
| 49     | 0.21879716217517853 | 0              |

## デプロイ

DataRobotでは、モデリングだけでなく、作成したモデルのデプロイも可能です。モデルを選択し、「デプロイ」を押下します。そして、「新規デプロイを追加」を押下します。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/9158080f-f0ef-d865-6b72-4db59aa05b9e.png)

すると、デプロイに関して事前に設定すべき項目が表示されます。ひとまずデフォルトのままで設定が完了したとします。そして、「モデルをデプロイ」を押下します。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/6db17e60-291b-e2b7-e11e-3a7d718decba.png)

少し待つと、デプロイに成功しました！デプロイ時、対象サーバなどについて考ることなくボタンの押下1つで完了するということに感動しました。「デプロイを開く」を押下して、デプロイの詳細を確認します。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/146dbf9e-3f6d-163b-f879-e5c5ce899f53.png)

デプロイリストが表示されます。先ほど無事デプロイに成功した「再入院予測」を押下します。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/1ad8b346-29d3-bddb-6dc1-c0e760c8fc3d.png)

「再入院予測」の概要です。（※一部マスクしています。）サマリー、コンテンツ、履歴とあり、エンドポイントなどがまとめられています。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/12a10be5-629e-6068-6e4d-07a381f6c8b8.png)

「インテグレーション」を押下すると、インテグレーションが可能なソフトウェアなどの一覧が表示されます。それぞれを押下し、指示にしたがって設定をすることでインテグレーションが実現できます。

アカウントを設定することで、簡単にデプロイしたモデルを利用できることがわかります。Microsoft SQL Server[^Microsoft SQL Server]、Tableau[^Tableau]、Snowflake[^Snowflake]、Python[^Python]のスコアリングコードなど、馴染みがあるサービスとインテグレーションできます。DataRobotはデプロイまでも機能として提供しており、素晴らしいAutoMLですね。今回、個人的にモデルのデプロイは、はじめての体験でした。

[^Microsoft SQL Server]: https://www.microsoft.com/ja-jp/sql-server/sql-server-downloads
[^Tableau]: https://www.tableau.com/ja-jp
[^Snowflake]: https://www.snowflake.com/?lang=ja
[^Python]: https://www.python.org/

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/d9fe4c12-a63a-da33-0ee3-a4b039664501.png)

### スコアリングコード（統合スクリプティングコード）

Pythonのコードを用いてデプロイしたモデルを使ってみます。スコアリングコードを押下すると、以下のようにDataRobotの予測をPythonのプロジェクトに統合するためのコードが表示されます。また、予測タイプや入力形式、予測の説明を設定することでPythonのコードが適切に変更されます。今回はデフォルトのまま試してみます。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/41831b81-27a8-437e-c038-c03e553e1b18.png)

コードの上部に以下のように使用方法（Usage）が記述されています。この記述を参考にしてデプロイしたモデルを試してみます。Usageにしたがい`datarobot-predict.py`というファイルとして作成します。

```py:datarobot-predict.py
"""
Usage:
    python datarobot-predict.py <input-file.csv>
 
This example uses the requests library which you can install with:
    pip install requests
We highly recommend that you update SSL certificates with:
    pip install -U urllib3[secure] certifi
"""
```

以下、試した環境のPythonのバージョンです。

```console
$ python --version
Python 3.8.3
```

はじめに、Pythonによるリクエスト、認証に関わる以下のライブラリ[^requests][^urllib3][^certifi]をインストールします。

[^requests]: https://requests-docs-ja.readthedocs.io/en/latest/
[^urllib3]: https://dokk.org/documentation/urllib3
[^certifi]: https://pypi.org/project/certifi/

```console
pip install requests
pip install -U urllib3[secure] certifi
```

予測時に利用したデータをダウンロードしておきます。そして以下によりそのデータのラベルを予測します。

```console
python datarobot-predict.py 10kDiabetesScoring.csv
```

すると、以下のようなレスポンスが返ってきます。結果を見る限り、先ほどGUIで予測した内容と同じです。それゆえ、問題なくインテグレーションできていることがわかります。GUIを用いて、CSVで予測を出力した場合と比べて、`predictionThreshold`の情報が追加されています。

```json
{
    "data": [
        {
            "predictionValues": [                {
                    "value": 0.1959471703,
                    "label": 1.0
                },
                {
                    "value": 0.8040528297,
                    "label": 0.0
                }
            ],
            "predictionThreshold": 0.5,
            "prediction": 0.0,
            "rowId": 0
        },
        {
            "predictionValues": [
                {
                    "value": 0.2445908189,
                    "label": 1.0
                },
                {
                    "value": 0.7554091811,
                    "label": 0.0
                }
            ],
            "predictionThreshold": 0.5,
            "prediction": 0.0,
            "rowId": 1
        },
        {
            "predictionValues": [
                {
                    "value": 0.5186466575,
                    "label": 1.0
                },
                {
                    "value": 0.4813533425,
                    "label": 0.0
                }
            ],
            "predictionThreshold": 0.5,
            "prediction": 1.0,
            "rowId": 2
        },
        {
            "predictionValues": [
                {
                    "value": 0.1764701307,
                    "label": 1.0
                },
                {
                    "value": 0.8235298693,
                    "label": 0.0
                }
            ],
            "predictionThreshold": 0.5,
            "prediction": 0.0,
            "rowId": 3
        },
        {
            "predictionValues": [
                {
                    "value": 0.2515465915,
                    "label": 1.0
                },
                {
                    "value": 0.7484534085,
                    "label": 0.0
                }
            ],
            "predictionThreshold": 0.5,
            "prediction": 0.0,
            "rowId": 4
        },
        {
            "predictionValues": [
                {
                    "value": 0.3507778347,
                    "label": 1.0
                },
                {
                    "value": 0.6492221653,
                    "label": 0.0
                }
            ],
            "predictionThreshold": 0.5,
            "prediction": 0.0,
            "rowId": 5
        },
        {
            "predictionValues": [
                {
                    "value": 0.113935329,
                    "label": 1.0
                },
                {
                    "value": 0.886064671,
                    "label": 0.0
                }
            ],
            "predictionThreshold": 0.5,
            "prediction": 0.0,
            "rowId": 6
        },
        {
            "predictionValues": [
                {
                    "value": 0.5681907535,
                    "label": 1.0
                },
                {
                    "value": 0.4318092465,
                    "label": 0.0
                }
            ],
            "predictionThreshold": 0.5,
            "prediction": 1.0,
            "rowId": 7
        },
        {
            "predictionValues": [
                {
                    "value": 0.5429481268,
                    "label": 1.0
                },
                {
                    "value": 0.4570518732,
                    "label": 0.0
                }
            ],
            "predictionThreshold": 0.5,
            "prediction": 1.0,
            "rowId": 8
        },
        {
            "predictionValues": [
                {
                    "value": 0.2699979842,
                    "label": 1.0
                },
                {
                    "value": 0.7300020158,
                    "label": 0.0
                }
            ],
            "predictionThreshold": 0.5,
            "prediction": 0.0,
            "rowId": 9
        },
        {
            "predictionValues": [
                {
                    "value": 0.3045080304,
                    "label": 1.0
                },
                {
                    "value": 0.6954919696,
                    "label": 0.0
                }
            ],
            "predictionThreshold": 0.5,
            "prediction": 0.0,
            "rowId": 10
        },
        {
            "$comment": "省略"
        }, 
        {
            "predictionValues": [
                {
                    "value": 0.2187971622,
                    "label": 1.0
                },
                {
                    "value": 0.7812028378,
                    "label": 0.0
                }
            ],
            "predictionThreshold": 0.5,
            "prediction": 0.0,
            "rowId": 49
        }
    ]
}
```

実際はひとつのデータのみを入力させて予測するという場面が多いのでしょうか。ヘッダを含めて二行のCSV、つまりひとつのデータのみで試した場合は以下のようになります。

以下はひとつの入力データです。

```csv:DiabetesScoring.csv
人種,性別,年齢,体重,入院種別ID,退院処置ID,入院理由ID,入院期間,支払者コード,診療科,検体検査回数,医療処置回数,投薬回数,通院回数,救急処置回数,入院回数,診断1,診断2,診断3,診断回数,最大血糖値,ヘモグロビンA1cの結果,メトホルミン,レパグリニド,ナテグリニド,グリベンクラミド,グリメピリド,アセトヘキサミド,グリピジド,グリブリド,トルブタミド,ピオグリタゾン,ロシグリタゾン,アカルボース,ミグリトール,トログリタゾン,トラザミド,エグザミド,シタグリプチン,インスリン,グリブリド・メトホルミン,グリピジド・メトホルミン,グリメピリド・ピオグリタゾン,メトホルミン・ロシグリタゾン,メトホルミン・ピオグリタゾン,変更,糖尿病の投薬治療,診断1の説明,診断2の説明,診断3の説明
Caucasian,Female,[50-60),?,Elective,Discharged to home,Physician Referral,1,CP,Surgery-Neuro,35,4,21,0,0,0,723,723,719,9,None,None,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,No,Spinal stenosis in cervical region,Spinal stenosis in cervical region,"Effusion of joint, site unspecified"
```

以下のコマンドを実行することにより、以下のレスポンスが返ってきます。

```console
python datarobot-predict.py DiabetesScoring.csv
```

```json
{
    "data": [
        {
            "predictionValues": [
                {
                    "value": 0.1959471703,
                    "label": 1.0
                },
                {
                    "value": 0.8040528297,
                    "label": 0.0
                }
            ],
            "predictionThreshold": 0.5,
            "prediction": 0.0,
            "rowId": 0
        }
    ]
}
```

このようにDataRobotではデプロイによりサービスに利用可能なモデルを作成できます。

## インサイト

DataRobotのインサイト機能には、モデル解釈のための可視化ツール一式が揃っています。個々の特徴量のインパクトを測定してランク付けするツールに加えて、モデルのメカニズムや入力データに対して実行される処理の詳細を提供、予測の説明をするツールが含まれています。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/f9391975-e12b-1fbd-e233-831654e80cde.png)

### 特徴量の有用性（木型アルゴリズム）

以下は「特徴量の有用性（木型アルゴリズム）」です。決定木などの木型アルゴリズムにおいて、特徴量の予測への有用性を確認できます。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/29cb6c03-febc-c5dc-2961-60572840c6bb.png)

### ホットスポット

以下は「ホットスポット」です。高い予測パフォーマンスを説明するルールの解釈を確認できます。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/b888c960-9fa7-65a0-7c91-68d8f3303c22.png)

### ワードクラウド

以下は「ワードクラウド」です。ワードクラウド形式で関連性の高い単語を確認できます。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/b8865e33-f878-9157-397c-10032614bde3.png)

### テキストマイニング

以下は「テキストマイニング」です。テキストとして検出された特徴量において、単語や短いフレーズとターゲット間の相関の強さを確認できます。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/98ee7361-5fe2-f3e4-753a-3342e0d75d57.png)

## 追記

### 特徴量の関連性

モデリング完了後、データを確認すると「特徴量の関連性」を確認できます。クラスターや特徴量同士の関連性が可視化されています。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/0ed8f84e-0298-978f-baaf-88eb0fbd3043.png)

### モデリングモードの設定

モデリングモードの設定を変更することで、モデリングの結果が変化します。ここまで、「クイック」で試していたのに対して、「オートパイロット」の場合どのようになるのかを確認します。

モデリングを開始するときに、モデリングモードをオートパイロットに設定します。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/47e5f953-872c-b8df-1de6-ab5be350daf0.png)

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/6dae4d27-9d80-6f1f-be74-087ff372d415.png)

モデリングが完了しました。クイックで作られたモデルの数が36であるのに対して、オートパイロットの場合は87ということで2倍以上のモデルが作られました。何が適しているかを把握することに優れていると思われます。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/b902a3e6-0f09-ee1e-da46-5c667db56891.png)

また、モデル一覧を確認すると、推奨されるモデルも異なることがわかります。今回推奨されているモデルはLightGBM[^LightGBM]に基づくもののようです。モデリングモードがクイックに設定されている場合、推奨されていたモデルの指標LogLossの交差検定の値は0.6051でした。それに対して、今回、オートパイロットで試したときに推奨されていたモデルでは0.6117という値を算出しています。　オートパイロットで試したことにより、精度の高いモデルが生成できました。

[^LightGBM]: https://lightgbm.readthedocs.io/en/latest/#

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/01cb8134-3371-e99b-b467-1148a96a1367.png)

もちろん、モデルの中身も異なります。今回推奨されているモデルは以下のような構成になっているようです。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/83b0b965-6140-98d2-5777-1a1cf646bfd3.png)

もちろん、このモデルを用いて予測もできます。先ほどと同様に予測を試してみました。先ほどと異なる結果で出力できました。

| row_id | Prediction          | PredictedLabel |
|--------|---------------------|----------------|
| 0      | 0.2653679034644111  | 0              |
| 1      | 0.23794947014914947 | 0              |
| 2      | 0.3989123535859031  | 0              |
| 3      | 0.12412360607778145 | 0              |
| 4      | 0.268736713951176   | 0              |
| 5      | 0.3928892100472709  | 0              |
| 6      | 0.10724329476445235 | 0              |
| 7      | 0.5072311740370784  | 1              |
| 8      | 0.6245067844822699  | 1              |
| 9      | 0.2932514998021243  | 0              |
| 10     | 0.2590284676195415  | 0              |
| …      | …                   | …              |
| 49     | 0.26916688015135504 | 0              |

モデリングモードは状況などを考慮して変更するとよいでしょう。

# 用意したデータによるAutoMLの実行

ここまで、サンプルデータを用いて、特定のユースケースにしたがってAutoMLを使用してみました。実業務では、データを用意して、インポートしてからAutoMLを使用するかと思います。それゆえ、用意したデータで、DataRobotを使用します。

## データ

今回は、データを用意したとして、[Kaggle](https://www.kaggle.com/)[^Kaggle]で公開されている「[タイタニックの生存者予測](https://www.kaggle.com/c/titanic)[^Titanic]」のためのオープンデータセットを利用します。これにより、データを用意して、インポートしてからAutoMLを使用するという実際のケースを模倣します。ここまでで紹介した内容と重複する内容の一部は、割愛いたします。

[^Kaggle]: https://www.kaggle.com/
[^Titanic]: https://www.kaggle.com/c/titanic

※今回はあくまで自前のデータを用いてDataRobotを利用する例として、Kaggleで公開されているオープンデータセットを利用します。Kaggleのコンペに参加して予測データの提出を試みる場合、制約にAutoMLの利用を禁止する旨が記述されていることがあるので注意してください。

### プロジェクトを作成

最初の画面です。念のため、「データセット要件の表示」を確認します。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/5fca2b14-eef7-6b5c-7a0c-135df5c21ad3.png)

「DataRobotトライアルデータセットの要件」が表示されました。さまざまな形式のファイル、さまざまな型の特徴量に対応しているようです。一部、センシティブな内容のデータの利用は禁じられているようですね。

※「詳細」を確認したところリンクが切れていました。（2020年7月4日）

今回対象とするデータが要件を満たすことを確認できました。「×」を押して閉じて、データをインポートします。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/547aae97-260e-48f2-abd9-8599903ef097.png)

探索的データ解析が完了しました。以下のように「何を予測しますか？」と問われています。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/e0e51ef5-fc8e-0f2c-24c8-b8cf4c4dab14.png)

### データ品質の確認

以下のようにデータ品質を確認します。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/916ccf0c-f234-c89c-90a2-0b6f85a46b01.png)

### 特徴量の確認

以下のように特徴量を確認します。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/cbea50ff-9339-1fce-3ec6-131451278dc4.png)

## モデル

### モデル構築

モデルを構築します。以下はモデル構築の様子です。モデリングモードはクイックとします。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/61b71dfb-eeb1-ebca-2b6a-95a6a6b1df7f.png)

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/df227c2e-7d77-9f94-1c2d-43a0c34042fb.png)

最終的に48のモデルが生成されました。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/57a5632f-b15d-3b28-8f6a-5f9a5cf44e30.png)

### モデルの一覧

以下は「モデルの一覧」です。

以下は指標AUCによってソートした結果です。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/668d191e-d92d-6626-50aa-f610dc0c8a79.png)

以下は指標LogLossによってソートした結果です。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/08bde0a4-b171-e881-f83d-b90204181a02.png)

### モデルの詳細

以下のようにモデルの詳細を確認します。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/da25562f-a1cc-5572-bcb6-230d34ed88cb.png)

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/23fe325a-3f1e-b658-f753-47f7710f923e.png)

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/144b0786-1ceb-7b9e-0104-9e9150540426.png)

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/f7e0cff5-69a7-5078-6d4c-af56f48a77a7.png)

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/721c8d47-ad05-09d3-b906-c205bec50f9c.png)

## 予測

以下のように、テストデータを用いてモデルに予測させます。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/f5a9c247-1009-f702-361e-e9648c81529b.png)

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/6b6bce7b-9076-68e5-256b-8998998ad7d7.png)

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/89bc1dd7-a129-717e-139b-41cf97f46763.png)

以下はCSVとして出力した予測結果です。このような過程で、用意したデータによるAutoMLの実行が実現します。実際にビジネスでDataRobotを利用する場合はこのような過程になるかと思います。

| row_id | Prediction          | PredictedLabel |
|--------|---------------------|----------------|
| 0      | 0.11019889529602393 | 0              |
| 1      | 0.3029252451779152  | 0              |
| 2      | 0.12930962218210088 | 0              |
| 3      | 0.0988794883341338  | 0              |
| 4      | 0.4768225875142026  | 0              |
| 5      | 0.09533866240426975 | 0              |
| 6      | 0.2980249339921418  | 0              |
| 7      | 0.13093293463237984 | 0              |
| 8      | 0.7266025133646047  | 1              |
| 9      | 0.0956728606437029  | 0              |
| 10     | 0.0981815593223891  | 0              |
| …      | …                   | …              |
| 417    | 0.375484127807158   | 0              |

# おわりに

本記事では「DataRobot AI Platformのトライアル」の国内提供を開始に伴い、DataRobotによりAutoMLを体験してみました。とくに、申し込みから、サンプルデータを用いたモデルの学習、予測、可視化、デプロイまで体験しました。そして、用意したデータを用いたモデルの学習、予測を実施してみました。

提供されている機能は非常に多く、そのすべての確認、体験はできませんでした。しかし、コードを一切書くことなく、一部のプロセスについての作業もせずに、GUIでの操作だけで十分なクオリティのAI活用ができそうだと感じました。

皆様も、この機会にDataRobotによりAutoMLを体験してみてはどうでしょうか？本記事が、少しでも多くの方のお役に立てていれば幸いです。