Compartir a través de


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

Esta es la parte 4 de 5 de la serie de tutoriales. Para realizar este tutorial, primero complete:

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: