Condividi tramite


Parte 4 dell'esercitazione: eseguire l'assegnazione dei punteggi batch e salvare le previsioni

In questa esercitazione si apprenderà come importare il modello LightGBMClassifier registrato sottoposto a training nella parte 3 usando il registro dei modelli MLflow di Microsoft Fabric ed eseguire stime batch su un set di dati di test caricato da un lakehouse.

Microsoft Fabric consente di rendere operativi i modelli di Machine Learning con una funzione scalabile denominata PREDICT, che supporta l'assegnazione dei punteggi batch in qualsiasi motore di calcolo. È possibile generare previsioni di batch direttamente da un notebook di Microsoft Fabric o dalla pagina degli elementi di un determinato modello. Informazioni su PREDICT.

Per generare previsioni di batch nel set di dati di test, si userà la versione 1 del modello LightGBM sottoposto a training che ha dimostrato le migliori prestazioni tra tutti i modelli di Machine Learning con training. Il set di dati di test verrà caricato in un DataFrame spark e verrà creato un oggetto MLFlowTransformer per generare previsioni di batch. È quindi possibile richiamare la funzione PREDICT usando uno dei tre modi seguenti:

  • API Transformer da SynapseML
  • Spark SQL API
  • Funzione PySpark definita dall'utente (UDF)

Prerequisiti

Questa è la parte 4 di 5 di questa serie di esercitazioni. Per procedere con questa esercitazione, è necessario completare:

Seguire la procedura in Notebook

4-predict.ipynb è il notebook che accompagna questa esercitazione.

Importante

Collegare lo stesso lakehouse usato nelle altre parti di questa serie.

Caricare il set di dati di test

Caricare i dati di test salvati nella Parte 3.

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

PREDICT con l'API Transformer

Per usare l'API Transformer di SynapseML, è prima necessario creare un oggetto MLFlowTransformer.

Creare un'istanza dell'oggetto MLFlowTransformer

L'oggetto MLFlowTransformer è un wrapper intorno al modello MLFlow registrato nella Parte 3. Consente di generare previsioni di batch in un determinato DataFrame. Per creare un'istanza dell'oggetto MLFlowTransformer, è necessario specificare i parametri seguenti:

  • Le colonne del DataFrame di test necessarie come input per il modello (in questo caso, sono tutte necessarie).
  • Nome della nuova colonna di output(in questo caso, previsioni).
  • Nome del modello e versione del modello corretti per generare le previsioni (in questo caso, lgbm_sm e versione 1).
from synapse.ml.predict import MLFlowTransformer

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

Ora che si dispone dell'oggetto MLFlowTransformer, è possibile usarlo per generare previsioni di batch.

import pandas

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

PREDICT con l'API SPARK SQL

Il codice seguente richiama la funzione PREDICT con 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 con una funzione definita dall'utente (UDF)

Il codice seguente richiama la funzione PREDICT con una 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])))

Si noti che è anche possibile generare codice PREDICT dalla pagina degli elementi di un modello. Informazioni su PREDICT.

Scrivere i risultati della previsione del modello nel lakehouse

Dopo aver generato previsioni di batch, scrivere nuovamente i risultati della previsione del modello nel 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}")

Passaggio successivo

Continuare con: