Personalizar o comportamento do modelo para pontuações em lote

Concluído

Ao treinar um modelo, você deseja usar o modelo para gerar novas previsões. Imagine, por exemplo, que você treinou um modelo de previsão. Toda semana, você aplica o modelo a dados históricos de vendas para gerar a previsão de vendas da próxima semana.

No Microsoft Fabric, você pode usar um modelo salvo e aplicá-lo aos seus dados para gerar e salvar as novas previsões. O modelo usa os novos dados como entrada, executa as transformações necessárias e gera as previsões.

As informações sobre as entradas e saídas esperadas do modelo são armazenadas nos artefatos de modelo criados durante o treinamento do modelo. Ao acompanhar seu modelo com o MLflow, você pode modificar o comportamento esperado do modelo durante a pontuação em lote.

Personalizar o comportamento do modelo

Ao aplicar um modelo treinado a novos dados, é necessário que o modelo compreenda a forma esperada da entrada de dados e como gerar as previsões. As informações sobre entradas e saídas esperadas são armazenadas, juntamente com outros metadados, no arquivo MLmodel.

Quando você acompanha um modelo de machine learning com MLflow no Microsoft Fabric, as entradas e saídas esperadas do modelo são inferidas. Com o registro automático no MLflow, a pasta model e o arquivo MLmodel são criados automaticamente para você.

Sempre que você quiser alterar as entradas ou saídas esperadas do modelo, poderá alterar a forma como o arquivo MLmodel é criado quando o modelo é rastreado dentro do workspace do Microsoft Fabric. O esquema da entrada e da saída de dados é definido na assinatura do modelo.

Criar a assinatura do modelo

Depois de acompanhar um modelo com o MLflow durante o treinamento do modelo, você pode encontrar o arquivo MLmodel na pasta model, armazenada junto com a execução do experimento:

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

Ao explorar o arquivo MLmodel de exemplo, observe que as entradas e saídas esperadas são definidas como tensores. Quando você aplica o modelo por meio do assistente, apenas uma coluna de entrada é mostrada, pois espera-se que os dados de entrada sejam uma matriz.

Screenshot of apply model wizard showing one input column.

Para alterar a forma como o modelo deve ser aplicado, você pode definir as várias colunas de entrada e saída esperadas.

Vamos explorar um exemplo em que você treina um modelo com scikit-learn e usa o registro automático do MLflow para registrar em log todos os outros parâmetros e métricas. Para registrar manualmente um modelo, você pode definir log_models=False.

Para definir o esquema de entrada, use a classe Schema do MLflow. Você pode especificar as colunas de entrada esperadas, seus tipos de dados e seus respectivos nomes. Da mesma forma, você pode definir o esquema de saída, que geralmente consiste em uma coluna que representa a variável desejada.

Por fim, você cria o objeto de assinatura de modelo usando a classe ModelSignature do 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, o arquivo MLmodel que está armazenado na pasta de saída model tem a seguinte aparência:

Screenshot of a customized MLmodel file.

Ao aplicar o modelo por meio do assistente, você encontrará as colunas de entrada claramente definidas e mais fáceis de alinhar com o conjunto de dados para o qual você deseja gerar previsões.

Screenshot of model wizard for a custom model.

Salvar o modelo no workspace do Microsoft Fabric

Depois de treinar e acompanhar um modelo de machine learning com o MLflow no Microsoft Fabric, você pode inspecionar o conteúdo da pasta de saída model na execução do experimento. Explorando o arquivo MLmodel especificamente, você pode decidir se o modelo vai se comportar conforme o esperado durante a pontuação em lote.

Para usar um modelo acompanhado para gerar previsões em lotes, você precisa salvá-lo. Ao salvar um modelo no Microsoft Fabric, você pode:

  • Criar um novo modelo.
  • Adicionar uma nova versão a um modelo existente.

Para salvar um modelo, você precisa especificar a pasta de saída model, pois essa pasta contém todas as informações necessárias sobre como o modelo deve se comportar durante a pontuação em lote e os próprios artefatos do modelo. Normalmente, o modelo treinado é armazenado como um arquivo pickle na mesma pasta.

Você pode salvar facilmente um modelo navegando até a execução correspondente do experimento na interface do usuário.

Como opção alternativa, é possível salvar um modelo por meio do 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")