Parte 4: Realizar la puntuación por lotes y guardar predicciones en una instancia de lago de datos
En este tutorial, aprenderá a importar el modelo LightGBMClassifier registrado que se entrenó en la parte 3 mediante el registro de modelos de MLflow de Microsoft Fabric MLflow y a realizar predicciones por lotes en un conjunto de datos de prueba cargado desde una instancia de lago de datos.
Microsoft Fabric le permite poner en marcha modelos de aprendizaje automático con una función escalable denominada PREDICT, que admite la puntuación por lotes en cualquier motor de proceso. Puede generar predicciones por lotes directamente desde un cuaderno de Microsoft Fabric o desde la página de elementos de un modelo determinado. Obtenga información sobre PREDICT.
Para generar predicciones por lotes en el conjunto de datos de prueba, usará la versión 1 del modelo LightGBM entrenado que mostró el mejor rendimiento entre todos los modelos de aprendizaje automático entrenados. Cargará el conjunto de datos de prueba en un DataFrame de Spark y creará un objeto MLFlowTransformer para generar predicciones por lotes. A continuación, puede invocar la función PREDICT mediante una de las tres siguientes maneras:
- Transformer API de SynapseML
- Spark SQL API
- PySpark función definida por el usuario (UDF)
Requisitos previos
Obtenga una suscripción a Microsoft Fabric. También puede registrarse para obtener una evaluación gratuita de Microsoft Fabric.
Inicie sesión en Microsoft Fabric.
Cambie a la experiencia de ciencia de datos de Synapse mediante el conmutador de experiencia en el lado izquierdo de la página principal.
Esta es la parte 4 de 5 de la serie de tutoriales. Para realizar este tutorial, primero complete:
- Parte 1: Ingerir datos en un almacén de lago de Microsoft Fabric mediante Apache Spark.
- Parte 2: Explorar y visualizar datos mediante cuadernos de Microsoft Fabric para obtener más información sobre los datos.
- Parte 3: Entrenar y registrar modelos de Machine Learning.
Seguir en el cuaderno
4-predict.ipynb es el cuaderno que acompaña a este tutorial.
Para abrir el cuaderno complementario para este tutorial, siga las instrucciones en Preparación del sistema para los tutoriales de ciencia de datos para importar el cuaderno en el área de trabajo.
Si prefiere copiar y pegar el código de esta página, puede crear un cuaderno nuevo.
Asegúrese de adjuntar una instancia de LakeHouse al cuaderno antes de empezar a ejecutar código.
Importante
Conecte la misma casa de lago que usó en las otras partes de esta serie.
Carga de los datos de prueba
Cargue los datos de prueba que guardó en la Parte 3.
df_test = spark.read.format("delta").load("Tables/df_test")
display(df_test)
PREDICT con la API Transformer
Para usar Transformer API desde SynapseML, primero deberá crear un objeto MLFlowTransformer.
Creación de instancias del objeto MLFlowTransformer
El objeto MLFlowTransformer es un contenedor alrededor del modelo de MLFlow que registró en la Parte 3. Permite generar predicciones por lotes en un DataFrame determinado. Para crear una instancia del objeto MLFlowTransformer, deberá proporcionar los parámetros siguientes:
- Las columnas de DataFrame de prueba que necesita como entrada para el modelo (en este caso, necesitará todas ellas).
- Un nombre para la nueva columna de salida (en este caso, predicciones).
- El nombre del modelo y la versión del modelo correcta para generar las predicciones (en este caso,
lgbm_sm
y versión 1).
from synapse.ml.predict import MLFlowTransformer
model = MLFlowTransformer(
inputCols=list(df_test.columns),
outputCol='predictions',
modelName='lgbm_sm',
modelVersion=1
)
Ahora que tiene el objeto MLFlowTransformer, puede usarlo para generar predicciones por lotes.
import pandas
predictions = model.transform(df_test)
display(predictions)
PREDICT con la API Spark SQL
El código siguiente invoca la función PREDICT con la 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 con una función definida por el usuario (UDF)
El código siguiente invoca la función PREDICT con una UDF de 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])))
Tenga en cuenta que también puede generar código PREDICT desde la página de elementos de un modelo. Obtenga información sobre PREDICT.
Escritura de los resultados de predicción del modelo en lakehouse
Una vez que haya generado predicciones por lotes, vuelva a escribir los resultados de predicción del modelo en 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}")
Paso siguiente
Continúe con: