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.
C'est la 4e partie sur 5 de la série de tutoriels. Pour suivre ce didacticiel, commencez par effectuer les travaux suivants :
- Partie 1 : ingérer des données dans un lac Microsoft Fabric à l’aide d’Apache Spark.
- partie 2 : Explorer et visualiser des données à l’aide de notebooks Microsoft Fabric pour en savoir plus sur les données.
- Partie 3 : Entraîner et inscrire des modèles Machine Learning.
Suivez dans le notebook
4-predict.ipynb est le notebook qui accompagne ce tutoriel.
Pour ouvrir le bloc-notes associé pour ce didacticiel, suivez les instructions de Préparer votre système pour les didacticiels de science des données pour importer le bloc-notes dans votre espace de travail.
Si vous préférez copier et coller le code à partir de cette page, vous pouvez créer un bloc-notes.
Assurez-vous d'attacher un lakehouse au notebook avant de commencer à exécuter du code.
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 à :