【DataRobot×Snowflake】データ準備機能データラングリングを試してみた

# はじめに
この記事ではDataRobotとSnowflakeの連携機能であるデータラングリング機能を試していきたいと思います。

# DataRobotとは
DataRobotは自動機械学習（AutoML）プラットフォームであり、機械学習モデルの構築、トレーニング、評価、デプロイメントを自動化することができます。複雑なデータ分析を迅速かつ簡単に実行し、優れた予測モデルの作成をサポートすることが可能です。
くわしくは[こちら](https://enterprise-aiiot.nttdata.com/service/datarobot)。

# Snowflakeとは
Snowflakeは、クラウドベースのデータウェアハウスであり、スケーラビリティ、柔軟性、セキュリティが強みです。高速なクエリ処理、さまざまなデータ形式のサポート、データの保護機能、最適化されたクエリパフォーマンス、クラウドネイティブな特徴があります。ビッグデータ分析やデータウェアハウスのニーズに効果的なソリューションです。
くわしくは[こちら](https://enterprise-aiiot.nttdata.com/service/snowflake)。

# DataRobotのデータラングリング機能とは
DataRobotのデータラングリング機能とは、機械学習を実施するためのデータ準備機能です。

通常、機械学習を行うためには適切な形式にデータを整形する必要があります。
作業のためにはプログラム言語や別途データ加工のためのツールを習得する必要があるなど、業務部門の方にとってはいざ実施しようとしてもハードルが高いことが多いです。

DataRobotのデータラングリング機能では、
加工したいデータに対して、データをサンプリングしたうえで、リアルタイムで処理状況を可視化確認しながら、データ準備加工のレシピをノーコードで作成することができます。
また、試行錯誤の末に完成したレシピはDataRobot画面からSnowflakeに送信し、レシピを適用したデータセットを用意することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3459346/f3ce74e0-dc7a-21ed-b5b9-8f8cf07e6c11.png)

# Snowflakeとの接続
データラングリングは、DataRobotワークベンチで実施します。
ワークベンチでは、データ、モデル、モデルから作成したアプリケーション、Notebookをユースケース単位で管理できます。データの準備加工とモデル構築を何回も往復して繰り返していくと、実験がうまく管理できなくなることがありますが、ワークベンチで管理することにより、これらを統一して管理することできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3459346/73d76aa6-c43b-a220-613c-068cffab6d06.png)

早速ユースケースを作成していきたいと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3459346/706a8242-1b5c-b446-4e94-5193e44f619b.png)
データを追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3459346/2610cae7-9662-9a3a-0fd0-aa32311087db.png)

データはAIカタログ登録データ、データウェアハウス接続、直接アップロードが選択できます。
今回はSnowflakeからデータを取得してきたいと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3459346/7aefb750-168f-37c4-0847-df1a6bbf1675.png)
こちらは設定画面です。パラメーターなど必要情報を入力して下さい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3459346/4d72f4a6-e087-0e10-d451-d72c63e678f2.png)

各種設定が完了するとSnowflakeのテーブルが選択可能になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3459346/e7c314c5-1785-0cff-737a-77f2d87c14fc.png)

今回の記事では糖尿病患者に関するデータを使ってラングリング機能を試していきます。
ラングリング画面に移ると、全データからサンプリングされたデータについて各項目の型やヒストグラム、表形式でのデータの格納状況が確認できます。
今回は5,000行がランダムサンプリングされたようですが、画面右側のインタラクティブ操作用サンプルから行数の変更やリサンプリングも行うことが可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3459346/dd1e50b1-ca18-fc94-8c62-2a9c441f4d61.png)
ヒストグラム部分をクリックすると拡大表示もできるようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3459346/bcc41c10-3a94-131e-4bf6-1faad76c7a18.png)

# レシピの作成
では、ここからデータの加工をしていきたいと思います。
画面右側レシピ一覧から必要な処理を選択し、実行していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3459346/862544a5-a0e7-304d-489e-b376cd8ebb74.png)
現在実行できる処理は下記となります。
|No    |レシピ名                  |内容  |
|----------|--------------------------| --------------------------|
|1|結合|別途Snowflakeに存在するテーブルと結合する|
|2|集計|指定した列を軸に値を集計する。集計関数は最小、最大、件数、ユニーク数、最頻値が選択可能| 
|3|行をフィルター|指定した列について条件合致する行のみを抽出する。|
|4|重複行を削除|重複しているサンプルを削除する |
|5|検索と置換|指定した列について条件合致する項目の値を指定した値に置換する |
|6|新しい特徴量を計算|Snowflakeの関数を記述して、新たな特徴量を作成する|
|7|特徴量名を変更する|列名を変更する  |
|8|特徴量の削除| 指定した特徴量の削除 |

それでは各処理を使っていきます。
## 1.結合
結合ではSnowflakeに存在するテーブルと結合処理を行うことができます。
テーブルを選択すると、結合方法や結合するための列指定の画面となり、結合の詳細条件を指定していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3459346/a68e9adf-363d-140b-ae07-dc8260c0e221.png)

## 2.集計
集計では、指定した列の値毎に特徴量の集計が行えます。
ここでは年代ごとに入院期間の最小、最大、件数、ユニーク数、最頻値を計算しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3459346/60aea19c-3fdc-c9fd-31f7-db38e4065ce8.png)

実行するとラングリングでの表も計算された状態に変更されました。簡単な可視化集計であればこの機能で実行できそうです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3459346/81680604-f696-a300-f4a9-40ff80de5183.png)

## 3.行をフィルター
行をフィルターでは指定した列について、条件に合致した行のみを抽出することができます。
ここでは性別がMaleの行のみを抽出しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3459346/7473a241-5470-e989-3813-9718d0005912.png)
レシピを追加すると、性別が男性のみとなりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3459346/4d7a8395-fd12-1782-f421-60c4f8063c7d.png)

ちなみにですが、条件は現在下記が選択可能です。上記の例ではカテゴリ型の変数でしたが、数値に使う以上/以下や欠損値の行のみの抽出などもできるようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3459346/5818cd0e-c13c-e1fd-5bb8-84adc1a0fbcd.png)

## 4.重複行の削除
ここでは完全に重複行の削除が実行できます。もし一部分が重複する行を削除したい場合は、行をフィルターなど別機能を駆使しながら行う形となりそうです。

## 5.検索と置換
検索と置換は、行をフィルター機能と同じように条件を指定しつつ、該当する値を変更する機能です。
ここではWEIGHTで?という値を空欄(欠損)に変換してみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3459346/5374ffe6-791c-3a41-1fdd-aab719e0aee8.png)
元々のデータではWEIGHTに多くの「?」が含まれていました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3459346/db6beef7-5e0a-2adc-6979-e4d9ab8818cd.png)
「?」を空欄に置換することで、ラングリング画面上でも欠損に変わったことがわかります。
DataRobotのAutoML機能では、欠損値であれば欠損値用の処理を実施してくれるため、本来欠損の意味であるにも関わらず、このような文字列が入っている場合は変更することをお勧めします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3459346/283ecd93-a1a4-60f2-05a6-a0792cae6eab.png)


## 6.新しい特徴量を作成
新しい特徴量を計算では、Snowflakeの関数を自由に記述して新たな特徴量を作成することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3459346/80d2ce7b-cc90-4a42-f074-296765d4b886.png)

## 7.特徴量名を変更する
指定した特徴量の変更ができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3459346/edd73637-0630-3620-0654-32978d1f02f2.png)
## 8.特徴量の削除
チェックを付けた特徴量の削除ができるようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3459346/a012ef67-269b-8963-dfb4-5ed4ce8ee8e9.png)

# レシピを適用
ここまでの処理についてはラングリング機能内でのサンプリングデータに対する処理になります。
レシピを適用することで、全データに処理を適用して、データを取得したいと思います。

レシピを適用すると、データレジストリ（DataRobotのAIカタログ）かSnowflakeのどちらにデータを出力するか選択ができます。この画面ではデータレジストリを選択したいと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3459346/ee5b6581-739c-f9ec-7984-38ff9abdad21.png)

公開とすると、ワークベンチのユースケースにデータが作成されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3459346/dbe33671-49af-c2ec-7443-a0f5d12d240d.png)

あとは、エクスペリメントから加工したデータに対してDataRobotを実行することができます。
（AIカタログにもデータは登録されているので、従来の画面でのAutoML実行も可能です！）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3459346/46536af3-1e4a-256f-cf77-470ab91bc735.png)


# まとめ
今回はSnowflake連携機能であるデータラングリング機能を使って、データの準備を行ってみました。
複雑な処理はまだラングリング機能では実行できなさそうですが、結合や集計、置換処理など比較的よく実行するようなデータ準備は気軽に実行できそうです。

## 仲間募集

NTTデータ テクノロジーコンサルティング事業本部 では、以下の職種を募集しています。

<details><summary>1. クラウド技術を活用したデータ分析プラットフォームの開発・構築(ITアーキテクト/クラウドエンジニア)</summary>

クラウド／プラットフォーム技術の知見に基づき、DWH、BI、ETL領域におけるソリューション開発を推進します。
https://enterprise-aiiot.nttdata.com/recruitment/career_sp/cloud_engineer

</details>

<details><summary>2. データサイエンス領域（データサイエンティスト／データアナリスト）</summary>

データ活用／情報処理／AI／BI／統計学などの情報科学を活用し、よりデータサイエンスの観点から、データ分析プロジェクトのリーダーとしてお客様のDX／デジタルサクセスを推進します。
https://enterprise-aiiot.nttdata.com/recruitment/career_sp/datascientist

</details>

<details><summary>3.お客様のAI活用の成功を推進するAIサクセスマネージャー</summary>

DataRobotをはじめとしたAIソリューションやサービスを使って、
お客様のAIプロジェクトを成功させ、ビジネス価値を創出するための活動を実施し、
お客様内でのAI活用を拡大、NTTデータが提供するAIソリューションの利用継続を推進していただく人材を募集しています。
https://nttdata.jposting.net/u/job.phtml?job_code=804

</details>

<details><summary>4.DX／デジタルサクセスを推進するデータサイエンティスト《管理職/管理職候補》</summary>
データ分析プロジェクトのリーダとして、正確な課題の把握、適切な評価指標の設定、分析計画策定や適切な分析手法や技術の評価・選定といったデータ活用の具現化、高度化を行い分析結果の見える化・お客様の納得感醸成を行うことで、ビジネス成果・価値を出すアクションへとつなげることができるデータサイエンティスト人材を募集しています。

https://nttdata.jposting.net/u/job.phtml?job_code=898

</details>


## ソリューション紹介

<details><summary> Trusted Data Foundationについて</summary><div>

～データ資産を分析活用するための環境をオールインワンで提供するソリューション～
https://enterprise-aiiot.nttdata.com/tdf/
最新のクラウド技術を採用して弊社が独自に設計したリファレンスアーキテクチャ（Datalake+DWH+AI/BI）を顧客要件に合わせてカスタマイズして提供します。
可視化、機械学習、DeepLearningなどデータ資産を分析活用するための環境がオールインワンで用意されており、これまでとは別次元の量と質のデータを用いてアジリティ高くDX推進を実現できます。

</div></details>


<details><summary> TDFⓇ-AM（Trusted Data Foundation - Analytics Managed Service）について</summary><div>

～データ活用基盤の段階的な拡張支援（Quick Start) と保守運用のマネジメント（Analytics Managed）をご提供することでお客様のDXを成功に導く、データ活用プラットフォームサービス～
https://enterprise-aiiot.nttdata.com/service/tdf/tdf_am
TDFⓇ-AMは、データ活用をQuickに始めることができ、データ活用の成熟度に応じて段階的に環境を拡張します。プラットフォームの保守運用はNTTデータが一括で実施し、お客様は成果創出に専念することが可能です。また、日々最新のテクノロジーをキャッチアップし、常に活用しやすい環境を提供します。なお、ご要望に応じて上流のコンサルティングフェーズからAI/BIなどのデータ活用支援に至るまで、End to Endで課題解決に向けて伴走することも可能です。

</div></details>


<details><summary>NTTデータとTableauについて </summary><div>

ビジュアル分析プラットフォームのTableauと2014年にパートナー契約を締結し、自社の経営ダッシュボード基盤への採用や独自のコンピテンシーセンターの設置などの取り組みを進めてきました。さらに2019年度にはSalesforceとワンストップでのサービスを提供開始するなど、積極的にビジネスを展開しています。

これまでPartner of the Year, Japanを4年連続で受賞しており、2021年にはアジア太平洋地域で最もビジネスに貢献したパートナーとして表彰されました。
また、2020年度からは、Tableauを活用したデータ活用促進のコンサルティングや導入サービスの他、AI活用やデータマネジメント整備など、お客さまの企業全体のデータ活用民主化を成功させるためのノウハウ・方法論を体系化した「デジタルサクセス」プログラムを提供開始しています。
https://enterprise-aiiot.nttdata.com/service/tableau

</div></details>


<details><summary>NTTデータとAlteryxについて </summary><div>
Alteryxは、業務ユーザーからIT部門まで誰でも使えるセルフサービス分析プラットフォームです。

Alteryx導入の豊富な実績を持つNTTデータは、最高位にあたるAlteryx Premiumパートナーとしてお客さまをご支援します。

導入時のプロフェッショナル支援など独自メニューを整備し、特定の業種によらない多くのお客さまに、Alteryxを活用したサービスの強化・拡充を提供します。

https://enterprise-aiiot.nttdata.com/service/alteryx

</div></details>

<details><summary>NTTデータとDataRobotについて </summary><div>
DataRobotは、包括的なAIライフサイクルプラットフォームです。

NTTデータはDataRobot社と戦略的資本業務提携を行い、経験豊富なデータサイエンティストがAI・データ活用を起点にお客様のビジネスにおける価値創出をご支援します。

https://enterprise-aiiot.nttdata.com/service/datarobot

</div></details>

<details><summary> NTTデータとInformaticaについて</summary><div>

データ連携や処理方式を専門領域として10年以上取り組んできたプロ集団であるNTTデータは、データマネジメント領域でグローバルでの高い評価を得ているInformatica社とパートナーシップを結び、サービス強化を推進しています。
https://enterprise-aiiot.nttdata.com/service/informatica

</div></details>

<details><summary>NTTデータとSnowflakeについて </summary><div>
NTTデータでは、Snowflake Inc.とソリューションパートナー契約を締結し、クラウド・データプラットフォーム「Snowflake」の導入・構築、および活用支援を開始しています。

NTTデータではこれまでも、独自ノウハウに基づき、ビッグデータ・AIなど領域に係る市場競争力のあるさまざまなソリューションパートナーとともにエコシステムを形成し、お客さまのビジネス変革を導いてきました。
Snowflakeは、これら先端テクノロジーとのエコシステムの形成に強みがあり、NTTデータはこれらを組み合わせることでお客さまに最適なインテグレーションをご提供いたします。

https://enterprise-aiiot.nttdata.com/service/snowflake

</div></details>