Partage via


Tutoriel Partie 4 : Effectuer un scoring par lots et enregistrer les prédictions dans un lakehouse

Dans ce tutoriel, vous allez apprendre à importer le modèle LightGBMClassifier enregistré, qui a été entraîné dans la partie 3, en utilisant le registre de modèles MLflow de Microsoft Fabric, et à effectuer des prédictions par lots sur un jeu de données de test chargé à partir d’un « lakehouse ».

Microsoft Fabric vous permet d’opérationnaliser des modèles Machine Learning avec une fonction évolutive appelée PREDICT, qui prend en charge le scoring par lots dans n’importe quel moteur de calcul. Vous pouvez générer des prédictions par lots directement à partir d’un bloc-notes Microsoft Fabric ou d’une page d’élément d’un modèle donné. En savoir plus sur PREDICT.

Pour générer des prédictions par lots sur le jeu de données de test, vous allez utiliser la version 1 du modèle LightGBM entraîné qui a démontré les meilleures performances parmi tous les modèles Machine Learning entraînés. Vous allez charger le jeu de données de test dans un DataFrame Spark et créer un objet MLFlowTransformer pour générer des prédictions par lots. Vous pouvez ensuite appeler la fonction PREDICT de trois façons suivantes :

  • API Transformer de SynapseML
  • Spark SQL API
  • Fonction définie par l’utilisateur PySpark (UDF)

Conditions préalables

  • Obtenez un abonnement Microsoft Fabric . Vous pouvez également vous inscrire à une version d’évaluation gratuite de Microsoft Fabric .

  • Connectez-vous à Microsoft Fabric.

  • Utilisez le sélecteur d’expérience en bas à gauche de votre page d’accueil pour basculer vers Fabric.

    Capture d’écran du menu sélecteur d’expérience, montrant où sélectionner Data Science.

C'est la 4e partie sur 5 de la série de tutoriels. Pour suivre ce didacticiel, commencez par effectuer les travaux suivants :

Suivez dans le notebook

4-predict.ipynb est le notebook qui accompagne ce tutoriel.

Important

Attachez le même lakehouse que vous avez utilisé dans les autres parties de cette série.

Charger les données de test

Chargez les données de test que vous avez enregistrées dans la partie 3.

df_test = spark.read.format("delta").load("Tables/df_test")
display(df_test)

PREDICT avec l’API Transformer

Pour utiliser l’API Transformer à partir de SynapseML, vous devez d’abord créer un objet MLFlowTransformer.

Instancier l’objet MLFlowTransformer

L’objet MLFlowTransformer est un wrapper autour du modèle MLFlow que vous avez inscrit dans la partie 3. Il vous permet de générer des prédictions par lots sur un DataFrame donné. Pour instancier l’objet MLFlowTransformer, vous devez fournir les paramètres suivants :

  • Colonnes du DataFrame de test dont vous avez besoin pour les utiliser comme entrée dans le modèle (dans ce cas, vous aurez besoin de toutes).
  • Nom de la nouvelle colonne de sortie (dans ce cas, prédictions).
  • Nom et version de modèle corrects pour générer les prédictions (dans ce cas, lgbm_sm et version 1).
from synapse.ml.predict import MLFlowTransformer

model = MLFlowTransformer(
    inputCols=list(df_test.columns),
    outputCol='predictions',
    modelName='lgbm_sm',
    modelVersion=1
)

Maintenant que vous disposez de l’objet MLFlowTransformer, vous pouvez l’utiliser pour générer des prédictions par lots.

import pandas

predictions = model.transform(df_test)
display(predictions)

PREDICT avec l’API SPARK SQL

Le code suivant appelle la fonction PREDICT avec l’API SQL Spark.

from pyspark.ml.feature import SQLTransformer 

# Substitute "model_name", "model_version", and "features" below with values for your own model name, model version, and feature columns
model_name = 'lgbm_sm'
model_version = 1
features = df_test.columns

sqlt = SQLTransformer().setStatement( 
    f"SELECT PREDICT('{model_name}/{model_version}', {','.join(features)}) as predictions FROM __THIS__")

# Substitute "X_test" below with your own test dataset
display(sqlt.transform(df_test))

PREDICT avec une fonction définie par l’utilisateur (UDF)

Le code suivant appelle la fonction PREDICT avec une fonction UDF PySpark.

from pyspark.sql.functions import col, pandas_udf, udf, lit

# Substitute "model" and "features" below with values for your own model name and feature columns
my_udf = model.to_udf()
features = df_test.columns

display(df_test.withColumn("predictions", my_udf(*[col(f) for f in features])))

Notez que vous pouvez également générer du code PREDICT à partir de la page d’élément d’un modèle. En savoir plus sur PREDICT.

Écrire des résultats de prédiction de modèle dans le lakehouse

Une fois que vous avez généré des prédictions par lots, réécrivez les résultats de prédiction du modèle dans le lakehouse.

# Save predictions to lakehouse to be used for generating a Power BI report
table_name = "customer_churn_test_predictions"
predictions.write.format('delta').mode("overwrite").save(f"Tables/{table_name}")
print(f"Spark DataFrame saved to delta table: {table_name}")

Étape suivante

Passez à :