1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Azure】Microsoft Fabric でデータ サイエンスを始める

Posted at

1. はじめに

1-1 ご挨拶

初めまして、井村と申します。

Microsoft Fabricは、データの統合、エンジニアリング、分析、ビジネスインテリジェンスなどの機能を統合したSaaS型データ分析ツールです。
そしてMicrosoft Fabricは60日間のフリートライアル期間があります。

さらに、Microsoftが提供する無料のオンライン学習プラットフォームであるMicrosoft Learn(MSLearn)にはたくさんのMicrosoft Fabricに関する記事があります。

本記事はフリートライアル期間を利用してMSLearnの演習を行っていきます。
演習を通して気づいた点やTipsを、なるべく多くのスクリーンショットとともに備忘録として残します。

1-2 MSLearn

今回はMicrosoft Fabric でデータ サイエンスを始めるを行います。

この演習の学習の目的は以下の通りです。

  • データ サイエンス プロセスを理解する
  • Microsoft Fabric でノートブックを使用してモデルをトレーニングする
  • MLflow と実験を使用してモデルのトレーニングメトリックを追跡する

1-3 Get started with Microsoft Fabric

以下からMicrosoft Fabricのフリートライアルを開始できます。

Get started with Microsoft Fabric

2. MSLearnの要約

2-1 データ サイエンス プロセスを理解する

データから分析情報を抽出する一般的な方法は、データを視覚化することです。 複雑なデータセットがある場合は常に、詳細を確認し、データ内の入り組んだパターンを見つけます。

データ サイエンティストは、機械学習モデルをトレーニングして、データ内のパターンを見つけることができます。
モデルのトレーニングは重要ですが、データ サイエンス プロジェクトのタスクはこれのみではありません。 一般的なデータ サイエンス プロセスを調べる前に、トレーニングできる一般的な機械学習モデルを確認します。

一般的な機械学習モデルを調べる

機械学習の目的は、大量のデータに存在するパターンを識別できるようにモデルをトレーニングすることです。 その後、そのパターンを使って、アクションを実行できる新しい分析情報を提供する予測を行うことができます。

まず 4 つの一般的な機械学習モデルの種類を確認します。

000_1.png

  1. 分類 : カテゴリ値を予測します (例: 顧客がチャーンできるかどうか)。
  2. 回帰 : 数値を予測します (例: 製品の価格)。
  3. クラスタリング : 類似のデータ ポイントをクラスターまたはグループにグループ化します。
  4. 時系列予測 : 時系列データに基づいて将来の数値を予測します (例: 今後の月の予想売上)。

トレーニングする必要がある機械学習モデルの種類を決めるには、まず、ビジネス上の問題と利用できるデータを理解する必要があります。

データ サイエンス プロセスを理解する

機械学習モデルをトレーニングするプロセスには、通常、次のステップが含まれます。

000_2.png

  1. 問題を定義する : ビジネス ユーザーやアナリストと共に、モデルで予測する必要がある内容と、どのようなときにモデルは成功かを決めます。
  2. データを取得する : データ ソースを見つけ、レイクハウスにデータを格納してアクセスできるようにします。
  3. データを準備する : レイクハウスからノートブックにデータを読み取ることによって探索します。 モデルの要件に基づいてデータをクリーンアップして変換します。
  4. モデルのトレーニング : MLflow で実験を追跡することにより、試行錯誤に基づいてアルゴリズムとハイパーパラメーターの値を選びます。
  5. 分析情報を生成する : モデル バッチ スコアリングを使用して、要求された予測を生成します。

選んだ言語で利用できるオープンソース ライブラリを使って、モデルの準備とトレーニングを行うことができます。 たとえば、Python を使う場合は、Pandas と Numpy を使ってデータを準備し、Scikit-LearnPyTorchSynapseML などのライブラリを使ってモデルをトレーニングできます。

実験するときは、トレーニングしたさまざまなモデルのすべてについて、その概要を保持する必要があります。 選択がモデルの成功にどのように影響するかを理解する必要があります。 Microsoft Fabric で MLflow を使用して実験を追跡することにより、トレーニングしたモデルを簡単に管理およびデプロイできます。

MLflow は、機械学習のライフサイクルを管理するためのオープンソースプラットフォームです。
以下の2記事がとても分かりやすいです。

参考資料

2-2 データ サイエンス プロセスを理解するMicrosoft Fabric を使ってデータを調べて処理する

Microsoft Fabric にデータを取り込む

データは、ローカルおよびクラウド データ ソースの両方の複数のソースから取り込むことができます。 データ ソースに接続した後は、データを Microsoft Fabric のレイクハウスに保存できます。 レイクハウスを中央の場所として使用して、構造化、半構造化、非構造化の各ファイルを格納できます。

データを調査および変換する

データ サイエンティストは、ノートブックでのコードの記述と実行に最も精通している可能性があります。 Microsoft Fabric は、Spark コンピューティングを利用したノートブックを提供します。

ノートブックで作業している場合は、使用する言語を選択できます。 データ サイエンス ワークロードの場合は、PySpark (Python) または SparkR (R) などを使用できます。

Data Wrangler を使用してデータを準備する

Microsoft Fabric は Data Wrangler も用意されています。
データの概要統計を表示して、欠損値などの問題を見つけることができます。

3. 演習スタート

演習 - Microsoft Fabric でデータ サイエンスを探索する

上記URLから演習を開始できます。実際のMicrosoft Fabricを使うため、とても勉強になります。

3-1 ワークスペースの作成

1 . 【Azure】Microsoft Fabric レイクハウス内にあるファイルとテーブルにデータを取り込む。(3-1 レイクハウスを作成する)をご参照ください。

3-2 ノートブックを作成する

1 . 左側のメニュー バーで、[作成] を選択します。

003.png

2 . [新規] ページの [Data Science] セクションで、[ノートブック] を選択します。

004.png

1 つの [セル] を含む新しいノートブックが開きます。ノートブックは、[コード] または [マークダウン] を含むことができる 1 つまたは複数のセルで構成されます。

3 . 最初のセル (現在は [コード] セル) を選択し、右上の動的ツール バーで [M↓] ボタンを使用してセルを [マークダウン] セルに変換します。

005.png

4 . [編集] ボタンを使用してセルを編集モードに切り替えます。

006.png

5 . 以下テキストを入力します。

# Data science in Microsoft Fabric

007.png

3-3 データを取得する

これで、データを取得してモデルをトレーニングするためのコードを実行する準備ができました。 Azure Open Datasets から Diabetes データセットを操作します。 データを読み込んだ後、データを Pandas データフレームに変換します。これは、行と列でデータを操作するための一般的な構造です。

1 . [+ コード] アイコンを使用して、新しいコード セルをノートブックに追加します。

008.png

2 . 以下コードを入力・実行します。

python
# Azure storage access info for open dataset diabetes
blob_account_name = "azureopendatastorage"
blob_container_name = "mlsamples"
blob_relative_path = "diabetes"
blob_sas_token = r"" # Blank since container is Anonymous access
    
# Set Spark config to access  blob storage
wasbs_path = f"wasbs://%s@%s.blob.core.windows.net/%s" % (blob_container_name, blob_account_name, blob_relative_path)
spark.conf.set("fs.azure.sas.%s.%s.blob.core.windows.net" % (blob_container_name, blob_account_name), blob_sas_token)
print("Remote blob path: " + wasbs_path)
    
# Spark read parquet, note that it won't load any data yet by now
df = spark.read.parquet(wasbs_path)

009.png

3 . 以下コードを入力・実行します。Diabetes データセットの行と列が表示されます。[+ 新しいグラフ] を選択します。

python
# Azure storage access info for open dataset diabetes
blob_account_name = "azureopendatastorage"
blob_container_name = "mlsamples"
blob_relative_path = "diabetes"
blob_sas_token = r"" # Blank since container is Anonymous access
    
# Set Spark config to access  blob storage
wasbs_path = f"wasbs://%s@%s.blob.core.windows.net/%s" % (blob_container_name, blob_account_name, blob_relative_path)
spark.conf.set("fs.azure.sas.%s.%s.blob.core.windows.net" % (blob_container_name, blob_account_name), blob_sas_token)
print("Remote blob path: " + wasbs_path)
    
# Spark read parquet, note that it won't load any data yet by now
df = spark.read.parquet(wasbs_path)

010.png

4 . [独自のグラフの作成] を選択して、新しい視覚化を作成します。

011.png

5 . [グラフの種類]を[Box plot]、[Y軸]を[Y]に設定すると以下分布を表示する図になります。

012.png

3-4 データを準備する

データの取り込みと調査が完了したので、データを変換できます。 ノートブックでコードを実行することも、Data Wrangler を使用してコードを生成することもできます。

1 . データは Spark データフレームとして読み込まれます。 [Data Wrangler] は [Spark] または [Pandas] のデータフレームを受け付けますが、現在は [Pandas] と連携するように最適化されています。 そのため、データを [Pandas] データフレームに変換します。 ノートブックで次のコードを実行します。

python
df = df.toPandas()
df.head()

013.png

2 . ノートブック リボンの [Data Wrangler]を選択し、[df] データセットを選択します。

014.png

Data Wrangler が起動すると、データフレームの詳細な概要が [概要] パネルに生成されます。現在、ラベル列は [Y] で、これは連続変数です。 [Y] を予測する機械学習モデルをトレーニングするには、 [回帰モデル] をトレーニングする必要があります

015.png

現在、ラベル列は Y で、これは連続変数です。 Y を予測する機械学習モデルをトレーニングするには、回帰モデルをトレーニングする必要があります。 Y の (予測された) 値は解釈が困難な場合があります。 代わりに、ある人が糖尿病を発症するリスクが低いか高いかを予測する分類モデルのトレーニングを確認することができます。

分類モデルをトレーニングできるようにするには、Y の値に基づいてバイナリ ラベル列を作成する必要があります。

3 . Data Wrangler で [Y] 列を選択します。 [220-240]のビンの頻度が低いことが分かります。 75 パーセンタイルの 211.5 は、ヒストグラム内の 2 つの領域の切り替わりと大体一致しています。 この値を、低リスクと高リスクのしきい値として使用します。

016.png

4 . [操作群] パネルに移動し、 [数式] を展開した後、 [数式から列を作成] を選択します。

017.png

5 . [列の名前]を[Risk]、[列の数式]を[(df['Y'] > 211.5).astype(int)]に設定し、[適用]を押下します。

018.png

6 . プレビューに追加された新しい列 [Risk] を確認します。 値 1 を持つ行の数が、すべての行の約 25% となっていることを確認します。確認後、[コードをノートブックに追加する]を押下します。

019.png

7 . Data Wrangler によって生成されたコードでセルを実行します。

021.png

8 . 新しいセルで次のコードを実行して、[Risk] 列が期待どおりの値になっていることを確認します。

python
df_clean.describe()

022.png

3-5 機械学習モデルをトレーニングする

データの準備が完了したので、それを使用して機械学習モデルをトレーニングし、糖尿病の予測を行うことができます。

このデータセットを使用して、(Y を予測する) 回帰モデルまたは (Risk を予測する) 分類モデルという 2 種類の異なるモデルをトレーニングできます。 scikit-learn ライブラリを使用してモデルをトレーニングし、MLflow を使用してモデルを追跡します。

回帰モデルをトレーニングする

1 . 次のコードを実行して、データをトレーニング データセットとテスト データセットに分割し、予測したいラベル [Y] から特徴量を分離します。

python
from sklearn.model_selection import train_test_split
    
X, y = df_clean[['AGE','SEX','BMI','BP','S1','S2','S3','S4','S5','S6']].values, df_clean['Y'].values
    
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.30, random_state=0)

023.png

2 . ノートブックに新しいコード セルをもう 1 つ追加し、そこに次のコードを入力して実行します。

python
import mlflow
experiment_name = "diabetes-regression"
mlflow.set_experiment(experiment_name)

024.png

このコードでは、[diabetes-regression] という名前の MLflow 実験を作成します。 この実験でモデルが追跡されます。

python
from sklearn.linear_model import LinearRegression
    
with mlflow.start_run():
   mlflow.autolog()
    
   model = LinearRegression()
   model.fit(X_train, y_train)

025.png

このコードは、線形回帰を使用して回帰モデルをトレーニングします。 パラメーター、メトリック、および成果物は、MLflow で自動的にログに記録されます。

分類モデルをトレーニングする

1 . 次のコードを実行して、データをトレーニング データセットとテスト データセットに分割し、予測したいラベル [Risk] から特徴量を分離します。

python
from sklearn.model_selection import train_test_split
    
X, y = df_clean[['AGE','SEX','BMI','BP','S1','S2','S3','S4','S5','S6']].values, df_clean['Risk'].values
    
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.30, random_state=0)

026.png

2 . ノートブックに新しいコード セルをもう 1 つ追加し、そこに次のコードを入力して実行します。

python
import mlflow
experiment_name = "diabetes-classification"
mlflow.set_experiment(experiment_name)

027.png

このコードでは、[diabetes-classification] という名前の MLflow 実験を作成します。 この実験でモデルが追跡されます。

3 . ノートブックに新しいコード セルをもう 1 つ追加し、そこに次のコードを入力して実行します。

python
from sklearn.linear_model import LogisticRegression
    
with mlflow.start_run():
    mlflow.sklearn.autolog()

    model = LogisticRegression(C=1/0.1, solver="liblinear").fit(X_train, y_train)

このコードでは、ロジスティック回帰を使用して分類モデルをトレーニングします。 パラメーター、メトリック、および成果物は、MLflow で自動的にログに記録されます。

028.png

3-6 実験を調べる

Microsoft Fabric では、すべての実験を追跡し、それらを視覚的に調べることができます。

1 . 左側のハブ メニュー バーからワークスペースに移動します。

029.png

2 . diabetes-regression 実験を選択して開きます。

030.png

3 . [メトリックの実行] を確認して、回帰モデルがどの程度正確であるかを調べます。

031.png

4 . ワークスペースに戻り、diabetes-classification 実験を選択してこれを開きます。

032.png

5 . [メトリックの実行] を確認して、分類モデルの正確性を調べます。 異なる種類のモデルをトレーニングしたため、メトリックの種類が異なります。

033.png

3-7 モデルを保存する

複数の実験にわたってトレーニングした機械学習モデルを比較した後、パフォーマンスが最も良いモデルを選択することができます。 最適なパフォーマンス モデルを使用するには、モデルを保存し、それを使用して予測を生成します。

1 . 実験リボンで [MLモデルとして保存] を選択します。

034.png

2 . 新しく開いたポップアップ ウィンドウで [メソッドの選択]を[新しい MLモデルを作成する]、[フォルダーの選択]を[model]、[MLモデル名]を[model-diabetes] とし[保存]を押下します。

035.png

3 . 通知にて[MLモデルの表示]を押下します。

036.png

4 . 保存されたモデルは、[ML モデル バージョン]の下にリンクされています。

037.png

モデル、実験、実験の実行がリンクされています。これにより、モデルのトレーニング方法を追跡できます。

3-8 ノートブックを保存して Spark セッションを終了する

モデルのトレーニングと評価が完了したので、わかりやすい名前でノートブックを保存し、Spark セッションを終了します。

1 . 左側のハブ メニュー バーからノートブックに移動します。

038.png

2 . ノートブックのメニュー バーで、[設定]アイコンを使用してノートブックの設定を表示します。

039.png

3 . ノートブックの[名前]を[モデルのトレーニングと比較]に設定し、設定ペインを閉じます。

040.png

4 . ノートブック メニューで、 [セッションの停止] を選択し、 Spark セッションを終了します。

041.png

以上で演習は終了になります。
この演習では以下を学びました。

  • ノートブックを作成し、機械学習モデルをトレーニングしました。
  • scikit-learn を使用してモデルをトレーニングし、MLflow でそのパフォーマンスを追跡しました。

3-9 リソースをクリーンアップする

1 . 【Azure】Microsoft Fabric レイクハウス内にあるファイルとテーブルにデータを取り込む。(3-7 リソースをクリーンアップする)をご参照ください。

以上でワークスペースが削除されます。お疲れ様でした!

本演習を通じて Microsoft Fabric の演習 が一覧化されていることを初めて知りましたので共有致します。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?