次の方法で共有


チュートリアル: 不正行為検出モデルを作成、評価、スコア付けする

このチュートリアルでは、Microsoft Fabric での Synapse Data Science ワークフローのエンド ツー エンドの例を示します。 このシナリオでは、履歴データでトレーニングされた機械学習アルゴリズムを使用して不正行為検出モデルを構築します。 その後、モデルを使用して、将来の不正なトランザクションを検出します。

このチュートリアルでは、次の手順について説明します。

  • カスタム ライブラリをインストールする
  • データを読み込む
  • 探索的データ分析を通じてデータを理解して処理する
  • scikit-learn を使用して機械学習モデルをトレーニングし、MLflow と Fabric の自動ログ機能を使用して実験を追跡する
  • 最高のパフォーマンスを持つ機械学習モデルを保存して登録する
  • スコアリングと予測のために機械学習モデルを読み込む

前提 条件

ノートブックで作業を進める

ノートブックを使って次のいずれかのオプションを選択できます。

  • 組み込みのノートブックを開いて実行します。
  • GitHub からノートブックをアップロードします。

組み込みのノートブックを開く

このチュートリアルには、不正検出 ノートブックのサンプルが付属しています。

  1. このチュートリアルのサンプルノートブックを開くには、手順に従って、データサイエンスチュートリアル用にシステムを準備してください

  2. コードの実行を開始する前に、必ずレイクハウスをノートブックにアタッチしてください。

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 は、TimeAmountを除くすべての機能を変換しました。 機密性を保護するために、データセットに関する元の機能や背景情報を提供することはできません。

これらの詳細では、データセットについて説明します。

  • V1V2V3、...、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 に変換して視覚化を容易にします。 最後に、データ内のクラス分布を調べて視覚化します。

生データを表示する

  1. display コマンドを使用して、生データを探索し、高レベルの統計情報を表示します。 データの視覚化の詳細については、Microsoft Fabric のノートブックの視覚化を参照してください。

    display(df)
    
  2. データセットに関する基本的な情報を出力します。

    # Print dataset basic information
    print("records read: " + str(df.count()))
    print("Schema: ")
    df.printSchema()
    

データを変換する

  1. データセット列を正しい型にキャストします。

    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)
    
  2. 視覚化と処理を容易にするために、Spark DataFrame を pandas DataFrame に変換します。

    df_pd = df.toPandas()
    

データセット内のクラス分布を調べる

  1. データセットにクラス分布を表示します。

    # 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のデータセット クラス分布を返します。 このクラス分布は、ほとんどの取引が詐欺でないことを示しています。 そのため、オーバーフィットを回避するには、モデルトレーニングの前にデータの前処理が必要です。

  2. 不正トランザクションと非侵害トランザクションの分布を表示して、データセット内のクラスの不均衡を表示するには、プロットを使用します。

    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)
    
  3. 取引金額の 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 での機械学習の実験」を参照してください。

  1. その他のメトリック、パラメーター、ファイルを追跡するには、MLflow の自動ログ構成を更新するように exclusive=False を設定します。

    mlflow.autolog(exclusive=False)
    
  2. 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),
            ],
        )
    

トレーニングの特徴の重要度を決定する

  1. 不均衡なデータセットでトレーニングしたモデルの特徴量の重要度を決定します。

    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")
    
  2. バランスの取れたデータでトレーニングしたモデルに対して、特徴量の重要度を決定します。 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はバランスの取れたデータでトレーニングされています。

コンピューティング モデルのメトリック

  1. 予測を実行し、予測結果を 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
    
  2. prediction_to_spark 関数を使用して、modelsmote_modelの 2 つのモデルで予測を実行します。

    predictions = prediction_to_spark(model, test)
    smote_predictions = prediction_to_spark(smote_model, test)
    predictions.limit(10).toPandas()
    
  3. 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 はクラスの数です。

  1. 混同行列を使用して、テスト データに対するトレーニング済みの機械学習モデルのパフォーマンスを要約します。

    # 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)
    
  2. 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")
    
  3. 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 指標を用いてパフォーマンスを評価するには、

  1. 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    
    
  2. 不均衡なデータに対してトレーニングしたモデルの 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})
    
  3. バランスの取れたデータでトレーニングしたモデルの 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 を使用したモデル スコアリングの」を参照してください。

  1. バッチ スコアリングのためにパフォーマンスの高いモデル (バージョン 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)
    
  2. 予測をレイクハウスに保存します。

    # Save the predictions to the lakehouse
    batch_predictions.write.format("delta").mode("overwrite").save(f"{DATA_FOLDER}/predictions/batch_predictions")