チュートリアル: 不正行為検出モデルを作成、評価、スコア付けする
このチュートリアルでは、Microsoft Fabric での Synapse Data Science ワークフローのエンド ツー エンドの例を示します。 このシナリオでは、履歴データでトレーニングされた機械学習アルゴリズムを使用して不正行為検出モデルを構築します。 その後、モデルを使用して、将来の不正なトランザクションを検出します。
このチュートリアルでは、次の手順について説明します。
- カスタム ライブラリをインストールする
- データを読み込む
- 探索的データ分析を通じてデータを理解して処理する
- scikit-learn を使用して機械学習モデルをトレーニングし、MLflow と Fabric の自動ログ機能を使用して実験を追跡する
- 最高のパフォーマンスを持つ機械学習モデルを保存して登録する
- スコアリングと予測のために機械学習モデルを読み込む
前提 条件
Microsoft Fabric サブスクリプションを取得します。 または、無料でMicrosoft Fabric試用版 にサインアップします。
Microsoft Fabric にサインインします。
ホーム ページの左下にあるエクスペリエンス スイッチャーを使用して、Fabric に切り替えます。
- 必要に応じて、Microsoft Fabric でレイクハウスを作成するには、「Microsoft Fabric でレイクハウスを作成する」の説明に従ってください。
ノートブックで作業を進める
ノートブックを使って次のいずれかのオプションを選択できます。
- 組み込みのノートブックを開いて実行します。
- GitHub からノートブックをアップロードします。
組み込みのノートブックを開く
このチュートリアルには、不正検出 ノートブックのサンプルが付属しています。
このチュートリアルのサンプルノートブックを開くには、手順に従って、データサイエンスチュートリアル用にシステムを準備してください。
コードの実行を開始する前に、必ずレイクハウスをノートブックにアタッチしてください。
GitHub からノートブックをインポートする
このチュートリアルには、AIsample - Fraud Detection.ipynb ノートブックが付属しています。
このチュートリアルの付属のノートブックを開くには、「データ サイエンス用にシステムを準備する」の手順に従って、ノートブックをワークスペースにインポート します。
このページからコードをコピーして貼り付けたい場合は、新しいノートブック を作成することができます。
コードの実行を開始する前に、必ずレイクハウスをノートブックにアタッチしてください。
手順 1: カスタム ライブラリをインストールする
機械学習モデルの開発やアドホック データ分析の場合は、Apache Spark セッション用のカスタム ライブラリをすばやくインストールすることが必要になる場合があります。 ライブラリをインストールするには、2 つのオプションがあります。
- ノートブックのインライン インストール機能 (
%pip
または%conda
) を使用して、現在のノートブックにのみライブラリをインストールします。 - または、ファブリック環境を作成したり、パブリック ソースからライブラリをインストールしたり、カスタム ライブラリをアップロードしたりして、ワークスペース管理者がワークスペースの既定として環境をアタッチすることもできます。 その後、環境内のすべてのライブラリが、ワークスペース内のすべてのノートブックと Spark ジョブ定義で使用できるようになります。 環境の詳細については、「Microsoft Fabric で環境作成、構成、および使用する」を参照してください。
このチュートリアルでは、%pip install
を使用して imblearn
ライブラリをノートブックにインストールします。
手記
PySpark カーネルは、%pip install
の実行後に再起動します。 他のセルを実行する前に、必要なライブラリをインストールします。
# Use pip to install imblearn
%pip install imblearn
手順 2: データを読み込む
不正検出データセットには、2013 年 9 月から 2 日間にわたってヨーロッパのカード所有者が行ったクレジット カード トランザクションが含まれています。 データセットには、元のフィーチャに適用された主成分分析 (PCA) 変換が原因で、数値特徴のみが含まれます。 PCA は、Time
と Amount
を除くすべての機能を変換しました。 機密性を保護するために、データセットに関する元の機能や背景情報を提供することはできません。
これらの詳細では、データセットについて説明します。
V1
、V2
、V3
、...、V28
機能は、PCA で取得された主要コンポーネントですTime
機能には、トランザクションとデータセット内の最初のトランザクションの間の経過時間 (秒) が含まれていますAmount
機能はトランザクション量です。 この機能は、たとえば、コスト重視の学習に使用できます。Class
列は応答 (ターゲット) 変数です。 詐欺のための値は1
であり、それ以外の場合は0
です。
284,807 件のトランザクションのうち、不正なトランザクションは 492 件のみです。 少数派 (不正) クラスはデータの約 0.172% のみを占めるので、データセットは非常に不均衡です。
次の表に、creditcard.csv データのプレビューを示します。
Time | V1 | V2 | V3 | V4 | V5 | V6 | V7 | V8 | V9 | V10 | V11 | V12 | V13 | V14 | V15 | V16 | V17 | V18 | V19 | V20 | V21 | V22 | V23 | V24 | V25 | V26 | V27 | V28 | 金額 | クラス |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | -1.3598071336738 | -0.0727811733098497 | 2.53634673796914 | 1.37815522427443 | -0.338320769942518 | 0.462387777762292 | 0.239598554061257 | 0.0986979012610507 | 0.363786969611213 | 0.0907941719789316 | -0.551599533260813 | -0.617800855762348 | -0.991389847235408 | -0.311169353699879 | 1.46817697209427 | -0.470400525259478 | 0.207971241929242 | 0.0257905801985591 | 0.403992960255733 | 0.251412098239705 | -0.018306777944153 | 0.277837575558899 | -0.110473910188767 | 0.0669280749146731 | 0.128539358273528 | -0.189114843888824 | 0.133558376740387 | -0.0210530534538215 | 149.62 | "0" |
0 | 1.19185711131486 | 0.26615071205963 | 0.16648011335321 | 0.448154078460911 | 0.0600176492822243 | -0.0823608088155687 | -0.0788029833323113 | 0.0851016549148104 | -0.255425128109186 | -0.166974414004614 | 1.61272666105479 | 1.06523531137287 | 0.48909501589608 | -0.143772296441519 | 0.635558093258208 | 0.463917041022171 | -0.114804663102346 | -0.183361270123994 | -0.145783041325259 | -0.0690831352230203 | -0.225775248033138 | -0.638671952771851 | 0.101288021253234 | -0.339846475529127 | 0.167170404418143 | 0.125894532368176 | -0.00898309914322813 | 0.0147241691924927 | 2.69 | "0" |
データセットをダウンロードして lakehouse にアップロードする
さまざまなデータセットでこのノートブックを使用できるように、これらのパラメーターを定義します。
IS_CUSTOM_DATA = False # If True, the dataset has to be uploaded manually
TARGET_COL = "Class" # Target column name
IS_SAMPLE = False # If True, use only <SAMPLE_ROWS> rows of data for training; otherwise, use all data
SAMPLE_ROWS = 5000 # If IS_SAMPLE is True, use only this number of rows for training
DATA_FOLDER = "Files/fraud-detection/" # Folder with data files
DATA_FILE = "creditcard.csv" # Data file name
EXPERIMENT_NAME = "aisample-fraud" # MLflow experiment name
このコードは、公開されているバージョンのデータセットをダウンロードし、Fabric Lakehouse に格納します。
重要
実行する前に、必ずノートブックにレイクハウスを追加してください。 それ以外の場合は、エラーが発生します。
if not IS_CUSTOM_DATA:
# Download data files into the lakehouse if they're not already there
import os, requests
remote_url = "https://synapseaisolutionsa.blob.core.windows.net/public/Credit_Card_Fraud_Detection"
fname = "creditcard.csv"
download_path = f"/lakehouse/default/{DATA_FOLDER}/raw"
if not os.path.exists("/lakehouse/default"):
raise FileNotFoundError("Default lakehouse not found, please add a lakehouse and restart the session.")
os.makedirs(download_path, exist_ok=True)
if not os.path.exists(f"{download_path}/{fname}"):
r = requests.get(f"{remote_url}/{fname}", timeout=30)
with open(f"{download_path}/{fname}", "wb") as f:
f.write(r.content)
print("Downloaded demo data files into lakehouse.")
MLflow 実験の追跡を設定する
実験追跡プロセスでは、実行するすべての実験に関連するすべての実験関連の情報が保存されます。 特定の実験を実行するときに、より良い結果を得る方法がない場合があります。 そのような場合は、実験を停止し、新しい実験を試す必要があります。
Microsoft Fabric の Synapse Data Science エクスペリエンスには、自動ログ機能が含まれています。 この機能により、トレーニング中に機械学習モデルのパラメーター、メトリック、項目を自動的にログに記録するために必要なコードの量が減ります。 この機能により、MLflow 自動ログ機能が拡張されます。 データ サイエンス エクスペリエンスに深い統合があります。
自動ログ記録を使用すると、手動で追跡しなくても、さまざまなモデルや実験のパフォーマンスを簡単に追跡および比較できます。 詳細については、「Microsoft Fabric での自動ログ記録の」を参照してください。
ノートブック セッションで Microsoft Fabric の自動ログ記録を無効にするには、mlflow.autolog()
を呼び出して disable=True
設定します。
# Set up MLflow for experiment tracking
import mlflow
mlflow.set_experiment(EXPERIMENT_NAME)
mlflow.autolog(disable=True) # Disable MLflow autologging
レイクハウスから生データを読み取る
このコードは、「レイクハウス」から生データを読み取ります。
df = (
spark.read.format("csv")
.option("header", "true")
.option("inferSchema", True)
.load(f"{DATA_FOLDER}/raw/{DATA_FILE}")
.cache()
)
手順 3: 探索的データ分析を実行する
このセクションでは、まず生データと高レベルの統計について説明します。 次に、データを変換するには、列を正しい型にキャストし、Spark DataFrame から pandas DataFrame に変換して視覚化を容易にします。 最後に、データ内のクラス分布を調べて視覚化します。
生データを表示する
display
コマンドを使用して、生データを探索し、高レベルの統計情報を表示します。 データの視覚化の詳細については、Microsoft Fabric のノートブックの視覚化を参照してください。display(df)
データセットに関する基本的な情報を出力します。
# Print dataset basic information print("records read: " + str(df.count())) print("Schema: ") df.printSchema()
データを変換する
データセット列を正しい型にキャストします。
import pyspark.sql.functions as F df_columns = df.columns df_columns.remove(TARGET_COL) # Ensure that TARGET_COL is the last column df = df.select(df_columns + [TARGET_COL]).withColumn(TARGET_COL, F.col(TARGET_COL).cast("int")) if IS_SAMPLE: df = df.limit(SAMPLE_ROWS)
視覚化と処理を容易にするために、Spark DataFrame を pandas DataFrame に変換します。
df_pd = df.toPandas()
データセット内のクラス分布を調べる
データセットにクラス分布を表示します。
# The distribution of classes in the dataset print('No Frauds', round(df_pd['Class'].value_counts()[0]/len(df_pd) * 100,2), '% of the dataset') print('Frauds', round(df_pd['Class'].value_counts()[1]/len(df_pd) * 100,2), '% of the dataset')
このコードは、99.83%
No Frauds
と 0.17%Frauds
のデータセット クラス分布を返します。 このクラス分布は、ほとんどの取引が詐欺でないことを示しています。 そのため、オーバーフィットを回避するには、モデルトレーニングの前にデータの前処理が必要です。不正トランザクションと非侵害トランザクションの分布を表示して、データセット内のクラスの不均衡を表示するには、プロットを使用します。
import seaborn as sns import matplotlib.pyplot as plt colors = ["#0101DF", "#DF0101"] sns.countplot(x='Class', data=df_pd, palette=colors) plt.title('Class Distributions \n (0: No Fraud || 1: Fraud)', fontsize=10)
取引金額の 5 つの数値の概要 (最小スコア、最初の四分位数、中央値、3 番目の四分位数、および最大スコア) をボックス プロットと共に表示します。
fig, (ax1, ax2) = plt.subplots(ncols=2, figsize=(12,5)) s = sns.boxplot(ax = ax1, x="Class", y="Amount", hue="Class",data=df_pd, palette="PRGn", showfliers=True) # Remove outliers from the plot s = sns.boxplot(ax = ax2, x="Class", y="Amount", hue="Class",data=df_pd, palette="PRGn", showfliers=False) # Keep outliers from the plot plt.show()
非常に不均衡なデータの場合、箱ひげ図では正確な分析情報が表示されない場合があります。 ただし、最初に
Class
不均衡の問題に対処してから、より正確な分析情報を得るための同じプロットを作成できます。
手順 4: モデルをトレーニングして評価する
ここでは、不正取引を分類する LightGBM モデルをトレーニングします。 不均衡なデータセットとバランスの取れたデータセットの両方で LightGBM モデルをトレーニングします。 次に、両方のモデルのパフォーマンスを比較します。
トレーニング データセットとテスト データセットを準備する
トレーニングの前に、データをトレーニング データセットとテスト データセットに分割します。
# Split the dataset into training and testing sets
from sklearn.model_selection import train_test_split
train, test = train_test_split(df_pd, test_size=0.15)
feature_cols = [c for c in df_pd.columns.tolist() if c not in [TARGET_COL]]
トレーニング データセットに SMOTE を適用する
imblearn
ライブラリでは、合成少数派オーバーサンプリング手法 (SMOTE) アプローチを使用して、不均衡な分類の問題に対処します。 不均衡な分類は、少数派クラスの例が少なすぎる場合に発生し、モデルが意思決定境界を効果的に学習できるようにします。 SMOTE は、少数派クラスの新しいサンプルを合成するために最も広く使用されているアプローチです。
テスト データセットではなく、トレーニング データセットにのみ SMOTE を適用します。 テスト データを使用してモデルにスコアを付ける場合は、運用環境で見えないデータに対するモデルのパフォーマンスの近似値が必要です。 有効な近似値を得るために、テスト データは元の不均衡な分布に依存して、運用環境のデータを可能な限り厳密に表します。
# Apply SMOTE to the training data
import pandas as pd
from collections import Counter
from imblearn.over_sampling import SMOTE
X = train[feature_cols]
y = train[TARGET_COL]
print("Original dataset shape %s" % Counter(y))
sm = SMOTE(random_state=42)
X_res, y_res = sm.fit_resample(X, y)
print("Resampled dataset shape %s" % Counter(y_res))
new_train = pd.concat([X_res, y_res], axis=1)
SMOTE の詳細については、SMOTE メソッド の scikit-learn リファレンス ページと、リソースのオーバーサンプリングに関する scikit-learn ユーザー ガイドを参照してください。
機械学習モデルのトレーニングと実験の実行
Microsoft Fabric の Apache Spark を使用すると、ビッグ データを使用した機械学習が可能になります。 Apache Spark を使用すると、大量の構造化データ、非構造化データ、高速移動データから貴重な分析情報を得ることができます。
Microsoft Fabric の Apache Spark を使用して機械学習モデルをトレーニングするためのオプションとして、Apache Spark MLlib、SynapseML、その他のオープンソース ライブラリがいくつかあります。 詳細については、「Microsoft Fabricで機械学習モデルをトレーニングする」を参照してください。
機械学習実験 は、関連するすべての機械学習実行の組織と制御の主要な単位として機能します。 実行 は、モデル コードの 1 回の実行に対応します。 機械学習 実験追跡 には、パラメーター、メトリック、モデル、その他の成果物など、すべての実験とそのコンポーネントの管理が含まれます。
実験の追跡では、特定の機械学習実験に必要なすべてのコンポーネントを整理できます。 また、保存された実験を使用して、過去の結果を簡単に再現できます。 機械学習の実験の詳細については、「Microsoft Fabric での機械学習の実験」を参照してください。
その他のメトリック、パラメーター、ファイルを追跡するには、MLflow の自動ログ構成を更新するように
exclusive=False
を設定します。mlflow.autolog(exclusive=False)
LightGBM を使用して 2 つのモデルをトレーニングします。 一方のモデルは不均衡なデータセットを処理し、もう 1 つのモデルは (SMOTE を介して) バランスの取れたデータセットを処理します。 次に、2 つのモデルのパフォーマンスを比較します。
import lightgbm as lgb model = lgb.LGBMClassifier(objective="binary") # Imbalanced dataset smote_model = lgb.LGBMClassifier(objective="binary") # Balanced dataset
# Train LightGBM for both imbalanced and balanced datasets and define the evaluation metrics print("Start training with imbalanced data:\n") with mlflow.start_run(run_name="raw_data") as raw_run: model = model.fit( train[feature_cols], train[TARGET_COL], eval_set=[(test[feature_cols], test[TARGET_COL])], eval_metric="auc", callbacks=[ lgb.log_evaluation(10), ], ) print(f"\n\nStart training with balanced data:\n") with mlflow.start_run(run_name="smote_data") as smote_run: smote_model = smote_model.fit( new_train[feature_cols], new_train[TARGET_COL], eval_set=[(test[feature_cols], test[TARGET_COL])], eval_metric="auc", callbacks=[ lgb.log_evaluation(10), ], )
トレーニングの特徴の重要度を決定する
不均衡なデータセットでトレーニングしたモデルの特徴量の重要度を決定します。
with mlflow.start_run(run_id=raw_run.info.run_id): importance = lgb.plot_importance( model, title="Feature importance for imbalanced data" ) importance.figure.savefig("feauture_importance.png") mlflow.log_figure(importance.figure, "feature_importance.png")
バランスの取れたデータでトレーニングしたモデルに対して、特徴量の重要度を決定します。 SMOTE によって、バランスの取れたデータが生成されました。
with mlflow.start_run(run_id=smote_run.info.run_id): smote_importance = lgb.plot_importance( smote_model, title="Feature importance for balanced (via SMOTE) data" ) smote_importance.figure.savefig("feauture_importance_smote.png") mlflow.log_figure(smote_importance.figure, "feauture_importance_smote.png")
不均衡なデータセットを使用してモデルをトレーニングするには、バランスの取れたデータセットでトレーニングされたモデルと比較すると、重要な特徴に大きな違いがあります。
モデルを評価する
ここでは、トレーニング済みの 2 つのモデルを評価します。
- 未処理の不均衡データでトレーニングされた
model
smote_model
はバランスの取れたデータでトレーニングされています。
コンピューティング モデルのメトリック
予測を実行し、予測結果を Spark DataFrame に変換する
prediction_to_spark
関数を定義します。 その後、SynapseMLを使用して、予測結果に関するモデル統計を計算できます。from pyspark.sql.functions import col from pyspark.sql.types import IntegerType, DoubleType def prediction_to_spark(model, test): predictions = model.predict(test[feature_cols], num_iteration=model.best_iteration_) predictions = tuple(zip(test[TARGET_COL].tolist(), predictions.tolist())) dataColumns = [TARGET_COL, "prediction"] predictions = ( spark.createDataFrame(data=predictions, schema=dataColumns) .withColumn(TARGET_COL, col(TARGET_COL).cast(IntegerType())) .withColumn("prediction", col("prediction").cast(DoubleType())) ) return predictions
prediction_to_spark
関数を使用して、model
とsmote_model
の 2 つのモデルで予測を実行します。predictions = prediction_to_spark(model, test) smote_predictions = prediction_to_spark(smote_model, test) predictions.limit(10).toPandas()
2 つのモデルのコンピューティング メトリック:
from synapse.ml.train import ComputeModelStatistics metrics = ComputeModelStatistics( evaluationMetric="classification", labelCol=TARGET_COL, scoredLabelsCol="prediction" ).transform(predictions) smote_metrics = ComputeModelStatistics( evaluationMetric="classification", labelCol=TARGET_COL, scoredLabelsCol="prediction" ).transform(smote_predictions) display(metrics)
混同行列を使用してモデルのパフォーマンスを評価する
"混同行列" には、以下の数値が表示されます。
- 真陽性 (TP)
- 真陰性 (TN)
- 偽陽性 (FP)
- 偽陰性 (FN)
テストデータでスコア付けされるときにモデルが生成するもの 二項分類の場合、モデルは 2x2
混同行列を返します。 多クラス分類の場合、モデルは nxn
混同行列を返します。ここで、n
はクラスの数です。
混同行列を使用して、テスト データに対するトレーニング済みの機械学習モデルのパフォーマンスを要約します。
# Collect confusion matrix values cm = metrics.select("confusion_matrix").collect()[0][0].toArray() smote_cm = smote_metrics.select("confusion_matrix").collect()[0][0].toArray() print(cm)
smote_model
の予測の混同行列をプロットします (バランスの取れたデータに基づいてトレーニングされます)。# Plot the confusion matrix import seaborn as sns def plot(cm): """ Plot the confusion matrix. """ sns.set(rc={"figure.figsize": (5, 3.5)}) ax = sns.heatmap(cm, annot=True, fmt=".20g") ax.set_title("Confusion Matrix") ax.set_xlabel("Predicted label") ax.set_ylabel("True label") return ax with mlflow.start_run(run_id=smote_run.info.run_id): ax = plot(smote_cm) mlflow.log_figure(ax.figure, "ConfusionMatrix.png")
model
の予測の混同行列をプロットします (未加工の不均衡なデータに対してトレーニングされます)。with mlflow.start_run(run_id=raw_run.info.run_id): ax = plot(cm) mlflow.log_figure(ax.figure, "ConfusionMatrix.png")
AUC-ROC と AUPRC 指標を使用してモデルのパフォーマンスを評価する
曲線レシーバ動作特性下面積(AUC-ROC)測定は、二項分類子のパフォーマンスを評価します。 AUC-ROC グラフでは、真陽性率 (TPR) と偽陽性率 (FPR) の間のトレードオフが視覚化されます。
場合によっては、Precision-Recall 曲線下面積 (AUPRC) 指標に基づいて分類器を評価する方が適切です。 AUPRC 曲線では、次のレートが結合されます。
- 精度、または正の予測値 (PPV)
- リコールまたは TPR
AUC-ROC および AUPRC 指標を用いてパフォーマンスを評価するには、
AUC-ROC および AUPRC の測定値を返す関数を定義します。
from pyspark.ml.evaluation import BinaryClassificationEvaluator def evaluate(predictions): """ Evaluate the model by computing AUROC and AUPRC with the predictions. """ # Initialize the binary evaluator evaluator = BinaryClassificationEvaluator(rawPredictionCol="prediction", labelCol=TARGET_COL) _evaluator = lambda metric: evaluator.setMetricName(metric).evaluate(predictions) # Calculate AUROC, baseline 0.5 auroc = _evaluator("areaUnderROC") print(f"The AUROC is: {auroc:.4f}") # Calculate AUPRC, baseline positive rate (0.172% in the data) auprc = _evaluator("areaUnderPR") print(f"The AUPRC is: {auprc:.4f}") return auroc, auprc
不均衡なデータに対してトレーニングしたモデルの AUC-ROC と AUPRC メトリックをログに記録します。
with mlflow.start_run(run_id=raw_run.info.run_id): auroc, auprc = evaluate(predictions) mlflow.log_metrics({"AUPRC": auprc, "AUROC": auroc}) mlflow.log_params({"Data_Enhancement": "None", "DATA_FILE": DATA_FILE})
バランスの取れたデータでトレーニングしたモデルの AUC-ROC と AUPRC メトリックをログに記録します。
with mlflow.start_run(run_id=smote_run.info.run_id): auroc, auprc = evaluate(smote_predictions) mlflow.log_metrics({"AUPRC": auprc, "AUROC": auroc}) mlflow.log_params({"Data_Enhancement": "SMOTE", "DATA_FILE": DATA_FILE})
バランスの取れたデータでトレーニングされたモデルは、不均衡なデータでトレーニングされたモデルと比較して高い AUC-ROC と AUPRC 値を返します。 これらの対策に基づいて、SMOTE は、非常に不均衡なデータを操作するときにモデルのパフォーマンスを向上させる効果的な手法のようです。
次の図に示すように、実験はそれぞれの名前でログに記録されます。 ワークスペースで実験パラメーターとパフォーマンス メトリックを追跡できます。
この図は、バランスの取れたデータセットでトレーニングされたモデルのパフォーマンス メトリックを示しています (バージョン 2)。
バージョン 1 選択すると、不均衡なデータセットでトレーニングされたモデルのメトリックを確認できます。 メトリックを比較すると、バランスの取れたデータセットでトレーニングされたモデルの AUROC が高くなります。 これらの結果は、このモデルが 0
として 0
クラスを正しく予測し、1
クラスを 1
として予測する方が優れていることを示しています。
手順 5: モデルを登録する
MLflow を使用して 2 つのモデルを登録します。
# Register the model
registered_model_name = f"{EXPERIMENT_NAME}-lightgbm"
raw_model_uri = "runs:/{}/model".format(raw_run.info.run_id)
mlflow.register_model(raw_model_uri, registered_model_name)
smote_model_uri = "runs:/{}/model".format(smote_run.info.run_id)
mlflow.register_model(smote_model_uri, registered_model_name)
手順 6: 予測結果を保存する
Microsoft Fabric を使用すると、ユーザーは PREDICT
スケーラブルな機能を使用して機械学習モデルを運用化できます。 この関数は、任意のコンピューティング エンジンでのバッチ スコアリング (またはバッチ推論) をサポートします。
バッチ予測は、Microsoft Fabric ノートブックまたはモデルの項目ページから直接生成できます。 PREDICT
の詳細については、「Microsoft Fabric での PREDICT を使用したモデル スコアリングの」を参照してください。
バッチ スコアリングのためにパフォーマンスの高いモデル (バージョン 2) を読み込み、予測結果を生成します。
from synapse.ml.predict import MLFlowTransformer spark.conf.set("spark.synapse.ml.predict.enabled", "true") model = MLFlowTransformer( inputCols=feature_cols, outputCol="prediction", modelName=f"{EXPERIMENT_NAME}-lightgbm", modelVersion=2, ) test_spark = spark.createDataFrame(data=test, schema=test.columns.to_list()) batch_predictions = model.transform(test_spark)
予測をレイクハウスに保存します。
# Save the predictions to the lakehouse batch_predictions.write.format("delta").mode("overwrite").save(f"{DATA_FOLDER}/predictions/batch_predictions")