Preparar dados antes de gerar previsões

Concluído

Ao aplicar um modelo a novos dados, é importante garantir que o esquema dos dados de entrada esteja alinhado com as expectativas do modelo dos dados de entrada.

De maneira mais específica, você precisa verificar se os tipos de dados das colunas de entrada são os mesmos definidos na assinatura do modelo. Primeiro, vamos obter os dados nos quais você deseja gerar previsões.

Trabalhar com dados em tabelas Delta

Para aplicar um modelo a novos dados no Microsoft Fabric, você deve armazenar esses novos dados como uma tabela Delta em uma lakehouse.

Você pode armazenar um dataframe df como um Delta lake new_table em um lakehouse usando o seguinte código:

df.write.format("delta").save(f"Tables/new_table")

Quando quiser ler dados de uma tabela Delta, você pode usar o seguinte código:

df = spark.read.format("delta").load(f"Tables/new_table")

Entender os tipos de dados na assinatura do modelo

Ao acompanhar um modelo de machine learning e definir a assinatura no arquivo MLmodel, você tem duas opções para descrever as entradas e saídas esperadas de um modelo. A assinatura de um modelo pode ser:

  • Baseada em coluna – ideal para dados tabulares organizados por colunas.
  • Baseado em tensor – ideal para dados de entrada que você deseja passar como matrizes (imagens, por exemplo).

No Microsoft Fabric, é comum trabalhar com dados tabulares, por isso é mais frequente usar assinaturas baseadas em colunas. O uso de assinaturas baseadas em coluna facilita o alinhamento das colunas de entrada reais com as colunas de entrada esperadas do modelo.

Ao definir a assinatura do modelo, você precisa usar tipos de dados do MLflow para especificar o esquema dos dados. Os tipos de dados mais usados são:

  • Boolean: Dados lógicos (True ou False)
  • Datetime: Dados datetime de 64b (por exemplo 2023-10-23 14:30:00).
  • Double: Números de ponto flutuante de 64b (por exemplo 3.14159265359).
  • Float: Números de ponto flutuante de 32b (por exemplo 3.14).
  • Integer: Números inteiros de 32b com sinal (por exemplo 42).
  • Long: Números inteiros de 64b com sinal (por exemplo 1234567890).
  • String: Dados de texto (por exemplo Amsterdam).

Definir os tipos de dados dos dados de entrada

Depois de ingerir os dados em um delta lake e entender a assinatura do modelo, você precisa garantir que os tipos de dados dos dados sejam compatíveis com a entrada esperada pelo modelo.

Você pode trabalhar com seus dados em um notebook para verificar se os tipos de dados de cada coluna correspondem ao esperado e fazer alterações, se necessário.

Para listar os tipos de dados de cada coluna de um dataframe df, use o seguinte código:

df.dtypes

Se você quiser alterar o tipo de dados de uma coluna específica, poderá usar o seguinte código:

from pyspark.sql.types import IntegerType, DoubleType

df = df.withColumn("S1", df["S1"].cast(IntegerType()))
df = df.withColumn("S2", df["S2"].cast(DoubleType()))

Quando você definir os tipos de dados dos dados de entrada para se alinharem com as entradas esperadas do modelo, poderá salvar os dados em uma nova tabela Delta. Agora, a nova tabela está pronta para ser utilizada na geração de previsões em lote.