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îner dans la partie 3 à l’aide du registre de modèles Microsoft Fabric MLflow 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 notebook Microsoft Fabric ou de la 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 une tramedonnées Spark et créer un objet MLFlowTransformer pour générer des prédictions par lots. Vous pouvez ensuite appeler la fonction PREDICT à l’aide de l’une de trois façons suivantes :
- API Transformer de SynapseML
- API Spark SQL
- Fonction définie par l’utilisateur (UDF) PySpark
Prérequis
Obtenir un abonnement Microsoft Fabric. Ou inscrivez-vous pour obtenir gratuitement un essai de Microsoft Fabric.
Connectez-vous à Microsoft Fabric.
Utilisez le sélecteur d’expérience sur le côté gauche de votre page d’accueil pour basculer vers l’expérience Science des données Synapse.
Cette partie 4 sur 5 dans la série de tutoriels. Pour suivre ce tutoriel, terminez d’abord :
- Partie 1 : Ingérer des données dans un lakehouse Microsoft Fabric à l’aide d’Apache Spark.
- Partie 2 : Explorer et visualiser les données à l’aide des notebooks Microsoft Fabric pour en savoir plus sur les données.
- Partie 3 : Entraîner et enregistrer des modèles Machine Learning.
Suivez dans le notebook
4-predict.ipynb est le notebook qui accompagne ce tutoriel.
Pour ouvrir le notebook accompagnant ce tutoriel, suivez les instructions fournies dans Préparer votre système pour le tutoriel sur la science des données afin d’importer les notebooks dans votre espace de travail.
Si vous préférez copier et coller le code à partir de cette page, vous pouvez créer un notebook.
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 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 enregistré dans la Partie 3. Il vous permet de générer des prédictions par lots sur une tramedonnées donnée. Pour instancier l’objet MLFlowTransformer, vous devez fournir les paramètres suivants :
- Colonnes de la tramedonnées de test dont vous avez besoin comme entrée dans le modèle (dans ce cas, vous aurez besoin de toutes les colonnes).
- Un nom pour 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 SPARK SQL.
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 à :