Personalización del comportamiento del modelo para la puntuación por lotes

Completado

Una vez que haya entrenado un modelo, querrá usarlo para generar nuevas predicciones. Imagine, por ejemplo, que entrenó un modelo de previsión. Cada semana, aplica el modelo a los datos históricos de ventas para generar la previsión de ventas de la semana siguiente.

En Microsoft Fabric, es posible usar un modelo guardado y aplicarlo a los datos para generar y guardar las nuevas predicciones. El modelo toma los nuevos datos como entrada, realiza las transformaciones necesarias y genera las predicciones.

La información sobre las entradas y salidas esperadas del modelo se almacena en los artefactos del modelo que se crean durante el entrenamiento del modelo. Al realizar el seguimiento del modelo con MLflow, es posible cambiar el comportamiento esperado del mismo durante la puntuación por lotes.

Personalización del comportamiento del modelo

Para aplicar un modelo entrenado a nuevos datos, el modelo debe saber cuál es la forma de la entrada de datos esperada y cómo generar las predicciones. La información sobre las entradas y salidas esperadas se almacena, junto con otros metadatos, en el archivo MLmodel.

Al realizar un seguimiento de un modelo de Machine Learning con MLflow en Microsoft Fabric, se deducen las entradas y salidas esperadas del modelo. Con el registro automático de MLflow, la carpeta model y el archivo MLmodel se crean automáticamente.

Siempre que quiera cambiar las entradas o salidas esperadas del modelo, cambie cómo se crea el archivo MLmodel al realizar el seguimiento del modelo en el área de trabajo de Microsoft Fabric. El esquema de entrada y salida de datos se define en la firma del modelo.

Creación de la firma del modelo

Después de realizar el seguimiento de un modelo con MLflow durante el entrenamiento del modelo, podrá encontrar el archivo MLmodel en la carpeta model, almacenado con la ejecución del experimento:

Screenshot of the model folder with the MLmodel file selected and opened.

A medida que explore el archivo de ejemplo MLmodel, observe que las entradas y salidas esperadas se definen como tensores. Cuando se aplique el modelo a través del asistente, solo se mostrará una columna de entrada, ya que se esperará que los datos de entrada sean una matriz.

Screenshot of apply model wizard showing one input column.

Para cambiar cómo se debería aplicar el modelo, defina las distintas columnas de entrada y salida esperadas.

Exploremos un ejemplo de entrenamiento de un modelo con Scikit-learn y uso del registro automático de MLflow para registrar todos los demás parámetros y métricas. Para registrar manualmente un modelo, establezca log_models=False.

Para definir el esquema de entrada, use la clase Schema de MLflow. Especifique las columnas de entrada esperadas, sus tipos de datos y sus nombres. Del mismo modo, defina el esquema de salida, que normalmente consta de una columna que representa la variable de destino.

Por último, cree el objeto de firma del modelo mediante la clase ModelSignature de MLflow.

from sklearn.tree import DecisionTreeRegressor
from mlflow.models.signature import ModelSignature
from mlflow.types.schema import Schema, ColSpec

with mlflow.start_run():
   # Use autologging for all other parameters and metrics
   mlflow.autolog(log_models=False)

   model = DecisionTreeRegressor(max_depth=5)

   # When you fit the model, all other information will be logged 
   model.fit(X_train, y_train)

   # Create the signature manually
   input_schema = Schema([
   ColSpec("integer", "AGE"),
   ColSpec("integer", "SEX"),
   ColSpec("double", "BMI"),
   ColSpec("double", "BP"),
   ColSpec("integer", "S1"),
   ColSpec("double", "S2"),
   ColSpec("double", "S3"),
   ColSpec("double", "S4"),
   ColSpec("double", "S5"),
   ColSpec("integer", "S6"),
   ])

   output_schema = Schema([ColSpec("integer")])

   # Create the signature object
   signature = ModelSignature(inputs=input_schema, outputs=output_schema)

   # Manually log the model
   mlflow.sklearn.log_model(model, "model", signature=signature)

Como resultado, el archivo MLmodel almacenado en la carpeta model de salida tendrá el siguiente aspecto:

Screenshot of a customized MLmodel file.

Al aplicar el modelo a través del asistente, se puede apreciar que las columnas de entrada se definen claramente y son más fáciles de alinear con el conjunto de datos para el que desea generar predicciones.

Screenshot of model wizard for a custom model.

Guardar el modelo en el área de trabajo de Microsoft Fabric

Después de entrenar y realizar un seguimiento de un modelo de Machine Learning con MLflow en Microsoft Fabric, inspeccione el contenido de la carpeta de salida model en la ejecución del experimento. Al explorar específicamente el archivo MLmodel, decida si el modelo se comportará según lo previsto durante la puntuación por lotes.

Para usar un modelo de seguimiento para generar predicciones por lotes, deberá guardarlo. Al guardar un modelo en Microsoft Fabric, es posible hacer lo siguiente:

  • Creación de un nuevo modelo
  • Agregar una nueva versión a un modelo existente.

Para guardar un modelo, debe especificar la carpeta de salida model, ya que esa carpeta contendrá toda la información necesaria sobre cómo debería comportarse el modelo durante la puntuación por lotes y los propios artefactos del modelo. Normalmente, el modelo entrenado se almacena como un archivo pickle en la misma carpeta.

Para guardar fácilmente un modelo, vaya a la ejecución del experimento correspondiente en la interfaz de usuario.

Como alternativa, se puede guardar un modelo mediante código:

# Get the experiment by name
exp = mlflow.get_experiment_by_name(experiment_name)

# List the last experiment run
last_run = mlflow.search_runs(exp.experiment_id, order_by=["start_time DESC"], max_results=1)

# Retrieve the run ID of the last experiment run
last_run_id = last_run.iloc[0]["run_id"]

# Create a path to the model output folder of the last experiment run
model_uri = "runs:/{}/model".format(last_run_id)

# Register or save the model by specifying the model folder and model name
mv = mlflow.register_model(model_uri, "diabetes-model")