次の方法で共有


Explainable Boosting Machine のトレーニング - 回帰 (プレビュー)

この記事では、Microsoft Fabric で説明可能なブースト マシン (EBM) を使用して回帰モデルをトレーニングする方法について説明します。 EBM は、勾配ブースティングの力とモデルの解釈可能性に重点を置いた機械学習手法です。 EBM は、勾配ブースティングと同様にデシジョン ツリーのブレンドを作成しますが、人間が判読できるモデルの生成に独自の焦点を当てています。 EBM は、正確な予測と、それらの予測に対する明確で直感的な説明の両方を提供します。 EBM は、医療、財務、規制コンプライアンスを含むアプリケーションに適しており、モデルの決定を推進する基になる要因を理解することが不可欠です。

SynapseML では、Apache Spark を搭載した説明可能なブースト マシンのスケーラブルな実装を使用して、新しいモデルをトレーニングできます。 このチュートリアルでは、Apache Spar を使用して、Microsoft Fabric 内で説明可能なブースト マシンのスケーラビリティと解釈可能性を適用する方法について説明します。 Microsoft Fabric での説明可能なブースティング マシンの使用は、現在プレビュー段階です。

重要

この機能は、プレビュー 段階にあります。

説明可能なブースト マシンの利点

EBM は、解釈可能性と予測能力を独自に組み合わせたものであり、機械学習モデルの透明性と理解度が重要な場合に理想的な選択になります。 ユーザーは、EBM を使用して、予測を推進する基になる要因に関する貴重な分析情報を構築し、モデルが特定の決定や予測を行う理由を理解できます。 これは、AI システムでの信頼を構築するために不可欠です。

データ内の複雑な関係を明らかにし、明確で解釈可能な結果を提供する能力により、EBM は財務、医療、不正行為の検出などに非常に役立ちます。これらの分野では、モデルの説明可能性は有用であるだけでなく、多くの場合、規制要件です。 最終的に、EBM はモデルのパフォーマンスと透明性のバランスを取ることができ、正確で理解しやすい、説明責任のある AI ソリューションを確保できます。

前提 条件

  • Microsoft Fabric サブスクリプションを取得します。 または、無料の Microsoft Fabric 試用版にサインアップします。

  • Microsoft Fabric にサインインします。

  • ホーム ページの左下にあるエクスペリエンス スイッチャーを使用して、Fabric に切り替えます。

    データ サイエンスを選択する場所を示すエクスペリエンス スイッチャー メニューのスクリーンショット。

  • [ + ] を選択し、[ ノートブック] を選択して、ワークスペースに新しいノートブックを作成します。

MLflow のインポート

MLflow を使用すると、モデルのパラメーターと結果を追跡できます。 次のコード スニペットは、実験と追跡に MLflow を使用する方法を示しています。 ebm-wine-quality値は、情報をログに記録する実験の名前です。

# Import MLflow
import mlflow

# Create a new experiment for EBM Wine Quality
mlflow.set_experiment("ebm-wine-quality")

データの読み込み

次のコード スニペットは、便利な回帰タスク データセットとして機能する、標準 の Wine Quality Data Set を読み込んで準備します。 Spark ベースの機械学習タスクで使用するためにデータセットを読み込み、操作、変換する方法を示します。 変換プロセスでは、Spark ML スタイルのトレーナーが必要とするため、Pandas データフレーム (as_frame引数を使用する場合に Sklearn によって返される) を Spark データフレームに変換する必要があります。

import sklearn

# Load the Wine Quality Data Set using the as_frame argument for Pandas compatibility.
bunch = sklearn.datasets.load_wine(as_frame=True)

# Extract the data into a Pandas dataframe.
pandas_df = bunch['data']

# Add the target variable to the Pandas dataframe.
pandas_df['target'] = bunch['target']

# Convert the Pandas dataframe to a Spark dataframe.
df = spark.createDataFrame(pandas_df)

# Display the resulting Spark dataframe.
display(df)

データを準備する

Spark ML スタイルの学習器の場合は、ベクター値列内で特徴を整理することが不可欠です。 ここでは、この列を "features" と参照します。この列には、ターゲット変数を除く、読み込まれたデータフレームのすべての列が含まれます。 このコード スニペットは、VectorAssembler リソースを使用して、以降の Spark ML ベースのモデリングのために機能を正しく構造化する方法を示しています。

from pyspark.ml.feature import VectorAssembler

# Define the name of the target variable column.
labelColumnName = 'target'

# Create a VectorAssembler to consolidate features.
assembler = VectorAssembler(outputCol='features')

# Specify the input columns, excluding the target column.
assembler.setInputCols([c for c in df.columns if c != labelColumnName])

# Transform the dataframe to include the 'features' column.
df_with_features = assembler.transform(df)

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

次のコード スニペットでは、Synapse ML ライブラリを使用して EBM 回帰モデルの作成プロセスを開始します。 最初に EBM 回帰推定を初期化し、回帰タスクに必要なことを指定します。 次に、予測する列がモデルで認識されるようにラベル列名を設定します。 最後に、前処理されたデータセットにモデルが適合します。

# Import the EBMRegression estimator from Synapse ML.
from synapse.ml.ebm import EbmRegression

# Create an instance of the EBMRegression estimator.
estimator = EbmRegression()

# Set the label column for the regression task.
estimator.setLabelCol(labelColumnName)

# Fit the EBM regression model to the prepared dataset.
model = estimator.fit(df_with_features)

グローバルな説明を表示する

視覚化ラッパーを取得し、 interpret ライブラリの show メソッドを利用して、モデルの全体的な説明を視覚化できます。 視覚化ラッパーは、モデルの視覚化エクスペリエンスを容易にするブリッジとして機能します。 次のコード スニペットは、その方法を示しています。

# Get the visualization wrapper for the model.
wrap = model.getVizWrapper()

# Generate the global explanation.
explanation = wrap.explain_global()

次に、 interpret ライブラリをインポートし、 show メソッドを使用して説明を表示します。

import interpret
interpret.show(explanation)

次の図に示す "重要度" という用語は、予測に対する各用語 (特徴または相互作用) の平均絶対寄与度 (スコア) を表しています。 これらの貢献度は、各ビン内のサンプルの数とサンプルの重み (該当する場合) を考慮して、トレーニング データセット全体で平均化されます。 説明には、最も重要な用語の上位 15 件が表示されます。

グローバルな説明のスクリーンショット。

ローカルの説明を表示する

提供される説明はグローバル レベルで動作しますが、一部のシナリオでは、機能ごとの出力も重要です。 トレーナーとモデルの両方に、 FeaturesScoresCol 列を設定する機能が用意されています。この列に値を設定すると、別のベクター値列が導入されます。 この列の各ベクトルは特徴列の長さと一致し、各値は同じインデックスの特徴に対応します。 これらの値は、モデルの最終的な出力に対する各特徴値の寄与を表します。

グローバルな説明とは異なり、現在のところ、機能ごとの出力の interpret 視覚化との直接統合はありません。 これは、グローバル視覚化は主に特徴の数 (通常は小さい値) でスケーリングされるのに対し、ローカルの説明は行数 (Spark データフレームの場合は相当な場合があります) でスケーリングされるためです。

次のコード スニペットは、 FeaturesScoresCol 列を設定して使用する方法を示しています。

# Set the FeaturesScoresCol to include per-feature outputs.
prediction = model.setFeatureScoresCol("featurescores").transform(df_with_features)

# For small datasets, you can collect the results to a single machine without issues.
# However, for larger datasets, caution should be exercised when collecting all rows locally.
# In this example, we convert to Pandas for easy local inspection.
predictions_pandas = prediction.toPandas()
predictions_list = prediction.collect()

最初の例の詳細を印刷します。

# Extract the first example from the collected predictions.

first = predictions_list[0]

# Print the lengths of the features and feature scores.
print('Length of the features is', len(first['features']), 'while the feature scores have length', len(first['featurescores']))

# Print the values of the features and feature scores.
print('Features are', first['features'])
print('Feature scores are', first['featurescores'])

コード スニペットでは、予測の最初の例で、特徴と対応する特徴スコアにアクセスして出力する方法を示しました。 このコードでは、次の出力が生成されます。

Length of the features is 13 while the feature scores have length 13
Features are [14.23, 1.71, 2.43, 15.6, 127.0, 2.8, 3.06, 0.28, 2.29, 5.64, 1.04, 3.92, 1065.0]
Feature scores are [-0.05929027436479602,-0.06788488062509922,-0.0385850430666259,-0.2761907140329337,-0.0423377816119861,0.03582834632321236,0.07759833436021146,-0.08428610897153033,-0.01322508472067107,-0.05477604157900576,0.08087667928468423,0.09010794901713073,-0.09521961842295387]