VantageのデータをAzure Machine Learning Studioで使用する方法

著者 [Rupal Shah](rupal.shah@teradata.com)
最終更新日 2022年2月14日

:::note warn
警告
本記事はTeradata Corporationのサイト[Getting Started](https://quickstarts.teradata.com/index.html#getting-access-to-vantage)に掲載された内容を抄訳したものです。掲載内容の正確性・完全性・信頼性・最新性を保証するものではございません。正確な内容については、原本をご参照下さい。
また、修正が必要な箇所や、ご要望についてはコメントをよろしくお願いします。
:::

# 概要
[Azure Machine Learning (ML) Studio](https://docs.microsoft.com/en-us/azure/machine-learning/studio/what-is-ml-studio)は、データに対する予測分析ソリューションの構築、テスト、およびデプロイに使用できる、ドラッグ＆ドロップ可能なコラボレーションツールです。ML Studioは、Azure Blob Storageからデータを取得することができます。このスタートガイドでは、ML Studio に組み込まれた Jupter Notebook 機能を使用して Teradata Vantage データセットを Blob Storage にコピーする方法を説明します。このデータは、ML Studio で機械学習モデルを構築、学習し、本番環境にデプロイするために使用することができます。

![画像01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2742714/848b2ea1-c988-aaaa-718a-ebb342c3eaae.png)

# 前提条件
・Teradata Vantageインスタンスにアクセスできること。

::: note info
メモ！
Vantageの新しいインスタンスが必要な場合は、[Google Cloud](https://qiita.com/ykswi/items/10a382de5fa5a4a42c50)、[Azure](https://qiita.com/ykswi/items/2c30aa1f5413b16c838c)、[AWS](https://qiita.com/ykswi/items/fba559149ad568678d58)のクラウドにVantage Expressという無料版をインストールすることができます。また、[VMware](https://qiita.com/ykswi/items/ebe1d854c38db9bb0f51)、[VirtualBox](https://qiita.com/ykswi/items/ffadaa375add309f2075)、または[UTM](https://qiita.com/ykswi/items/94995954ae723185c2f7)を使用して、ローカルマシン上でVantage Expressを実行することもできます。
:::

・Azureサブスクリプションまたは[無料アカウント](https://azure.microsoft.com/free/)作成
・[Azure ML Studioワークスペース](https://docs.microsoft.com/en-us/azure/machine-learning/studio/create-workspace)
・(オプション）[AdventureWorks DW 2016データベース](https://docs.microsoft.com/en-us/sql/samples/adventureworks-install-configure?view=sql-server-2017)のダウンロード（「モデルのトレーニング」セクションなど）
　○「vTargetMail」テーブルをSQL ServerからTeradata Vantageにリストアおよびコピーします。


# 手順
# 初期設定
・ML Studioのワークスペースを作成する際に、ストレージアカウントを新規に作成する必要があります。ただし、現在利用可能なロケーションにストレージアカウントが存在し、このスタートガイドで**Webサービスプラン**の**DEVTEST Standard**を選択した場合は、この限りではありません。[Azureポータル](https://portal.azure.com/)にログオンし、ストレージアカウントを開き、コンテナが存在しない場合は、**コンテナ**を作成します。

![画像02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2742714/8ee9ff18-c221-2541-b73b-1f92233357dd.png)

・**ストレージのアカウント名**と**キー**をメモ帳にコピーし、Python3 NotebookでAzure Blob Storageアカウントにアクセスするために使用します。

![画像03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2742714/65b4619e-f99d-2be4-5d3d-479fe5c146a7.png)

・最後に、**Configuration** プロパティを開き、**'Secure transfer required'** を **Disabled** に設定し、ML Studio Import Data モジュールが blob ストレージアカウントにアクセスできるようにします。

![画像04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2742714/ef6d7d17-0440-8433-6f8c-b51b48326338.png)

# データのロード
ML Studioにデータを取り込むために、まずはTeradata VantageからAzure Blob Storageにデータをロードする必要があります。ML Jupyter Notebookを作成し、Teradataに接続するためのPythonパッケージをインストールし、Azure Blob Storageにデータを保存することにします。

[Azureポータル](https://portal.azure.com/)にログインし、**ML Studioワークスペース**に移動して、[Machine Learning Studio](https://studio.azureml.net/)を起動して**サインイン**します。

①	以下の画面が表示されるので、**Notebooks**をクリックし、正しいリージョン/ワークスペースにいることを確認し、Notebook **New**をクリックします。

![画像05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2742714/eeca500b-b57a-37fc-8a66-c70e2517d0cf.png)

②	**Python3**を選択し、ノートブックのインスタンスに**名前**を付けます。

![画像06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2742714/a8cc986d-a558-c179-0dd1-a2912197b47f.png)

③	jupyter notebookインスタンスに、[Teradata Vantage Python package for Advanced Analytics](https://pypi.org/project/teradataml/)をインストールします。

```:aaa
pip install teradataml
```
::: note info
メモ！
Microsoft Azure ML StudioとTeradata Vantage Pythonパッケージの間の検証は行われていません。
:::

④	[Microsoft Azure Storage Blob Client Library for Python](https://pypi.org/project/azure-storage-blob/)をインストールします。

```:aaa
!pip install azure-storage-blob
```

⑤	以下のライブラリをインポートしてください。

```:aaa
import teradataml as tdml
from teradataml import create_context, get_context, remove_context
from teradataml.dataframe.dataframe import DataFrame
import pandas as pd
from azure.storage.blob import (BlockBlobService)
```

⑥	コマンドを使用してTeradataに接続します。

```:aaa
create_context(host = '<hostname>', username = '<database user name>', password = '<password>')
```

⑦	Teradata Python DataFrameモジュールを使用してデータを取得する。

```:aaa
train_data = DataFrame.from_table("<table_name>")
```

⑧	Teradata DataFrameをPanda DataFrameに変換します。

```:aaa
trainDF = train_data.to_pandas()
```

⑨	データをCSVに変換する。

```:aaa
trainDF = trainDF.to_csv(head=True,index=False)
```

⑩	Azue Blob Storageのアカウント名、キー、コンテナ名に変数を割り当てる。

```:aaa
accountName="<account_name>"
accountKey="<account_key>"
containerName="mldata"
```

⑪	Azure Blob Storageにファイルをアップロードします。

```:aaa
blobService = BlockBlobService(account_name=accountName, account_key=accountKey)
blobService.create_blob_from_text(containerNAme, 'vTargetMail.csv', trainDF)
```

⑫	Azureポータルにログインし、BLOBストレージアカウントを開いてアップロードされたファイルを確認します。

![画像07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2742714/e6312ee8-5ace-d633-33c1-56617dfdacff.png)

# モデルの学習
既存の[Analyze data with Azure Machine Learning](https://docs.microsoft.com/en-us/azure/sql-data-warehouse/sql-data-warehouse-get-started-analyze-with-azure-machine-learning)の記事を使って、Azure Blob Storageのデータに基づいて予測型機械学習モデルを構築します。顧客が自転車を購入する可能性があるかどうかを予測することで、自転車店であるアドベンチャーワークスのためのターゲットマーケティングキャンペーンを構築する予定です。



# データのインポート
データは、上のセクションでコピーした **vTargetMail.csv** という Azure Blob Storage ファイルにあります。

1.. [Azure Machine Learning studio](https://studio.azureml.net/)にサインインし、**Experiments**をクリックします。2.. 画面左下の「**+NEW**」をクリックし、「**Blank Experiment**」を選択します。3.. 実験の名前を入力します。Targeted Marketing」と入力します。4.. モジュールペインの **Data Input and output** の下にある **Import data** module をキャンバスにドラッグする。5.. Properties] ペインで、Azure Blob Storage の詳細 (アカウント名、キー、コンテナ名) を指定します。

experiment キャンバスの下にある **Run** をクリックして、実験を実行します。

![画像08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2742714/a8a03202-8ca8-eecf-0eba-57d1858b459e.png)

実験が正常に終了したら、Import Data モジュールの下部にある出力ポートをクリックし、**Visualize** を選択してインポートしたデータを確認します。

![画像09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2742714/7e288b97-f8e4-4ace-4953-0f233e6d990e.png)

# データのクリーンアップ

データをきれいにするには、モデルに関係のない列をいくつか削除する。これを行うには

①	**Data Transformation < Manipulation** の下にある **Select Columns in Dataset** モジュールをキャンバスにドラッグします。このモジュールを**Import Data**モジュールに接続します。
②	プロパティペインの**Launch column selector**をクリックし、ドロップする列を指定します。

![画像10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2742714/b65521c3-0246-bc9b-1187-f6022a803e99.png)

③	2つのカラムを除外する。**CustomerAlternateKey** と **GeographyKey** の 2 つのカラムを除外します。

![画像11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2742714/2072d0cc-a67b-b525-d6b5-6cdc6634dfc6.png)

# モデルの構築
80%は機械学習モデルの学習用、20%はモデルのテスト用としてデータを80対20に分割する。この2値分類問題には、「2クラス」アルゴリズムを使用します。

①	**SplitData**モジュールをキャンバスにドラッグし、「Select Columns in DataSet」で接続します。
②	プロパティペインで、「Fraction of rows in the first output dataset」に「0.8」を入力します。

![画像12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2742714/37f0304f-4dd7-3b41-d09e-a828a7a9d974.png)

③	**Two-Class Boosted Decision Tree**モジュールを検索し、キャンバスにドラッグします。
④	**Train Model**モジュールを検索してキャンバスにドラッグし、**Two-Class Boosted Decision Tree**（MLアルゴリズム）モジュールと**Split Data**（アルゴリズムを学習させるデータ）モジュールに接続して入力を指定します。

![画像13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2742714/f0c7dee5-682e-d19d-d34f-f33a43a27c40.png)

⑤	次に、[プロパティ] ペインで [**列セレクタを起動**] をクリックします。予測する列として、**BikeBuyer** 列を選択します。

![画像14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2742714/31ea94d8-5d72-c4eb-c527-ce13fe8937d7.png)

# モデルを評価する

次に、このモデルがテストデータでどのように動作するかをテストします。選択したアルゴリズムと異なるアルゴリズムを比較し、どちらがより良いパフォーマンスを示すかを確認します。

①	**Score Model** モジュールをキャンバスにドラッグし、**Train Model** および **Split Data** モジュールに接続します。

![画像15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2742714/9d309b74-24f1-e3dc-aaa3-0e6e5820ba02.png)

②	**Two-Class Bayes Point Machine**を検索し、実験キャンバスにドラッグします。このアルゴリズムが、Two-Class Boosted Decision Treeと比較して、どのようなパフォーマンスを示すかを比較します。
③	Train Model と Score Model モジュールをコピーして、キャンバスに貼り付けます。
④	**Evaluate Model** モジュールを検索して、キャンバスにドラッグし、2つのアルゴリズムを比較します。
⑤	実験を**実行**します。

![画像16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2742714/9acc56bb-c994-ced6-1deb-84efd0844a64.png)

⑥	Evaluate Model モジュールの下部にある出力ポートをクリックし、Visualize をクリックします。

![画像17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2742714/279b49b0-cc0e-1099-0be5-2d1e152241c4.png)

提供される指標は、ROC曲線、精度-再現性ダイアグラム、リフトカーブである。これらの指標を見ると、最初のモデルが2番目のモデルよりも良い性能を発揮していることがわかります。最初のモデルが何を予測したかを見るには、スコア・モデルの出力ポートをクリックし、可視化をクリックします。

![画像18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2742714/50f6b140-198b-b83a-9863-72772c451e3b.png)

テストデータセットに2つのカラムが追加されているのがわかります。1. スコアリングされた確率：顧客がバイクの購入者である可能性。2. 2. スコアされたラベル：モデルによって行われた分類 - 自転車の購入者（1）またはそうでない（0）。このラベリングのための確率の閾値は50％に設定されており、調整することが可能です。

BikeBuyer列（実際）とScored Labels列（予測）を比較すると、モデルがどの程度うまく機能したかが分かります。次のステップとして、このモデルを使用して新規顧客の予測を行い、このモデルをWebサービスとして公開したり、SQL Data Warehouseに結果を書き戻したりすることが可能です。


# さらに詳しく

・予測型機械学習モデルの構築の詳細については、[Introduction to Machine Learning on Azure](https://azure.microsoft.com/documentation/articles/machine-learning-what-is-machine-learning/)を参照してください。
・大規模なデータセットのコピーには、Teradata Parallel Transporterのロード/アンロード・オペレーターとAzure Blob Storageの間のインターフェイスである[Teradata Access Module for Azure](https://docs.teradata.com/reader/p~0sSD4zl4K8YPbEGnM3Rg/TTu_WJMMIpo2TEaxFMFopQ)の利用を検討してください。

#### Teradata Vantageへのお問合せ
[Teradata Vantage へのお問合せ](https://www.teradata.jp/About-Us/Contact)